From dff0681570e1b7e2bdc7d8ef3242ad577ad16895 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sat, 17 Sep 2022 21:14:06 -0700 Subject: [PATCH 1/3] US contrib policy parameters: SMG@FPG Fixes #1004 --- changelog_entry.yaml | 6 ++++++ .../ubi_center/basic_income/fpg_percent.yaml | 7 +++++++ .../ubi_center/basic_income/basic_income.py | 21 +++++++------------ .../basic_income_before_phase_out.py | 16 ++++++++------ 4 files changed, 30 insertions(+), 20 deletions(-) create mode 100644 openfisca_us/parameters/contrib/ubi_center/basic_income/fpg_percent.yaml diff --git a/changelog_entry.yaml b/changelog_entry.yaml index e69de29bb2d..a257e08d803 100644 --- a/changelog_entry.yaml +++ b/changelog_entry.yaml @@ -0,0 +1,6 @@ +- bump: minor + changes: + added: + - Federal poverty guideline-based basic income element. + changed: + - Made all basic income variables tax unit-level. diff --git a/openfisca_us/parameters/contrib/ubi_center/basic_income/fpg_percent.yaml b/openfisca_us/parameters/contrib/ubi_center/basic_income/fpg_percent.yaml new file mode 100644 index 00000000000..f19dfe4b453 --- /dev/null +++ b/openfisca_us/parameters/contrib/ubi_center/basic_income/fpg_percent.yaml @@ -0,0 +1,7 @@ +description: A basic income is provided to tax units at this percentage of the federal poverty guideline +values: + 0000-01-01: 0 +metadata: + unit: /1 + name: bi_fpg_percent + label: Basic income as a percent of tax unit's poverty line diff --git a/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income.py b/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income.py index 63dd410d991..f1e00b1bfc9 100644 --- a/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income.py +++ b/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income.py @@ -3,21 +3,14 @@ class basic_income(Variable): value_type = float - entity = Person + entity = TaxUnit label = "Basic income" unit = USD - documentation = "Total basic income payments for this person. Phase-outs as an equal percentage to all tax unit members." + documentation = "Total basic income payments for this filer." definition_period = YEAR - def formula(person, period, parameters): - eligible = person.tax_unit("basic_income_eligible", period) - basic_income = person("basic_income_before_phase_out", period) - tax_unit = person.tax_unit - tax_unit_basic_income = tax_unit.sum(basic_income) - tax_unit_phase_out = tax_unit("basic_income_phase_out", period) - percent_reduction = where( - tax_unit_basic_income > 0, - tax_unit_phase_out / tax_unit_basic_income, - 0, - ) - return basic_income * eligible * (1 - percent_reduction) + def formula(tax_unit, period, parameters): + eligible = tax_unit("basic_income_eligible", period) + basic_income = tax_unit("basic_income_before_phase_out", period) + phase_out = tax_unit("basic_income_phase_out", period) + return eligible * (basic_income - phase_out) diff --git a/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income_before_phase_out.py b/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income_before_phase_out.py index c40375ecfd5..70002292ab7 100644 --- a/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income_before_phase_out.py +++ b/openfisca_us/variables/contrib/ubi_center/basic_income/basic_income_before_phase_out.py @@ -3,15 +3,19 @@ class basic_income_before_phase_out(Variable): value_type = float - entity = Person + entity = TaxUnit label = "Basic income before phase-outs" unit = USD - documentation = ( - "Total basic income payments for this person, before phasing out." - ) definition_period = YEAR - def formula(person, period, parameters): + def formula(tax_unit, period, parameters): p = parameters(period).contrib.ubi_center.basic_income + # Start with person-level amount. + person = tax_unit.members age = person("age", period) - return p.amount_by_age.calc(age) + amount = p.amount_by_age.calc(age) + person_level_amount = tax_unit.sum(amount) + # Now compute FPG amount. + fpg = tax_unit("tax_unit_fpg", period) + fpg_amount = p.fpg_percent * fpg + return person_level_amount + fpg_amount From 6fda574ee323779e953b289dc999ddcccbfbdc92 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 18 Sep 2022 08:53:29 -0700 Subject: [PATCH 2/3] Update tests --- .../baseline/contrib/ubi_center/basic_income.yaml | 15 ++++----------- .../ubi_center/basic_income_before_phase_out.yaml | 8 ++++++++ 2 files changed, 12 insertions(+), 11 deletions(-) diff --git a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income.yaml b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income.yaml index 227846981eb..48a6c96d337 100644 --- a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income.yaml +++ b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income.yaml @@ -1,15 +1,8 @@ - name: Basic income with phase-out applied. period: 2022 - absolute_error_margin: 1 input: - people: - adult: - basic_income_before_phase_out: 10_000 - child: - basic_income_before_phase_out: 5_000 - tax_units: - tax_unit: - members: [adult, child] - basic_income_phase_out: 5_000 + basic_income_before_phase_out: 10_000 + basic_income_phase_out: 4_000 + basic_income_eligible: true output: - basic_income: [6_667, 3_333] + basic_income: 6_000 diff --git a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml index 1083ad95d34..7005401123b 100644 --- a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml +++ b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml @@ -13,3 +13,11 @@ members: [adult, child] output: basic_income_before_phase_out: [10_000, 5_000] + +- name: 100% of FPG. + period: 2022 + input: + contrib.ubi_center.basic_income.fpg_percent: 1 + tax_unit_fpg: 10_000 + output: + basic_income_before_phase_out: 10_000 From 38bd84c8630e9cd8ade1873cd1db3ff7ee05634c Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 18 Sep 2022 09:05:54 -0700 Subject: [PATCH 3/3] fix test --- .../contrib/ubi_center/basic_income_before_phase_out.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml index 7005401123b..5290d5b3ff3 100644 --- a/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml +++ b/openfisca_us/tests/policy/baseline/contrib/ubi_center/basic_income_before_phase_out.yaml @@ -12,7 +12,7 @@ tax_unit: members: [adult, child] output: - basic_income_before_phase_out: [10_000, 5_000] + basic_income_before_phase_out: 15_000 - name: 100% of FPG. period: 2022