{"id":"proration","title":"Proration and day-count fractions (30/360, ACT/365F, ACT/360, ACT/ACT ISDA) on half-open date ranges","description":"Computes the year fraction of up to 100 half-open date ranges [start, end) under a named ISDA day-count convention, and optionally the prorated charge, for an agent billing a partial period or accruing interest. Conventions follow Section 4.16 of the 2006 ISDA Definitions: 30/360, 30E/360, 30E/360 (ISDA), Actual/365 (Fixed), Actual/360, Actual/Actual (ISDA), 1/1. `end` is the day immediately following the last day included, as the ISDA text defines it. With `period` the charge is amount x fraction(range) / fraction(period), the usual subscription proration. 30E/360 (ISDA) with a range ending on the last day of February needs terminationDate, else unknown. Actual/Actual (ICMA) is unsupported. Not a calendar-month proration policy and not the 2021 ISDA Definitions.","roi":"A 30/360 vs ACT/365 mix-up shifts every accrual by a few basis points; named conventions with the ISDA text behind them.","audience":"business","package":"money-math-kit","channels":["x402","mcp"],"endpoint":{"method":"POST","url":"https://agents.writerslogic.com/api/v1/proration","path":"/api/v1/proration","contentType":"application/json"},"price":{"amount":"0.005","currency":"USDC","network":"base","perCall":true,"failedCallsCharged":false},"inputSchema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["start","end","convention"],"properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Exclusive end: the day after the last day included. Must not precede start."},"convention":{"type":"string","enum":["1/1","30/360","30E/360","30E/360-ISDA","ACT/365F","ACT/360","ACT/ACT-ISDA","ACT/ACT-ICMA"]},"terminationDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Termination date of the transaction; only used by 30E/360-ISDA."},"amount":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Optional amount to prorate (annual amount without `period`; period amount with it)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 alphabetic code, upper case."},"exponent":{"type":"integer","minimum":0,"maximum":8},"rounding":{"type":"string","enum":["half-up","half-down","half-even","up","down","ceiling","floor"],"description":"Rounding of the charge to the currency's minor unit. Default half-up. half-up: ties away from zero. half-down: ties toward zero. half-even: ties to the even neighbour. up: away from zero. down: toward zero. ceiling: toward +infinity. floor: toward -infinity."},"period":{"type":"object","required":["start","end"],"properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."}},"description":"Full billing period [start, end); the charge is amount x fraction(range) / fraction(period).","additionalProperties":false}},"additionalProperties":false}}}},"resultSchema":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"items":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"fraction":{"type":"string","description":"Year fraction to 15 decimal places (half-even); the charge uses the unrounded value."},"days":{"type":"integer","description":"Actual calendar days in [start, end)."},"detail":{"type":"string","description":"Numerator and divisor, e.g. 61/365 + 121/366."},"periodFraction":{"type":"string"},"charge":{"type":"string","description":"Prorated amount at the currency's precision."},"chargeMinor":{"type":"integer"},"exponent":{"type":"integer"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"outputSchema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"items":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"fraction":{"type":"string","description":"Year fraction to 15 decimal places (half-even); the charge uses the unrounded value."},"days":{"type":"integer","description":"Actual calendar days in [start, end)."},"detail":{"type":"string","description":"Numerator and divisor, e.g. 61/365 + 121/366."},"periodFraction":{"type":"string"},"charge":{"type":"string","description":"Prorated amount at the currency's precision."},"chargeMinor":{"type":"integer"},"exponent":{"type":"integer"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]},"example":{"items":[{"start":"2003-11-01","end":"2004-05-01","convention":"ACT/ACT-ISDA","amount":"1000.00","currency":"USD"}]},"openapiOperation":{"operationId":"proration","summary":"Proration and day-count fractions (30/360, ACT/365F, ACT/360, ACT/ACT ISDA) on half-open date ranges","description":"Computes the year fraction of up to 100 half-open date ranges [start, end) under a named ISDA day-count convention, and optionally the prorated charge, for an agent billing a partial period or accruing interest. Conventions follow Section 4.16 of the 2006 ISDA Definitions: 30/360, 30E/360, 30E/360 (ISDA), Actual/365 (Fixed), Actual/360, Actual/Actual (ISDA), 1/1. `end` is the day immediately following the last day included, as the ISDA text defines it. With `period` the charge is amount x fraction(range) / fraction(period), the usual subscription proration. 30E/360 (ISDA) with a range ending on the last day of February needs terminationDate, else unknown. Actual/Actual (ICMA) is unsupported. Not a calendar-month proration policy and not the 2021 ISDA Definitions.\n\nPrice: 0.005 USDC on Base (x402).","x-x402-price-usdc":"0.005","x-x402-amount":"5000","x-payment-info":{"protocols":["x402"],"price":{"mode":"fixed","currency":"USD","amount":"0.005"}},"x-audience":"business","x-sample-url":"https://agents.writerslogic.com/api/v1/samples/proration","security":[{"x402":[]},{"apiKey":[]}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["items"],"properties":{"items":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["start","end","convention"],"properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Exclusive end: the day after the last day included. Must not precede start."},"convention":{"type":"string","enum":["1/1","30/360","30E/360","30E/360-ISDA","ACT/365F","ACT/360","ACT/ACT-ISDA","ACT/ACT-ICMA"]},"terminationDate":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Termination date of the transaction; only used by 30E/360-ISDA."},"amount":{"type":"string","pattern":"^-?\\d{1,15}(\\.\\d{1,12})?$","maxLength":30,"description":"Optional amount to prorate (annual amount without `period`; period amount with it)."},"currency":{"type":"string","pattern":"^[A-Z]{3}$","description":"ISO 4217 alphabetic code, upper case."},"exponent":{"type":"integer","minimum":0,"maximum":8},"rounding":{"type":"string","enum":["half-up","half-down","half-even","up","down","ceiling","floor"],"description":"Rounding of the charge to the currency's minor unit. Default half-up. half-up: ties away from zero. half-down: ties toward zero. half-even: ties to the even neighbour. up: away from zero. down: toward zero. ceiling: toward +infinity. floor: toward -infinity."},"period":{"type":"object","required":["start","end"],"properties":{"start":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."},"end":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Calendar date YYYY-MM-DD."}},"description":"Full billing period [start, end); the charge is amount x fraction(range) / fraction(period).","additionalProperties":false}},"additionalProperties":false}}}},"example":{"items":[{"start":"2003-11-01","end":"2004-05-01","convention":"ACT/ACT-ISDA","amount":"1000.00","currency":"USD"}]}}}},"responses":{"200":{"description":"Paid result with provenance","content":{"application/json":{"schema":{"type":"object","properties":{"data":{"type":"object","properties":{"status":{"type":"string","enum":["pass","fail","unknown","unsupported"],"description":"pass: every rule held. fail: a rule was violated (see witnesses). unknown: the input lacks the evidence to decide. unsupported: outside what this engine covers. Missing evidence is never a pass."},"items":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer"},"status":{"type":"string","enum":["pass","fail","unknown","unsupported"]},"fraction":{"type":"string","description":"Year fraction to 15 decimal places (half-even); the charge uses the unrounded value."},"days":{"type":"integer","description":"Actual calendar days in [start, end)."},"detail":{"type":"string","description":"Numerator and divisor, e.g. 61/365 + 121/366."},"periodFraction":{"type":"string"},"charge":{"type":"string","description":"Prorated amount at the currency's precision."},"chargeMinor":{"type":"integer"},"exponent":{"type":"integer"}}}},"witnesses":{"type":"array","items":{"type":"object","properties":{"ruleId":{"type":"string"},"detail":{"type":"string"},"path":{"type":"string","description":"JSON pointer or dotted path into the input."},"offset":{"type":"integer"},"index":{"type":"integer"},"expected":{"description":"What the rule required."},"actual":{"description":"What the input had."}}}},"versions":{"type":"object","description":"Every semantic dependency of this answer (engine, tables and their as-of dates, tokenizer, calendar, rounding profile)."},"limits":{"type":"array","items":{"type":"string"}},"deterministic":{"type":"boolean","description":"Always true: pure code, no model."}}},"_provenance":{"type":"object","description":"C2PA-aligned manifest and W3C VC 2.0 (eddsa-jcs-2022) issued by the hub DID; verify at POST /api/v1/verify-provenance"}},"required":["data","_provenance"]}}}},"400":{"description":"Invalid request (no payment consumed)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"401":{"description":"Invalid X-API-KEY","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}},"402":{"description":"Payment required or invalid","content":{"application/json":{"schema":{"type":"object","description":"x402 v2 PaymentRequired (also base64 in the PAYMENT-REQUIRED header)","properties":{"x402Version":{"type":"integer"},"error":{"type":"string"},"code":{"type":"string"},"resource":{"type":"object"},"accepts":{"type":"array","items":{"type":"object"}},"extensions":{"type":"object"}}}}}},"502":{"description":"Upstream failure; the payment is released or not settled","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string"},"code":{"type":"string"}}}}}}}},"links":{"docs":"https://agents.writerslogic.com/docs/proration/","docsJson":"https://agents.writerslogic.com/docs/proration.json","sample":"https://agents.writerslogic.com/api/v1/samples/proration","openapi":"https://agents.writerslogic.com/openapi.json","catalog":"https://agents.writerslogic.com/api/v1/catalog","verifyProvenance":"https://agents.writerslogic.com/api/v1/verify-provenance","index":"https://agents.writerslogic.com/docs/index.json"}}