Raw schema
{
"type": "object",
"properties": {
"equipmentCost": {
"type": "number",
"exclusiveMinimum": 0,
"description": "Total equipment cost in dollars, e.g. 150000"
},
"leaseTerm": {
"type": "integer",
"minimum": 1,
"maximum": 600,
"description": "Lease term in months, e.g. 60"
},
"interestRate": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Annual interest rate as a percentage, e.g. 7.5 for 7.5%"
},
"residualValue": {
"type": "number",
"minimum": 0,
"description": "End-of-term residual in dollars (default 0 = full payout). Alternative: residualPercent"
},
"residualPercent": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "Residual as a percent of equipment cost, e.g. 10 for 10% FMV"
},
"paymentFrequency": {
"type": "string",
"enum": [
"Monthly",
"Quarterly",
"Semi-Annual",
"Annual",
"Weekly",
"Bi-Weekly"
],
"description": "Payment frequency (default 'Monthly')"
},
"paymentTiming": {
"type": "string",
"enum": [
"Arrears",
"Advance"
],
"description": "'Arrears' = end of period (default), 'Advance' = beginning of period"
},
"taxMethod": {
"type": "string",
"enum": [
"Exempt",
"Monthly",
"Upfront"
],
"description": "Sales tax treatment: 'Exempt' (default), 'Monthly' on top of payment, or 'Upfront' capitalized"
},
"taxRate": {
"type": "number",
"minimum": 0,
"maximum": 30,
"description": "Sales tax rate percentage, e.g. 7"
},
"downPayment": {
"type": "number",
"minimum": 0,
"description": "Down payment in dollars"
},
"additionalClosingFees": {
"type": "number",
"minimum": 0,
"description": "Documentation/closing fees in dollars"
},
"upfrontPayments": {
"type": "integer",
"minimum": 0,
"maximum": 12,
"description": "Number of payments collected in advance at signing"
},
"leaseStartDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "First payment date YYYY-MM-DD (defaults to today)"
},
"fundingDate": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Funding date YYYY-MM-DD; a gap before leaseStartDate produces interim rent"
},
"paymentStructure": {
"type": "string",
"enum": [
"Level",
"Balloon",
"Step",
"Custom",
"InterestOnly",
"Skip"
],
"description": "Payment structure (default 'Level')"
},
"balloonPercentage": {
"type": "number",
"minimum": 0,
"maximum": 100,
"description": "For Balloon: final payment as percent of equipment cost, e.g. 20"
},
"steps": {
"type": "array",
"items": {
"type": "object",
"properties": {
"periodCount": {
"type": "integer",
"minimum": 1,
"description": "How many periods this step lasts"
},
"amount": {
"type": "number",
"minimum": 0,
"description": "Payment amount for this step; use 0 with type 'Calculated' to let the engine solve it"
},
"type": {
"type": "string",
"enum": [
"Fixed",
"Calculated",
"PercentIncrease",
"PercentDecrease",
"Compounding",
"InterestOnly"
]
}
},
"required": [
"periodCount",
"amount"
],
"additionalProperties": false
},
"description": "For Step/Custom structures: ordered payment segments"
},
"skipMonths": {
"type": "array",
"items": {
"type": "integer",
"minimum": 1,
"maximum": 12
},
"description": "For Skip: calendar months (1=Jan..12=Dec) skipped every year of the term, e.g. [12,1,2] for a seasonal business closed in winter"
},
"skipPaymentAmount": {
"type": "number",
"minimum": 0,
"description": "Amount paid during skipped months (often 0)"
},
"interestOnlyTerm": {
"type": "integer",
"minimum": 0,
"maximum": 120,
"description": "For InterestOnly: number of interest-only months before amortization begins"
}
},
"required": [
"equipmentCost",
"leaseTerm",
"interestRate"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}