-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #7 from openfisca/modify-brackets
Add reform modifying brackets of a scale
- Loading branch information
Showing
5 changed files
with
86 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
43 changes: 43 additions & 0 deletions
43
openfisca_country_template/reforms/modify_social_security_taxation.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,43 @@ | ||
# -*- coding: utf-8 -*- | ||
|
||
# This file defines a reform. | ||
# A reform is a set of modifications to be applied to a reference tax and benefit system to carry out experiments. | ||
# See https://doc.openfisca.fr/reforms.html | ||
|
||
|
||
# Import from openfisca-core the common python objects used to code the legislation in OpenFisca | ||
from openfisca_core.model_api import * | ||
|
||
|
||
class modify_social_security_taxation(Reform): | ||
# A reform always defines an `apply` method that builds the reformed tax and benefit system from the reference one. | ||
# See https://doc.openfisca.fr/coding-the-legislation/reforms.html#writing-a-reform | ||
def apply(self): | ||
# Our reform modifies the `social_security_contribution` parameter, which is a scale. | ||
# This parameter is declared in `taxes.xml` using a `<BAREME>` XML element, the French name for "scale". | ||
# | ||
# See https://doc.openfisca.fr/coding-the-legislation/legislation_parameters.html | ||
self.modify_legislation_json(modifier_function=self.modify_brackets) | ||
|
||
def modify_brackets(self, reference_legislation_json_copy): | ||
# This function takes an argument `reference_legislation_json_copy` which is a JSON-like representation | ||
# of the XML element. It can be modified and must be returned. | ||
|
||
# Access the right legislation node: | ||
scale = reference_legislation_json_copy['children']['taxes']['children']['social_security_contribution'] | ||
brackets = scale['brackets'] | ||
|
||
# Add 0.1 to the rates of the second bracket, keeping the same thresholds: | ||
for rate in brackets[1]['rate']: | ||
rate['value'] += 0.1 | ||
|
||
# Remove the first bracket: | ||
del brackets[0] | ||
|
||
# Add a new bracket with a higher tax rate for rich people: | ||
brackets.append({ | ||
'rate': [{'start': '2017-01-01', 'value': 0.4}], | ||
'threshold': [{'start': '2017-01-01', 'value': 40000}] | ||
}) | ||
|
||
return reference_legislation_json_copy |
30 changes: 30 additions & 0 deletions
30
openfisca_country_template/tests/reforms/modify_social_security_taxation.yaml
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
# Test files describe situations and their expected outcomes | ||
# We can run this test on our command line using `openfisca-run-test modify_social_security_taxation.yaml` | ||
|
||
# This test is a partial adaptation of `social_security_contribution.yaml` to match the modifications introduced by the reform of the same name. | ||
|
||
# Note the `reforms: ` key in the below YAML blocks. | ||
|
||
- name: No social security contribution on small salaries | ||
reforms: openfisca_country_template.reforms.modify_social_security_taxation.modify_social_security_taxation | ||
period: 2017-01 | ||
input_variables: | ||
salary: 2000 | ||
output_variables: | ||
social_security_contribution: 0 | ||
|
||
- name: Increased social security contribution on medium salaries | ||
reforms: openfisca_country_template.reforms.modify_social_security_taxation.modify_social_security_taxation | ||
period: 2017-01 | ||
input_variables: | ||
salary: 15000 | ||
output_variables: | ||
social_security_contribution: 1336 | ||
|
||
- name: High social security contribution on high salaries | ||
reforms: openfisca_country_template.reforms.modify_social_security_taxation.modify_social_security_taxation | ||
period: 2017-01 | ||
input_variables: | ||
salary: 50000 | ||
output_variables: | ||
social_security_contribution: 8336 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters