From d41b626c72eab3c44fec6ef6cd4d929aa12fb400 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 31 May 2026 23:23:38 -0400 Subject: [PATCH] Derive SSTB QBI qualification export --- src/microplex_us/pipelines/us.py | 9 +++++++++ src/microplex_us/policyengine/us.py | 1 + tests/pipelines/test_us.py | 5 +++++ tests/policyengine/test_us.py | 1 + 4 files changed, 16 insertions(+) diff --git a/src/microplex_us/pipelines/us.py b/src/microplex_us/pipelines/us.py index 201f5cf..c50e1df 100644 --- a/src/microplex_us/pipelines/us.py +++ b/src/microplex_us/pipelines/us.py @@ -8290,6 +8290,15 @@ def has_any(*columns: str) -> bool: .astype(float) .ne(0.0) ) + if ( + "business_is_sstb" in result.columns + and "sstb_self_employment_income_would_be_qualified" not in result.columns + ): + result["sstb_self_employment_income_would_be_qualified"] = ( + pd.to_numeric(result["business_is_sstb"], errors="coerce") + .fillna(0.0) + .ne(0.0) + ) if "is_blind" in result.columns: result["is_blind"] = ( pd.to_numeric(result["is_blind"], errors="coerce").fillna(0.0).ne(0.0) diff --git a/src/microplex_us/policyengine/us.py b/src/microplex_us/policyengine/us.py index 5b60808..1f9abf2 100644 --- a/src/microplex_us/policyengine/us.py +++ b/src/microplex_us/policyengine/us.py @@ -453,6 +453,7 @@ class PolicyEngineUSVariableMaterializationResult: "ssi_reported": 0.0, "ssn_card_type": "CITIZEN", "sstb_self_employment_income_before_lsr": 0, + "sstb_self_employment_income_would_be_qualified": True, "sstb_unadjusted_basis_qualified_property": 0.0, "sstb_w2_wages_from_qualified_business": 0.0, "strike_benefits": 0, diff --git a/tests/pipelines/test_us.py b/tests/pipelines/test_us.py index 5f5b5cd..55cd5ff 100644 --- a/tests/pipelines/test_us.py +++ b/tests/pipelines/test_us.py @@ -999,6 +999,7 @@ def test_build_policyengine_entity_tables_derives_tax_input_columns(self): "unemployment_compensation": [0.0, 150.0], "medicaid": [0.0, 1_250.0], "medicaid_enrolled": [False, True], + "business_is_sstb": [True, False], "state_income_tax_paid": [400.0, 50.0], "filing_status": ["JOINT", "JOINT"], "relationship_to_head": [0, 1], @@ -1030,6 +1031,10 @@ def test_build_policyengine_entity_tables_derives_tax_input_columns(self): assert person_rows["social_security_retirement"].tolist() == [0.0, 800.0] assert person_rows["ssi"].tolist() == [0.0, 600.0] assert person_rows["takes_up_ssi_if_eligible"].tolist() == [False, True] + assert person_rows["sstb_self_employment_income_would_be_qualified"].tolist() == [ + True, + False, + ] assert person_rows["taxable_private_pension_income"].tolist() == [0.0, 300.0] assert person_rows["unemployment_compensation"].tolist() == [0.0, 150.0] assert person_rows["is_female"].tolist() == [False, True] diff --git a/tests/policyengine/test_us.py b/tests/policyengine/test_us.py index d9565db..d3758be 100644 --- a/tests/policyengine/test_us.py +++ b/tests/policyengine/test_us.py @@ -2100,6 +2100,7 @@ def __init__(self, entity): "qualified_tuition_expenses", "salt_refund_income", "stock_assets", + "sstb_self_employment_income_would_be_qualified", "taxable_ira_distributions", "tip_income", "unreimbursed_business_employee_expenses",