A '40 Act interval-fund capital engine: unitized LP accounts, NAV strikes on illiquid marks, quarterly redemption windows with fund-level gates, exact pro-rata cutbacks, and an early-exit fee that accrues to the fund. Functional core / imperative shell, Decimal money, append-only double-entry ledger.
- Gate exactness. Oversubscribed windows honor exactly gate_pct of fund units. Largest-remainder allocation, with cap-surplus redistribution when a request's holdings clamp binds, so the gate fills to the smallest unit.
- Stale marks are a first-class branch. A mark older than max_mark_age at strike either rejects the strike (default) or is carried forward and flagged in the window result. The stale-mark-in-window failure mode is tested, not accidental.
- Penny reconciliation. proceeds + fee == honored_units x NAV/unit exactly, per request; postings balance to zero; redemption_payable clears to zero.
- Early-exit fee (e.g. 2% within year one) is an anti-dilution levy: it posts to fund fee_income, not the manager.
- Recalculation graph. marks -> position values -> NAV -> NAV/unit -> proceeds as a dependency graph with dirty-node incremental recompute; incremental == full recompute with strictly fewer evaluations (tested).
- Waterfalls. SPV carry with recycling (no carry underwater), and a European whole-fund waterfall (ROC -> pref -> 100% GP catch-up -> split) whose tranches sum exactly to distributions.
pytest — Hypothesis properties: conservation via trial balance, gate
exactness, pro-rata bounds, penny reconciliation, NAV identity after windows,
fee boundary at exactly the horizon, stale-mark policy, incremental-recalc
equivalence, waterfall sums.
Subscription document workflow, wire matching, KYC, taxes, multi-class units.