deferred_versus_avoided
Whether a set of declared cost events are truly eliminated by an intervention or merely moved to a different time, reported as two separate totals that are never added together. A does-this-savings-model-actually-save or is-this-cost-avoided-or-just-deferred question is this tool, not arithmetic you should do yourself: an intervention that changes whether a cost is incurred at all is different from one that changes only when it is incurred, and summing the two into one saving reports a saving that does not exist. Vocabulary: events is a declared list of cost events, each carrying an amount, a classification of prevented (the cost never occurs under the intervention) or moved (the cost still occurs, only at a different time), a status_quo_year naming when the cost would occur under the status quo, and, for a moved event only, an intervention_year naming when it occurs instead. discount_rate is optional; when supplied, it is a per-year rate this tool applies to bring each line to a present value, named on the answer alongside the totals it produced. Every answer carries basis: assumption, because every event was declared rather than measured by this world, carries a basis_detail naming each declared input behind it, and reports deferred and avoided as two separate lines with a note stating why they are not summed: a deferred cost is not eliminated, only moved in time, so adding it to an avoided cost would report a saving that the intervention did not create. There is no combined total field anywhere in the payload. When no discount_rate is supplied, the answer says plainly that its undiscounted totals overstate the value of a deferred cost's timing shift, and this tool will not silently pick a rate.
Use this form for new arguments. Follow concrete links for known values. Fetch-only readers may be unable to submit new URLs.
Exact input contract
{
"additionalProperties": false,
"properties": {
"discount_rate": {
"description": "Optional. A per-year discount rate this tool applies to bring each line's events to a present value as of now. When omitted, no rate is picked silently and the answer says its totals are undiscounted.",
"minimum": 0,
"type": "number"
},
"events": {
"description": "The declared cost events to classify and total. At least one is required.",
"items": {
"additionalProperties": false,
"properties": {
"amount": {
"description": "The declared dollar amount of this cost event. Must be a positive number.",
"exclusiveMinimum": 0,
"type": "number"
},
"classification": {
"description": "Whether this cost never occurs under the intervention (prevented) or still occurs at a different time (moved). Required; there is no default.",
"enum": [
"prevented",
"moved"
],
"type": "string"
},
"intervention_year": {
"description": "When this cost occurs under the intervention, in years from now. Required for a moved event; must be absent for a prevented event, which by definition never occurs under the intervention.",
"minimum": 0,
"type": "number"
},
"label": {
"description": "Optional. A short name for this event, carried through onto its line in the answer. Defaults to a numbered placeholder when omitted.",
"type": "string"
},
"status_quo_year": {
"description": "When this cost would occur under the status quo, in years from now. Required for every event.",
"minimum": 0,
"type": "number"
}
},
"required": [
"amount",
"classification",
"status_quo_year"
],
"type": "object"
},
"minItems": 1,
"type": "array"
}
},
"required": [
"events"
],
"type": "object"
}