From cf17bbbf8d10b6e318c50c0df050a4046b84eb9c Mon Sep 17 00:00:00 2001
From: Max Ghenis
Date: Thu, 2 Jul 2026 13:36:55 +0200
Subject: [PATCH] Add the UK VAT threshold paper page
/papers/vat-threshold hosts PolicyEngine's firm-level microsimulation of
the UK VAT registration threshold: hero facts, PDF copy, and links to
the reproduction repo. The web view embeds the paper's own live render
(firm-microsim-paper.vercel.app) rather than vendoring a snapshot, so
the page tracks the source repo's main branch. Landing page links it
from the evidence section.
Co-Authored-By: Claude Fable 5
---
index.html | 2 +
papers/vat-threshold/index.html | 93 +++++++++++++++++++
papers/vat-threshold/paper-page.css | 119 +++++++++++++++++++++++++
papers/vat-threshold/vat-threshold.pdf | Bin 0 -> 2314762 bytes
4 files changed, 214 insertions(+)
create mode 100644 papers/vat-threshold/index.html
create mode 100644 papers/vat-threshold/paper-page.css
create mode 100644 papers/vat-threshold/vat-threshold.pdf
diff --git a/index.html b/index.html
index 7fd9121..5822ba9 100644
--- a/index.html
+++ b/index.html
@@ -214,6 +214,8 @@ It already matches the data it aims to replace.
Read the L0 calibration paper
·
Read the dynamics design paper
+ ·
+ Read the UK VAT threshold paper
diff --git a/papers/vat-threshold/index.html b/papers/vat-threshold/index.html
new file mode 100644
index 0000000..89e0b5d
--- /dev/null
+++ b/papers/vat-threshold/index.html
@@ -0,0 +1,93 @@
+
+
+
+
+
+ research paper
+
+ An open firm-level microsimulation of the UK VAT registration threshold
+
+
+ The paper builds an open synthetic firm population for the UK VAT
+ registration threshold, prices level, shape, and rate reforms on it, and
+ shows which near-threshold conclusions calibrated synthetic data can and
+ cannot support.
+
+
+
+
+
- anchor result
+ - On a common £184.8bn 2023–24 base: raising the threshold to £100,000 costs £753m, a graduated taper £520m, and 10%/15% reduced-rate bands £484m/£242m.
+
+
+
- method
+ - Synthetic firm records calibrated to ONS, HMRC, and OBR aggregates, with the near-threshold density pinned side-consistently to the OBR's £1,000-band data; a region-confined behavioural layer nests the static costing exactly.
+
+
+
- transparency
+ - Sub-band structure is target-inherited, provably: placebo regeneration returns zero excess mass, and an uncalibrated band edge alone lands within 10% of the administrative bunching estimate.
+
+
+
+
+
+
+
+
+
+
diff --git a/papers/vat-threshold/paper-page.css b/papers/vat-threshold/paper-page.css
new file mode 100644
index 0000000..71f9143
--- /dev/null
+++ b/papers/vat-threshold/paper-page.css
@@ -0,0 +1,119 @@
+.paper-main {
+ padding: 132px clamp(20px, 5vw, 56px) 64px;
+}
+
+.paper-hero {
+ max-width: var(--max);
+ margin: 0 auto;
+}
+
+.paper-title {
+ max-width: 12ch;
+}
+
+.paper-title sub {
+ font-size: 0.48em;
+ vertical-align: -0.18em;
+}
+
+.paper-lede {
+ max-width: 48ch;
+ color: var(--paper);
+ font-size: clamp(1.05rem, 2vw, 1.28rem);
+ line-height: 1.55;
+ margin-bottom: 34px;
+}
+
+.paper-facts {
+ display: grid;
+ gap: 0;
+ grid-template-columns: 1fr;
+ margin-top: 36px;
+ border: 1px solid var(--line);
+ border-radius: 3px;
+ overflow: hidden;
+}
+
+@media (min-width: 860px) {
+ .paper-facts {
+ grid-template-columns: repeat(3, 1fr);
+ }
+}
+
+.paper-facts div {
+ padding: 22px 20px;
+ border-bottom: 1px solid var(--line-soft);
+}
+
+@media (min-width: 860px) {
+ .paper-facts div {
+ border-bottom: 0;
+ border-right: 1px solid var(--line-soft);
+ }
+
+ .paper-facts div:last-child {
+ border-right: 0;
+ }
+}
+
+.paper-facts dt {
+ color: var(--amber);
+ font-size: 12px;
+ letter-spacing: 0.08em;
+ margin-bottom: 10px;
+ text-transform: uppercase;
+}
+
+.paper-facts dd {
+ color: var(--paper-dim);
+ font-size: 15px;
+ line-height: 1.5;
+}
+
+.paper-viewer {
+ max-width: min(1500px, calc(100vw - clamp(20px, 5vw, 56px) * 2));
+ margin: clamp(58px, 8vw, 96px) auto 0;
+ border-top: 1px solid var(--line-soft);
+ padding-top: 34px;
+}
+
+.paper-viewer-head {
+ display: flex;
+ align-items: end;
+ justify-content: space-between;
+ gap: 24px;
+ margin-bottom: 22px;
+}
+
+.paper-viewer-head h2 {
+ margin: 0;
+ max-width: none;
+ font-size: clamp(1.45rem, 2.2vw, 2rem);
+}
+
+.paper-frame {
+ width: 100%;
+ min-height: 82vh;
+ border: 1px solid var(--line);
+ border-radius: 3px;
+ background: var(--background);
+}
+
+@media (max-width: 720px) {
+ .paper-main {
+ padding-top: 104px;
+ }
+
+ .paper-viewer {
+ max-width: calc(100vw - 24px);
+ }
+
+ .paper-viewer-head {
+ align-items: start;
+ flex-direction: column;
+ }
+
+ .paper-frame {
+ min-height: 76vh;
+ }
+}
diff --git a/papers/vat-threshold/vat-threshold.pdf b/papers/vat-threshold/vat-threshold.pdf
new file mode 100644
index 0000000000000000000000000000000000000000..71fee0398ad468572f72b2d85cd7389eed186bf4
GIT binary patch
literal 2314762
zcmeFaWmuJM+bxQTq5>+SpoEGdQUcPYf`pWGhbUdbq}xP9LJ^QgknWHUQ9>jp-Ju}e
zos+rGTfust_j}jc``h0-)^W%m<|8xi`?}5;=NRLf&$*j|Li9`w?0DzC&P=Z0F|kr!
zqBPSs#N**%6f!Wj)UjX`GQMT0BdBxR?2ZnjxQ?lwr9LGy2OB3JA0EomLg$tVo^59`
zX?4nYws~J_J%Q2}Bay?G3NO^}9$}d5Ii|jHs;lF&hh