diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..18d9f285de8 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,4 @@ +- bump: minor + changes: + added: + - Puerto Rico earned income credit. diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/max.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/max.yaml new file mode 100644 index 00000000000..565d5494997 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/max.yaml @@ -0,0 +1,10 @@ +description: Puerto Rico limits the Earned Income Tax Credit to filers of this age or below. +values: + 2023-01-01: 65 +metadata: + unit: year + period: year + label: Puerto Rico earned income credit maximum age + reference: + - title: Schedule CT Individual, Earned Income Credit, 2023 + href: https://hacienda.pr.gov/sites/default/files/schedule_ct_rev._jul_5_23_informative_-_instructions.pdf#page=1 diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/min.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/min.yaml new file mode 100644 index 00000000000..e6206c3fd9d --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/min.yaml @@ -0,0 +1,10 @@ +description: Puerto Rico limits the Earned Income Tax Credit to filers of this age or older. +values: + 2023-01-01: 19 +metadata: + unit: year + period: year + label: Puerto Rico earned income Credit minimum age + reference: + - title: Schedule CT Individual, Earned Income Credit, 2023 + href: https://hacienda.pr.gov/sites/default/files/schedule_ct_rev._jul_5_23_informative_-_instructions.pdf#page=1 \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/separate_filer.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/separate_filer.yaml new file mode 100644 index 00000000000..476197275f6 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/eligibility/separate_filer.yaml @@ -0,0 +1,9 @@ +description: Puerto Rico makes married filing separate filers eligible for the EITC when this is true. +values: + 2023-01-01: false +metadata: + unit: bool + label: Puerto Rico earned income credit separate filers eligible + reference: + - title: + href: diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/limit.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/limit.yaml new file mode 100644 index 00000000000..c0fbc802bdb --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/limit.yaml @@ -0,0 +1,13 @@ +description: Puerto Rico limits the earned income credit to filers with investment income below this threshold. +values: + 2010-12-31: 2_200 + 2023-01-01: 10_000 +metadata: + unit: currency-USD + label: Puerto Rico earned income credit investment income limit + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (e) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/sources.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/sources.yaml new file mode 100644 index 00000000000..dd399314290 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/investment_income/sources.yaml @@ -0,0 +1,17 @@ +description: Puerto Rico accounts for the following investment income sources, under the earned income tax credit. +values: + 2010-12-31: + - interest_income + - dividend_income + - rental_income + - capital_gains + - child_support_received +metadata: + unit: list + period: year + label: Puerto Rico earned income credit investment income sources + reference: + - title: P.R. Laws tit. 13, § 30211 (e) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/max_amount.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/max_amount.yaml new file mode 100644 index 00000000000..bbe0c579f77 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/max_amount.yaml @@ -0,0 +1,29 @@ +description: Puerto Rico provides this maximum earned income credit. +brackets: + - threshold: + 2023-01-01: 0 + amount: + 2023-01-01: 1_656 + - threshold: + 2023-01-01: 1 + amount: + 2023-01-01: 3_864 + - threshold: + 2023-01-01: 2 + amount: + 2023-01-01: 6_072 + - threshold: + 2023-01-01: 3 + amount: + 2023-01-01: 7_173 + +metadata: + threshold_unit: child + amount_unit: currency-USD + label: Puerto Rico earned income credit max amount + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (1)-(6) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_in_rate.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_in_rate.yaml new file mode 100644 index 00000000000..724eb94086b --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_in_rate.yaml @@ -0,0 +1,30 @@ +description: Puerto Rico phases the earned income credit in at this rate of state gross income. +# determine phase in rate percentage by number of children +brackets: + - threshold: + 2010-12-31: 0 + rate: + 2010-12-31: 0.15 + - threshold: + 2010-12-31: 1 + rate: + 2010-12-31: 0.3398 + - threshold: + 2010-12-31: 2 + rate: + 2010-12-31: 0.4 + - threshold: + 2010-12-31: 3 + rate: + 2010-12-31: 0.4483 +metadata: + rate_unit: /1 + threshold_unit: child + type: marginal_rate + label: Puerto Rico earned income credit phase in rate + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (1)-(6) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/rate.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/rate.yaml new file mode 100644 index 00000000000..58abe342737 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/rate.yaml @@ -0,0 +1,30 @@ +description: +# determine phase-out rate based on number of children +brackets: + - threshold: + 2023-01-01: 0 + rate: + 2023-01-01: 0.15 + - threshold: + 2023-01-01: 1 + rate: + 2023-01-01: 0.2692 + - threshold: + 2023-01-01: 2 + rate: + 2023-01-01: 0.3438 + - threshold: + 2023-01-01: 3 + rate: + 2023-01-01: 0.3421 +metadata: + rate_unit: /1 + threshold_unit: child + type_marginal: marginal_rate + label: Puerto Rico earned income credit phase out rate + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (1)-(6) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/joint.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/joint.yaml new file mode 100644 index 00000000000..12df918f5e5 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/joint.yaml @@ -0,0 +1,30 @@ +description: Puerto Rico phases the earned income credit out at this rate of state gross income. +# determines the threshold for the phase-in rate to be applied based on # of children +brackets: + - threshold: + 2023-01-01: 0 + rate: + 2023-01-01: 19_870 + - threshold: + 2023-01-01: 1 + rate: + 2023-01-01: 24_280 + - threshold: + 2023-01-01: 2 + rate: + 2023-01-01: 27_590 + - threshold: + 2023-01-01: 3 + rate: + 2023-01-01: 27_590 +metadata: + rate_unit: currency-USD + threshold_unit: child + type_marginal: marginal_rate + label: Puerto Rico earned income credit phase out rate + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (1)-(6) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/single.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/single.yaml new file mode 100644 index 00000000000..d2526c42c08 --- /dev/null +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/earned_income/phase_out/threshold/single.yaml @@ -0,0 +1,30 @@ +description: Puerto Rico phases the earned income credit out at this rate of state gross income. +# determines the threshold for the phase-in rate to be applied based on # of children +brackets: + - threshold: + 2023-01-01: 0 + rate: + 2023-01-01: 17_660 + - threshold: + 2023-01-01: 1 + rate: + 2023-01-01: 19_870 + - threshold: + 2023-01-01: 2 + rate: + 2023-01-01: 23_180 + - threshold: + 2023-01-01: 3 + rate: + 2023-01-01: 23_180 +metadata: + rate_unit: currency-USD + threshold_unit: child + type_marginal: marginal_rate + label: Puerto Rico earned income credit phase out rate + period: year + reference: + - title: P.R. Laws tit. 13, § 30211 (1)-(6) + href: https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit + - title: P.R. Anejo CT Individuo + href: https://hacienda.pr.gov/sites/default/files/anejo_ct_rev._15_may_23_informativo_-_instrucciones.pdf \ No newline at end of file diff --git a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml index f6a7a3f7ab2..029bcb1181d 100644 --- a/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml +++ b/policyengine_us/parameters/gov/territories/pr/tax/income/credits/refundable.yaml @@ -12,3 +12,4 @@ values: 2021-01-01: - pr_low_income_credit - pr_compensatory_low_income_credit + - pr_earned_income_credit diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.yaml new file mode 100644 index 00000000000..afaf0c4194b --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.yaml @@ -0,0 +1,69 @@ +- name: Not eligible person, 2024 + period: 2024 + input: + pr_earned_income_child_count: 2 + filing_status: SINGLE + pr_gross_income_person: 10_000 + pr_earned_income_credit_eligible: false + output: + pr_earned_income_credit: 0 + +- name: Eligible person, 0 children with max credit + period: 2024 + input: + pr_earned_income_child_count: 0 + filing_status: SINGLE + pr_gross_income_person: 17_660 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 1_656 + +- name: Eligible person, 1 child and higher bracket + period: 2024 + input: + pr_earned_income_child_count: 1 + filing_status: SINGLE + pr_gross_income_person: 25_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 2_483.004 + +- name: Eligible person in the highest bracket, 2024 + period: 2024 + input: + pr_gross_income_person: 35_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 100 + +- name: Eligible person in the middle bracket, 2024 + period: 2024 + input: + pr_gross_income_person: 34_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 120 + +- name: Eligible person with max credit, 2024 + period: 2024 + input: + pr_gross_income_person: 10_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 600 + +- name: Eligible person in the lower bracket, 2024 + period: 2024 + input: + pr_gross_income_person: 8_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 480 + +- name: Eligible person in the lower bracket, 2011 + period: 2011 + input: + pr_gross_income_person: 8_000 + pr_earned_income_credit_eligible: true + output: + pr_earned_income_credit: 280 \ No newline at end of file diff --git a/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.yaml b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.yaml new file mode 100644 index 00000000000..d59ec32a9ed --- /dev/null +++ b/policyengine_us/tests/policy/baseline/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.yaml @@ -0,0 +1,59 @@ +- name: Dependent + period: 2024 + input: + is_tax_unit_head_or_spouse: false + pr_earned_income_credit_investment_income: 2_000 + age: 25 + filing_status: JOINT + output: + pr_earned_income_credit_eligible: false + +- name: Filing separately + period: 2024 + input: + is_tax_unit_head_or_spouse: true + pr_earned_income_credit_investment_income: 3_000 + age: 30 + filing_status: SEPARATE + output: + pr_earned_income_credit_eligible: false + +- name: Under the age limit + period: 2024 + input: + is_tax_unit_head_or_spouse: true + pr_earned_income_credit_investment_income: 2_000 + age: 18 + filing_status: JOINT + output: + pr_earned_income_credit_eligible: false + +- name: Over the age limit + period: 2024 + input: + is_tax_unit_head_or_spouse: true + pr_earned_income_credit_investment_income: 2_000 + age: 66 + filing_status: JOINT + output: + pr_earned_income_credit_eligible: false + +- name: Investment income over the limit + period: 2024 + input: + is_tax_unit_head_or_spouse: true + pr_earned_income_credit_investment_income: 10_001 + age: 60 + filing_status: SINGLE + output: + pr_earned_income_credit_eligible: false + +- name: Eligible person + period: 2024 + input: + is_tax_unit_head_or_spouse: true + pr_earned_income_credit_investment_income: 10_000 + age: 65 + filing_status: SINGLE + output: + pr_earned_income_credit_eligible: true \ No newline at end of file diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_child_count.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_child_count.py new file mode 100644 index 00000000000..a7a567de0ea --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_child_count.py @@ -0,0 +1,11 @@ +from policyengine_us.model_api import * + + +class pr_earned_income_child_count(Variable): + value_type = int + entity = TaxUnit + label = "Puerto Rico EITC-qualifying children" + definition_period = YEAR + reference = "" + + adds = ["is_child_dependent"] diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.py new file mode 100644 index 00000000000..4364346c1b0 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit.py @@ -0,0 +1,38 @@ +from policyengine_us.model_api import * + + +class pr_earned_income_credit(Variable): + value_type = float + entity = Person + label = "Puerto Rico earned income credit amount" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit" + defined_for = "pr_earned_income_credit_eligible" + + def formula(person, period, parameters): + p = parameters( + period + ).gov.territories.pr.tax.income.credits.earned_income + + child_count = person.tax_unit("pr_earned_income_child_count", period) + filing_status = person.tax_unit("filing_status", period) + gross_income = person("pr_gross_income_person", period) + + # compute credit + phase_in = min_(gross_income * p.phase_in_rate.calc(child_count), + p.max_amount.calc(child_count)) + phase_out = 0 + + # CHECK ME: what are the possible filing statuses? + phase_out_rate = p.phase_out.rate.calc(child_count) + if filing_status == filing_status.possible_values.SINGLE: + single_threshold = p.phase_out.threshold.single.calc(child_count) + if gross_income > single_threshold: + phase_out = (gross_income - single_threshold) * phase_out_rate + else: # default to married filing status + married_threshold = p.phase_out.threshold.joint.calc(child_count) + if gross_income > married_threshold: + phase_out = (gross_income - married_threshold) * phase_out_rate + + return max_(0, phase_in - phase_out) \ No newline at end of file diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.py new file mode 100644 index 00000000000..b79e6a946d3 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_eligible.py @@ -0,0 +1,31 @@ +from policyengine_us.model_api import * + + +class pr_earned_income_credit_eligible(Variable): + value_type = bool + entity = Person + label = "Puerto Rico earned income credit eligibility" + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit" + + def formula(person, period, parameters): + p = parameters( + period + ).gov.territories.pr.tax.income.credits.earned_income + head_or_spouse = person("is_tax_unit_head_or_spouse", period) + investment_income = person( + "pr_earned_income_credit_investment_income", period + ) + investment_income_amount_under_limit = investment_income <= p.investment_income.limit + age = person("age", period) + age_within_range = (age >= p.eligibility.min) & (age <= p.eligibility.max) + filing_status = person.tax_unit("filing_status", period) + not_separate = filing_status != filing_status.possible_values.SEPARATE + + eligible = head_or_spouse & investment_income_amount_under_limit & age_within_range + # if separate filers are eligible + if p.eligibility.separate_filer: + return eligible + # else, filing status needs to be not equal to separate + else: + return eligible & not_separate diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_investment_income.py b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_investment_income.py new file mode 100644 index 00000000000..77a26671b23 --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/credits/earned_income/pr_earned_income_credit_investment_income.py @@ -0,0 +1,12 @@ +from policyengine_us.model_api import * + + +class pr_earned_income_credit_investment_income(Variable): + value_type = float + entity = Person + label = "Puerto Rico earned income credit investment income" + definition_period = YEAR + unit = USD + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1007-credits-against-tax/subchapter-b-refundable-credits/30211-earned-income-credit" + + adds = "gov.territories.pr.tax.income.credits.earned_income.investment_income.sources" diff --git a/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income_person.py b/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income_person.py new file mode 100644 index 00000000000..c448a011f9d --- /dev/null +++ b/policyengine_us/variables/gov/territories/pr/tax/income/pr_gross_income_person.py @@ -0,0 +1,10 @@ +from policyengine_us.model_api import * + + +class pr_gross_income_person(Variable): + value_type = float + entity = Person + label = "Puerto Rico gross income person" + unit = USD + definition_period = YEAR + reference = "https://casetext.com/statute/laws-of-puerto-rico/title-thirteen-taxation-and-finance/subtitle-17-internal-revenue-code-of-2011/part-ii-income-taxes/chapter-1005-computation-of-taxable-income/subchapter-a-determination-of-net-income-general-concepts/30101-gross-income"