diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..589fba11b28 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Puerto Rico regular tax before credits and gradual adjustment. diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/adjustment_limit_basis.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/adjustment_limit_basis.yaml new file mode 100644 index 00000000000..c66430fcad1 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/adjustment_limit_basis.yaml @@ -0,0 +1,12 @@ +description: Puerto Rico provides the following basis amount for the gradual adjustment limit. +values: + 2024-01-01: 8_895 +metadata: + unit: currency-USD + period: year + label: Puerto Rico gradual adjustment limit basis + reference: + - title: Gov. of Puerto Rico Form 482.0 2024 + href: https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=52 + - title: P.R. Laws tit. 13, § 30061 (b)(5)(e) + href: https://bvirtualogp.pr.gov/ogp/Bvirtual/leyesreferencia/PDF/2-ingles/1-2011.pdf#page=32 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/exemption_rate.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/exemption_rate.yaml new file mode 100644 index 00000000000..0097044cdac --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/exemption_rate.yaml @@ -0,0 +1,13 @@ +description: Puerto Rico provides the following rate to reduce the total exemptions when calculating the gradual adjustment limit. +values: + 2024-01-01: 0.33 +metadata: + unit: /1 + period: year + label: Puerto Rico gradual adjustment rate for exemptions + # discrepancy between legal form and tax form for the exemptions rate + reference: + - title: Gov. of Puerto Rico Form 482.0 2024 + href: https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=52 + - title: P.R. Laws tit. 13, § 30061 (b)(5)(c) + href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1004/subchapter-a/30061/ diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/rate.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/rate.yaml new file mode 100644 index 00000000000..341ea585ad2 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/rate.yaml @@ -0,0 +1,12 @@ +description: Puerto Rico provides the following rate to reduce the taxable net income when calculating gradual adjustment. +values: + 2024-01-01: 0.05 +metadata: + unit: /1 + period: year + label: Puerto Rico gradual adjustment rate for taxable net income + reference: + - title: Gov. of Puerto Rico Form 482.0 2024 + href: https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=52 + - title: P.R. Laws tit. 13, § 30061 (b)(1)-(4) + href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1004/subchapter-a/30061/ diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/threshold.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/threshold.yaml new file mode 100644 index 00000000000..c09e230c36c --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/gradual_adjustment/threshold.yaml @@ -0,0 +1,13 @@ +description: Puerto Rico provides the following income amount as a threshold for the gradual adjustment amount. +values: + 2024-01-01: 500_000 +metadata: + unit: currency-USD + period: year + label: Puerto Rico gradual adjustment amount income threshold + # discrepancy between legal form and tax form for the income threshold + reference: + - title: Gov. of Puerto Rico Form 482.0 2024 + href: https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=52 + - title: P.R. Laws tit. 13, § 30061 (b)(4)) + href: https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1004/subchapter-a/30061/ diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/regular_tax/percentage.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/regular_tax/percentage.yaml new file mode 100644 index 00000000000..c92fb4923db --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/regular_tax/percentage.yaml @@ -0,0 +1,21 @@ +description: Puerto Rico taxes this percentage of total normal taxes, based on gross income. +brackets: + - threshold: + 2024-01-01: 0 + amount: + 2024-01-01: 0.92 + - threshold: + 2024-01-01: 100_001 + amount: + 2024-01-01: 0.95 +metadata: + amount_unit: /1 + threshold_unit: currency-USD + type: single_amount + label: Puerto Rico regular tax percentage + period: year + reference: + - title: Gov. of Puerto Rico Form 482.0 2024 + href: https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=3 + - title: P.R. Laws tit. 13, § 30061 (c) + href: https://bvirtualogp.pr.gov/ogp/Bvirtual/leyesreferencia/PDF/2-ingles/1-2011.pdf#page=33 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.yaml new file mode 100644 index 00000000000..ffebc57a814 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.yaml @@ -0,0 +1,29 @@ +- name: Not eligible, income below threshold + period: 2024 + input: + pr_gradual_adjustment_eligibility: False + pr_net_taxable_income: 70_000 + pr_exemptions: 4_000 + state_code: PR + output: + pr_gradual_adjustment_amount: 0 + +- name: Amount lower than limit + period: 2024 + input: + pr_gradual_adjustment_eligibility: True + pr_net_taxable_income: 501_000 + pr_exemptions: 1_300 + state_code: PR + output: + pr_gradual_adjustment_amount: 50 + +- name: Limit lower than amount + period: 2024 + input: + pr_gradual_adjustment_eligibility: True + pr_net_taxable_income: 700_000 + pr_exemptions: 1_000 + state_code: PR + output: + pr_gradual_adjustment_amount: 9_225 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.yaml new file mode 100644 index 00000000000..573c5832ce0 --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.yaml @@ -0,0 +1,15 @@ +- name: Not eligible + period: 2024 + input: + pr_net_taxable_income: 500_000 + state_code: PR + output: + pr_gradual_adjustment_eligibility: False + +- name: Eligible + period: 2024 + input: + pr_net_taxable_income: 500_001 + state_code: PR + output: + pr_gradual_adjustment_eligibility: True \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_tax_before_credits.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_tax_before_credits.yaml new file mode 100644 index 00000000000..e7f6198cb1e --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/pr_tax_before_credits.yaml @@ -0,0 +1,19 @@ +- name: Lower bracket + period: 2024 + input: + state_code: PR + pr_gross_income: 100_000 + pr_normal_tax: 2_000 + pr_gradual_adjustment_amount: 0 + output: + pr_regular_tax_before_credits: 1_840 + +- name: Upper bracket + period: 2024 + input: + state_code: PR + pr_gross_income: 100_001 + pr_normal_tax: 1_000 + pr_gradual_adjustment_amount: 500 + output: + pr_regular_tax_before_credits: 1_425 \ No newline at end of file diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.py b/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.py new file mode 100644 index 00000000000..7989b0dd330 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_amount.py @@ -0,0 +1,23 @@ +from policyengine_us.model_api import * + + +class pr_gradual_adjustment_amount(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico gradual adjustment amount" + documentation = ( + "An additional amount added to tax amount for high income filers." + ) + unit = USD + definition_period = YEAR + defined_for = "pr_gradual_adjustment_eligibility" + reference = "https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=3" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.territories.pr.tax.income.gradual_adjustment + net_taxable_income = tax_unit("pr_net_taxable_income", period) + amount = (net_taxable_income - p.threshold) * p.rate + exemptions = tax_unit("pr_exemptions", period) + limit = p.adjustment_limit_basis + p.exemption_rate * exemptions + + return min_(amount, limit) diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.py b/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.py new file mode 100644 index 00000000000..b8ebc14377e --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/gradual_adjustment/pr_gradual_adjustment_eligibility.py @@ -0,0 +1,17 @@ +from policyengine_us.model_api import * + + +class pr_gradual_adjustment_eligibility(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico gradual adjustment eligibility" + unit = USD + definition_period = YEAR + defined_for = StateCode.PR + reference = "https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=3" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.territories.pr.tax.income.gradual_adjustment + net_taxable_income = tax_unit("pr_net_taxable_income", period) + + return net_taxable_income > p.threshold diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/pr_normal_tax.py b/policyengine_us/variables/gov/territories/pr/tax/income/pr_normal_tax.py new file mode 100644 index 00000000000..2db4752a560 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/pr_normal_tax.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class pr_normal_tax(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico normal tax" + unit = USD + definition_period = YEAR + defined_for = StateCode.PR + reference = "https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1004/subchapter-a/30061/" diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/pr_regular_tax_before_credits.py b/policyengine_us/variables/gov/territories/pr/tax/income/pr_regular_tax_before_credits.py new file mode 100644 index 00000000000..e48b8e6f6cd --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/pr_regular_tax_before_credits.py @@ -0,0 +1,20 @@ +from policyengine_us.model_api import * + + +class pr_regular_tax_before_credits(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico regular tax before credits" + unit = USD + definition_period = YEAR + defined_for = StateCode.PR + reference = "https://hacienda.pr.gov/sites/default/files/inst_individuals_2023.pdf#page=19" + + def formula(tax_unit, period, parameters): + p = parameters(period).gov.territories.pr.tax.income.regular_tax + gross_income = tax_unit("pr_gross_income", period) + total_normal_tax = add( + tax_unit, period, ["pr_normal_tax", "pr_gradual_adjustment_amount"] + ) + + return total_normal_tax * p.percentage.calc(gross_income) diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/exemptions/pr_exemptions.py b/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/exemptions/pr_exemptions.py new file mode 100644 index 00000000000..f2e92ae04e6 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/exemptions/pr_exemptions.py @@ -0,0 +1,12 @@ +from policyengine_us.model_api import * + + +class pr_exemptions(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico exemptions" + definition_period = YEAR + unit = USD + reference = "https://law.justia.com/codes/puerto-rico/title-thirteen/subtitle-17/part-ii/chapter-1005/subchapter-c/30138/" + + adds = "gov.territories.pr.tax.income.taxable_income.exemptions.sources" diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/pr_net_taxable_income.py b/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/pr_net_taxable_income.py new file mode 100644 index 00000000000..c0757ee1286 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/taxable_income/pr_net_taxable_income.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class pr_net_taxable_income(Variable): + value_type = float + entity = TaxUnit + label = "Puerto Rico net taxable income" + reference = "https://hacienda.pr.gov/sites/default/files/individuals_2024_rev._jul_12_24_9-30-24_informative.pdf#page=2" + unit = USD + definition_period = YEAR