Repository navigation
Let employers deduct less than the permitted state payroll premium, and apply Massachusetts' PFML cap swap from 2027 - #10285
Conversation
Add employer_state_payroll_premium_deduction_share (default 1) for the programs whose statute puts the premium on the employer and lets it deduct up to a share from wages: CO FAMLI, DE Paid Leave, ME and MA PFML, MN Paid Leave, NY PFL and DBL, the VT Child Care Contribution and WA PFML. The employee amount is the permitted share times the deduction share; the employer-side variables carry the part it does not deduct. Encode Acts 2026 c. 101 ss. 25-26 for Massachusetts from 2027-01-01, with DFML's 2027 family and medical rates, and cite CGS 31-49g(b)(1) for the Connecticut paid leave rate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…variants Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #10285 +/- ##
==========================================
Coverage 100.00% 100.00%
==========================================
Files 1 1
Lines 37 193 +156
==========================================
+ Hits 37 193 +156
Flags with carried forward coverage won't be shown. Click here to find out more. ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
Describe the deduction-share programs by the employer's choice, not by who owes the premium (NY and WA put the contribution on the worker), note that MN and NY employer costs are not modeled, state why WA PFML is in and Paid Leave Oregon is out, and note that Rev. Rul. 2025-4's treatment of an employer-paid employee share as wages is not modeled. Cap the one-worker employer's taxable total in the invariants so the employer-level path is checked for every modeled state and size, pin the 2027 Massachusetts parameter values, and add file-page anchors to the PDF references. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Hand-off to the US + core hub.
|
|
Hand-off update: #10282 was closed because #10279 already landed the same NC Special Assistance test fix on main. The branch already had main merged in at 21:44Z ( |
PR Review: Let employers deduct less than the permitted state payroll premium, and apply Massachusetts' 2027 PFML cap swapPR #10285 (author: MaxGhenis). Head SummaryThe PR adds I re-read the primary sources for all eight programs and for Connecticut. Each one matches the PR's split between the "may deduct up to" programs and the mandatory-withholding programs, and each matches its employer-pays-the-rest rule. The Acts 2026 c. 101 text and DFML's 2027 split confirm the Massachusetts values. Every formula reduces to the old one at the default share, so no existing result changes. Employee plus employer equals the required remittance at any share in all six modeled states. The code is vectorized, and the share is applied only inside the state-gated program variables. I hand-checked all 20 new YAML cases and two existing capped Massachusetts cases. All eight axiom issues are OPEN, labelled One should-fix item remains: three parameter descriptions don't follow the house template. There are three optional suggestions. Critical (must fix)None. Should address1. Three parameter descriptions don't follow the house template.
Suggestions1. Federal tax treatment of the part the employer pays (documented deferral; consider a follow-up issue).
2. Optional YAML cases for two paths that only the Hypothesis test reaches.
3. Small text fixes.
Verified correct
Axiom line assessmentValid. The line has eight
CI statusAll 29 checks pass at head
Branch status
Verdict: REQUEST_CHANGES |
DTrim99
left a comment
There was a problem hiding this comment.
The mechanism, the statutes for all eight states and the Massachusetts 2027 change all check out, the default share of 1 leaves every existing output unchanged, and all 20 new cases hand-check. One should-address item: three parameter descriptions (MA family and medical employee shares, DE employee share) don't follow the house template. Three suggestions, and a note to update the branch past #10295 before merging. Full report in the comment above.
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
Rewrite the MA family and medical and DE employee-share descriptions to the house template; cite c. 175M s. 6(c)-(d) and say beside the MA 2027-01-01 entries why the swap is dated 2027; fix the invariants test docstring's description of NY and WA, which the statute does not put on the employer; and add YAML cases for a partial share above the 2027 wage cap (MA) and for the employer-level aggregate at a partial share (CO), paths only the property test reached. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
test_donut_invariants evaluates the Delaware paid leave formulas with a hand-built person() that supplies their inputs. Since main's merge the formulas also read state_payroll_premium_deduction_share, which it didn't supply (KeyError in Contrib other-shard-1). Supply the default share of 1, under which the contributions are the ones the reform must preserve. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Ready for hub review Head: Picked up at
What the item asked forMerge current
Should address: the three descriptions (house template).
Suggestion 2: two YAML cases, hand-checked:
Suggestion 3: text fixes.
Suggestion 1 (federal pick-up): not modeled, per the item. It is listed as a follow-up below. CI failure the merge exposed, and its fixThe first run at
Tests run (one file per process)
Mutants: none. This round changes descriptions, comments and tests, plus the merge resolution, which keeps both sides' formulas verbatim. CIPull request run 41407953599 at Judgment calls
Proposed follow-up issueModel the federal wage treatment of an employer's pick-up of state PFML employee premiums (Rev. Rul. 2025-4; Notice 2026-6) Reply to DTrim99Thanks for the review. Taking each item in turn:
Generated by Claude Code |
|
Hub review in progress Head under review: Firm so far:
Mutants and the default-share comparison against main: running. Generated by Claude Code |
|
Ready for hub review Delta review of I found no P1. At the default share, outputs are bit-identical to current main. Every new expected value recomputes. All six mutants are killed. DTrim99's should-address item is resolved. There is one P2 (a stale source-conflict backlog item for the MA date, which the hand-off missed) and three P3s. FindingsP2-1. The MA 2027 date is an open source-conflict backlog item that this PR leaves stale
P3-1. The MA reference titles say "Section 6(c)-(d)", but the comment two lines above names (e)
P3-2. The body has no
|
| Item | Status at the head |
|---|---|
| Should address: three descriptions | Resolved. de/.../employee_share.yaml:1, ma/.../family_employee_share.yaml:1 and ma/.../medical_employee_share.yaml:1 each read "[State] limits ... under the [...] program" with no acronym, using his suggested wording verbatim. |
| Should address (implied): merge main for #10295 | Resolved. Merged at bc830d69c7. state_paid_leave_premiums_2027.yaml (#10295) passes 12/12 at the head. |
| Suggestion 1: federal pick-up (Rev. Rul. 2025-4; Notice 2026-6) | Left unmodeled. The reason holds, and this is a follow-up, not a defect this PR adds. At the default share nothing moves. At a share below 1, main had no way to express the case: it overstated the employee's deduction by the whole undeducted amount (CO 2026, $100k, share 0.5: main 440, the law about 220). The head gets the deduction right and omits only the federal add-back (DTrim99's figure: $16.83 of FICA, plus income tax on $220). The limitation is in the docstrings. The follow-up issue is proposed in the hand-off but not filed; the hub raises it. |
| Suggestion 2: two YAML cases | Resolved. MA 2027 $250k at share 0.5 gives 442.29 / 1,249.95 (ma_employee_paid_leave_contribution.yaml, last case). CO aggregate gives 6,600 (new employer_total_additional_state_payroll_tax.yaml). Both recompute (below), and both are mutant-tested. |
| Suggestion 3a: "Not in this PR" bullet | Resolved. The body now says #10295 is merged in. |
| Suggestion 3b: test-module docstring (NY, WA) | Resolved. test_state_payroll_premium_deduction_share_invariants.py:3-9 describes NY as "authorized but not required to collect" and WA as an employee share the employer "may deduct up to and may pay in any part". |
| Suggestion 3c: full subsection path in titles | Resolved as asked ("6(c)-(d)"). See P3-1 for (e). |
| Suggestion 3d: date comment | Resolved. One line at family_employee_share.yaml:6 and medical_employee_share.yaml:6. Its wording matches the §45 and §43(a) quotes in DTrim99's report; I couldn't fetch the act itself. |
Every should-address item is resolved, so the hub can dismiss the CHANGES_REQUESTED review (5591620322) with a note. P2-1 is new and not one of his items.
Checked and sound
-
Delaware merge.
- I diffed each DE file against both parents.
- Against main's side (
97b6d5135c), the only changes are this PR's docstring and the share:permitted * state_payroll_premium_deduction_share(de_employee_paid_leave_contribution.py:22-33) and* (1 - deducted)withdeducted = p.employee_share * share(de_employer_paid_leave_contribution.py:22-35). - Against the PR's side (
6ad174a080), the only changes are Fix Social Security secondary earnings threshold reform #10380'smin_(payroll_tax_gross_wages, social_security.cap)wage base and its two references. - Both sides are kept verbatim.
- The employer aggregate's DE branch uses
employer_total_taxable_earnings_for_social_securityboth here and on main, so Fix Social Security secondary earnings threshold reform #10380 didn't change it and the merge doesn't either.
-
Hand values, from the parameters at the head (
system.parameters). The 2027 SS cap is 192,300; MA 2027 family is 0.007 and medical 0.0018, with caps 0.4 / 1; CO 2026 is 0.0044 / 0.0044.- MA permitted = (0.4 × 0.007 + 0.0018) × 192,300 = 884.58. Employee = 0.5 × 884.58 = 442.29. Employer = 0.6 × 0.007 × 192,300 + 442.29 = 807.66 + 442.29 = 1,249.95.
- CO = 0.0044 × 1,000,000 + 0.5 × 0.0044 × 1,000,000 = 6,600.
- I computed these with exact fractions before reading the formulas.
-
Impact at the default share.
- Setup: one script run once per tree, against current main (
6145ad4513). The grid is 16 states × 5 wage levels (0 to 250k) × 6 employer sizes (5 to 100) = 480 one-person households, for 2025, 2026 and 2027. - Variables:
employee_state_payroll_tax,employer_state_payroll_tax,employer_additional_state_payroll_tax,employer_total_additional_state_payroll_tax,employer_total_state_payroll_tax,employee_payroll_tax,household_net_incomeandincome_tax. - Result: all 24 arrays are bit-identical (
np.array_equal). The diff can't move a baseline output, so no population check is needed beyond what the hub already runs.
- Setup: one script run once per tree, against current main (
-
The defect at main.
grep -rl employer_state_payroll_premium_deduction_shareon main finds nothing, so main can't express a partial deduction. A CO worker at $100k showsemployee_state_payroll_tax= 440 in 2026 whatever the employer deducts. -
Tests at the head (one file per process, thread caps at 4):
File Result state_payroll_premium_deduction_share.yaml16 passed employer_total_additional_state_payroll_tax.yaml1 passed ma_employee_paid_leave_contribution.yaml11 passed state_paid_leave_premiums_2027.yaml12 passed contrib/cbo/payroll/de_employee_paid_leave_contribution.yaml1 passed test_state_payroll_premium_deduction_share_invariants.py2 passed test_increase_taxable_earnings_for_social_security.py4 passed test_payroll_contributions.py100 passed test_input_variable_definitions.py4 passed code_health/test_source_conflicts.py103 passed -
Mutants. The hand-off lists none for this round. I ran six, each in its own process on the review checkout, restoring after each;
git statusis clean at62a9f63e69.Mutant Killed by M1: the DE employee formula drops the share (a merge that kept main's return)state_payroll_premium_deduction_share.yaml(2 cases) and the invariants test (AssertionError at :177)M2: the DE employer formula reverts to main's (1 - p.employee_share)the same YAML (2 cases) and the invariants test (:185) M3: the MA 2027 family cap is left at 1 ma_employee_paid_leave_contribution.yaml(4 cases)M4: the aggregate's CO branch drops the undeducted term employer_total_additional_state_payroll_tax.yaml(the new case)M5 (mine): the MA employer formula uses uncapped employment_incomema_employee_paid_leave_contribution.yaml(1 of 11 cases fails; 10 pass)M6: the CI fix reverted test_donut_invariants,KeyError: 'state_payroll_premium_deduction_share' -
Readers.
state_payroll_premium_deduction_shareis read by 16 state-gated program variables (CO, DE, MA, ME, VT, WA on both sides; MN and the two NY employee sides) and by the employer aggregate.employer_state_payroll_premium_deduction_shareis read by the clip variable and named in the docstrings ofemployee_state_payroll_taxandemployer_additional_state_payroll_tax.family_employee_shareandmedical_employee_shareare read by the two MA variables and the aggregate.- The DE variables are read by
de_employee_state_payroll_taxandde_employer_additional_state_payroll_tax. - No reform reads or overrides any of them. Nothing becomes reachable and worse at the default share.
-
CI. Run 41407953599 at the head passed 34/34 jobs, including Contrib other-shard-1, which failed at
7cb554e630. -
Scope and overlap.
- Nothing under
.github/ortests/policy/baseline/partners/. - Open PRs that name the changed files: Model the Minnesota Paid Leave employer premium #10294 (MN employer premium, which builds on this PR) and Zero a separate filer's whole standard deduction and exclude dependent care benefits from wages #10579. Both merge cleanly with this head (
git merge-tree). Start CO FAMLI, Paid Leave Oregon and WA Cares at their program dates, and add 2019–2024 Washington PFML premiums #10154 is closed.
- Nothing under
-
Body and hand-off claims checked: the test counts, "34 jobs passed", the file:line pointers, the 2027 rates passing 12, and that the reform doesn't redefine the DE variables. The
axiom:line is present (eightqueuedand onen/a). I didn't recheck the rulespec issues, which are outside this session's repository scope.
What I couldn't check
- Law sources. This VM's proxy blocks malegislature.gov, mass.gov, hklaw.com, govinfo.gov, ecfr.gov, uscode.house.gov, irs.gov and delcode.delaware.gov. I couldn't read M.G.L. c. 175M §6(c)–(e), Acts 2026 c. 101 §§25, 26, 43, 45 and 49, DFML's 2027 rates page, or Rev. Rul. 2025-4 and Notice 2026-6.
- So the 2027 date note at
family_employee_share.yaml:6agrees with the quotes in DTrim99's report and the earlier hub review, but I haven't confirmed it against the act. - The same goes for the 2027 MA rates (0.70% / 0.18%) and the 2027 SS base (192,300), which I took from the parameters.
- One web-search summary paraphrased Bloomberg Government as saying employers "pay 40% of the family leave contribution" and "withhold 60%". That is the reverse of DFML's split as quoted in both reviews ("Up to 40% ... can be withheld (0.28% of eligible wages)"). I couldn't open either page to settle it, and I read the summary as a paraphrase error. The hub may want to confirm against DFML before merge.
- So the 2027 date note at
- Population data. I ran no microsimulation. The household comparison above is the impact check.
- Linux CI memory for the new YAML files: not measured; CI's green run covers them.
- The author's 13 earlier mutants (
mutants.pyon the hub's machine): not rerun. The formulas they targeted are unchanged in this round except the DE merge, which M1 and M2 cover.
Generated by Claude Code
|
Picking this up for the US hub. I'll post a hand-off comment here when it's ready. Generated by Claude Code |
The backlog item still said no code implemented the 2027 date. List the four parameter files that carry it and say the code follows DFML's 2027-01-01 date while keeping 2026 on the old split, as main does. The 2026 question under s. 45 stays open, so state and follows are unchanged. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6HsvgHCDJEA9psAheP
Acts 2026 c. 101 ss. 25-26 change the figures in s. 6(c)(1)-(2), (d) and (e)(1)-(2), so the title should reach (e), where the covered business entity caps sit. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01LwQq6HsvgHCDJEA9psAheP
|
Ready for hub review Head: This round fixes P2-1 the hub's way and fixes P3-1 from the round 2 review. P3-2 (the Commits
What was asked and how I resolved it
|
| File | Result |
|---|---|
ma_employee_paid_leave_contribution.yaml |
11 passed |
employer_total_additional_state_payroll_tax.yaml |
1 passed |
state_paid_leave_premiums_2027.yaml |
12 passed |
state_payroll_premium_deduction_share.yaml |
16 passed |
contrib/cbo/payroll/de_employee_paid_leave_contribution.yaml |
1 passed |
test_input_variable_definitions.py |
4 passed |
test_payroll_contributions.py |
100 passed |
test_state_payroll_premium_deduction_share_invariants.py |
2 passed |
test_increase_taxable_earnings_for_social_security.py |
4 passed |
code_health/test_source_conflicts.py |
103 passed |
The two Python files that use hypothesis first failed to collect, because the VM's environment lacked that dev dependency. After uv pip install hypothesis they passed as listed.
Mutants
None. This round changes no formula or value: one YAML metadata title per file and the backlog item. A mutant to the backlog item's paths would fail its tracked-file check, but I didn't run one.
CI
Pull request run 41738540327 at b68dbc4c82 was still in progress 60 minutes after the push (00:21Z). 34 jobs had succeeded and none had failed. Two were still running: Contrib other-shard-1 and Contrib other-shard-3. The hub should confirm the final conclusion before landing.
Judgment calls
- The two rate files are in
code:. They carry 2027-01-01 rather than a share. The 460-versus-772 witness depends on the shares, but under the § 45 reading the 2026 rates would also have to move with them to keep the totals. So the rates are part of the dated decision. Drop them if the hub wants only the deciding lines. - The note says "cap and rate swap". It says that because the code dates both at 2027-01-01.
- No
# Source conflictmarker is added. The item isn't registered, and markers must name registered entries.
Proposed follow-up
None beyond those already raised in round 2. The hub has the federal pick-up issue.
Generated by Claude Code
…e open Add workers on each side of the employer-size thresholds in employer_total_additional_state_payroll_tax to the property test, so the per-worker and employer-level paths meet at those sizes. State both Massachusetts dates in the share-file comments and the 2026 test comment without choosing between them, add the Department of Revenue's working draft and source URLs to us-ma:pfml-cap-swap-effective-date, limit the input's documentation to what the employer-side variables carry, and cite c. 175M s. 6(c)-(e) in the Massachusetts employee variable. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the changelog's claim that the employer pays any part it does not deduct, which the New York PFL statute and the model's Minnesota and New York sides don't support, and date the Massachusetts swap without calling it the 2027 swap. Name the federal treatment's subject in the input's documentation, and limit the register item's section 43(a) reading to the guidance it directs. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
David, d9e2c8b05f answers each item:
- Should 1: the three descriptions use your wording, in
de/tax/payroll/paid_leave/employee_share.yaml,ma/tax/payroll/paid_leave/family_employee_share.yamlandmedical_employee_share.yaml. - #10295: this head includes
mainwith #10295, andstate_paid_leave_premiums_2027.yamlpasses. - Suggestion 1: the model still leaves out the federal pick-up, and the description lists it under Not in this PR with Rev. Rul. 2025-4 and Notice 2026-6.
- Suggestion 2: YAML cases now cover both examples: Massachusetts 2027 at $250,000 and a 0.5 share (442.29 and 1,249.95), and the Colorado employer aggregate at a 0.5 share (6,600).
- Suggestion 3: the description drops the stale 2027 rates bullet, and the invariants docstring describes New York and Washington as their statutes do. The Massachusetts reference titles read "Section 6(c)-(e)", and line 6 of both share files explains the date.
|
Merging at
|
Main's #10285 rewrote the documentation of employee_state_payroll_tax. The resolution keeps its text and lists Hawaii TDI with New York's contributions, which the employer is authorized but not required to collect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
HRS 392-43(a) permits the employer to withhold the contribution without requiring it, like New York's PFL and DBL. Following main's #10285, the employee amount is the 0.5% limit times state_payroll_premium_deduction_share, which defaults to 1. Hawaii joins the programs whose employer cost the model doesn't hold, in the documentation of employee_state_payroll_tax, employer_additional_state_payroll_tax and the share input, and in the share invariants test. Three YAML cases cover a share of 0.5, 0 and 1.5. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…er-averaged rates #10285 (merged 2026-11-09) added employer_state_payroll_premium_deduction_share and Massachusetts' 2027 swap of the family and medical deduction caps. This merge resolves its conflicts with the 2018-2027 histories: - The MA employee and employer rate variables read family_employee_share beside medical_employee_share at each quarter start. - The MA and VT employee contributions multiply the averaged permitted amount by state_payroll_premium_deduction_share. The employer contributions and employer_total_additional_state_payroll_tax add the undeducted part, as #10285 does at January 1. - family_employee_share starts at 1 on 2019-10-01, when contributions began: DFML's 2019-2023 rate pages let the employer withhold the whole family contribution. medical_employee_share keeps 0.4 from 2019-10-01 and takes #10285's 2027 value of 1. - The history invariants check the family share in the schedule, draw a deduction share for each worker in the differential, and widen the employer bound by the employee part the employer may cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Main's Minnesota Paid Leave premium (#10294) and its premium deduction share (#10285) touched the same employer payroll aggregates as this branch. The employer aggregates now list Minnesota's and New Jersey's components side by side, and employee_state_payroll_tax's documentation names Alaska UI among the contributions the statute puts on the worker and makes the employer withhold (AS 23.20.165(c)). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
What this changes
On
main, the documentation ofemployee_state_payroll_taxcalls its components "mandatory", but for nine programs in eight states the variable counts the largest employee share the employer may deduct. In those programs the law caps what the employer may deduct from wages and leaves the amount to the employer. This PR:employer_state_payroll_premium_deduction_share(Person input, default 1), the share of the permitted employee premium the employer deducts.state_payroll_premium_deduction_shareholds it between 0 and 1, because an employer may not deduct more than the permitted share. For each optional program the employee amount becomes the permitted amount times that share, and the employer-side variable takes the part the employer doesn't deduct. Each law makes that part the employer's, except New York's PFL statute, which says "No employer shall be required to fund any portion of the family leave benefit" (WCL §209(3)(b)). The model has no MN or NY employer cost, so there that part goes nowhere. At the default, every output stays the same.family_employee_share. The Department of Family and Medical Leave (DFML) swaps its 2027 rates at the same time (family 0.70%, medical 0.18%), so the employee share stays 0.46% and the employer share 0.42%.ct/tax/payroll/paid_leave/employee_ratecited CGS 31-49e, the definitions section. Section 31-49g(b)(1) holds the contribution and its 0.5% ceiling.employee_state_payroll_tax,employer_additional_state_payroll_tax, the employer-level aggregate and the touched program variables, to separate mandatory withholding from optional employer pass-through and cite the deduction rule.The October 2026 PolicyBench payroll audit found the gap. PolicyBench now excludes the four affected outputs, so no PolicyBench reference depends on this PR.
Programs and the rule each follows
The model's other programs stay unchanged, because each statute puts the contribution on the worker and requires withholding. They comprise CA SDI (UIC 984, 986), CT Paid Leave (CGS 31-49g(b)(1), (3)), NJ TDI, FLI, UI and workforce, Paid Leave Oregon (ORS 657B.150), the Oregon statewide transit tax, PA UC, RI TDI and WA Cares (RCW 50B.04.080).
We sort the programs by each law's deduction text. The input covers programs whose law caps a permissive deduction ("may deduct up to", "shall deduct not greater than", "is authorized to collect", "may deduct and withhold ... not more than", "the remaining portion, if any") and, apart from New York PFL, makes a deduction not taken the employer's. It leaves out programs whose law requires a fixed deduction, even where the employer may also pay the worker's contribution for them.
employer_total_additional_state_payroll_taxapplies the person's share to the employer's whole payroll, as if the employer deducts the same share from everyone. 458 CMR 2.05(5)(d) allows different shares for different groups, which a single per-person input can't express.The date of the Massachusetts swap
Acts 2026 c. 101, approved June 12, 2026, amends M.G.L. c. 175M §6. Section 25 strikes "40" in lines 22, 33 and 39 and inserts "100", and section 26 strikes "100" in lines 25, 33 and 43 and inserts "40". Each figure appears three times in §6, in (c), (d) and (e), so the caps swap for employers, small employers and covered business entities.
The sources name two years:
This PR keeps 2026 on
main's split and swaps the caps from January 1, 2027, the date in DFML's published rates.us-ma:pfml-cap-swap-effective-dateinsource_conflicts/candidates.yamlrecords as an open question whether section 45's 2026 date governs. Both dates put the swap in place by 2027, so the question touches 2026 alone. On $100,000 of 2026 wages the code gives a $460 employee contribution, and applying section 45's date to DFML's 2026 rates would give $772.Invariants
These hold for every worker, wage, employer size and share, in 2026 and 2027.
policyengine_us/tests/core/test_state_payroll_premium_deduction_share_invariants.pychecks them with Hypothesis, running three copies of each drawn worker in one vectorized simulation:employee_state_payroll_taxminus the optional components doesn't depend on the share.employer_total_additional_state_payroll_taxequalsemployer_additional_state_payroll_taxin each of those six states, at any share and employer size.The test compares amounts to float32 precision, within a cent. A second test,
test_massachusetts_2027_swaps_deduction_caps_and_rates, pins the four 2027 Massachusetts parameter values, because the six properties hold whether or not those values swap. The property test fails on each of 27 one-line mutations. They drop a share or undeducted term, remove the clip, change a 2027 Massachusetts cap or rate, uncap Massachusetts employer wages, or move one of the aggregate's size thresholds up or down by one.Cost
The property test builds 8 simulations of at most 171 people over two years. In CI run 42612794607, it took 0.95 s in Rest Python shard 3, inside a process that ran 1,029 tests in 20:30. On a shared macOS host, the file peaks at about 1.7 GB and the model import alone at about 1.1 GB.
Tests
state_payroll_premium_deduction_share.yaml(16 cases) andemployer_total_additional_state_payroll_tax.yaml(1 case), both underpolicyengine_us/tests/policy/baseline/gov/states/tax/payroll/, cover each program's employee and employer amounts at partial shares, and the employer aggregate. Comments derive the expected values from the statutory and agency rates.ma_employee_paid_leave_contribution.yamlgains five cases: 2026 on the old caps, 2027 on the new caps and rates, a 2027 small employer, a 2027 partial share, and a partial share above the 2027 wage cap.test_payroll_contributions.pypasses unchanged, which covers the default-share outputs, andtest_input_variable_definitions.pypasses with the new input.test_increase_taxable_earnings_for_social_security.pynow supplies the default share to the evaluator thattest_donut_invariantsbuilds by hand from the Delaware formulas.Not in this PR
Impact
At the default share of 1, no output changes. Every formula reduces to
main's at that share, and in 2027 Massachusetts' swapped caps and rates give each worker the employee and employer amountsmaingives. Across 480 one-person households (16 states, 5 wages, 6 employer sizes) and 2025–2027, all 23 variables we compared, includinghousehold_net_income, matchmainbit for bit.axiom: M.G.L. c. 175M s. 6 / Acts 2026 c. 101 → TheAxiomFoundation/rulespec-us#1817 queued; C.R.S. 8-13.3-507 → TheAxiomFoundation/rulespec-us#1818 queued; Minn. Stat. 268B.14 → TheAxiomFoundation/rulespec-us#1819 queued; N.Y. WCL 209 → TheAxiomFoundation/rulespec-us#1820 queued; 19 Del. C. 3705 → TheAxiomFoundation/rulespec-us#1821 queued; 26 M.R.S. 850-F → TheAxiomFoundation/rulespec-us#1822 queued; 32 V.S.A. 10553 → TheAxiomFoundation/rulespec-us#1823 queued; RCW 50A.10.030 → TheAxiomFoundation/rulespec-us#1824 queued (all blocked on corpus ingestion, TheAxiomFoundation/axiom-corpus#893); CGS 31-49g(b)(1) citation fix: n/a: reference-only change.
impact: none at the default share of 1; outputs matched
mainbit for bit across 480 one-person households, 23 variables and 2025–2027🤖 Generated with Claude Code