{
  "tool_id": "art-567-pe-waterfall-lp-recompute",
  "note": "golden_hash filled by `node golden-parity.test.mjs --update`. Vectors cover: an exact European whole-fund match against the GP report, a deliberate GP overstatement of its own catch-up share (DIVERGES), and a missing-GP-report case (INDETERMINATE) under the American deal-by-deal tier structure.",
  "vectors": [
    {
      "name": "european-whole-fund-matches-gp-report",
      "description": "Standard 4-tier European whole-fund waterfall, 8% simple pref, full GP catch-up, 20% carry -- recomputed allocation lands exactly on the GP-reported figures.",
      "policy_parameters": {
        "fund_id": "FUND-A",
        "waterfall": {
          "pref_rate": 0.08,
          "compounding_basis": "simple",
          "day_count_convention": "actual/365",
          "gp_catchup_pct": 1,
          "carry_pct": 0.2,
          "tier_structure": "european_whole_fund",
          "clawback_flag": true
        },
        "cashflows": [
          {
            "date": "2025-01-01",
            "type": "contribution",
            "amount": 1000000
          },
          {
            "date": "2026-01-01",
            "type": "distribution",
            "amount": 1300000
          }
        ],
        "gp_reported_allocation": {
          "tiers": [
            {
              "tier": "return_of_capital",
              "lp_amount": 1000000,
              "gp_amount": 0
            },
            {
              "tier": "preferred_return",
              "lp_amount": 80000,
              "gp_amount": 0
            },
            {
              "tier": "gp_catchup",
              "lp_amount": 0,
              "gp_amount": 20000
            },
            {
              "tier": "carry_residual",
              "lp_amount": 160000,
              "gp_amount": 40000
            }
          ]
        }
      },
      "output_payload": {
        "fund_id": "FUND-A",
        "deal_id": null,
        "as_of_date": null,
        "verdict": "MATCHES",
        "tier_structure": "european_whole_fund",
        "waterfall": {
          "pref_rate": 0.08,
          "compounding_basis": "simple",
          "day_count_convention": "actual/365",
          "gp_catchup_pct": 1,
          "carry_pct": 0.2
        },
        "recomputed_allocation": [
          {
            "tier": "return_of_capital",
            "lp_amount": "1000000.00000000",
            "gp_amount": "0.00000000"
          },
          {
            "tier": "preferred_return",
            "lp_amount": "80000.00000000",
            "gp_amount": "0.00000000"
          },
          {
            "tier": "gp_catchup",
            "lp_amount": "0.00000000",
            "gp_amount": "20000.00000000"
          },
          {
            "tier": "carry_residual",
            "lp_amount": "160000.00000000",
            "gp_amount": "40000.00000000"
          }
        ],
        "gp_reported_allocation": {
          "tiers": [
            {
              "tier": "return_of_capital",
              "lp_amount": 1000000,
              "gp_amount": 0
            },
            {
              "tier": "preferred_return",
              "lp_amount": 80000,
              "gp_amount": 0
            },
            {
              "tier": "gp_catchup",
              "lp_amount": 0,
              "gp_amount": 20000
            },
            {
              "tier": "carry_residual",
              "lp_amount": 160000,
              "gp_amount": 40000
            }
          ]
        },
        "tier_deltas": [
          {
            "tier": "return_of_capital",
            "recomputed_lp_amount": "1000000.00000000",
            "recomputed_gp_amount": "0.00000000",
            "gp_reported_lp_amount": "1000000",
            "gp_reported_gp_amount": "0",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          },
          {
            "tier": "preferred_return",
            "recomputed_lp_amount": "80000.00000000",
            "recomputed_gp_amount": "0.00000000",
            "gp_reported_lp_amount": "80000",
            "gp_reported_gp_amount": "0",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          },
          {
            "tier": "gp_catchup",
            "recomputed_lp_amount": "0.00000000",
            "recomputed_gp_amount": "20000.00000000",
            "gp_reported_lp_amount": "0",
            "gp_reported_gp_amount": "20000",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          },
          {
            "tier": "carry_residual",
            "recomputed_lp_amount": "160000.00000000",
            "recomputed_gp_amount": "40000.00000000",
            "gp_reported_lp_amount": "160000",
            "gp_reported_gp_amount": "40000",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          }
        ],
        "per_deal": null,
        "clawback": {
          "clawback_flag_declared": true,
          "total_realized_profit": "300000.00000000",
          "gp_carry_and_catchup_received": "60000.00000000",
          "gp_entitled_at_carry_pct": "60000.00000000",
          "clawback_amount": "0.00000000",
          "note": "Aggregate check only: does cumulative GP catch-up + carry exceed carry_pct of cumulative realized profit (distributions minus contributions) at this as-of date. Not a fund-level clawback provision recompute -- the governing LPA clawback mechanics (interim vs final, tax-effected or gross, escrow terms) are not modeled here."
        },
        "rejected_inputs": [],
        "not_proven": [
          {
            "item": "Cashflow accuracy",
            "detail": "Every dated cashflow is caller-supplied and asserted. This kernel performs no document parsing or fund-administrator data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "LPA authorization",
            "detail": "This kernel recomputes arithmetic under a DECLARED waterfall parameterization; it makes no finding on whether that parameterization is what the governing limited partnership agreement actually specifies."
          },
          {
            "item": "ILPA endorsement or compliance",
            "detail": "ILPA reporting-template guidance is cited only as dated context that GP-side verification tooling is not designed to check the GP's own math. This kernel is not endorsed by, and makes no claim of compliance with, ILPA."
          },
          {
            "item": "GP-reported allocation source",
            "detail": "The GP-reported allocation compared against is exactly what the caller typed in; this kernel does not verify it was transcribed correctly from the GP's capital account statement."
          }
        ],
        "fence": "Cashflows and the waterfall parameterization are SUPPLIED, asserted, and digested into this receipt. This kernel recomputes ARITHMETIC over declared inputs and attests THAT -- never an opinion on LPA authorization, never ILPA-endorsed or ILPA-compliant.",
        "ilpa_context": "ILPA reporting-template guidance states it was not designed for verifying any of the GP's calculations (cited as dated gap evidence, not as an endorsement of this tool)."
      },
      "golden_hash": "2557240852d2dcc593f12b93a72f99b7acd362a9189fd0bbc5ef856fc3210cbd"
    },
    {
      "name": "european-whole-fund-diverges-gp-overstates-catchup",
      "description": "Same cashflows and terms as the matches vector, but the GP-reported catch-up tier overstates the GP share by $15,000 (offset from carry_residual) -- recompute flags DIVERGES with a per-tier delta.",
      "policy_parameters": {
        "fund_id": "FUND-B",
        "waterfall": {
          "pref_rate": 0.08,
          "compounding_basis": "simple",
          "day_count_convention": "actual/365",
          "gp_catchup_pct": 1,
          "carry_pct": 0.2,
          "tier_structure": "european_whole_fund",
          "clawback_flag": false
        },
        "cashflows": [
          {
            "date": "2025-01-01",
            "type": "contribution",
            "amount": 1000000
          },
          {
            "date": "2026-01-01",
            "type": "distribution",
            "amount": 1300000
          }
        ],
        "gp_reported_allocation": {
          "tiers": [
            {
              "tier": "return_of_capital",
              "lp_amount": 1000000,
              "gp_amount": 0
            },
            {
              "tier": "preferred_return",
              "lp_amount": 80000,
              "gp_amount": 0
            },
            {
              "tier": "gp_catchup",
              "lp_amount": 0,
              "gp_amount": 35000
            },
            {
              "tier": "carry_residual",
              "lp_amount": 145000,
              "gp_amount": 40000
            }
          ]
        }
      },
      "output_payload": {
        "fund_id": "FUND-B",
        "deal_id": null,
        "as_of_date": null,
        "verdict": "DIVERGES",
        "tier_structure": "european_whole_fund",
        "waterfall": {
          "pref_rate": 0.08,
          "compounding_basis": "simple",
          "day_count_convention": "actual/365",
          "gp_catchup_pct": 1,
          "carry_pct": 0.2
        },
        "recomputed_allocation": [
          {
            "tier": "return_of_capital",
            "lp_amount": "1000000.00000000",
            "gp_amount": "0.00000000"
          },
          {
            "tier": "preferred_return",
            "lp_amount": "80000.00000000",
            "gp_amount": "0.00000000"
          },
          {
            "tier": "gp_catchup",
            "lp_amount": "0.00000000",
            "gp_amount": "20000.00000000"
          },
          {
            "tier": "carry_residual",
            "lp_amount": "160000.00000000",
            "gp_amount": "40000.00000000"
          }
        ],
        "gp_reported_allocation": {
          "tiers": [
            {
              "tier": "return_of_capital",
              "lp_amount": 1000000,
              "gp_amount": 0
            },
            {
              "tier": "preferred_return",
              "lp_amount": 80000,
              "gp_amount": 0
            },
            {
              "tier": "gp_catchup",
              "lp_amount": 0,
              "gp_amount": 35000
            },
            {
              "tier": "carry_residual",
              "lp_amount": 145000,
              "gp_amount": 40000
            }
          ]
        },
        "tier_deltas": [
          {
            "tier": "return_of_capital",
            "recomputed_lp_amount": "1000000.00000000",
            "recomputed_gp_amount": "0.00000000",
            "gp_reported_lp_amount": "1000000",
            "gp_reported_gp_amount": "0",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          },
          {
            "tier": "preferred_return",
            "recomputed_lp_amount": "80000.00000000",
            "recomputed_gp_amount": "0.00000000",
            "gp_reported_lp_amount": "80000",
            "gp_reported_gp_amount": "0",
            "lp_delta": "0.00000000",
            "gp_delta": "0.00000000",
            "matches": true
          },
          {
            "tier": "gp_catchup",
            "recomputed_lp_amount": "0.00000000",
            "recomputed_gp_amount": "20000.00000000",
            "gp_reported_lp_amount": "0",
            "gp_reported_gp_amount": "35000",
            "lp_delta": "0.00000000",
            "gp_delta": "-15000.00000000",
            "matches": false
          },
          {
            "tier": "carry_residual",
            "recomputed_lp_amount": "160000.00000000",
            "recomputed_gp_amount": "40000.00000000",
            "gp_reported_lp_amount": "145000",
            "gp_reported_gp_amount": "40000",
            "lp_delta": "15000.00000000",
            "gp_delta": "0.00000000",
            "matches": false
          }
        ],
        "per_deal": null,
        "clawback": null,
        "rejected_inputs": [],
        "not_proven": [
          {
            "item": "Cashflow accuracy",
            "detail": "Every dated cashflow is caller-supplied and asserted. This kernel performs no document parsing or fund-administrator data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "LPA authorization",
            "detail": "This kernel recomputes arithmetic under a DECLARED waterfall parameterization; it makes no finding on whether that parameterization is what the governing limited partnership agreement actually specifies."
          },
          {
            "item": "ILPA endorsement or compliance",
            "detail": "ILPA reporting-template guidance is cited only as dated context that GP-side verification tooling is not designed to check the GP's own math. This kernel is not endorsed by, and makes no claim of compliance with, ILPA."
          },
          {
            "item": "GP-reported allocation source",
            "detail": "The GP-reported allocation compared against is exactly what the caller typed in; this kernel does not verify it was transcribed correctly from the GP's capital account statement."
          }
        ],
        "fence": "Cashflows and the waterfall parameterization are SUPPLIED, asserted, and digested into this receipt. This kernel recomputes ARITHMETIC over declared inputs and attests THAT -- never an opinion on LPA authorization, never ILPA-endorsed or ILPA-compliant.",
        "ilpa_context": "ILPA reporting-template guidance states it was not designed for verifying any of the GP's calculations (cited as dated gap evidence, not as an endorsement of this tool)."
      },
      "golden_hash": "ea3a044c4cf92f2e1a9b77b38ed7328543ef420e161997dc469259c519173f69"
    },
    {
      "name": "american-deal-by-deal-indeterminate-no-gp-report",
      "description": "American deal-by-deal tier structure with a single deal pool, but no GP-reported allocation supplied to diff against -- verdict is INDETERMINATE, never guessed or defaulted.",
      "policy_parameters": {
        "fund_id": "FUND-C",
        "waterfall": {
          "pref_rate": 0.08,
          "compounding_basis": "annual",
          "day_count_convention": "actual/365",
          "gp_catchup_pct": 0.5,
          "carry_pct": 0.2,
          "tier_structure": "american_deal_by_deal",
          "clawback_flag": false
        },
        "cashflows": [
          {
            "date": "2025-01-01",
            "type": "contribution",
            "amount": 500000,
            "deal_id": "DEAL-1"
          },
          {
            "date": "2026-01-01",
            "type": "distribution",
            "amount": 650000,
            "deal_id": "DEAL-1"
          }
        ],
        "gp_reported_allocation": null
      },
      "output_payload": {
        "fund_id": "FUND-C",
        "deal_id": null,
        "as_of_date": null,
        "verdict": "INDETERMINATE",
        "reason": "One or more required parameters are missing -- see rejected_inputs. Never defaulted, never guessed.",
        "recomputed_allocation": null,
        "gp_reported_allocation": null,
        "tier_deltas": [],
        "per_deal": null,
        "clawback": null,
        "rejected_inputs": [
          {
            "where": "gp_reported_allocation.tiers",
            "reason": "absent or empty -- the GP-reported allocation to diff against is required",
            "supplied": null
          }
        ],
        "not_proven": [
          {
            "item": "Cashflow accuracy",
            "detail": "Every dated cashflow is caller-supplied and asserted. This kernel performs no document parsing or fund-administrator data lookups (zero-egress) and does not verify these values against any external source."
          },
          {
            "item": "LPA authorization",
            "detail": "This kernel recomputes arithmetic under a DECLARED waterfall parameterization; it makes no finding on whether that parameterization is what the governing limited partnership agreement actually specifies."
          },
          {
            "item": "ILPA endorsement or compliance",
            "detail": "ILPA reporting-template guidance is cited only as dated context that GP-side verification tooling is not designed to check the GP's own math. This kernel is not endorsed by, and makes no claim of compliance with, ILPA."
          },
          {
            "item": "GP-reported allocation source",
            "detail": "The GP-reported allocation compared against is exactly what the caller typed in; this kernel does not verify it was transcribed correctly from the GP's capital account statement."
          }
        ],
        "fence": "Cashflows and the waterfall parameterization are SUPPLIED, asserted, and digested into this receipt. This kernel recomputes ARITHMETIC over declared inputs and attests THAT -- never an opinion on LPA authorization, never ILPA-endorsed."
      },
      "golden_hash": "d785e909185dccc2046f503d2df3c855a86a30903d2172ab87de8737eefe942c"
    }
  ]
}
