{
  "tool_id": "art-509-recompute-payment-waterfall",
  "note": "Vectors computed directly from the shipped kernel. Every deal, ladder and figure here is SYNTHETIC and is not a copy of any real transaction. Covers the independent recomputation agreeing with an asserted investor report, the recompute-only state where nothing was supplied to compare against, disagreement against an asserted report, a failing test suppressing the step ids the caller declared, and the finite gate on zero available funds.",
  "vectors": [
    {
      "name": "matches-asserted-report-with-funds-exhaust",
      "description": "Independent recomputation down a caller-declared ladder. Funds run out part way through the subordinated step, first_unfunded_step names it, and the recomputed allocation agrees with every figure the investor report asserts.",
      "policy_parameters": {
        "period_label": "2025-07 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01"
        },
        "available_funds": [
          {
            "ledger": "interest",
            "amount_minor_units": 12500000
          }
        ],
        "priority_ladder": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "basis": "Fee letter, not a public document",
            "ledger": "interest",
            "amount_due_minor_units": 150000,
            "amount_source": "asserted"
          },
          {
            "step_id": "b",
            "label": "Senior expenses",
            "basis": "Fee letter, not a public document",
            "ledger": "interest",
            "amount_due_minor_units": 350000,
            "amount_source": "asserted",
            "cap_minor_units": 400000
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Prospectus interest provisions",
            "ledger": "interest",
            "amount_due_minor_units": 6200000
          },
          {
            "step_id": "d",
            "label": "Cash reserve replenishment",
            "basis": "Prospectus reserve provisions",
            "ledger": "interest",
            "amount_due_minor_units": 4000000,
            "cap_minor_units": 4000000
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "basis": "Prospectus interest provisions",
            "ledger": "interest",
            "amount_due_minor_units": 2400000
          }
        ],
        "tests": [
          {
            "test_id": "credit-enhancement",
            "label": "Credit enhancement test",
            "basis": "Threshold declared by the caller from the transaction documents",
            "comparator": "gte",
            "measured_numerator": 1450,
            "measured_denominator": 10000,
            "threshold_numerator": 1000,
            "threshold_denominator": 10000
          }
        ],
        "asserted_allocations": [
          {
            "step_id": "a",
            "amount_minor_units": 150000
          },
          {
            "step_id": "b",
            "amount_minor_units": 350000
          },
          {
            "step_id": "c",
            "amount_minor_units": 6200000
          },
          {
            "step_id": "d",
            "amount_minor_units": 4000000
          },
          {
            "step_id": "e",
            "amount_minor_units": 1800000
          }
        ]
      },
      "output_payload": {
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "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.",
          "field_set_version": "1.0.0"
        },
        "period_label": "2025-07 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "minor_unit_exponent": 2,
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01",
          "supplied": true
        },
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 12500000,
            "opening_display": "125000.00"
          }
        ],
        "total_available_minor_units": 12500000,
        "total_available_display": "125000.00",
        "step_count": 5,
        "recomputed_step_count": 3,
        "asserted_step_count": 2,
        "steps": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "basis": "Fee letter, not a public document",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 1,
            "amount_source": "asserted",
            "claim_minor_units": 150000,
            "claim_display": "1500.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 150000,
            "due_display": "1500.00",
            "paid_minor_units": 150000,
            "paid_display": "1500.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "b",
            "label": "Senior expenses",
            "basis": "Fee letter, not a public document",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 2,
            "amount_source": "asserted",
            "claim_minor_units": 350000,
            "claim_display": "3500.00",
            "cap_minor_units": 400000,
            "cap_display": "4000.00",
            "cap_applied": false,
            "due_minor_units": 350000,
            "due_display": "3500.00",
            "paid_minor_units": 350000,
            "paid_display": "3500.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Prospectus interest provisions",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 3,
            "amount_source": "recomputed",
            "claim_minor_units": 6200000,
            "claim_display": "62000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 6200000,
            "due_display": "62000.00",
            "paid_minor_units": 6200000,
            "paid_display": "62000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "d",
            "label": "Cash reserve replenishment",
            "basis": "Prospectus reserve provisions",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 4,
            "amount_source": "recomputed",
            "claim_minor_units": 4000000,
            "claim_display": "40000.00",
            "cap_minor_units": 4000000,
            "cap_display": "40000.00",
            "cap_applied": false,
            "due_minor_units": 4000000,
            "due_display": "40000.00",
            "paid_minor_units": 4000000,
            "paid_display": "40000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "basis": "Prospectus interest provisions",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 5,
            "amount_source": "recomputed",
            "claim_minor_units": 2400000,
            "claim_display": "24000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 2400000,
            "due_display": "24000.00",
            "paid_minor_units": 1800000,
            "paid_display": "18000.00",
            "shortfall_minor_units": 600000,
            "shortfall_display": "6000.00",
            "fully_paid": false,
            "suppressed_by_test": null
          }
        ],
        "first_unfunded_step": "e",
        "total_paid_minor_units": 12500000,
        "total_paid_display": "125000.00",
        "total_shortfall_minor_units": 600000,
        "total_shortfall_display": "6000.00",
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 12500000,
            "opening_display": "125000.00",
            "residual_minor_units": 0,
            "residual_display": "0.00"
          }
        ],
        "residual_minor_units": 0,
        "residual_display": "0.00",
        "test_results": [
          {
            "test_id": "credit-enhancement",
            "label": "Credit enhancement test",
            "basis": "Threshold declared by the caller from the transaction documents",
            "comparator": "gte",
            "measured": {
              "form": "ratio",
              "numerator": 1450,
              "denominator": 10000
            },
            "threshold": {
              "form": "ratio",
              "numerator": 1000,
              "denominator": 10000
            },
            "outcome": "pass",
            "basis_detail": "Ratio test evaluated by integer cross-multiplication against the threshold supplied for it. No division is performed on the comparison path.",
            "divert_declared": false,
            "divert_applied": false,
            "suppress_step_ids": [],
            "divert_description": "The caller declared no diversion for this test, so a failure suppresses nothing. Divert behaviour is never inferred here."
          }
        ],
        "comparison_state": "matches",
        "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.",
        "diff": [
          {
            "step_id": "a",
            "in_ladder": true,
            "recomputed_minor_units": 150000,
            "recomputed_display": "1500.00",
            "asserted_minor_units": 150000,
            "asserted_display": "1500.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          },
          {
            "step_id": "b",
            "in_ladder": true,
            "recomputed_minor_units": 350000,
            "recomputed_display": "3500.00",
            "asserted_minor_units": 350000,
            "asserted_display": "3500.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          },
          {
            "step_id": "c",
            "in_ladder": true,
            "recomputed_minor_units": 6200000,
            "recomputed_display": "62000.00",
            "asserted_minor_units": 6200000,
            "asserted_display": "62000.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          },
          {
            "step_id": "d",
            "in_ladder": true,
            "recomputed_minor_units": 4000000,
            "recomputed_display": "40000.00",
            "asserted_minor_units": 4000000,
            "asserted_display": "40000.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          },
          {
            "step_id": "e",
            "in_ladder": true,
            "recomputed_minor_units": 1800000,
            "recomputed_display": "18000.00",
            "asserted_minor_units": 1800000,
            "asserted_display": "18000.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          }
        ],
        "rejected_inputs": [],
        "citations": {
          "investor_report": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_diligence": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "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.",
        "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."
      },
      "golden_hash": "9f63f900cfae998d5ad2b7a6f5cfa405df074d7f12b9c118592bd985565a79bd"
    },
    {
      "name": "recompute-only-no-asserted-allocations",
      "description": "The same ladder with no asserted allocations supplied. The run resolves to comparison_state recompute_only, which is reported as its own state and never as agreement.",
      "policy_parameters": {
        "period_label": "2025-07 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01"
        },
        "available_funds": [
          {
            "ledger": "interest",
            "amount_minor_units": 9000000
          },
          {
            "ledger": "principal",
            "amount_minor_units": 25000000
          }
        ],
        "priority_ladder": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "ledger": "interest",
            "amount_due_minor_units": 150000,
            "amount_source": "asserted"
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "ledger": "interest",
            "amount_due_minor_units": 6200000
          },
          {
            "step_id": "p1",
            "label": "Class A principal",
            "ledger": "principal",
            "amount_due_minor_units": 25000000
          }
        ]
      },
      "output_payload": {
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "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.",
          "field_set_version": "1.0.0"
        },
        "period_label": "2025-07 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "minor_unit_exponent": 2,
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01",
          "supplied": true
        },
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 9000000,
            "opening_display": "90000.00"
          },
          {
            "ledger": "principal",
            "opening_minor_units": 25000000,
            "opening_display": "250000.00"
          }
        ],
        "total_available_minor_units": 34000000,
        "total_available_display": "340000.00",
        "step_count": 3,
        "recomputed_step_count": 2,
        "asserted_step_count": 1,
        "steps": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 1,
            "amount_source": "asserted",
            "claim_minor_units": 150000,
            "claim_display": "1500.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 150000,
            "due_display": "1500.00",
            "paid_minor_units": 150000,
            "paid_display": "1500.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 2,
            "amount_source": "recomputed",
            "claim_minor_units": 6200000,
            "claim_display": "62000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 6200000,
            "due_display": "62000.00",
            "paid_minor_units": 6200000,
            "paid_display": "62000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "p1",
            "label": "Class A principal",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "principal",
            "ledger_supplied": true,
            "position": 3,
            "amount_source": "recomputed",
            "claim_minor_units": 25000000,
            "claim_display": "250000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 25000000,
            "due_display": "250000.00",
            "paid_minor_units": 25000000,
            "paid_display": "250000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          }
        ],
        "first_unfunded_step": null,
        "total_paid_minor_units": 31350000,
        "total_paid_display": "313500.00",
        "total_shortfall_minor_units": 0,
        "total_shortfall_display": "0.00",
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 9000000,
            "opening_display": "90000.00",
            "residual_minor_units": 2650000,
            "residual_display": "26500.00"
          },
          {
            "ledger": "principal",
            "opening_minor_units": 25000000,
            "opening_display": "250000.00",
            "residual_minor_units": 0,
            "residual_display": "0.00"
          }
        ],
        "residual_minor_units": 2650000,
        "residual_display": "26500.00",
        "test_results": [],
        "comparison_state": "recompute_only",
        "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.",
        "diff": [],
        "rejected_inputs": [],
        "citations": {
          "investor_report": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_diligence": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "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 340000.00 EUR across 2 ledgers were allocated down 3 ladder steps in the order supplied, honouring every declared cap.",
          "1 of 3 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.",
          "Every step was met in full from the funds available, so no step ran out of money.",
          "Residual after the ladder is 26500.00 EUR.",
          "No tests were supplied, so no test was evaluated and no diversion was applied.",
          "No asserted allocations were supplied, so this run is RECOMPUTE-ONLY. It states what the ladder produces from the funds supplied. It is not agreement with any investor report, because none was given to compare against.",
          "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.",
        "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."
      },
      "golden_hash": "b5d449822223630e78daf60862540221a6c37fcdfcee5676adce88bd8259c808"
    },
    {
      "name": "differs-from-asserted-report",
      "description": "The independently recomputed allocation disagrees with the figure the investor report asserts for the subordinated step. Both figures are carried and the difference is named.",
      "policy_parameters": {
        "period_label": "2025-10 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01"
        },
        "available_funds": [
          {
            "ledger": "interest",
            "amount_minor_units": 8000000
          }
        ],
        "priority_ladder": [
          {
            "step_id": "c",
            "label": "Class A interest",
            "ledger": "interest",
            "amount_due_minor_units": 6200000
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "ledger": "interest",
            "amount_due_minor_units": 2400000
          }
        ],
        "asserted_allocations": [
          {
            "step_id": "c",
            "amount_minor_units": 6200000
          },
          {
            "step_id": "e",
            "amount_minor_units": 2400000
          }
        ]
      },
      "output_payload": {
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "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.",
          "field_set_version": "1.0.0"
        },
        "period_label": "2025-10 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "minor_unit_exponent": 2,
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01",
          "supplied": true
        },
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 8000000,
            "opening_display": "80000.00"
          }
        ],
        "total_available_minor_units": 8000000,
        "total_available_display": "80000.00",
        "step_count": 2,
        "recomputed_step_count": 2,
        "asserted_step_count": 0,
        "steps": [
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 1,
            "amount_source": "recomputed",
            "claim_minor_units": 6200000,
            "claim_display": "62000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 6200000,
            "due_display": "62000.00",
            "paid_minor_units": 6200000,
            "paid_display": "62000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 2,
            "amount_source": "recomputed",
            "claim_minor_units": 2400000,
            "claim_display": "24000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 2400000,
            "due_display": "24000.00",
            "paid_minor_units": 1800000,
            "paid_display": "18000.00",
            "shortfall_minor_units": 600000,
            "shortfall_display": "6000.00",
            "fully_paid": false,
            "suppressed_by_test": null
          }
        ],
        "first_unfunded_step": "e",
        "total_paid_minor_units": 8000000,
        "total_paid_display": "80000.00",
        "total_shortfall_minor_units": 600000,
        "total_shortfall_display": "6000.00",
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 8000000,
            "opening_display": "80000.00",
            "residual_minor_units": 0,
            "residual_display": "0.00"
          }
        ],
        "residual_minor_units": 0,
        "residual_display": "0.00",
        "test_results": [],
        "comparison_state": "differs",
        "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.",
        "diff": [
          {
            "step_id": "c",
            "in_ladder": true,
            "recomputed_minor_units": 6200000,
            "recomputed_display": "62000.00",
            "asserted_minor_units": 6200000,
            "asserted_display": "62000.00",
            "difference_minor_units": 0,
            "difference_display": "0.00",
            "agrees": true,
            "detail": "The independently recomputed allocation equals the allocation the report asserts for this step."
          },
          {
            "step_id": "e",
            "in_ladder": true,
            "recomputed_minor_units": 1800000,
            "recomputed_display": "18000.00",
            "asserted_minor_units": 2400000,
            "asserted_display": "24000.00",
            "difference_minor_units": -600000,
            "difference_display": "-6000.00",
            "agrees": false,
            "detail": "The independently recomputed allocation differs from the allocation the report asserts for this step."
          }
        ],
        "rejected_inputs": [],
        "citations": {
          "investor_report": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_diligence": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "rationale": [
          "Waterfall recomputed for period 2025-10 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 80000.00 EUR across 1 ledger were allocated down 2 ladder steps in the order supplied, honouring every declared cap.",
          "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.",
          "No tests were supplied, so no test was evaluated and no diversion was applied.",
          "The independently recomputed allocation differs from the supplied report allocations on 1 step. Each difference is listed with both figures. A difference is an arithmetic finding about the ladder and figures supplied here, not a determination that the deal was paid incorrectly.",
          "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.",
        "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."
      },
      "golden_hash": "8d4d167d58397d971e63429c4d6a61994a145796aa98a3f4ade32a81d3c02f63"
    },
    {
      "name": "failing-test-suppresses-declared-steps",
      "description": "A caller-declared test fails against its caller-supplied threshold and suppresses exactly the step ids the caller declared against it. Nothing about the diversion is inferred.",
      "policy_parameters": {
        "period_label": "2026-01 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01"
        },
        "available_funds": [
          {
            "ledger": "interest",
            "amount_minor_units": 9000000
          }
        ],
        "priority_ladder": [
          {
            "step_id": "c",
            "label": "Class A interest",
            "ledger": "interest",
            "amount_due_minor_units": 6200000
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "ledger": "interest",
            "amount_due_minor_units": 2400000
          },
          {
            "step_id": "f",
            "label": "Residual to the retention holder",
            "ledger": "interest",
            "amount_due_minor_units": 400000
          }
        ],
        "tests": [
          {
            "test_id": "arrears-trigger",
            "label": "Cumulative arrears trigger",
            "basis": "Threshold declared by the caller from the transaction documents",
            "comparator": "lte",
            "measured_value_minor_units": 900000,
            "threshold_minor_units": 500000,
            "on_fail_suppress_step_ids": [
              "e",
              "f"
            ],
            "on_fail_description": "On breach the transaction documents divert funds away from the subordinated interest and the residual step."
          }
        ]
      },
      "output_payload": {
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "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.",
          "field_set_version": "1.0.0"
        },
        "period_label": "2026-01 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "minor_unit_exponent": 2,
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01",
          "supplied": true
        },
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 9000000,
            "opening_display": "90000.00"
          }
        ],
        "total_available_minor_units": 9000000,
        "total_available_display": "90000.00",
        "step_count": 3,
        "recomputed_step_count": 3,
        "asserted_step_count": 0,
        "steps": [
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 1,
            "amount_source": "recomputed",
            "claim_minor_units": 6200000,
            "claim_display": "62000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 6200000,
            "due_display": "62000.00",
            "paid_minor_units": 6200000,
            "paid_display": "62000.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": true,
            "suppressed_by_test": null
          },
          {
            "step_id": "e",
            "label": "Class B interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 2,
            "amount_source": "recomputed",
            "claim_minor_units": 2400000,
            "claim_display": "24000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 2400000,
            "due_display": "24000.00",
            "paid_minor_units": 0,
            "paid_display": "0.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": false,
            "suppressed_by_test": "arrears-trigger"
          },
          {
            "step_id": "f",
            "label": "Residual to the retention holder",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 3,
            "amount_source": "recomputed",
            "claim_minor_units": 400000,
            "claim_display": "4000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 400000,
            "due_display": "4000.00",
            "paid_minor_units": 0,
            "paid_display": "0.00",
            "shortfall_minor_units": 0,
            "shortfall_display": "0.00",
            "fully_paid": false,
            "suppressed_by_test": "arrears-trigger"
          }
        ],
        "first_unfunded_step": null,
        "total_paid_minor_units": 6200000,
        "total_paid_display": "62000.00",
        "total_shortfall_minor_units": 0,
        "total_shortfall_display": "0.00",
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 9000000,
            "opening_display": "90000.00",
            "residual_minor_units": 2800000,
            "residual_display": "28000.00"
          }
        ],
        "residual_minor_units": 2800000,
        "residual_display": "28000.00",
        "test_results": [
          {
            "test_id": "arrears-trigger",
            "label": "Cumulative arrears trigger",
            "basis": "Threshold declared by the caller from the transaction documents",
            "comparator": "lte",
            "measured": {
              "form": "amount",
              "amount_minor_units": 900000,
              "amount_display": "9000.00"
            },
            "threshold": {
              "form": "amount",
              "amount_minor_units": 500000,
              "amount_display": "5000.00"
            },
            "outcome": "fail",
            "basis_detail": "Amount test evaluated as an integer minor-unit comparison against the threshold supplied for it.",
            "divert_declared": true,
            "divert_applied": true,
            "suppress_step_ids": [
              "e",
              "f"
            ],
            "divert_description": "On breach the transaction documents divert funds away from the subordinated interest and the residual step."
          }
        ],
        "comparison_state": "recompute_only",
        "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.",
        "diff": [],
        "rejected_inputs": [],
        "citations": {
          "investor_report": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_diligence": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "rationale": [
          "Waterfall recomputed for period 2026-01 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 90000.00 EUR across 1 ledger were allocated down 3 ladder steps in the order supplied, honouring every declared cap.",
          "Every step was met in full from the funds available, so no step ran out of money.",
          "Residual after the ladder is 28000.00 EUR.",
          "1 test evaluated against caller-supplied thresholds: 0 pass, 1 fail, 0 undetermined. No market convention threshold is baked into this tool.",
          "1 failing test suppressed the step ids the caller declared against it. Divert behaviour is taken from that declaration alone and is never inferred from a test name or a market convention.",
          "No asserted allocations were supplied, so this run is RECOMPUTE-ONLY. It states what the ladder produces from the funds supplied. It is not agreement with any investor report, because none was given to compare against.",
          "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.",
        "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."
      },
      "golden_hash": "1f261866f4543d27a256d3b162337ba72b1e89d20fab102e8a3f02aa733311bf"
    },
    {
      "name": "zero-available-funds-finite-gate",
      "description": "Finite gate. Zero available funds against a real ladder resolves to a defined result: every step is unfunded, first_unfunded_step names the first, and no figure is NaN.",
      "policy_parameters": {
        "period_label": "2026-04 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01"
        },
        "available_funds": [
          {
            "ledger": "interest",
            "amount_minor_units": 0
          }
        ],
        "priority_ladder": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "ledger": "interest",
            "amount_due_minor_units": 150000,
            "amount_source": "asserted"
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "ledger": "interest",
            "amount_due_minor_units": 6200000
          }
        ]
      },
      "output_payload": {
        "basis": {
          "basis_id": "CALLER-SUPPLIED-LADDER",
          "basis_label": "Priority of payments as declared by the caller from the transaction documents",
          "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.",
          "field_set_version": "1.0.0"
        },
        "period_label": "2026-04 collection period",
        "deal_ref": "SYNTH-2025-A",
        "currency": "EUR",
        "minor_unit_exponent": 2,
        "ladder_ref": {
          "document_ref": "SYNTHETIC PROSPECTUS SYNTH-2025-A",
          "section_ref": "Priority of Payments, items a to f",
          "version": "1.0",
          "dated": "2025-05-01",
          "supplied": true
        },
        "available_funds_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 0,
            "opening_display": "0.00"
          }
        ],
        "total_available_minor_units": 0,
        "total_available_display": "0.00",
        "step_count": 2,
        "recomputed_step_count": 1,
        "asserted_step_count": 1,
        "steps": [
          {
            "step_id": "a",
            "label": "Trustee fee",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 1,
            "amount_source": "asserted",
            "claim_minor_units": 150000,
            "claim_display": "1500.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 150000,
            "due_display": "1500.00",
            "paid_minor_units": 0,
            "paid_display": "0.00",
            "shortfall_minor_units": 150000,
            "shortfall_display": "1500.00",
            "fully_paid": false,
            "suppressed_by_test": null
          },
          {
            "step_id": "c",
            "label": "Class A interest",
            "basis": "Declared by the caller from the transaction documents.",
            "ledger": "interest",
            "ledger_supplied": true,
            "position": 2,
            "amount_source": "recomputed",
            "claim_minor_units": 6200000,
            "claim_display": "62000.00",
            "cap_minor_units": null,
            "cap_display": null,
            "cap_applied": false,
            "due_minor_units": 6200000,
            "due_display": "62000.00",
            "paid_minor_units": 0,
            "paid_display": "0.00",
            "shortfall_minor_units": 6200000,
            "shortfall_display": "62000.00",
            "fully_paid": false,
            "suppressed_by_test": null
          }
        ],
        "first_unfunded_step": "a",
        "total_paid_minor_units": 0,
        "total_paid_display": "0.00",
        "total_shortfall_minor_units": 6350000,
        "total_shortfall_display": "63500.00",
        "residual_by_ledger": [
          {
            "ledger": "interest",
            "opening_minor_units": 0,
            "opening_display": "0.00",
            "residual_minor_units": 0,
            "residual_display": "0.00"
          }
        ],
        "residual_minor_units": 0,
        "residual_display": "0.00",
        "test_results": [],
        "comparison_state": "recompute_only",
        "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.",
        "diff": [],
        "rejected_inputs": [],
        "citations": {
          "investor_report": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 7(1)(e)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          },
          "investor_diligence": {
            "scheme": "eu-regulation",
            "id": "Regulation (EU) 2017/2402 Article 5(4)",
            "in_force_from": "2019-01-01",
            "mapped_by": "AINumbers SECZ-K-1",
            "mapped_at": "2026-07-31",
            "uri": "https://eur-lex.europa.eu/eli/reg/2017/2402/oj"
          }
        },
        "rationale": [
          "Waterfall recomputed for period 2026-04 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 0.00 EUR across 1 ledger were allocated down 2 ladder steps in the order supplied, honouring every declared cap.",
          "1 of 2 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 a, which is the first step whose claim could not be met in full. Total shortfall across the ladder is 63500.00 EUR.",
          "Residual after the ladder is 0.00 EUR.",
          "No tests were supplied, so no test was evaluated and no diversion was applied.",
          "No asserted allocations were supplied, so this run is RECOMPUTE-ONLY. It states what the ladder produces from the funds supplied. It is not agreement with any investor report, because none was given to compare against.",
          "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.",
        "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."
      },
      "golden_hash": "121ab8d380e2daa17be427251a49a4498e715e6618e99a1f6e6463ba45aca3d0"
    }
  ]
}
