From baa2d439b6010b1c750aac795085fc6799d29515 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Tue, 23 Jun 2026 13:34:27 -0400 Subject: [PATCH] Dashboard docs: document MFJ spousal income allocation + TAXSIM caveats Add a 'Spousal income allocation' section to the Variable Mappings (input) tab explaining how the emulator splits single-column household income between spouses: 50/50 for interest/dividends/capital gains/S-corp; age-aware for pensions and Social Security (same-side -> 50/50, mixed-age -> older spouse). Documents the two known TAXSIM-alignment caveats (age-independent per-person exclusions in mixed-age couples; higher-threshold states straddling age 55). Co-Authored-By: Claude Opus 4.8 (1M context) --- changelog.d/doc-spousal-allocation.changed.md | 1 + .../src/components/DocumentationContent.jsx | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 changelog.d/doc-spousal-allocation.changed.md diff --git a/changelog.d/doc-spousal-allocation.changed.md b/changelog.d/doc-spousal-allocation.changed.md new file mode 100644 index 00000000..28a0f6b5 --- /dev/null +++ b/changelog.d/doc-spousal-allocation.changed.md @@ -0,0 +1 @@ +Document the MFJ spousal income allocation rule (50/50 for interest/dividends/capital gains/S-corp; age-aware for pensions and Social Security) and its TAXSIM-alignment caveats on the dashboard Variable Mappings (input) page. diff --git a/dashboard/src/components/DocumentationContent.jsx b/dashboard/src/components/DocumentationContent.jsx index 13261f42..41f942f2 100644 --- a/dashboard/src/components/DocumentationContent.jsx +++ b/dashboard/src/components/DocumentationContent.jsx @@ -943,6 +943,52 @@ policyengine-taxsim policyengine input.csv --disable-salt --assume-w2-wages --lo * Adjusted to match TAXSIM methodology: perturbs employment income (wages) only, splits perturbation proportionally between spouses, and uses a $100 delta for numerical stability with PolicyEngine's float32 internals.

)} + + {activeTab === 'input' && ( +
+

+ Spousal income allocation (married filing jointly) +

+

+ TAXSIM provides several income types as a single household total with no + per-spouse split. For joint filers, the emulator allocates them between + spouses before PolicyEngine computes per-person state provisions: +

+
    +
  • + Interest, dividends, capital gains, S-corp income → + always split 50/50. +
  • +
  • + Pensions & Social Security → age-aware: + when both spouses are on the same side of the + elderly-eligibility line (both qualify, or both do not) → + 50/50; in mixed-age couples the whole + amount goes to the older spouse, so age-based state + exclusions (CO 55, DE 60, GA 62, MD 65) reach the + qualifying filer. +
  • +
+
+ Known alignment caveats. The + pension/Social Security split uses a single age-55 threshold, while TAXSIM + keys off each state's actual exclusion structure. Two cases can + therefore differ from the NBER binary: +
    +
  • + Age-independent per-person exclusions (e.g. KY $31,110, + OK $10,000) in mixed-age couples — TAXSIM effectively splits + 50/50, while the convention assigns the income to the older spouse. +
  • +
  • + Higher-threshold states (DE/GA/MD) where both spouses are + 55+ but straddle the state's line — the convention splits 50/50, + while TAXSIM assigns it to the older spouse. +
  • +
+
+
+ )} } )}