Repository navigation
Conversation
|
Cross-repo note for the hub, from the session behind #10067. No change requested on this PR. A producer for the pre-tax input is coming. PolicyEngine/microcosm#1189 as opened wrote the reported premium (
So this PR is a prerequisite for that data. The "no One point for the audit, relayed from that session. On Microcosm's PUF-support rows the non-pre-tax premium is not #10067 adds federal Schedule A tests under this contract: eight YAML cases in |
The first independent review asked for changes on five points; each held up against sources. Anchor and universe. BEA NIPA 7.8 line 17 is not an active-worker series: BEA's State Personal Income methodology (December 2025, paragraphs 3.18 and 3.19) says it covers active and retired employees, as CMS NHE Table 24 does. The stage now prices every current policyholder, scales that universe to NHE Table 24 (the anchor #454 chose), and writes the column for employed policyholders only. Retiree and COBRA dollars are priced and left out, not loaded onto workers. BEA and MEPS-IC's own private-sector enrollment total are recorded beside the anchor verdict. Payment status. "Employer pays some" subtracts the contribution of an employee who pays one: MEPS-IC's average contribution divided by one minus the published share of enrollees with no contribution (Tables II.C/D/E.4.a). A cohort with MEPS-IC's own mix reproduces the published cell mean. Gates. Both gates fail when a raw ASEC coverage column is missing. The anchor gate recomputes the anchor-universe total at release weights and bands the employed share. The evidence file carries the base and export signal verdicts, so a waived failure stays on the record. An ACS local build refuses a frame whose input is null on some rows instead of default-filling it. The output family is registered at the raw-stage operator boundary. Pre-tax premium. Removed from this change. PolicyEngine-US treats the premium inputs as disjoint (PolicyEngine/policyengine-us#10046), so a producer must move those dollars out of the reported premium on an engine that includes that change. The earlier derivation is kept on branch esi-pre-tax-premiums-454. The stage now has one output and no seeded draw; the seed-protocol registration is reverted. Measured on the default pinned pool, target year 2024, before calibration: $925.7B over 74.0M employed policyholders with a positive premium, mean $12,515. Receipts regenerated for both pools. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The premium inputs previously left pretax payroll treatment ambiguous. Under the hub's settled disjoint-input contract, a caller supplying $3,000 of non-pretax premiums and $2,000 of pretax payroll premiums paid $5,000 in total. Several benefit consumers counted only the $3,000; this PR counts $5,000 where the program's definition includes both payment methods.
The PR documents the employee premium leaves and the separate employer-paid leaf. It adds pretax payments locally in SPM MOOP, SNAP, HUD, Missouri child care, Pennsylvania child care, Orange County General Relief and New Jersey medical deductions. SSI now excludes qualified cafeteria-plan salary-reduction premiums from wages, without excluding retirement deferrals or reducing self-employment income. North Dakota renter-refund income excludes pretax payments once as excluded income while continuing to deduct non-pretax medical expenses. The CRFB reform is unchanged here; its premium-base change is split into a separate draft PR for Max's methodology decision.
Input contract and invariants
pre_tax_health_insurance_premiumscontains employee premiums paid through pretax payroll deductions. It remains a leaf with no formula.health_insurance_premiums,health_insurance_premiums_without_medicare_part_b,other_health_insurance_premiums, reported Medicare Part B and long-term care premium inputs exclude those payroll payments. Applicable non-pretax aggregates and decomposed inputs are alternative representations; their overlapping components must not be added together.employer_sponsored_insurance_premiumsand do not enter employee medical expenses.mi_household_resources; therefore total Michigan resources need not remain fixed when benefits are allowed to respond. North Dakota income remains unchanged through its distinct income-exclusion and medical-expense routes.The shared
medical_expense_health_insurance_premiumsformula remains non-pretax. Consumers that count both sets add the separate leaf locally; consumers that exclude pretax keep the shared aggregate alone. Its documentation now makes that choice explicit.Consumer audit
Round 1 audited main at
fe0c3a651cf27a9974074dbbfd5bcac5684c85f2; round 2 uses fetched main05907577140ce06f38b45777a05f479181161164using variable and parameter references, including downstream medical-expense consumers. “Correct” describes this premium contract, not complete coverage of every provision in the program. Derived taxes/benefits inherit the treatment of the listed wage, premium, and expense consumers.pre_tax_contributions; FICA wages,fica_pre_tax_contributionshub-schedA-se-premiums-1010PRFor Minnesota, 256D.35 subd. 10 directly defines MSA gross income before deductions/disregards. Rule 9500.1206 primarily governs General Assistance under 9500.1200; Combined Manual 0017 adopts GA gross-income conventions for non-SSI MSA recipients and substitutes the full federal benefit rate for SSI recipients. The gross test therefore restores the employee salary reduction, while 256D.435 preserves SSI exclusions for net eligibility/payment.
Open reading, Minnesota MSA gross income (decision d1314). The sources do not expressly say how Minnesota classifies an employee's pre-tax cafeteria-plan premium for the gross-income test.
mainfor the person's own gross income). Gross income is measured before deductions and disregards (256D.35 subd. 10).Medically needy eligibility currently models ABD applicants using SSI countable income. This PR retains the non-pretax-only medical expense aggregate to avoid a blanket second deduction after correcting SSI wages. Kansas explicitly prohibits that repetition. Utah allows employee payroll premiums, paired with gross-income payroll rules. The audit does not establish a universal federal exclusion of pretax premiums as expenses. State-specific sequencing remains a limitation of the existing annual proxy; IRS employer-provided tax classification alone does not establish third-party payment for Medicaid.
The audit also noted pre-existing limits unrelated to this contract: Montana's premium/floor treatment, Washington's unmodeled Medigap component, New Mexico's federal-itemization adjustment, and Alabama's separate small-business insurance deduction. They are reported here without expanding this patch.
Round 2
Removed the CRFB parameter/test changes from this PR in an additive revert commit and opened #10066 from current main. That draft separates the definite after-tax double count from the choice to restore qualified employee salary reductions. Added 16 integration cases: two MSP, two student, one child allocation, SSI spouse/parent deeming, optional Medicaid spouse/parent deeming, two Connecticut SSP, and five Minnesota MSA. Parental fixtures assign singleton marital units to unmarried people and assert zero spousal deeming. The Hypothesis property now includes one-person and two-person married units in every state/example and freezes SSI payments for the Michigan spending invariant. MSA gross eligibility and guardian fees now restore the capped wage exclusion; net eligibility/payment retain it. Medicaid spenddown sequencing remains limited as described above.
Validation
Round-2 runtime results at
c7d270970e(one file per process): the revised property file and seven YAML files passed: both optional-Medicaid deeming files,msp_countable_income, SSI deeming from an ineligible parent and from an ineligible spouse,ssi_ineligible_child_allocation, andssi_blind_or_disabled_working_student_exclusion(10 passed; it had 2 failures before the last commit supplied the SSI disability criteria in its fixtures). The local run stopped there when the build reached its time limit; the other nine files in the round's list were not re-run locally at this head. The PR is a draft, so CI has not run at this head.The round-1 run passed 81 YAML cases across 12 files (38 added and 43 preserved) before the CRFB split, plus the original one-person property. The revised property retains eight generated examples and two explicit examples. Every changed YAML file is run directly, foreground, one at a time. The Python property exercises generated premium transfers rather than duplicating the policy formulas; explicit examples cover zero, complete transfer, and no transfer. Frozen eligibility/program premiums isolate payment treatment from legitimate MAGI-induced coverage changes. The Kansas spenddown case starts from raw wages of $27,020, age 65 and $4,000 of pretax premiums, and verifies SSI earnings of $23,020 and countable income of $11,000. It explicitly disables the separate SSI-recipient Medicaid pathway, so its eligibility assertion detects an erroneous second premium deduction.
No partner files are edited. Read-only inventory found 144 partner YAML files, no pretax or employer-paid inputs, and only zero direct-premium inputs. No relevant partner output movement is expected from those facts; partner scenarios are not rewritten to make the model pass.
The property belongs to the existing Rest/core CI subgroup; no jobs or concurrency are added. Baseline successful main Rest/core at the same main commit ran 830 tests with external elapsed 681.09 seconds and peak RSS 6,756,660 KiB (6.44 GiB). The new file did not exist on main, so its standalone baseline file cost is zero. The round-1 property's standalone run took 901.06 seconds including process/model startup and peaked at 3,317,071,872 bytes (3.09 GiB RSS) on the contended local macOS machine, with one math-library thread. Pytest reported 720.09 seconds. These local measurements are not an estimate of incremental Linux subgroup cost; updated Linux group time/memory remains for hub/CI validation.
Changelog:
changelog.d/hub-premium-input-contract-1010.fixed.md.axiom: needed
Maintainer Axiom follow-up is required. The signed encoder is not available in this workspace; no billed encoder run was requested or performed. The primary provisions and companion tests are listed above.
Coordination with #10055
#10055 (
hub-schedA-se-premiums-1010,1951078ce369e863fdaa37c3d79067e396231623) lands first. It is not merged into this branch. Both PRs modify these four paths:policyengine_us/variables/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.pypolicyengine_us/tests/policy/baseline/gov/states/nj/tax/income/deductions/nj_medical_expense_deduction.yamlpolicyengine_us/variables/gov/states/nd/tax/property/renters_refund/nd_renters_refund_income.pypolicyengine_us/tests/policy/baseline/gov/states/nd/tax/property/renters_refund/nd_renters_refund_income.yamlWhen sequencing the merge, preserve both NJ adjustments (
itemized_medical_expenses - excluded_dependent_premiums + pretax premiums) and both ND adjustments (gross income minus pretax premiums minus #10055's paid-cost medical base). Keep both sets of cases/references, then rerun those YAML files and both properties against the combined tree.Hub microsimulation impact
No microsimulation run locally; hub refresh pending. Rechecked
DEFAULT_DATASETat main and the cached schema of the certifiedpopulace-us-2024-spm-20260909build, revision9a814a3b3b53c0ecd6e1737b6ec862c31300ef6f: nopre_tax_health_insurance_premiumscolumn, and the variable has no formula. Therefore the baseline pretax additions/exclusion are zero on the pinned dataset. The split CRFB draft changes its premium addback sources and can change reform aggregates even without a pretax column; its impact must be checked in that separate PR. The cached schema has no employer-paid premium column either.