Repository navigation
Conversation
Maryland's Family and Medical Leave Insurance contributions begin January 1, 2027. Maryland Labor set the total rate at 0.9% of wages up to the Social Security wage base for 2027. Employees pay half (Lab. & Empl. s. 8.3-601(e)), and employers of 15 or more employees pay the other half. The contributions enter employee_state_payroll_tax and the employer-side state payroll tax totals, so the employee side lowers household net income through employee_payroll_tax, as the other state paid-leave programs do. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Maryland's wage definition can be read to exclude a deferral paid to a qualified trust, while COMAR 09.32.01.14A(2)(a) leaves out only deferred compensation not deducted from salary, and Maryland Labor's employer guide calls elective 401(k) deferrals taxable. The model follows the regulation and the guide. The reading goes into source_conflicts/candidates.yaml with short excerpts and YAML cases that pin it. The new invariant tests check what holds for every input: the wage base, the employee and employer split, bounds, monotonicity, geography, the flow into payroll tax and net income, and agreement between the worker-level and employer-level paths. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 6, 2026
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What and why
PolicyEngine US had no Maryland Family and Medical Leave Insurance (FAMLI) contributions. This PR adds them: parameters, variables, tests, and the same wiring into payroll tax and household net income that Colorado FAMLI, Maine and Delaware paid leave use.
What the sources say
An audit on 2026-11-05 gave three leads: a January 1, 2027 start, withholding of up to half, and a 0.9% rate. Each value below comes from the statute, the regulations and Maryland Labor's current guidance. The start and the rate hold. "Up to half" matches the regulation, but the statute sets the default more firmly: the employer shall deduct the employee's 50% unless it elects to pay some or all of it.
payroll_tax_gross_wages, with 401(k) deferrals in and cafeteria plan and dependent care amounts outWorked example: $50,000 of wages in 2027 gives $225 from the employee and $225 from an employer of 15 or more. Wages at or above $192,300 give $865.35 each. Every parameter cites its sources in its metadata.
How it reaches net income
md_employee_famli_contribution→md_employee_state_payroll_tax→employee_state_payroll_tax→employee_payroll_tax→household_tax_before_refundable_credits→household_net_income, and alsospm_unit_payroll_tax.md_employer_famli_contribution→md_employer_additional_state_payroll_tax→employer_additional_state_payroll_tax→employer_state_payroll_tax→employer_payroll_tax. It stays out of net income, as the other states' employer shares do.employer_total_additional_state_payroll_taxgets the same branch for employer-level inputs.Invariants
policyengine_us/tests/core/test_md_famli_invariants.pychecks these over drawn inputs:Source-conflict candidate
us-md:famli-wages-401k-deferrals. Section 8-101(aa)(3)(iv)1 leaves out a payment to a § 401(a) trust made on an employee's behalf, without separating employer contributions from salary reductions. COMAR 09.32.01.14A(2)(a) leaves out only deferred compensation not deducted from salary, and Maryland Labor's employer guide calls elective 401(k) deferrals taxable. The model follows the regulation and the guide. With $60,000 of salary and a $4,000 deferral, the employee owes $270; taking the deferral out would give $252.This PR takes step 1 of the process: the candidate item, short captures under
source_conflicts/sources/us-md/, and YAML cases that pin the reading. Case 14 ofmd_famli_taxable_wages.yamland case 11 ofmd_employee_famli_contribution.yamlhold them. It adds no marker, because the rulespec-us entry and the marker follow the merge.Overlap with #10285
#10285 adds
state_payroll_premium_deduction_shareand edits the same three aggregator files pluscandidates.yaml. Whichever lands second needs to reconcile Maryland. Maryland should take the share input, with any undeducted part going to the employer at any size, because § 8.3-601(e)(2)(ii) lets an employer deduct less and COMAR 09.42.02.07 treats a missed deduction as an election to pay. Default results stay the same either way.Limitations
employer_headcountholds one annual whole number. Maryland counts employees quarterly until an employer has four quarters of reports, then uses the prior year's average, and it counts employees outside Maryland too.state_and_local_sales_or_income_taxreads state and local income tax, so these contributions don't reach the federal itemized deduction, and neither does any other state's paid-leave contribution. This PR takes no position on their deductibility.Test plan
policyengine_us/tests/policy/baseline/gov/states/md/tax/payroll/famli/. All pass.policyengine_us/tests/core/test_md_famli_invariants.py(4 tests). A throwaway script injected 14 deliberate bugs (rate, share, threshold, cap, 401(k) deferrals, cafeteria amounts, size gates, dropped aggregator entries, the employer-level base). The checks caught all 14, and the control run passed before and after.test_source_conflicts.pypasses.ruff formatandruff checkon the changed Python.changelog.d/.Why Python: YAML pins values at chosen points, but a YAML case can't compare one person's output with another's. These tests compare twins that differ in one fact, and the worker-level path with the employer-level path. The expected values come from the statute and the 0.9% rate, not from the parameters.
Cost (local macOS run under heavy host load, not Linux CI): the test bodies take 12.1 s, of which the whole-model run takes 8.3 s. Peak memory for the file reaches 1.47 GB, against 1.01 GB for model import and collection alone, so the tests add about 0.46 GB while they run. The file joins CI's existing
coregroup, which the Makefile records at 13.3 GB and 11:51 in CI run 38141803955. This PR adds no jobs or matrix entries. CI's own timing for the group will show the effect there; no extra runs went to measuring it.axiom: TheAxiomFoundation/rulespec-us#2050 queued (Md. Code, Lab. & Empl. § 8.3-601, proposed corpus citation us-md/statute/gle/8.3-601). Missing corpus text blocks the signed encoder; axiom-corpus#893 requests it.
🤖 Generated with Claude Code