{
  "tool_id": "art-511-recompute-fund-fees",
  "tool_version": "1.0.0",
  "display_name": "Recompute Fund Fees",
  "mcp_name": "recompute_fund_fees",
  "mandate_type": "analytics_mandate",
  "wave": 79,
  "gpu": false,
  "url": "https://ainumbers.co/chaingraph/art-511-recompute-fund-fees.html",
  "description": "Recomputes a fund's management fee and performance fee from the terms the investor already holds (the fee statement and the fund agreement) and diffs the result against what was actually charged, where supplied. Management fee accrues on a declared fee base with a declared day-count convention. Performance fee applies a declared hurdle: a HARD hurdle charges only the excess return above the hurdle, a SOFT hurdle charges the full return once the hurdle is cleared, and conflating the two is the single most common performance-fee error, so hurdle_type carries no default and its absence raises judgment_required naming the field rather than guessing. The high-water mark then gates the fee to the excess above the prior peak, and a loss carry-forward is NOT cleared by a fee period ending unless the caller explicitly declares otherwise. Crystallised (payable now) and accrued-but-uncrystallised performance fee are reported as SEPARATE figures, never summed. HARD FENCE: fee rate, hurdle rate and 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 fund-administrator or market-data lookups (zero-egress). agreement_ref and terms_version are pinned in the artifact and shown on screen, so a later side letter makes an old receipt dated, not wrong. Absent charged_amounts the run is reported recompute-only, its own state, never folded into a match. A diff against charged_amounts is a finding that the recomputation disagrees on the supplied terms, never an allegation that the manager overcharged. Distinct from art-373-recompute-fund-nav, which recomputes NAV per share and is consumed rather than reimplemented here, and from art-375-compute-fund-expense-ratios, whose expense ratio cannot detect a misapplied high-water-mark reset; this node reuses art-375's fixed-point money math pattern without editing either node's kernel. Out of scope: equalisation and series accounting, carried-interest waterfalls for closed-end funds, tax treatment, and any submittability or coverage-ratio claim.",
  "input_schema_ref": "chaingraph/art-511-recompute-fund-fees.html#manifest",
  "deadline": null,
  "deadline_note": "No statutory deadline; fund fee recomputation is a continuous fund-operations control, not a periodic filing.",
  "consumes": [],
  "feeds": [],
  "status": "live",
  "conformance_fixtures": true,
  "compute_capability": "server",
  "compute_images": [
    {
      "system": "sha256-source",
      "image_id": "sha256:02852a75e044e31ef50b68a146d4ffef30f3ed54d1299618963963301c82cf40",
      "valid_from": "2026-07-10"
    },
    {
      "system": "risc0",
      "image_id": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
      "valid_from": "2026-08-01"
    }
  ],
  "compute_proof_ready": "ready",
  "export_capability": [
    "pdf",
    "xlsx"
  ],
  "compute_proof": {
    "type": "ZkVmReceipt",
    "system": "risc0",
    "receiptFormat": "groth16-bn254",
    "imageId": "sha256:a1a0bc89b5b1febaeda3519f6dbade0fa5ac16beeb143c4e1b01689573567bc6",
    "seal": "J0CIsuHc+hs9JiLIvs8hiMswGXPg9OpMKkpHSoRmko8drANqiOTLfeeJMOm0XtFgk+avzmLSg3kdYzcgJQq48guWU6fVnyGkocL7Kxoi4esxUtfXVIRIXMukUhLBUNsvCLmqHI/A0jc4ncpKAn4TE2fQUGHdg/mOdzjgl03gNhIfubfer9LOsiHaN9Xrc6YIxPrjQSzsxTKt0Q37c7m19QMojZLyNQgeVtOohoh3owrCANbB5dNe/aKMk4by1wK7FYTTXrwEAfbxKGA+El2rEBiWly0YaM9MQQxmy84PJnwvCur1ciM1y+3TPbf8NjWD9Z/b+HahwO3J3nH1bGTepQ==",
    "journal": {
      "chaingraph_version": "0.4.0",
      "kernel_digest": "sha256:02852a75e044e31ef50b68a146d4ffef30f3ed54d1299618963963301c82cf40",
      "output": {
        "agreement_ref": "LPA-2024-08",
        "as_of": "2026-12-31",
        "diff": [],
        "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.",
        "fund_id": "FUND-FEE-01",
        "judgment_required": null,
        "management_fee_computed": "2120000.00",
        "not_proven": [
          {
            "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": "Fee rate and term 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": "NAV accuracy"
          },
          {
            "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": "Charged-amount provenance"
          },
          {
            "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.",
            "item": "Manager overcharge / wrongdoing"
          }
        ],
        "performance_fee": {
          "crystallisation": "period",
          "eligible_gain": "7000000.00",
          "first_period_no_prior_hwm": false,
          "gain_above_hwm": "12000000.00",
          "hurdle_cleared": true,
          "hurdle_excess_amount": "7000000.00",
          "hurdle_rate": "0.0500",
          "hurdle_type": "hard",
          "hwm_exceeded": true,
          "loss_carryforward": true,
          "new_high_water_mark": "112000000.00",
          "performance_fee_accrued": "0.00",
          "performance_fee_crystallised": "1400000.00",
          "period_return_pct": "0.1200",
          "prior_high_water_mark": "100000000.00"
        },
        "period_days": 365,
        "period_end": "2026-12-31",
        "period_start": "2026-01-01",
        "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."
        ],
        "recompute_only": true,
        "rounding": {
          "decimal_places": 2,
          "mode": "half_up"
        },
        "terms_version": "1.0"
      }
    }
  }
}
