ParaplanAI

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.