Expose annual employee CPP/QPP/EI/QPIP contribution variables
Nobody has claimed this yet.
Assessment
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Newbie friendliness
- 48/100
Research direction
Start by reading the existing implementations referenced in issues #152, #403, and #527, then compare their parameters and outputs with the linked CRA payroll formulas. Done means stable person-level annual CPP, QPP, EI, and QPIP outputs, covered by the listed edge-case and Quebec/non-Quebec tests, with parameter metadata citing the source.
Written by the indexing model from the issue text.
Description
Problem
PolicyEngine Canada does not expose standalone annual employee-liability
variables for:
- Canada Pension Plan contributions
- Quebec Pension Plan contributions
- Employment Insurance premiums
- Quebec Parental Insurance Plan premiums
These outputs are needed both by downstream disposable-income calculations and
by source-level comparison against CRA payroll formulas. Related work exists in
#152 (CPP), #403 (EI), and #527 (QPP), but QPIP and the common output contract
are not covered.
Scope
- Add person-level annual employee contribution/premium variables for CPP, QPP,
EI, and QPIP. - Apply province-residence routing between CPP/QPP and EI/QPIP.
- Parameterize the basic exemption, YMPE, YAMPE, rates, and annual maxima by
effective year. - Represent base and additional CPP/QPP contributions explicitly where needed,
while also exposing total employee liability.
Acceptance criteria
- Each program has a stable person-level annual output variable.
- Tests cover zero earnings, the basic exemption, YMPE, YAMPE, and annual caps.
- Quebec and non-Quebec cases exercise the correct mutually exclusive pension
plan and applicable insurance premiums. - Parameter metadata cites the current CRA payroll formulas.
- Dominant language
- Python
- Stars
- 17
- Forks
- 35
- PR merge metrics
- No merged PRs in 30d
Getting set up
- No Dockerfile or Docker Compose file
- Has a pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from PolicyEngine/policyengine-canada
-
Difficulty 2/5 1-3 hours Newbie friendliness 62/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 45/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 42/100
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 52/100
-
enhancement
Difficulty 4/5 3-5 days Newbie friendliness 68/100
All issues in PolicyEngine/policyengine-canada
Similar issues
-
bug difficulty:2 good first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
MakazhanAlpamys/Soup#1865 ·
Maintainers usually reply within 1 day
-
area: agents area: docs good first issue
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
openapi/gknowledge#23 ·
-
useless-suppression reported for deprecated-* messages that should be exemptPossibly taken @adityasinha-ghub claimed this today. Open
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
pylint-dev/pylint#11656 ·
Maintainers usually reply within 1 day
-
area:provisioning effort:S priority:P2 provider:local-libvirt risk:daytime-only status:in-progress type:bug
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
randomparity/kdive#3203 · 2 comments ·
Maintainers usually reply within 1 day
-
get() for StrEnumPossibly taken @FeJo5952 claimed this today. Opengood first issue
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
collective/icalendar#1921 · 1 comment ·
Maintainers usually reply within 1 day