changedInput schema / properties / fees / description
Previous value: -"List of yearly fees as numbers in ISO currency code"New value: +"Non-empty list of fees to project, each {name, amount, frequency, category?}; category is accepted but not used here"
addedInput schema / properties / fees / items / properties / amount / description
Added value: +"Amount per charge in USD, greater than 0, e.g. 38 or 15.99 (for monthly fees, the monthly amount)"
addedInput schema / properties / fees / items / properties / amount / exclusiveMinimum
Added value: +0
addedInput schema / properties / fees / items / properties / category / description
Added value: +"Optional benchmark category key (case-insensitive; spaces/hyphens become underscores). One of: bank_overdraft, bank_monthly_maintenance, atm_out_of_network, late_payment, gym_membership_monthly, streaming_monthly, airline_checked_bag, airline_seat_fee, ticket_convenience, rental_application, subscription_app_monthly, delivery_fee, airline_change_fee, hotel_resort_fee. Unknown keys are ignored."
addedInput schema / properties / fees / items / properties / frequency / description
Added value: +"How often the fee is charged: 'monthly' (x12 per year), 'annual' or 'one-time'"
addedInput schema / properties / fees / items / properties / name / description
Added value: +"Fee label as it appears on the statement, e.g. 'Overdraft fee' or 'Netflix'"
addedInput schema / properties / fees / items / properties / name / minLength
Added value: +1
addedInput schema / properties / fees / minItems
Added value: +1
changedInput schema / properties / years / description
Previous value: -"Years to project (integer 1-30), default 1"New value: +"Number of years to project, integer 1-30; default 1"
addedInput schema / properties / years / maximum
Added value: +30
addedInput schema / properties / years / minimum
Added value: +1
changedInput schema / properties / years / type
Previous value: -"number"New value: +"integer"
changedOutput schema / (root)
Previous value: -nullNew value: +{
+ "properties": {
+ "cumulative_total": {
+ "description": "Sum of all per-fee cumulative amounts, USD",
+ "type": "number"
+ },
+ "note": {
+ "description": "Method note: straight multiplication, no compounding",
+ "type": "string"
+ },
+ "per_fee": {
+ "description": "Per-fee projection, in input order",
+ "items": {
+ "properties": {
+ "annualized": {
+ "description": "Yearly cost of this fee, USD",
+ "type": "number"
+ },
+ "cumulative": {
+ "description": "annualized x years, USD",
+ "type": "number"
+ },
+ "name": {
+ "description": "Trimmed fee name",
+ "type": "string"
+ }
+ },
+ "required": [
+ "name",
+ "annualized",
+ "cumulative"
+ ],
+ "type": "object"
+ },
+ "type": "array"
+ },
+ "years": {
+ "description": "Number of years projected (1-30)",
+ "type": "integer"
+ }
+ },
+ "required": [
+ "years",
+ "per_fee",
+ "cumulative_total",
+ "note"
+ ],
+ "type": "object"
+}