A calc your compliance officer will sign.
The case for ParaplanAI, in four pillars: correctness, replayability, separation of concerns, and the post-2021/22 top-slicing rule done right.
Every published HMRC worked example. Zero pence tolerance.
The HMRC PTM (pension) and IPTM (bond) manuals publish worked examples. We extract each one to a JSON corpus and run it against the engine on every commit. The tolerance is zero pence — not a rounding band, not "close enough", literal byte-for-byte equality with the HMRC-published numbers.
Stacked on top: ~280 unit tests, property-based tests over a thousand random inputs per invariant (TSR ≥ 0, tapered AA ≥ floor, carry-forward ≤ unused prior AA, the 100%-of-earnings cap, the onshore 20% credit identity, the configVersion stamp). And a deterministic cross-verification against an LLM run that flags any disagreement greater than £1.
See the corpus: docs/research/ →
Twelve months on, against the same versioned config.
Every calculation persists: the full inputs, the engine version (sourced from package.json at build time, not hard-coded), the tax-year config version, the date, the inputs in pence-integer form, the result, and every intermediate step. Twelve months later you can pull the row, feed the inputs back into the engine at the recorded version, and produce a byte-identical result.
The compliance annex PDF stamps the tool version, config version, and calculation date on the footer of every page. Audit-trail rows are append-only — the database trigger restricts UPDATE on calc_runs to status, signed_by, and signed_at. Inputs and results, once written, are immutable.
AI extracts the figures. Code calculates the tax. Never the other way around.
LLMs read the documents — P60, P11D, pension annual statements, chargeable-event certificates — and surface the figures for your review. Every extracted figure is shown on screen with its source. You approve before any calc runs.
Once approved, the figures feed into a pure-TypeScript calc engine with no network calls, no randomness, no LLM access, no hidden state. Same inputs in, same output out — every time, on any machine, in any tax year. The architectural rule is enforced by the codebase, not by intention.
This matters because LLM-generated arithmetic is not safe to put in front of a compliance officer. We never ship it.
The post-2021/22 top-slicing rule. Done right.
“Errors still exist in HMRC's tax calculations.”
AccountingWEB →·Tax Adviser Magazine: Learn to slice correctly →
HMRC Brief 12/2021 changed top-slicing relief for chargeable-event gains arising on or after 6 April 2021. The personal-savings allowance and starting-rate band must be recalculated at notional income at Step 4 of the relief computation — not carried unchanged from the main calc as Step 3.
Most software, including HMRC's own published calculator and the commercial tools written to its spec, still apply the pre-2021/22 carry-through. The result is a misstated tax liability — sometimes by tens of thousands of pounds when the gain pushes income through the PSA-zero threshold.
ParaplanAI applies the post-2021/22 rule by default. Every step of the PSA / SRB recalculation appears on the compliance annex with its IPTM 3820 citation. The codebase pins this as a load-bearing differentiator and tests it against the HMRC IPTM corpus on every commit.
- Privacy notice — what we collect, how long we keep it, who else sees it.
- Terms of service — the planning-only output, retention promises, billing.
- System status — current health of dependencies.