{
  "tool_id": "art-509-recompute-payment-waterfall",
  "tool_version": "1.0.0",
  "display_name": "Securitisation Payment Waterfall Recomputation",
  "mcp_name": "recompute_payment_waterfall",
  "mandate_type": "analytics_mandate",
  "wave": 78,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-509-recompute-payment-waterfall.html",
  "description": "Recomputes a securitisation payment waterfall for one stated period from the aggregate available funds and the priority ladder the investor already holds, then compares the result against what the investor report says was paid. The allocation is derived here by running the ladder, not lifted from the report, so the comparison has independent provenance on both sides rather than re-adding a published column. The ladder, every cap, every trigger threshold and every diversion come from the caller transaction documents: no deal library, no bundled ladder, no market convention threshold and no rate or index table is held here, and the ladder reference the caller pins is carried in the artifact and shown on screen so a later amendment makes an old receipt dated rather than wrong. Steps whose amount is set by a document that is not public, such as a trustee fee or a senior expense governed by a fee letter, are declared asserted by the caller and are reported as asserted inputs rather than as figures this tool derived. A failing test suppresses only the step identifiers the caller declared against that test, so divert behaviour is never inferred from a test name or from convention. Absent any asserted allocations the run is reported as recompute only, which is its own state and never agreement. Money is fixed point in integer minor units throughout with two decimal display, ratio tests are compared by integer cross multiplication so no division occurs on the comparison path, and zero available funds, an empty ladder and a zero ratio denominator each resolve to a defined result rather than to a not a number. No Article 7 disclosure template is read, validated or asserted anywhere, and the arithmetic needs no loan level data. Stated boundary: a shortfall or a difference against the report is an arithmetic finding about the ladder and figures supplied. It forecasts nothing, models no scenario, performs no credit or rating analysis, and makes no assertion that the deal was paid correctly or that it complies with anything.",
  "input_schema_ref": "chaingraph/art-509-recompute-payment-waterfall.html#manifest",
  "consumes": [],
  "feeds": [
    "art-510-build-art5-diligence-evidence"
  ],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:79ba683f5f9684c6c7ab2b2cfe7cdd8546591b5de200da9f10a3bb9637e408f1",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-01"
    }
  ],
  "compute_proof_ready": "ready",
  "export_capability": [
    "json"
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "HRcJQ0P6fx+FFKRgwWSdqySc6vFH8m7f5P2Ai1ywV2Emusvp45nDH6kQOmoWx6Lc7G2P5IO6ESG78yR7JzGe3Ce+Jj3vWn1tITCSTtBlWohci8pADCLvoi+0kUH2QuspGNwS5UO21LSbgxoKOeawXCb/pI5pql4Id8e+XqDrHnkWP7Hp849zsZzP6b5sucN1ok27SjtR6NkI0tHq2QZCfSzTdX55rvofgKuXMQlNFLud0Y7958KNzh33XK5GleYqHYZ2SG8aHnYJZsBOCdV18qSGYc3Er6/gcyXrjBJiCNwIVxDoKMaUKeFd7/B+jShMbLAOIte0F029+JjtrncJQg==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:79ba683f5f9684c6c7ab2b2cfe7cdd8546591b5de200da9f10a3bb9637e408f1",
      "output": {
        "asserted_step_count": 2,
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_display": "125000.00",
            "opening_minor_units": 12500000
          }
        ],
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "field_set_version": "1.0.0",
          "ladder_source": "transaction_documents",
          "template_conformance_checked": false,
          "template_note": "No Article 7 disclosure template is read, validated or asserted anywhere in this tool. The ladder comes from the deal documents the investor already holds."
        },
        "citations": {
          "investor_diligence": {
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_at": "2026-07-31",
            "mapped_by": "AINumbers SECZ-K-1",
            "scheme": "eu-regulation",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_report": {
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_at": "2026-07-31",
            "mapped_by": "AINumbers SECZ-K-1",
            "scheme": "eu-regulation",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "comparison_basis": "The recomputed side of every comparison is derived here by running the caller declared ladder against the caller supplied available funds. It is not read from the investor report. A comparison is only meaningful because the two sides have independent provenance.",
        "comparison_state": "matches",
        "currency": "EUR",
        "deal_ref": "SYNTH-2025-A",
        "diff": [
          {
            "agrees": true,
            "asserted_display": "1500.00",
            "asserted_minor_units": 150000,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step.",
            "difference_display": "0.00",
            "difference_minor_units": 0,
            "in_ladder": true,
            "recomputed_display": "1500.00",
            "recomputed_minor_units": 150000,
            "step_id": "a"
          },
          {
            "agrees": true,
            "asserted_display": "3500.00",
            "asserted_minor_units": 350000,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step.",
            "difference_display": "0.00",
            "difference_minor_units": 0,
            "in_ladder": true,
            "recomputed_display": "3500.00",
            "recomputed_minor_units": 350000,
            "step_id": "b"
          },
          {
            "agrees": true,
            "asserted_display": "62000.00",
            "asserted_minor_units": 6200000,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step.",
            "difference_display": "0.00",
            "difference_minor_units": 0,
            "in_ladder": true,
            "recomputed_display": "62000.00",
            "recomputed_minor_units": 6200000,
            "step_id": "c"
          },
          {
            "agrees": true,
            "asserted_display": "40000.00",
            "asserted_minor_units": 4000000,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step.",
            "difference_display": "0.00",
            "difference_minor_units": 0,
            "in_ladder": true,
            "recomputed_display": "40000.00",
            "recomputed_minor_units": 4000000,
            "step_id": "d"
          },
          {
            "agrees": true,
            "asserted_display": "18000.00",
            "asserted_minor_units": 1800000,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step.",
            "difference_display": "0.00",
            "difference_minor_units": 0,
            "in_ladder": true,
            "recomputed_display": "18000.00",
            "recomputed_minor_units": 1800000,
            "step_id": "e"
          }
        ],
        "first_unfunded_step": "e",
        "ladder_ref": {
          "dated": "2025-05-01",
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "supplied": true,
          "version": "1.0"
        },
        "minor_unit_exponent": 2,
        "no_template_claim": "This tool reads no Article 7 disclosure template, validates no field set, and asserts conformance with no annex. The priority of payments is taken from the caller transaction documents.",
        "note": "Deterministic securitisation payment waterfall recomputation for one stated period. Single-run and stateless: it holds no records, runs on no schedule, and retains nothing. The allocation is derived here from a caller declared priority ladder and caller supplied available funds, so a comparison against an investor report is an independent recomputation rather than a re-footing of published totals. It forecasts nothing, models no scenario, performs no credit or rating analysis, and makes no assertion about the compliance status of the deal. It is not a regulatory filing and not legal advice.",
        "period_label": "2025-07 collection period",
        "rationale": [
          "Waterfall recomputed for period 2025-07 collection period on deal reference SYNTH-2025-A, against the priority ladder pinned as SYNTHETIC PROSPECTUS SYNTH-2025-A Priority of Payments, items a to f version 1.0 dated 2025-05-01.",
          "Total available funds of 125000.00 EUR across 1 ledger were allocated down 5 ladder steps in the order supplied, honouring every declared cap.",
          "2 of 5 steps carry an amount the caller declared as ASSERTED rather than recomputed, typically a trustee fee or a senior expense set by a fee letter that is not a public document. Those amounts are allocated exactly as supplied and are reported as asserted inputs, never as figures this tool derived.",
          "Funds ran out at step e, which is the first step whose claim could not be met in full. Total shortfall across the ladder is 6000.00 EUR.",
          "Residual after the ladder is 0.00 EUR.",
          "1 test evaluated against caller-supplied thresholds: 1 pass, 0 fail, 0 undetermined. No market convention threshold is baked into this tool.",
          "The independently recomputed allocation agrees with every one of the 5 steps the supplied report allocations name. The left-hand side of that comparison was computed here from the ladder, not lifted from the report.",
          "No Article 7 disclosure template was read, validated or asserted. The priority of payments used here is the one declared from the transaction documents, which is why a template amendment cannot reach this arithmetic."
        ],
        "recompute_only_note": "Where comparison_state is recompute_only, no asserted allocations were supplied and this artifact records what the ladder produces, never agreement with an investor report.",
        "recomputed_step_count": 3,
        "rejected_inputs": [],
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_display": "125000.00",
            "opening_minor_units": 12500000,
            "residual_display": "0.00",
            "residual_minor_units": 0
          }
        ],
        "residual_display": "0.00",
        "residual_minor_units": 0,
        "step_count": 5,
        "steps": [
          {
            "amount_source": "asserted",
            "basis": "Fee letter, not a public document",
            "cap_applied": false,
            "cap_display": null,
            "cap_minor_units": null,
            "claim_display": "1500.00",
            "claim_minor_units": 150000,
            "due_display": "1500.00",
            "due_minor_units": 150000,
            "fully_paid": true,
            "label": "Trustee fee",
            "ledger": "interest",
            "ledger_supplied": true,
            "paid_display": "1500.00",
            "paid_minor_units": 150000,
            "position": 1,
            "shortfall_display": "0.00",
            "shortfall_minor_units": 0,
            "step_id": "a",
            "suppressed_by_test": null
          },
          {
            "amount_source": "asserted",
            "basis": "Fee letter, not a public document",
            "cap_applied": false,
            "cap_display": "4000.00",
            "cap_minor_units": 400000,
            "claim_display": "3500.00",
            "claim_minor_units": 350000,
            "due_display": "3500.00",
            "due_minor_units": 350000,
            "fully_paid": true,
            "label": "Senior expenses",
            "ledger": "interest",
            "ledger_supplied": true,
            "paid_display": "3500.00",
            "paid_minor_units": 350000,
            "position": 2,
            "shortfall_display": "0.00",
            "shortfall_minor_units": 0,
            "step_id": "b",
            "suppressed_by_test": null
          },
          {
            "amount_source": "recomputed",
            "basis": "Prospectus interest provisions",
            "cap_applied": false,
            "cap_display": null,
            "cap_minor_units": null,
            "claim_display": "62000.00",
            "claim_minor_units": 6200000,
            "due_display": "62000.00",
            "due_minor_units": 6200000,
            "fully_paid": true,
            "label": "Class A interest",
            "ledger": "interest",
            "ledger_supplied": true,
            "paid_display": "62000.00",
            "paid_minor_units": 6200000,
            "position": 3,
            "shortfall_display": "0.00",
            "shortfall_minor_units": 0,
            "step_id": "c",
            "suppressed_by_test": null
          },
          {
            "amount_source": "recomputed",
            "basis": "Prospectus reserve provisions",
            "cap_applied": false,
            "cap_display": "40000.00",
            "cap_minor_units": 4000000,
            "claim_display": "40000.00",
            "claim_minor_units": 4000000,
            "due_display": "40000.00",
            "due_minor_units": 4000000,
            "fully_paid": true,
            "label": "Cash reserve replenishment",
            "ledger": "interest",
            "ledger_supplied": true,
            "paid_display": "40000.00",
            "paid_minor_units": 4000000,
            "position": 4,
            "shortfall_display": "0.00",
            "shortfall_minor_units": 0,
            "step_id": "d",
            "suppressed_by_test": null
          },
          {
            "amount_source": "recomputed",
            "basis": "Prospectus interest provisions",
            "cap_applied": false,
            "cap_display": null,
            "cap_minor_units": null,
            "claim_display": "24000.00",
            "claim_minor_units": 2400000,
            "due_display": "24000.00",
            "due_minor_units": 2400000,
            "fully_paid": false,
            "label": "Class B interest",
            "ledger": "interest",
            "ledger_supplied": true,
            "paid_display": "18000.00",
            "paid_minor_units": 1800000,
            "position": 5,
            "shortfall_display": "6000.00",
            "shortfall_minor_units": 600000,
            "step_id": "e",
            "suppressed_by_test": null
          }
        ],
        "test_results": [
          {
            "basis": "Threshold declared by the caller from the transaction documents",
            "basis_detail": "Ratio test evaluated by integer cross-multiplication against the threshold supplied for it. No division is performed on the comparison path.",
            "comparator": "gte",
            "divert_applied": false,
            "divert_declared": false,
            "divert_description": "The caller declared no diversion for this test, so a failure suppresses nothing. Divert behaviour is never inferred here.",
            "label": "Credit enhancement test",
            "measured": {
              "denominator": 10000,
              "form": "ratio",
              "numerator": 1450
            },
            "outcome": "pass",
            "suppress_step_ids": [],
            "test_id": "credit-enhancement",
            "threshold": {
              "denominator": 10000,
              "form": "ratio",
              "numerator": 1000
            }
          }
        ],
        "total_available_display": "125000.00",
        "total_available_minor_units": 12500000,
        "total_paid_display": "125000.00",
        "total_paid_minor_units": 12500000,
        "total_shortfall_display": "6000.00",
        "total_shortfall_minor_units": 600000
      }
    }
  }
}
