-
Notifications
You must be signed in to change notification settings - Fork 19
[WIP] Add organ donor compensation #16
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
MattiSG
wants to merge
28
commits into
BetterRules:master
Choose a base branch
from
OrganicCoders:master
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Changes from 24 commits
Commits
Show all changes
28 commits
Select commit
Hold shift + click to select a range
7818fa5
First basic test
nigelcharman 0d6a6f7
Added tax code and after tax amount
nigelcharman fbe6036
Commented out tax implications
nigelcharman cc92a5c
Initial test passing
nigelcharman 090f12d
Tidy up
nigelcharman 2cd9f23
Merge pull request #2 from OrganicCoders/tests
nigelcharman 6800008
Changed to 52 week calculation
nigelcharman 2995ce2
Merge branch 'tests'
nigelcharman 0f810b5
Applied rounding, commented out unneeded code
nigelcharman b472181
Added subpart 1 5(3) compensation earnings disregarded
nigelcharman b2d7db2
Added self-employed earnings
nigelcharman dbbfcf6
Added kiwisaver
nigelcharman bc00352
Added reference to definition
nigelcharman 36822d7
Added reference to definition
nigelcharman b958b43
Update live_organ_donor_compensation.py
allengeer e68ff34
Merge pull request #3 from allengeer/patch-1
nigelcharman 0c7ee37
Removed commented out code
nigelcharman 067d5cb
Added references to legislation
nigelcharman f138396
Fixed comments and removed kiwisaver_member variable
nigelcharman 429becd
Merge branch 'master' of github.com:OrganicCoders/openfisca-aotearoa
nigelcharman 2e507ed
Added docstring comment
nigelcharman 82a8810
Fixed formatting so tests pass when using 'make test'
nigelcharman d78b98f
Added reference to KiwiSaver rate
nigelcharman 2aaaf2b
Removed space at end of string
nigelcharman 5fbe05f
Added definitions of 'number of weeks' and 'earnings as an employee'
nigelcharman 64c5842
Updated references to definitions
nigelcharman 74b15f3
Merge pull request #4 from OrganicCoders/data-definitions
nigelcharman 21e69e5
Updated references to definitions on master branch
nigelcharman File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
52 changes: 52 additions & 0 deletions
52
openfisca_aotearoa/tests/live_organ_donor_compensation.yaml
This file contains hidden or 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,52 @@ | ||
| # We can run this test on our command line using `openfisca-run-test openfisca_aotearoa/tests/live_organ_donor_compensation.yaml` | ||
|
|
||
| - name: An employee with earnings for the last 52 weeks not enrolled in Kiwisaver, no ACC payment in past year | ||
| period: 2018 | ||
| absolute_error_margin: 0.0001 | ||
| input_variables: | ||
| sum_of_earnings_in_last_52_weeks: 62500 | ||
| earnings_period_in_weeks: 52 | ||
| output_variables: | ||
| weekly_compensation_before_tax: 1201.92 | ||
|
|
||
| - name: An employee with earnings for the last 20 weeks not enrolled in Kiwisaver, no ACC payment in past year | ||
| period: 2018 | ||
| absolute_error_margin: 0.0001 | ||
| input_variables: | ||
| sum_of_earnings_in_last_52_weeks: 30000 | ||
| earnings_period_in_weeks: 20 | ||
| output_variables: | ||
| weekly_compensation_before_tax: 1500 | ||
|
|
||
| - name: An employee with earnings for the last 52 weeks not enrolled in Kiwisaver, with ACC over 6 weeks | ||
| period: 2018 | ||
| absolute_error_margin: 0.0001 | ||
| input_variables: | ||
| sum_of_earnings_in_last_52_weeks: 62500 | ||
| earnings_period_in_weeks: 52 | ||
| sum_of_earnings_during_compensation_period_in_last_52_weeks: 6000 | ||
| compensation_period_in_weeks: 6 | ||
| output_variables: | ||
| weekly_compensation_before_tax: 1228.26 | ||
|
|
||
| - name: An employee with earnings for the last 26 weeks with 4% Kiwisaver, no ACC payment in last year | ||
| period: 2018 | ||
| absolute_error_margin: 0.0001 | ||
| input_variables: | ||
| sum_of_earnings_in_last_52_weeks: 26000 | ||
| earnings_period_in_weeks: 26 | ||
| kiwisaver_employee_deduction_percentage: 4 | ||
| output_variables: | ||
| weekly_compensation_before_tax: 1000 | ||
| kiwisaver_employee_deduction: 40 | ||
|
|
||
| - name: A person who was both employed and self-employed in the previous year; not enrolled in Kiwisaver, no ACC payment in last year | ||
| period: 2018 | ||
| absolute_error_margin: 0.0001 | ||
| input_variables: | ||
| sum_of_earnings_in_last_52_weeks: 20200 | ||
| # earnings_period_in_weeks: 52 | ||
| sum_of_self_employed_earnings_in_most_recently_completed_tax_year: 30300 | ||
| number_of_weeks_in_most_recently_completed_tax_year: 53 | ||
| output_variables: | ||
| weekly_compensation_before_tax: 960.16 |
135 changes: 135 additions & 0 deletions
135
openfisca_aotearoa/variables/live_organ_donor_compensation.py
This file contains hidden or 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,135 @@ | ||
| # -*- coding: utf-8 -*- | ||
|
|
||
| # Import from openfisca-core the common python objects used to code the legislation in OpenFisca | ||
| from openfisca_core.model_api import * | ||
| # Import the entities specifically defined for this tax and benefit system | ||
| from openfisca_aotearoa.entities import Person | ||
| from numpy import round | ||
|
|
||
|
|
||
| class weekly_compensation_before_tax(Variable): | ||
| """ | ||
| Calculate the weekly compensation based on employee earnings over the last 52 weeks | ||
| and self-employed earnings in most recent tax year. | ||
| This relies on the user totalling the earnings over the last 52 weeks and the earnings period in weeks. | ||
| Ideally a user would be able to enter the earnings per week (over a period) and the totals would then | ||
| be calculated. | ||
| """ | ||
| value_type = float | ||
| entity = Person | ||
| definition_period = YEAR # TODO - determine whether we need to get WEEK to work | ||
| label = u"The amount payable as compensation per week before tax" | ||
| # note that this also implements http://www.legislation.govt.nz/act/public/2016/0096/latest/whole.html?search=ts_act%40bill%40regulation%40deemedreg_live+organ_resel_25_a#DLM6965116 | ||
| reference = "http://www.legislation.govt.nz/act/public/2016/0096/latest/whole.html?search=ts_act%40bill%40regulation%40deemedreg_live+organ_resel_25_a#DLM6965123" | ||
|
|
||
| def formula(persons, period, parameters): | ||
| earnings_amount = persons('sum_of_earnings_in_last_52_weeks', period) | ||
| compensation_amount = persons('sum_of_earnings_during_compensation_period_in_last_52_weeks', period) | ||
| earnings_excluding_compensation_amount = earnings_amount - compensation_amount | ||
|
|
||
| earnings_period = persons('earnings_period_in_weeks', period) | ||
| compensation_period = persons('compensation_period_in_weeks', period) | ||
| earnings_excluding_compensation_period = earnings_period - compensation_period | ||
|
|
||
| self_employed_earnings_in_most_recent_tax_year = persons('sum_of_self_employed_earnings_in_most_recently_completed_tax_year', period) | ||
| most_recent_tax_year_period = persons('number_of_weeks_in_most_recently_completed_tax_year', period) | ||
|
|
||
| employee_weekly_earnings = earnings_excluding_compensation_amount / earnings_excluding_compensation_period | ||
| self_employed_weekly_earnings = self_employed_earnings_in_most_recent_tax_year / most_recent_tax_year_period | ||
|
|
||
| return round(employee_weekly_earnings + self_employed_weekly_earnings, 2) | ||
|
|
||
|
|
||
| class kiwisaver_employee_deduction(Variable): | ||
| value_type = float | ||
| entity = Person | ||
| definition_period = YEAR # TODO - determine whether we need to get WEEK to work | ||
| label = u"The amount deducted as a kiwisaver contribution" | ||
|
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Fixed |
||
| # Salary or wages includes a payment of earnings compensation under the Compensation for Live Organ Donors Act 2016; | ||
| # Ref: http://www.legislation.govt.nz/act/public/2007/0097/latest/DLM1519947.html?search=ts_act%40bill%40regulation%40deemedreg_live+organ_resel_25_a#DLM1519947 | ||
| # KiwiSaver deductions: | ||
| reference = "http://www.legislation.govt.nz/act/public/2006/0040/latest/whole.html?search=ts_act%40bill%40regulation%40deemedreg_live+organ_resel_25_a#DLM379040" | ||
|
|
||
| def formula(persons, period, parameters): | ||
| earnings_amount = persons('sum_of_earnings_in_last_52_weeks', period) | ||
| compensation_amount = persons('sum_of_earnings_during_compensation_period_in_last_52_weeks', period) | ||
| earnings_excluding_compensation_amount = earnings_amount - compensation_amount | ||
|
|
||
| earnings_period = persons('earnings_period_in_weeks', period) | ||
| compensation_period = persons('compensation_period_in_weeks', period) | ||
| earnings_excluding_compensation_period = earnings_period - compensation_period | ||
|
|
||
| self_employed_earnings_in_most_recent_tax_year = persons('sum_of_self_employed_earnings_in_most_recently_completed_tax_year', period) | ||
| most_recent_tax_year_period = persons('number_of_weeks_in_most_recently_completed_tax_year', period) | ||
|
|
||
| employee_weekly_earnings = earnings_excluding_compensation_amount / earnings_excluding_compensation_period | ||
| self_employed_weekly_earnings = self_employed_earnings_in_most_recent_tax_year / most_recent_tax_year_period | ||
|
|
||
| weekly_compensation = round(employee_weekly_earnings + self_employed_weekly_earnings, 2) | ||
|
|
||
| kiwisaver_employee_deduction_percentage = persons('kiwisaver_employee_deduction_percentage', period) | ||
| return round(weekly_compensation * kiwisaver_employee_deduction_percentage / 100, 2) | ||
|
|
||
|
|
||
| class kiwisaver_member(Variable): | ||
| value_type = bool | ||
| default_value = True | ||
| entity = Person | ||
| label = u"Whether the person currently pays into Kiwisaver" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class sum_of_earnings_in_last_52_weeks(Variable): | ||
| value_type = float | ||
| entity = Person | ||
| label = u"Total earnings over last 52 weeks" | ||
| reference = "http://organiccoders.allengeer.com/brk-1234-abcdfcrg234356/" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class earnings_period_in_weeks(Variable): | ||
| value_type = int | ||
| default_value = 52 | ||
| entity = Person | ||
| label = u"The number of weeks over which earnings have been earned" | ||
| reference = "http://organiccoders.allengeer.com/definitions-number-of-weeks/" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class sum_of_earnings_during_compensation_period_in_last_52_weeks(Variable): | ||
| value_type = float | ||
| entity = Person | ||
| label = u"Earnings during the period in which the donor was entitled to weekly compensation (as defined in section 6(1) of the Accident Compensation Act 2001)" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class compensation_period_in_weeks(Variable): | ||
| value_type = int | ||
| entity = Person | ||
| label = u"The number of weeks in which the donor was entitled to weekly compensation (as defined in section 6(1) of the Accident Compensation Act 2001) over the last 52 weeks" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class sum_of_self_employed_earnings_in_most_recently_completed_tax_year(Variable): | ||
| value_type = float | ||
| default_value = 0 | ||
| entity = Person | ||
| label = u"Self-employed earnings during the period in which the donor was entitled to weekly compensation (as defined in section 6(1) of the Accident Compensation Act 2001)" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class number_of_weeks_in_most_recently_completed_tax_year(Variable): | ||
| value_type = int | ||
| default_value = 52 | ||
| entity = Person | ||
| label = u"The number of weeks in the most recently completed tax year" | ||
| definition_period = YEAR | ||
|
|
||
|
|
||
| class kiwisaver_employee_deduction_percentage(Variable): | ||
| value_type = int | ||
| default_value = 0 | ||
| entity = Person | ||
| label = u"Kiwisaver employee deduction percentage" | ||
| reference = "http://www.legislation.govt.nz/act/public/2006/0040/latest/whole.html?search=ts_act%40bill%40regulation%40deemedreg_live+organ_resel_25_a#DLM379040" | ||
| definition_period = YEAR | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This method might be better in a KiwiSaver specific module, so that it picks up any changes to KiwiSaver.
It's also largely copy and paste from above. It should utilise the method from above to calculate the basic compensation and then calculate KiwiSaver on that amount.
It is also missing concepts such as KiwiSaver holiday period.