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"
}

Ready links