{
  "tool_id": "art-511-recompute-fund-fees",
  "note": "golden_hash filled by node golden-parity.test.mjs --update. Vectors cover: hard vs soft hurdle on identical inputs (proves no conflation), missing hurdle_type judgment_required, HWM loss carry-forward across a period boundary and recovery, first-period-no-prior-HWM, zero-period finite gate, realisation-based crystallisation not yet triggered, and a charged_amounts diff.",
  "vectors": [
    {
      "name": "hard-hurdle-excess-only",
      "description": "Hard hurdle: 12% period return against a 5% hurdle charges the performance fee only on the 7% excess above the hurdle, not the full 12%.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "112000000",
          "fee_base": "106000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.05",
          "hurdle_type": "hard",
          "high_water_mark": "100000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "2120000.00",
        "performance_fee": {
          "hurdle_type": "hard",
          "hurdle_rate": "0.0500",
          "period_return_pct": "0.1200",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "7000000.00",
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "112000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "12000000.00",
          "eligible_gain": "7000000.00",
          "performance_fee_crystallised": "1400000.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 106000000.00.",
          "Hard hurdle: performance fee, if any, applies only to the return in excess of the hurdle rate.",
          "High-water mark carried forward from 100000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV exceeds the high-water mark by 12000000.00.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "2917de1fbb28566aa62d24517b5c75ed58433410ce12d1e66637e692aa9d119b"
    },
    {
      "name": "soft-hurdle-full-return",
      "description": "Soft hurdle: the identical 12% return against the identical 5% hurdle instead charges on the FULL 12% return once cleared — proves hard vs soft are not conflated.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "112000000",
          "fee_base": "106000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.05",
          "hurdle_type": "soft",
          "high_water_mark": "100000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "2120000.00",
        "performance_fee": {
          "hurdle_type": "soft",
          "hurdle_rate": "0.0500",
          "period_return_pct": "0.1200",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "12000000.00",
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "112000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "12000000.00",
          "eligible_gain": "12000000.00",
          "performance_fee_crystallised": "2400000.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 106000000.00.",
          "Soft hurdle: once cleared, performance fee applies to the full period return, not merely the excess.",
          "High-water mark carried forward from 100000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV exceeds the high-water mark by 12000000.00.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "cd4fdb7789344c2cdbf6348214e87ffb04d825e1d5a46f866a3853e522b13494"
    },
    {
      "name": "missing-hurdle-type-judgment-required",
      "description": "hurdle_type omitted entirely — the kernel refuses to default to hard or soft and raises judgment_required naming the field, with zero performance fee computed.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "112000000",
          "fee_base": "106000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.05",
          "high_water_mark": "100000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": {
          "field": "performance_fee.hurdle_type",
          "reason": "hurdle_type must be one of \"hard\", \"soft\", or \"none\" and carries no default — a hard hurdle charges only the excess above the hurdle, a soft hurdle charges the full return once cleared, and conflating them is the single most common performance-fee error. Supply hurdle_type explicitly from the fund agreement.",
          "supplied": null
        },
        "management_fee_computed": "2120000.00",
        "performance_fee": {
          "hurdle_type": null,
          "hurdle_rate": null,
          "period_return_pct": "0.1200",
          "hurdle_cleared": null,
          "hurdle_excess_amount": null,
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "112000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "12000000.00",
          "eligible_gain": "0.00",
          "performance_fee_crystallised": "0.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 106000000.00.",
          "hurdle_type was absent or unrecognised — no performance fee was computed; judgment_required names the resolving input.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "7560cea43929b7a2e2058bdab2df3f962630ffb8abb9233fec2bb16e7bde52b8"
    },
    {
      "name": "hwm-loss-carryforward-not-cleared",
      "description": "A loss period leaves the closing NAV below the prior high-water mark; the mark is NOT reset by the period ending and no performance fee is chargeable.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "95000000",
          "fee_base": "97000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.00",
          "hurdle_type": "none",
          "high_water_mark": "110000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "1940000.00",
        "performance_fee": {
          "hurdle_type": "none",
          "hurdle_rate": "0.0000",
          "period_return_pct": "-0.0500",
          "hurdle_cleared": false,
          "hurdle_excess_amount": "0.00",
          "prior_high_water_mark": "110000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "110000000.00",
          "hwm_exceeded": false,
          "gain_above_hwm": "0.00",
          "eligible_gain": "0.00",
          "performance_fee_crystallised": "0.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 97000000.00.",
          "No hurdle declared: performance fee, if any, applies to the full positive period return.",
          "High-water mark carried forward from 110000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV does not exceed the high-water mark — no performance fee is chargeable regardless of the hurdle test.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "209df5804b3d2e10134fbbeb08fc4d741be4829f2ae8b475ecd2c88d96f6804b"
    },
    {
      "name": "hwm-recovery-after-loss-carryforward",
      "description": "Following the loss above, a recovery period must first exceed the carried-forward 110,000,000 mark before any performance fee accrues, proving the mark survived the intervening period boundary.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2027-12-31",
        "period_start": "2027-01-01",
        "period_end": "2027-12-31",
        "period_days": 365,
        "nav": {
          "opening": "95000000",
          "closing": "115000000",
          "fee_base": "105000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.00",
          "hurdle_type": "none",
          "high_water_mark": "110000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2027-12-31",
        "period_start": "2027-01-01",
        "period_end": "2027-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "2100000.00",
        "performance_fee": {
          "hurdle_type": "none",
          "hurdle_rate": "0.0000",
          "period_return_pct": "0.2105",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "19999999.45",
          "prior_high_water_mark": "110000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "115000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "5000000.00",
          "eligible_gain": "5000000.00",
          "performance_fee_crystallised": "1000000.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 105000000.00.",
          "No hurdle declared: performance fee, if any, applies to the full positive period return.",
          "High-water mark carried forward from 110000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV exceeds the high-water mark by 5000000.00.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "5db01e485d4b4c39b5f9e24116396e9f4894b8ee4d538e1cfb43e62ca97180ac"
    },
    {
      "name": "first-period-no-prior-hwm",
      "description": "No high_water_mark supplied at all — the first period, resolved deterministically to the opening NAV baseline rather than NaN or a silent zero.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-02",
        "agreement_ref": "LPA-2026-01",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "105000000",
          "fee_base": "102000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.00",
          "hurdle_type": "none",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-02",
        "agreement_ref": "LPA-2026-01",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "2040000.00",
        "performance_fee": {
          "hurdle_type": "none",
          "hurdle_rate": "0.0000",
          "period_return_pct": "0.0500",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "5000000.00",
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": true,
          "loss_carryforward": true,
          "new_high_water_mark": "105000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "5000000.00",
          "eligible_gain": "5000000.00",
          "performance_fee_crystallised": "1000000.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 102000000.00.",
          "No hurdle declared: performance fee, if any, applies to the full positive period return.",
          "No prior high-water mark was supplied — this is treated as the first period and the opening NAV is the baseline nothing has yet exceeded.",
          "Closing NAV exceeds the high-water mark by 5000000.00.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "1e54f07eca9190342a3d7987912e2d6c361e533afd3ffe613b53039bcefc4612"
    },
    {
      "name": "zero-period-finite-gate",
      "description": "Zero period days and a zero fee base both resolve to a defined 0 management fee via the finite gate, never NaN.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-01-01",
        "period_start": "2026-01-01",
        "period_end": "2026-01-01",
        "period_days": 0,
        "nav": {
          "opening": "100000000",
          "closing": "100000000",
          "fee_base": "0"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.00",
          "hurdle_type": "none",
          "high_water_mark": "100000000",
          "crystallisation": "period"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-01-01",
        "period_start": "2026-01-01",
        "period_end": "2026-01-01",
        "period_days": 0,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "0.00",
        "performance_fee": {
          "hurdle_type": "none",
          "hurdle_rate": "0.0000",
          "period_return_pct": "0.0000",
          "hurdle_cleared": false,
          "hurdle_excess_amount": "0.00",
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "100000000.00",
          "hwm_exceeded": false,
          "gain_above_hwm": "0.00",
          "eligible_gain": "0.00",
          "performance_fee_crystallised": "0.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Period is zero or negative days — management fee resolves to 0 by the finite gate, not by omission.",
          "No hurdle declared: performance fee, if any, applies to the full positive period return.",
          "High-water mark carried forward from 100000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV does not exceed the high-water mark — no performance fee is chargeable regardless of the hurdle test.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "d3e8003dd03a64da7fafb9b28097c0e5e0bcbdb88c9af0bfbd172230caa59e9c"
    },
    {
      "name": "realisation-crystallisation-not-yet-triggered",
      "description": "Realisation-based crystallisation with no realisation event declared: the performance fee is accrued but not yet payable — crystallised and accrued are reported separately, never summed.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-03",
        "agreement_ref": "LPA-2025-03",
        "terms_version": "2.0",
        "as_of": "2026-06-30",
        "period_start": "2026-01-01",
        "period_end": "2026-06-30",
        "period_days": 181,
        "nav": {
          "opening": "50000000",
          "closing": "58000000",
          "fee_base": "54000000"
        },
        "management_fee": {
          "rate": "0.015",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.03",
          "hurdle_type": "hard",
          "high_water_mark": "50000000",
          "crystallisation": "realisation"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-03",
        "agreement_ref": "LPA-2025-03",
        "terms_version": "2.0",
        "as_of": "2026-06-30",
        "period_start": "2026-01-01",
        "period_end": "2026-06-30",
        "period_days": 181,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "401671.23",
        "performance_fee": {
          "hurdle_type": "hard",
          "hurdle_rate": "0.0300",
          "period_return_pct": "0.1600",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "6500000.00",
          "prior_high_water_mark": "50000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "58000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "8000000.00",
          "eligible_gain": "6500000.00",
          "performance_fee_crystallised": "0.00",
          "performance_fee_accrued": "1300000.00",
          "crystallisation": "realisation"
        },
        "recompute_only": true,
        "diff": [],
        "rationale": [
          "Management fee accrued over 181 declared days on a fee base of 54000000.00.",
          "Hard hurdle: performance fee, if any, applies only to the return in excess of the hurdle rate.",
          "High-water mark carried forward from 50000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV exceeds the high-water mark by 8000000.00.",
          "Crystallisation is realisation-based — no realisation event was declared, so the fee is accrued but not yet payable.",
          "No charged_amounts were supplied — this run is recompute-only, not a match/mismatch determination."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "d9e6f14a18a4020b56123b64a47bf4e72a0836da170fb70cebb699e8492beb73"
    },
    {
      "name": "charged-amounts-diff-found",
      "description": "charged_amounts supplied and disagrees with the recomputation on the supplied terms — a diff, reported as a finding not an allegation.",
      "policy_parameters": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "nav": {
          "opening": "100000000",
          "closing": "112000000",
          "fee_base": "106000000"
        },
        "management_fee": {
          "rate": "0.02",
          "day_count": "actual/365"
        },
        "performance_fee": {
          "rate": "0.20",
          "hurdle_rate": "0.05",
          "hurdle_type": "hard",
          "high_water_mark": "100000000",
          "crystallisation": "period"
        },
        "charged_amounts": {
          "management_fee": "2120000.00",
          "performance_fee_crystallised": "2400000.00",
          "performance_fee_accrued": "0.00"
        },
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        }
      },
      "output_payload": {
        "fund_id": "FUND-FEE-01",
        "agreement_ref": "LPA-2024-08",
        "terms_version": "1.0",
        "as_of": "2026-12-31",
        "period_start": "2026-01-01",
        "period_end": "2026-12-31",
        "period_days": 365,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "judgment_required": null,
        "management_fee_computed": "2120000.00",
        "performance_fee": {
          "hurdle_type": "hard",
          "hurdle_rate": "0.0500",
          "period_return_pct": "0.1200",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "7000000.00",
          "prior_high_water_mark": "100000000.00",
          "first_period_no_prior_hwm": false,
          "loss_carryforward": true,
          "new_high_water_mark": "112000000.00",
          "hwm_exceeded": true,
          "gain_above_hwm": "12000000.00",
          "eligible_gain": "7000000.00",
          "performance_fee_crystallised": "1400000.00",
          "performance_fee_accrued": "0.00",
          "crystallisation": "period"
        },
        "recompute_only": false,
        "diff": [
          {
            "component": "management_fee",
            "computed": "2120000.00",
            "charged": "2120000.00",
            "delta": "0.00",
            "matches": true
          },
          {
            "component": "performance_fee_crystallised",
            "computed": "1400000.00",
            "charged": "2400000.00",
            "delta": "-1000000.00",
            "matches": false
          },
          {
            "component": "performance_fee_accrued",
            "computed": "0.00",
            "charged": "0.00",
            "delta": "0.00",
            "matches": true
          }
        ],
        "rationale": [
          "Management fee accrued over 365 declared days on a fee base of 106000000.00.",
          "Hard hurdle: performance fee, if any, applies only to the return in excess of the hurdle rate.",
          "High-water mark carried forward from 100000000.00; a prior loss is NOT cleared by this period ending.",
          "Closing NAV exceeds the high-water mark by 12000000.00.",
          "Crystallisation is period-based — the full computed performance fee is payable now.",
          "One or more recomputed components disagree with the charged figures on the terms supplied — a finding, not an allegation of overcharge."
        ],
        "not_proven": [
          {
            "item": "Fee rate and term accuracy",
            "detail": "The management-fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis, and day count are every one of them caller-supplied and asserted. This kernel performs no fund-administrator or market-data lookups (zero-egress) and does not verify these terms against the underlying fund agreement."
          },
          {
            "item": "NAV accuracy",
            "detail": "The opening and closing NAV figures are caller-supplied. Recomputing the NAV itself is the scope of art-373-recompute-fund-nav, a separate node this kernel consumes rather than reimplements."
          },
          {
            "item": "Charged-amount provenance",
            "detail": "Where supplied, charged_amounts is asserted, taken as given from the fee statement being checked. This kernel does not verify that the statement itself was correctly transcribed from the manager's books."
          },
          {
            "item": "Manager overcharge / wrongdoing",
            "detail": "A diff is a finding that the recomputation disagrees with the charged figure on the supplied terms — never an allegation that the manager overcharged. Every disagreement can equally originate from a term this run had wrong."
          }
        ],
        "fence": "Fee rate, hurdle rate/type, high-water mark, crystallisation policy, accrual basis and day count are every one of them a caller input transcribed from the fund agreement — this kernel ships no rate table, no fund library, no term database (zero-egress by contract). agreement_ref + terms_version are pinned so a later side letter makes an old receipt dated, not wrong."
      },
      "golden_hash": "a56b4674bbc0a3cdd3523462c5ec651eff1a6c861bf2474697f55a2fa424e921"
    }
  ]
}
