Skip to content

Commit

Permalink
Merge pull request #2094 from martinholmer/add-ebitc-param
Browse files Browse the repository at this point in the history
Add _EITC_basic_frac policy parameter
  • Loading branch information
martinholmer committed Oct 26, 2018
2 parents 03c5db7 + 89bccec commit da5629a
Show file tree
Hide file tree
Showing 6 changed files with 71 additions and 8 deletions.
17 changes: 17 additions & 0 deletions RELEASES.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,23 @@ Go [here](https://github.com/open-source-economics/Tax-Calculator/pulls?q=is%3Ap
for a complete commit history.


2018-10-26 Release 0.22.2
-------------------------------------------------------------------------
(last merged pull request is
[#2094](https://github.com/open-source-economics/Tax-Calculator/pull/2094))

**API Changes**
- None

**New Features**
- Add _EITC_basic_frac policy parameter so that an Earned and Basic Income Tax Credit (EBITC) reform can be analyzed.
[[#2094](https://github.com/open-source-economics/Tax-Calculator/pull/2094)
by Martin Holmer]

**Bug Fixes**
- None


2018-10-25 Release 0.22.1
-------------------------------------------------------------------------
(last merged pull request is
Expand Down
2 changes: 1 addition & 1 deletion docs/index.html

Large diffs are not rendered by default.

16 changes: 10 additions & 6 deletions taxcalc/calcfunctions.py
Original file line number Diff line number Diff line change
Expand Up @@ -1139,15 +1139,16 @@ def F2441(MARS, earned_p, earned_s, f2441, CDCC_c, e32800,


@jit(nopython=True)
def EITCamount(phasein_rate, earnings, max_amount,
def EITCamount(basic_frac, phasein_rate, earnings, max_amount,
phaseout_start, agi, phaseout_rate):
"""
Returns EITC amount given specified parameters.
English parameter names are used in this function because the
EITC formula is not available on IRS forms or in IRS instructions;
the extensive IRS EITC look-up table does not reveal the formula.
"""
eitc = min(phasein_rate * earnings, max_amount)
eitc = min((basic_frac * max_amount +
(1.0 - basic_frac) * phasein_rate * earnings), max_amount)
if earnings > phaseout_start or agi > phaseout_start:
eitcx = max(0., (max_amount - phaseout_rate *
max(0., max(earnings, agi) - phaseout_start)))
Expand All @@ -1160,7 +1161,7 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
e27200, age_head, age_spouse, earned, earned_p, earned_s,
EITC_ps, EITC_MinEligAge, EITC_MaxEligAge, EITC_ps_MarriedJ,
EITC_rt, EITC_c, EITC_prt, EITC_InvestIncome_c, EITC_indiv,
c59660):
EITC_basic_frac, c59660):
"""
Computes EITC amount, c59660.
"""
Expand All @@ -1175,7 +1176,8 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
po_start = EITC_ps[EIC]
if MARS == 2:
po_start += EITC_ps_MarriedJ[EIC]
eitc = EITCamount(EITC_rt[EIC], earned, EITC_c[EIC],
eitc = EITCamount(EITC_basic_frac,
EITC_rt[EIC], earned, EITC_c[EIC],
po_start, c00100, EITC_prt[EIC])
if EIC == 0:
# enforce age eligibility rule for those with no EITC-eligible
Expand Down Expand Up @@ -1204,11 +1206,13 @@ def EITC(MARS, DSI, EIC, c00100, e00300, e00400, e00600, c01000,
else:
# individual EITC rather than a filing-unit EITC
# .. calculate eitc amount for taxpayer
eitc_p = EITCamount(EITC_rt[EIC], earned_p, EITC_c[EIC],
eitc_p = EITCamount(EITC_basic_frac,
EITC_rt[EIC], earned_p, EITC_c[EIC],
EITC_ps[EIC], earned_p, EITC_prt[EIC])
# .. calculate eitc amount for spouse
if MARS == 2:
eitc_s = EITCamount(EITC_rt[EIC], earned_s, EITC_c[EIC],
eitc_s = EITCamount(EITC_basic_frac,
EITC_rt[EIC], earned_s, EITC_c[EIC],
EITC_ps[EIC], earned_s, EITC_prt[EIC])
else:
eitc_s = 0.
Expand Down
32 changes: 32 additions & 0 deletions taxcalc/policy_current_law.json
Original file line number Diff line number Diff line change
Expand Up @@ -5428,6 +5428,38 @@
"compatible_data": {"puf": true, "cps": true}
},

"_EITC_basic_frac": {
"long_name": "Fraction of maximum earned income credit paid at zero earnings",
"description": "This fraction of _EITC_c is always paid as a credit and one minus this fraction is applied to the phasein rate, _EITC_rt. This fraction is zero under current law.",
"section_1": "Refundable Credits",
"section_2": "Earned Income Tax Credit",
"irs_ref": "Form 1040, line 66a&b, instruction (table).",
"notes": "",
"row_var": "FLPDYR",
"row_label": ["2013",
"2014",
"2015",
"2016",
"2017"],
"start_year": 2013,
"cpi_inflatable": false,
"cpi_inflated": false,
"col_var": "",
"col_label": "",
"boolean_value": false,
"integer_value": false,
"value": [0.0,
0.0,
0.0,
0.0,
0.0],
"range": {"min": 0.0, "max": 1.0},
"out_of_range_minmsg": "",
"out_of_range_maxmsg": "",
"out_of_range_action": "stop",
"compatible_data": {"puf": true, "cps": true}
},

"_EITC_prt": {
"long_name": "Earned income credit phaseout rate",
"description": "Earned income credit begins to decrease at the this rate when AGI is higher than earned income credit phaseout start AGI.",
Expand Down
10 changes: 10 additions & 0 deletions taxcalc/tests/reforms.json
Original file line number Diff line number Diff line change
Expand Up @@ -702,5 +702,15 @@
"output_type": "iitax",
"compare_with": {},
"expected": "Tax-Calculator,-5.0,-5.3,-5.6,-5.9"
},

"64": {
"baseline": "2017_law.json",
"start_year": 2019,
"value": {"_EITC_basic_frac": [0.5]},
"name": "Add EITC basic credit equal to half the maximum credit with half the phasein rate (as described in Tax-Calculator issue 2092)",
"output_type": "iitax",
"compare_with": {},
"expected": "Tax-Calculator,-6.4,-6.6,-6.9,-7.1"
}
}
2 changes: 1 addition & 1 deletion taxcalc/tests/test_reforms.py
Original file line number Diff line number Diff line change
Expand Up @@ -199,7 +199,7 @@ def fixture_reforms_dict(tests_path):
return json.loads(rjson)


NUM_REFORMS = 63
NUM_REFORMS = 64


@pytest.mark.requires_pufcsv
Expand Down

0 comments on commit da5629a

Please sign in to comment.