{
  "tool_id": "art-426-cecl-ecl-calculator",
  "tool_version": "1.0.0",
  "display_name": "CECL Expected Credit Loss & Allowance Calculator",
  "mcp_name": "calculate_cecl_ecl_allowance",
  "mandate_type": "credit_assessment",
  "wave": 70,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-426-cecl-ecl-calculator.html",
  "description": "Computes a deterministic CECL (Current Expected Credit Loss, ASC 326) allowance given caller-supplied PD/LGD/EAD curves, segment exposures, and forecast scenario weights, and reconciles the result against the prior period's allowance balance. Supports WARM (Weighted-Average Remaining Maturity -- an annualized historical loss rate x remaining life practical-expedient approach), DCF (full contractual cash-flow projection, discounted at the effective interest rate, with period expected shortfall = contractual payment x PD x LGD), and straight loss-rate (a lifetime historical loss rate applied directly to exposure, no discounting) methods. BOUNDARY: PD/LGD/EAD curves and forecast scenario weights are policy inputs supplied by the caller -- human or model judgment -- and this kernel performs only the arithmetic combination into per-segment ECL and the allowance rollforward (beginning balance + provision expense - charge-offs + recoveries = ending allowance, checked against the newly computed required allowance). It does not estimate, calibrate, back-test, or validate any PD/LGD/EAD model. Distinct from IFRS9's 3-stage staging regime (see tools 196/198/204, a different accounting standard) -- CECL recognizes lifetime expected credit losses from origination with no staging transfer logic.",
  "input_schema_ref": "chaingraph/art-426-cecl-ecl-calculator.html#manifest",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:3a945610238be19cfb66bb261bdb544507d2eb0d978c45a98d4f4570da40e6f8",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-07-23"
    }
  ],
  "compute_proof_ready": "ready",
  "export_capability": [
    "json"
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "H/anMqZvuJvs/TMllUSY2P7uK1mpS9v6kZiE42WRoI4IybCf0A93Pb+MFf4P4Q3PL0orDeD5jVRvpIkCdfrQih54/Pb6I3Ol8zaBF6tBC3fTY2dxPrZi1pgwOYXmf4n4LbSPj+KqG47bJ0kAmtkQBUk4v10VzRRrhSc1hy/+lMIEIEUx5Kts0syLtD+lcqrKkoM3UndQmeY8uzR2OdZjBiZzLy22uZKaG6zit8+32FLHHV/dzhljByxlVu1v1lftJKshCJnRknw5PF8Q5HeItEBHnaenKKOilNMYoNFWdDAptNtAzkL1EsOzQlGWYHHK/NrswsFbpfIQhWSSwrNa1Q==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:3a945610238be19cfb66bb261bdb544507d2eb0d978c45a98d4f4570da40e6f8",
      "output": {
        "boundary_note": "PD/LGD/EAD curves and forecast scenario weights are policy inputs supplied by the caller (human/model judgment); this kernel performs only the arithmetic combination into ECL and allowance reconciliation. It does not estimate, calibrate, or validate any PD/LGD/EAD model.",
        "charge_offs_usd": 20000,
        "constants_version": "2026-07-23.cecl-warm-v1",
        "delta_vs_required_usd": 0,
        "disambiguation": "CECL (ASC 326) recognizes lifetime expected credit losses from origination -- there is no 3-stage staging transfer regime here, unlike IFRS9 (see tools 196/198/204, a distinct standard). WARM applies an annualized historical loss rate x remaining life; loss-rate applies a lifetime historical loss rate directly (no discounting); DCF discounts period expected shortfalls (contractual cash flow x PD x LGD) at the effective interest rate.",
        "forecast_weights": [
          {
            "scenario": "baseline",
            "weight": 0.6
          },
          {
            "scenario": "downside",
            "weight": 0.4
          }
        ],
        "method": "warm",
        "prior_allowance_balance_usd": 500000,
        "provision_expense_usd": 451000,
        "reconciled_ending_allowance_usd": 936000,
        "reconciliation_balanced": true,
        "recoveries_usd": 5000,
        "segment_count": 2,
        "segments": [
          {
            "ead_usd": 10000000,
            "exposure_balance_usd": 10000000,
            "lgd_pct": 0,
            "remaining_life_years": 3,
            "scenario_count": 2,
            "scenarios": [
              {
                "scenario": "baseline",
                "scenario_ecl_usd": 360000,
                "weight": 0.6
              },
              {
                "scenario": "downside",
                "scenario_ecl_usd": 750000,
                "weight": 0.4
              }
            ],
            "segment_ecl_usd": 516000,
            "segment_id": "retail-auto"
          },
          {
            "ead_usd": 5000000,
            "exposure_balance_usd": 5000000,
            "lgd_pct": 0,
            "remaining_life_years": 2,
            "scenario_count": 2,
            "scenarios": [
              {
                "scenario": "baseline",
                "scenario_ecl_usd": 300000,
                "weight": 0.6
              },
              {
                "scenario": "downside",
                "scenario_ecl_usd": 600000,
                "weight": 0.4
              }
            ],
            "segment_ecl_usd": 420000,
            "segment_id": "retail-card"
          }
        ],
        "total_required_allowance_usd": 936000
      }
    }
  }
}
