From b3d25e438f50ca4cf1d3b3e32a29968aa9b2cf45 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 4 Nov 2025 15:02:10 -0500 Subject: [PATCH 1/8] Fix New Jersey gross income computation. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit NJ gross income now correctly builds from statutory income categories per NJ Statute 54A:5-1, rather than starting from federal AGI. This ensures NJ taxable income properly includes amounts deducted as federal above-the-line deductions (IRA contributions, student loan interest, etc.). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- changelog_entry.yaml | 4 +++ .../nj/tax/income/taxable_income/nj_agi.yaml | 15 ++++----- .../adjusted_gross_income/nj_total_income.py | 32 ++++++++++++++++--- 3 files changed, 38 insertions(+), 13 deletions(-) diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..1225be37d4c 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: patch + changes: + fixed: + - Fix New Jersey gross income computation. diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml index 1dc83930e41..2b283aa020b 100644 --- a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml +++ b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/taxable_income/nj_agi.yaml @@ -1,22 +1,21 @@ - name: 1 Test basic formula period: 2021 input: - adjusted_gross_income_person: [10_000] - nj_additions: [1_000] - nj_agi_subtractions: [2_000] + employment_income: [10_000] state_code: NJ output: - nj_agi: 9_000 + nj_total_income: 10_000 + nj_agi: 10_000 - name: 2 Test that NJ AGI cannot be negative period: 2021 input: - adjusted_gross_income: 10_000 - nj_additions: 1_000 - nj_agi_subtractions: 20_000 + employment_income: [5_000] + taxable_interest_income: [5_000] state_code: NJ output: - nj_agi: 0 + nj_total_income: 10_000 + nj_agi: 10_000 - name: 3 NJ taxpayer with taxable pension income absolute_error_margin: 0 diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py index b679fae9de7..4b2cec5067f 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py @@ -6,12 +6,34 @@ class nj_total_income(Variable): entity = Person label = "New Jersey total income by person" unit = USD + documentation = "Total income calculated from specific income categories per NJ statute, before exclusions. This is built from gross income sources, not federal AGI." definition_period = YEAR - reference = "https://law.justia.com/codes/new-jersey/2022/title-54/section-54-8a-36/" + reference = ( + "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/", + "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 15-27 + ) defined_for = StateCode.NJ def formula(person, period, parameters): - agi = person("adjusted_gross_income_person", period) - nj_additions = person("nj_additions", period) - nj_subtractions = person("nj_agi_subtractions", period) - return max_(0, agi + nj_additions - nj_subtractions) + # Build NJ total income from specific income categories per NJ statute 54A:5-1 + # This corresponds to lines 15-27 on Form NJ-1040 + return add( + person, + period, + [ + "employment_income", # Line 15: Wages, salaries, tips (Category a) + "taxable_interest_income", # Line 16a: Interest (Category e) + "dividend_income", # Line 17: Dividends (Category f) + "self_employment_income", # Line 18: Net business profits (Category b) + "farm_income", # Line 18: Farm income (Category b) + "long_term_capital_gains", # Line 19: Long-term capital gains (Category c) + "short_term_capital_gains", # Line 19: Short-term capital gains (Category c) + "taxable_pension_income", # Line 20a: Pensions (Category j) + "taxable_ira_distributions", # Line 20a: IRA distributions (Category j) + "partnership_s_corp_income", # Lines 21-22: Partnership & S-corp (Categories k, p) + "rental_income", # Line 23: Rents, royalties (Category d) + "gambling_winnings", # Line 24: Gambling (Category g) + "alimony_income", # Line 25: Alimony received (Category n) + "miscellaneous_income", # Line 26: Other income + ], + ) From d91fef41dd0027a1315dd6be60855d3b7d1bcfcc Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Mon, 10 Nov 2025 10:54:29 -0500 Subject: [PATCH 2/8] fixes --- .../gov/states/nj/tax/income/additions.yaml | 11 ++++++ .../nj/tax/income/gross_income_sources.yaml | 25 ++++++++++++++ .../adjusted_gross_income/nj_additions.py | 18 ++++++++-- .../adjusted_gross_income/nj_gross_income.py | 21 ++++++++++++ .../adjusted_gross_income/nj_total_income.py | 34 +++++-------------- 5 files changed, 81 insertions(+), 28 deletions(-) create mode 100644 policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml create mode 100644 policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml create mode 100644 policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml new file mode 100644 index 00000000000..cb01dc276da --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml @@ -0,0 +1,11 @@ +description: Additions to New Jersey gross income per NJ Statute 54A:5-1. These are amounts added back to gross income that may have been excluded or deducted for federal purposes. +metadata: + unit: list + label: New Jersey additions to gross income + reference: + - title: NJ Statute 54A:5-1 - Additions to gross income + href: https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/ + - title: NJ-1040 Tax Form, Lines 28-38 + href: https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf +values: + 2021-01-01: [] # Currently no additions implemented; update as needed diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml new file mode 100644 index 00000000000..f2632316083 --- /dev/null +++ b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml @@ -0,0 +1,25 @@ +description: Income sources that comprise New Jersey gross income per NJ Statute 54A:5-1. +metadata: + unit: list + label: New Jersey gross income sources + reference: + - title: NJ Statute 54A:5-1 - Gross income defined + href: https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/ + - title: NJ-1040 Tax Form + href: https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf +values: + 2021-01-01: + - employment_income # Line 15: Wages, salaries, tips (Category a) + - taxable_interest_income # Line 16a: Interest (Category e) + - dividend_income # Line 17: Dividends (Category f) + - self_employment_income # Line 18: Net business profits (Category b) + - farm_income # Line 18: Farm income (Category b) + - long_term_capital_gains # Line 19: Long-term capital gains (Category c) + - short_term_capital_gains # Line 19: Short-term capital gains (Category c) + - taxable_pension_income # Line 20a: Pensions (Category j) + - taxable_ira_distributions # Line 20a: IRA distributions (Category j) + - partnership_s_corp_income # Lines 21-22: Partnership & S-corp (Categories k, p) + - rental_income # Line 23: Rents, royalties (Category d) + - gambling_winnings # Line 24: Gambling (Category g) + - alimony_income # Line 25: Alimony received (Category n) + - miscellaneous_income # Line 26: Other income diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py index 9ea657e413f..5117a89a14d 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py @@ -4,9 +4,21 @@ class nj_additions(Variable): value_type = float entity = Person - label = "New Jersey additions to federal AGI by person" + label = "New Jersey additions to gross income" unit = USD - documentation = "Additions to federal AGI to get NJ total income." + documentation = "Additions to New Jersey gross income per NJ Statute 54A:5-1. These are amounts added back to gross income that may have been excluded or deducted for federal purposes." definition_period = YEAR - reference = "https://law.justia.com/codes/new-jersey/2022/title-54/section-54-8a-36/" + reference = ( + "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/", + "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 28-38 + ) defined_for = StateCode.NJ + + def formula(person, period, parameters): + p = parameters(period).gov.states.nj.tax.income + # Handle empty additions list + if len(p.additions) == 0: + return 0 + total_additions = add(person, period, p.additions) + # Prevent negative additions from acting as subtractions + return max_(0, total_additions) diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py new file mode 100644 index 00000000000..102add1c590 --- /dev/null +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py @@ -0,0 +1,21 @@ +from policyengine_us.model_api import * + + +class nj_gross_income(Variable): + value_type = float + entity = Person + label = "New Jersey gross income" + unit = USD + documentation = "Gross income calculated from specific income categories per NJ statute, before additions and subtractions. This is built from gross income sources, not federal AGI." + definition_period = YEAR + reference = ( + "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/", + "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 15-27 + ) + defined_for = StateCode.NJ + + def formula(person, period, parameters): + # Build NJ gross income from specific income categories per NJ statute 54A:5-1 + # This corresponds to lines 15-27 on Form NJ-1040 + p = parameters(period).gov.states.nj.tax.income + return add(person, period, p.gross_income_sources) diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py index 4b2cec5067f..8361b8bdbbb 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_total_income.py @@ -4,36 +4,20 @@ class nj_total_income(Variable): value_type = float entity = Person - label = "New Jersey total income by person" + label = "New Jersey total income" unit = USD - documentation = "Total income calculated from specific income categories per NJ statute, before exclusions. This is built from gross income sources, not federal AGI." + documentation = "New Jersey total income calculated as gross income plus additions minus subtractions per NJ Statute 54A:5-1. This is the income base before exclusions." definition_period = YEAR reference = ( "https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/", - "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", # Lines 15-27 + "https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf", ) defined_for = StateCode.NJ def formula(person, period, parameters): - # Build NJ total income from specific income categories per NJ statute 54A:5-1 - # This corresponds to lines 15-27 on Form NJ-1040 - return add( - person, - period, - [ - "employment_income", # Line 15: Wages, salaries, tips (Category a) - "taxable_interest_income", # Line 16a: Interest (Category e) - "dividend_income", # Line 17: Dividends (Category f) - "self_employment_income", # Line 18: Net business profits (Category b) - "farm_income", # Line 18: Farm income (Category b) - "long_term_capital_gains", # Line 19: Long-term capital gains (Category c) - "short_term_capital_gains", # Line 19: Short-term capital gains (Category c) - "taxable_pension_income", # Line 20a: Pensions (Category j) - "taxable_ira_distributions", # Line 20a: IRA distributions (Category j) - "partnership_s_corp_income", # Lines 21-22: Partnership & S-corp (Categories k, p) - "rental_income", # Line 23: Rents, royalties (Category d) - "gambling_winnings", # Line 24: Gambling (Category g) - "alimony_income", # Line 25: Alimony received (Category n) - "miscellaneous_income", # Line 26: Other income - ], - ) + # NJ Total Income = Gross Income + Additions - Subtractions + # Per NJ Statute 54A:5-1 and Form NJ-1040 + gross_income = person("nj_gross_income", period) + additions = person("nj_additions", period) + subtractions = person("nj_agi_subtractions", period) + return max_(0, gross_income + additions - subtractions) From 2d31defb0fc757c408881b6c81e54a019da1cf55 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 12 Nov 2025 10:06:18 -0500 Subject: [PATCH 3/8] Apply suggestions from code review Co-authored-by: Pavel Makarchuk <110687043+PavelMakarchuk@users.noreply.github.com> --- .../nj/tax/income/adjusted_gross_income/nj_additions.py | 9 +-------- .../tax/income/adjusted_gross_income/nj_gross_income.py | 7 ++----- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py index 5117a89a14d..22a413533b7 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_additions.py @@ -14,11 +14,4 @@ class nj_additions(Variable): ) defined_for = StateCode.NJ - def formula(person, period, parameters): - p = parameters(period).gov.states.nj.tax.income - # Handle empty additions list - if len(p.additions) == 0: - return 0 - total_additions = add(person, period, p.additions) - # Prevent negative additions from acting as subtractions - return max_(0, total_additions) + adds = "gov.states.nj.tax.income.additions" diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py index 102add1c590..c6a7809caa2 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py @@ -14,8 +14,5 @@ class nj_gross_income(Variable): ) defined_for = StateCode.NJ - def formula(person, period, parameters): - # Build NJ gross income from specific income categories per NJ statute 54A:5-1 - # This corresponds to lines 15-27 on Form NJ-1040 - p = parameters(period).gov.states.nj.tax.income - return add(person, period, p.gross_income_sources) + adds = "gov.states.nj.tax.income.gross_income_sources" + From 23b368b331fc72b47ffb03018d41f15c44b7cb42 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 12 Nov 2025 10:10:19 -0500 Subject: [PATCH 4/8] Apply PR review feedback to NJ parameter files MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove specific statute references from descriptions - Add period metadata to both parameter files 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../parameters/gov/states/nj/tax/income/additions.yaml | 3 ++- .../gov/states/nj/tax/income/gross_income_sources.yaml | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml index cb01dc276da..8c47f05b713 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml @@ -1,6 +1,7 @@ -description: Additions to New Jersey gross income per NJ Statute 54A:5-1. These are amounts added back to gross income that may have been excluded or deducted for federal purposes. +description: New Jersey additions to gross income. These are amounts added back to gross income that may have been excluded or deducted for federal purposes. metadata: unit: list + period: year label: New Jersey additions to gross income reference: - title: NJ Statute 54A:5-1 - Additions to gross income diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml index f2632316083..760835b8c07 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml @@ -1,6 +1,7 @@ -description: Income sources that comprise New Jersey gross income per NJ Statute 54A:5-1. +description: New Jersey income sources that comprise gross income. metadata: unit: list + period: year label: New Jersey gross income sources reference: - title: NJ Statute 54A:5-1 - Gross income defined From 5d65a7549a2faa3d08fd80f6e5f4ab5d9197cc79 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 12 Nov 2025 10:56:44 -0500 Subject: [PATCH 5/8] lint --- .../nj/tax/income/adjusted_gross_income/nj_gross_income.py | 1 - 1 file changed, 1 deletion(-) diff --git a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py index c6a7809caa2..66bba8dc866 100644 --- a/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py +++ b/policyengine_us/variables/gov/states/nj/tax/income/adjusted_gross_income/nj_gross_income.py @@ -15,4 +15,3 @@ class nj_gross_income(Variable): defined_for = StateCode.NJ adds = "gov.states.nj.tax.income.gross_income_sources" - From 5c4244b54afc16c25087f7bf85850b991f75005a Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 2 Dec 2025 09:44:30 -0500 Subject: [PATCH 6/8] Apply suggestions from code review Co-authored-by: Pavel Makarchuk <110687043+PavelMakarchuk@users.noreply.github.com> --- .../parameters/gov/states/nj/tax/income/additions.yaml | 4 ++-- .../gov/states/nj/tax/income/gross_income_sources.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml index 8c47f05b713..f0c8adeb2d6 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/additions.yaml @@ -1,8 +1,8 @@ -description: New Jersey additions to gross income. These are amounts added back to gross income that may have been excluded or deducted for federal purposes. +description: New Jersey counts these sources as additions to gross income. metadata: unit: list period: year - label: New Jersey additions to gross income + label: New Jersey gross income additions reference: - title: NJ Statute 54A:5-1 - Additions to gross income href: https://law.justia.com/codes/new-jersey/title-54a/section-54a-5-1/ diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml index 760835b8c07..aec386c3c21 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml @@ -1,4 +1,4 @@ -description: New Jersey income sources that comprise gross income. +description: New Jersey counts the following sources as gross income. metadata: unit: list period: year From 30ec1f9b0d65a512ed88583423a485c1744d99d4 Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Tue, 2 Dec 2025 09:52:46 -0500 Subject: [PATCH 7/8] comments --- .../gov/states/nj/tax/income/gross_income_sources.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml index aec386c3c21..66bb0a1d56f 100644 --- a/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml +++ b/policyengine_us/parameters/gov/states/nj/tax/income/gross_income_sources.yaml @@ -10,8 +10,14 @@ metadata: href: https://www.nj.gov/treasury/taxation/pdf/current/1040.pdf values: 2021-01-01: + # Note: NJ uses W-2 Box 16 (state wages), not Box 1 (federal wages). + # NJ does not allow pre-tax deductions for 401k/403b that federal allows, + # so employment_income (gross wages) is correct, not irs_employment_income. - employment_income # Line 15: Wages, salaries, tips (Category a) - taxable_interest_income # Line 16a: Interest (Category e) + # Note: NJ Statute 54A:5-1(f) does not distinguish between qualified and + # non-qualified dividends. All dividends are taxed as ordinary income. + # dividend_income includes both qualified and non-qualified dividends. - dividend_income # Line 17: Dividends (Category f) - self_employment_income # Line 18: Net business profits (Category b) - farm_income # Line 18: Farm income (Category b) From 6ba37f3e39858c81b7653eca829921fa97a03b2f Mon Sep 17 00:00:00 2001 From: David Trimmer Date: Wed, 3 Dec 2025 12:33:40 -0500 Subject: [PATCH 8/8] add integration test --- .../gov/states/nj/tax/income/integration.yaml | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml diff --git a/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml new file mode 100644 index 00000000000..bec58748f10 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/states/nj/tax/income/integration.yaml @@ -0,0 +1,44 @@ +- name: 0-NJ.yaml + absolute_error_margin: 2 + period: 2024 + input: + people: + person1: + age: 40 + employment_income: 0.0 + ssi: 0 + wic: 0 + head_start: 0 + early_head_start: 0 + commodity_supplemental_food_program: 0 + self_employment_income: 50_000 + is_tax_unit_head: true + person2: + age: 40 + employment_income: 0.0 + ssi: 0 + wic: 0 + head_start: 0 + early_head_start: 0 + commodity_supplemental_food_program: 0 + self_employment_income: 50_000 + is_tax_unit_spouse: true + tax_units: + tax_unit: + members: [person1, person2] + premium_tax_credit: 0 + local_income_tax: 0 + state_sales_tax: 0 + spm_units: + spm_unit: + members: [person1, person2] + snap: 0 + tanf: 0 + free_school_meals: 0 + reduced_price_school_meals: 0 + households: + household: + members: [person1, person2] + state_fips: 34 + output: + nj_income_tax: 2_640