addedInput schema / additionalProperties
Added value: +false
addedInput schema / properties / annualRatePercent / description
Added value: +"Nominal annual interest rate as a percent (e.g. 5 means 5%/yr). 0 to 100."
addedInput schema / properties / annualRatePercent / examples
Added value: +[
+ 5
+]
addedInput schema / properties / annualRatePercent / maximum
Added value: +100
addedInput schema / properties / annualRatePercent / minimum
Added value: +0
changedInput schema / properties / annualRatePercent / type
Previous value: -"integer"New value: +"number"
addedInput schema / properties / compoundingsPerYear / description
Added value: +"Compounding frequency per year (n): 1=annual, 2=semi-annual, 4=quarterly, 12=monthly, 365=daily. Must be exactly one of these values."
addedInput schema / properties / compoundingsPerYear / enum
Added value: +[
+ 1,
+ 2,
+ 4,
+ 12,
+ 365
+]
addedInput schema / properties / compoundingsPerYear / examples
Added value: +[
+ 12
+]
addedInput schema / properties / contributionTiming / default
Added value: +"end"
addedInput schema / properties / contributionTiming / description
Added value: +"Whether each contribution is applied at the start (annuity-due) or end (ordinary annuity) of the period. Only relevant when monthlyContribution > 0."
addedInput schema / properties / contributionTiming / enum
Added value: +[
+ "start",
+ "end"
+]
addedInput schema / properties / monthlyContribution / default
Added value: +0
addedInput schema / properties / monthlyContribution / description
Added value: +"Optional recurring monthly contribution. Converted to a per-compounding-period amount (monthlyContribution × 12 / compoundingsPerYear) so the same annual dollar flow applies at any frequency. 0 to 1,000,000,000."
addedInput schema / properties / monthlyContribution / examples
Added value: +[
+ 200
+]
addedInput schema / properties / monthlyContribution / maximum
Added value: +1000000000
addedInput schema / properties / monthlyContribution / minimum
Added value: +0
changedInput schema / properties / monthlyContribution / type
Previous value: -"integer"New value: +"number"
addedInput schema / properties / operation / default
Added value: +"compute"
addedInput schema / properties / operation / description
Added value: +"\"compute\" returns a per-year breakdown (one row per year); \"schedule\" returns the full per-period schedule (one row per compounding period). Both return the same final totals."
addedInput schema / properties / operation / enum
Added value: +[
+ "compute",
+ "schedule"
+]
addedInput schema / properties / principal / description
Added value: +"Starting lump-sum amount (P). 0 to 1,000,000,000,000."
addedInput schema / properties / principal / examples
Added value: +[
+ 10000
+]
addedInput schema / properties / principal / maximum
Added value: +1000000000000
addedInput schema / properties / principal / minimum
Added value: +0
changedInput schema / properties / principal / type
Previous value: -"integer"New value: +"number"
addedInput schema / properties / years / description
Added value: +"Investment horizon in years (t). Greater than 0, up to 100; may be fractional."
addedInput schema / properties / years / examples
Added value: +[
+ 10
+]
addedInput schema / properties / years / exclusiveMinimum
Added value: +0
addedInput schema / properties / years / maximum
Added value: +100
changedInput schema / properties / years / type
Previous value: -"integer"New value: +"number"
changedInput schema / required
Previous value: -[
- "operation",
- "principal",
- "annualRatePercent",
- "years",
- "compoundingsPerYear",
- "monthlyContribution",
- "contributionTiming"
-]New value: +[
+ "principal",
+ "annualRatePercent",
+ "years",
+ "compoundingsPerYear"
+]
changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "operation": {
+ "description": "Echoes the operation that was run.",
+ "enum": [
+ "compute",
+ "schedule"
+ ],
+ "type": "string"
+ },
+ "result": {
+ "description": "Computed totals plus a breakdown (compute) or schedule (schedule) array.",
+ "properties": {
+ "breakdown": {
+ "description": "Per-year summary. Present when operation=compute.",
+ "items": {
+ "properties": {
+ "balance": {
+ "description": "Balance at the end of this year.",
+ "type": "number"
+ },
+ "contributionsToDate": {
+ "description": "Cumulative contributions made through this year.",
+ "type": "number"
+ },
+ "interestEarned": {
+ "description": "Cumulative interest earned through this year.",
+ "type": "number"
+ },
+ "year": {
+ "description": "1-based year index.",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "finalAmount": {
+ "description": "Final balance after the full term, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "schedule": {
+ "description": "Per-compounding-period rows. Present when operation=schedule.",
+ "items": {
+ "properties": {
+ "balance": {
+ "description": "Balance at the end of this period.",
+ "type": "number"
+ },
+ "contribution": {
+ "description": "Total contribution applied in this period.",
+ "type": "number"
+ },
+ "interest": {
+ "description": "Interest earned in this period.",
+ "type": "number"
+ },
+ "period": {
+ "description": "1-based period index (1 .. years × compoundingsPerYear).",
+ "type": "integer"
+ }
+ },
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "totalContributions": {
+ "description": "Sum of all recurring contributions over the term, rounded to 2 decimals.",
+ "type": "number"
+ },
+ "totalInterest": {
+ "description": "Total interest earned over the term, rounded to 2 decimals.",
+ "type": "number"
+ }
+ },
+ "type": "object"
+ },
+ "success": {
+ "description": "True when the calculation succeeded.",
+ "type": "boolean"
+ }
+ },
+ "type": "object"
+}