From 3c41402c6ce9fc8a81b428ef3da16903c6999bcc Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 24 Aug 2025 16:11:19 -0400 Subject: [PATCH 1/4] Implement CPP retirement pension MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add CPP retirement pension parameters (maximum, average, eligibility age) - Implement eligibility based on age 60+ and contribution history - Calculate benefit proportional to years of contribution (up to 40 years) - Use average monthly benefit as basis for calculation - Add test coverage for various age and contribution scenarios 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- .../cpp/retirement/average_monthly.yaml | 15 +++++ .../cpp/retirement/eligibility_age.yaml | 10 ++++ .../cpp/retirement/maximum_monthly.yaml | 15 +++++ .../benefits/cpp/cpp_retirement_pension.yaml | 55 +++++++++++++++++++ .../benefits/cpp/cpp_retirement_eligible.py | 22 ++++++++ .../benefits/cpp/cpp_retirement_pension.py | 33 +++++++++++ .../benefits/cpp/cpp_years_of_contribution.py | 10 ++++ 7 files changed, 160 insertions(+) create mode 100644 policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml create mode 100644 policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml create mode 100644 policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml create mode 100644 policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml create mode 100644 policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py create mode 100644 policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py create mode 100644 policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml new file mode 100644 index 000000000..e3b65f44d --- /dev/null +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml @@ -0,0 +1,15 @@ +description: Average monthly CPP retirement pension at age 65 +values: + 2020-01-01: 710.41 + 2021-01-01: 702.77 + 2022-01-01: 727.61 + 2023-01-01: 758.32 + 2024-01-01: 816.52 + 2025-01-01: 844.53 +metadata: + unit: currency-CAD + period: month + label: CPP average monthly retirement pension + reference: + - title: CPP retirement pension amount + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html \ No newline at end of file diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml new file mode 100644 index 000000000..4c43dfb7a --- /dev/null +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml @@ -0,0 +1,10 @@ +description: Minimum age for CPP retirement pension eligibility +values: + 2020-01-01: 60 +metadata: + unit: year + period: year + label: CPP retirement pension eligibility age + reference: + - title: CPP retirement pension eligibility + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/eligibility.html \ No newline at end of file diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml new file mode 100644 index 000000000..564c1f49e --- /dev/null +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml @@ -0,0 +1,15 @@ +description: Maximum monthly CPP retirement pension at age 65 +values: + 2020-01-01: 1_175.83 + 2021-01-01: 1_203.75 + 2022-01-01: 1_253.59 + 2023-01-01: 1_306.57 + 2024-01-01: 1_364.60 + 2025-01-01: 1_433.00 +metadata: + unit: currency-CAD + period: month + label: CPP maximum monthly retirement pension + reference: + - title: CPP retirement pension amount + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html \ No newline at end of file diff --git a/policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml b/policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml new file mode 100644 index 000000000..c6ce43d01 --- /dev/null +++ b/policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml @@ -0,0 +1,55 @@ +- name: CPP retirement pension with full contributions + period: 2024 + input: + age: 65 + cpp_years_of_contribution: 40 + output: + # Full contributions (40 years) = average monthly benefit + # $816.52 * 12 = $9,798.24 + cpp_retirement_pension: 9_798.24 + +- name: CPP retirement pension with partial contributions + period: 2024 + input: + age: 65 + cpp_years_of_contribution: 20 + output: + # 20/40 years = 50% of average benefit + # $816.52 * 0.5 * 12 = $4,899.12 + cpp_retirement_pension: 4_899.12 + +- name: No pension below age 60 + period: 2024 + input: + age: 55 + cpp_years_of_contribution: 30 + output: + cpp_retirement_pension: 0 + +- name: No pension without contributions + period: 2024 + input: + age: 65 + cpp_years_of_contribution: 0 + output: + cpp_retirement_pension: 0 + +- name: CPP retirement pension for 2025 + period: 2025 + input: + age: 70 + cpp_years_of_contribution: 45 + output: + # Capped at 40 years = full average benefit + # $844.53 * 12 = $10,134.36 + cpp_retirement_pension: 10_134.36 + +- name: Minimum contribution scenario + period: 2024 + input: + age: 60 + cpp_years_of_contribution: 1 + output: + # 1/40 years = 2.5% of average benefit + # $816.52 * 0.025 * 12 = $244.956 + cpp_retirement_pension: 244.956 \ No newline at end of file diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py new file mode 100644 index 000000000..2bbdc82c0 --- /dev/null +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py @@ -0,0 +1,22 @@ +from policyengine_canada.model_api import * + + +class cpp_retirement_eligible(Variable): + value_type = bool + entity = Person + label = "Eligible for CPP retirement pension" + definition_period = YEAR + documentation = "Whether person is eligible for CPP retirement pension" + + def formula(person, period, parameters): + p = parameters(period).gov.cra.benefits.cpp.retirement + + # Check age requirement (60+) + age = person("age", period) + meets_age = age >= p.eligibility_age + + # Check contribution requirement (simplified - at least 1 year) + years_contributed = person("cpp_years_of_contribution", period) + has_contributions = years_contributed > 0 + + return meets_age & has_contributions \ No newline at end of file diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py new file mode 100644 index 000000000..1801aee8e --- /dev/null +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py @@ -0,0 +1,33 @@ +from policyengine_canada.model_api import * + + +class cpp_retirement_pension(Variable): + value_type = float + entity = Person + label = "CPP retirement pension" + definition_period = YEAR + unit = CAD + documentation = "Annual CPP retirement pension amount" + adds = ["cpp_retirement_pension"] + + def formula(person, period, parameters): + p = parameters(period).gov.cra.benefits.cpp.retirement + + # Check eligibility + eligible = person("cpp_retirement_eligible", period) + + # Simplified calculation based on years of contribution + # Use average between 0 and maximum based on contribution years + years_contributed = person("cpp_years_of_contribution", period) + + # Assume full contributions after 40 years + contribution_factor = min_(years_contributed / 40, 1) + + # Calculate monthly amount between 0 and maximum + # For simplicity, use average as midpoint + monthly_amount = contribution_factor * p.average_monthly + + # Convert to annual + annual_amount = monthly_amount * 12 + + return where(eligible, annual_amount, 0) \ No newline at end of file diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py new file mode 100644 index 000000000..e5ea52f7d --- /dev/null +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py @@ -0,0 +1,10 @@ +from policyengine_canada.model_api import * + + +class cpp_years_of_contribution(Variable): + value_type = float + entity = Person + label = "Years of CPP contributions" + definition_period = YEAR + unit = "year" + documentation = "Number of years person has contributed to CPP" \ No newline at end of file From 838054ea1a6ee4fecd5201df0e24d985fe9f6292 Mon Sep 17 00:00:00 2001 From: Max Ghenis Date: Sun, 24 Aug 2025 21:51:06 -0400 Subject: [PATCH 2/4] Fix CPP retirement pension integration MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Add cpp_retirement_pension to household benefits aggregation - Remove unnecessary self-referential adds declaration 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- policyengine_canada/variables/gov/benefits.py | 1 + .../variables/gov/cra/benefits/cpp/cpp_retirement_pension.py | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/policyengine_canada/variables/gov/benefits.py b/policyengine_canada/variables/gov/benefits.py index 052eae5ed..9a0fd00fa 100644 --- a/policyengine_canada/variables/gov/benefits.py +++ b/policyengine_canada/variables/gov/benefits.py @@ -11,6 +11,7 @@ class benefits(Variable): "child_benefit", "child_disability_benefit", "canada_workers_benefit", + "cpp_retirement_pension", "dental_benefit", "oas_net", # Ontario programs. diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py index 1801aee8e..804814a79 100644 --- a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py @@ -8,7 +8,6 @@ class cpp_retirement_pension(Variable): definition_period = YEAR unit = CAD documentation = "Annual CPP retirement pension amount" - adds = ["cpp_retirement_pension"] def formula(person, period, parameters): p = parameters(period).gov.cra.benefits.cpp.retirement From d05b442ef18f50abced7910267b01d52b89a7a69 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Thu, 5 Mar 2026 18:34:35 +0100 Subject: [PATCH 3/4] Fix CPP formula, values, references, and rebase on master MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Cap benefit at maximum_monthly: min_(avg * factor, max) * 12 - Extract hard-coded 40 into max_contributory_years parameter - Fix 2025 average monthly: $844.53 → $803.76 per canada.ca - Add reference URLs to all 3 variable files - Move tests to tests/gov/cra/benefits/cpp/ (correct path) - Add changelog fragment - Update parameter descriptions to active-voice format Co-Authored-By: Claude Opus 4.6 --- changelog.d/525.added.md | 1 + .../cpp/retirement/average_monthly.yaml | 6 ++-- .../cpp/retirement/eligibility_age.yaml | 4 +-- .../retirement/max_contributory_years.yaml | 10 ++++++ .../cpp/retirement/maximum_monthly.yaml | 4 +-- .../benefits/cpp/cpp_retirement_pension.yaml | 6 ++-- .../benefits/cpp/cpp_retirement_eligible.py | 11 ++++--- .../benefits/cpp/cpp_retirement_pension.py | 31 +++++++++---------- .../benefits/cpp/cpp_years_of_contribution.py | 3 +- 9 files changed, 43 insertions(+), 33 deletions(-) create mode 100644 changelog.d/525.added.md create mode 100644 policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml rename policyengine_canada/tests/{ => gov/cra}/benefits/cpp/cpp_retirement_pension.yaml (91%) diff --git a/changelog.d/525.added.md b/changelog.d/525.added.md new file mode 100644 index 000000000..0f8d820b7 --- /dev/null +++ b/changelog.d/525.added.md @@ -0,0 +1 @@ +Added CPP retirement pension calculation with eligibility, contribution history, and benefit parameters. diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml index e3b65f44d..2c74a1612 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml @@ -1,15 +1,15 @@ -description: Average monthly CPP retirement pension at age 65 +description: The Canada Pension Plan applies this average monthly amount for retirement pension benefits at age 65. values: 2020-01-01: 710.41 2021-01-01: 702.77 2022-01-01: 727.61 2023-01-01: 758.32 2024-01-01: 816.52 - 2025-01-01: 844.53 + 2025-01-01: 803.76 metadata: unit: currency-CAD period: month label: CPP average monthly retirement pension reference: - title: CPP retirement pension amount - href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html \ No newline at end of file + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml index 4c43dfb7a..afe719bf0 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml @@ -1,4 +1,4 @@ -description: Minimum age for CPP retirement pension eligibility +description: The Canada Pension Plan requires this minimum age for retirement pension eligibility. values: 2020-01-01: 60 metadata: @@ -7,4 +7,4 @@ metadata: label: CPP retirement pension eligibility age reference: - title: CPP retirement pension eligibility - href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/eligibility.html \ No newline at end of file + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/eligibility.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml new file mode 100644 index 000000000..2c7900bd3 --- /dev/null +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml @@ -0,0 +1,10 @@ +description: The Canada Pension Plan sets this as the maximum number of contributory years used to calculate the retirement pension. +values: + 1966-01-01: 40 +metadata: + unit: year + period: year + label: CPP maximum contributory years + reference: + - title: Canada Pension Plan (R.S.C., 1985, c. C-8) + href: https://laws-lois.justice.gc.ca/eng/acts/c-8/page-5.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml index 564c1f49e..9b1252894 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml @@ -1,4 +1,4 @@ -description: Maximum monthly CPP retirement pension at age 65 +description: The Canada Pension Plan sets this maximum monthly amount for retirement pension benefits at age 65. values: 2020-01-01: 1_175.83 2021-01-01: 1_203.75 @@ -12,4 +12,4 @@ metadata: label: CPP maximum monthly retirement pension reference: - title: CPP retirement pension amount - href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html \ No newline at end of file + href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html diff --git a/policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml b/policyengine_canada/tests/gov/cra/benefits/cpp/cpp_retirement_pension.yaml similarity index 91% rename from policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml rename to policyengine_canada/tests/gov/cra/benefits/cpp/cpp_retirement_pension.yaml index c6ce43d01..3b249531d 100644 --- a/policyengine_canada/tests/benefits/cpp/cpp_retirement_pension.yaml +++ b/policyengine_canada/tests/gov/cra/benefits/cpp/cpp_retirement_pension.yaml @@ -41,8 +41,8 @@ cpp_years_of_contribution: 45 output: # Capped at 40 years = full average benefit - # $844.53 * 12 = $10,134.36 - cpp_retirement_pension: 10_134.36 + # $803.76 * 12 = $9,645.12 + cpp_retirement_pension: 9_645.12 - name: Minimum contribution scenario period: 2024 @@ -52,4 +52,4 @@ output: # 1/40 years = 2.5% of average benefit # $816.52 * 0.025 * 12 = $244.956 - cpp_retirement_pension: 244.956 \ No newline at end of file + cpp_retirement_pension: 244.956 diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py index 2bbdc82c0..a848c8a9c 100644 --- a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_eligible.py @@ -7,16 +7,17 @@ class cpp_retirement_eligible(Variable): label = "Eligible for CPP retirement pension" definition_period = YEAR documentation = "Whether person is eligible for CPP retirement pension" - + reference = "https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/eligibility.html" + def formula(person, period, parameters): p = parameters(period).gov.cra.benefits.cpp.retirement - + # Check age requirement (60+) age = person("age", period) meets_age = age >= p.eligibility_age - + # Check contribution requirement (simplified - at least 1 year) years_contributed = person("cpp_years_of_contribution", period) has_contributions = years_contributed > 0 - - return meets_age & has_contributions \ No newline at end of file + + return meets_age & has_contributions diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py index 804814a79..9e7fd7111 100644 --- a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_retirement_pension.py @@ -8,25 +8,22 @@ class cpp_retirement_pension(Variable): definition_period = YEAR unit = CAD documentation = "Annual CPP retirement pension amount" - + reference = "https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html" + def formula(person, period, parameters): p = parameters(period).gov.cra.benefits.cpp.retirement - - # Check eligibility eligible = person("cpp_retirement_eligible", period) - - # Simplified calculation based on years of contribution - # Use average between 0 and maximum based on contribution years years_contributed = person("cpp_years_of_contribution", period) - - # Assume full contributions after 40 years - contribution_factor = min_(years_contributed / 40, 1) - - # Calculate monthly amount between 0 and maximum - # For simplicity, use average as midpoint - monthly_amount = contribution_factor * p.average_monthly - - # Convert to annual + + # Contribution factor: ratio of years contributed to maximum contributory period + max_years = p.max_contributory_years + contribution_factor = min_(years_contributed / max_years, 1) + + # Scale average monthly by contribution factor, cap at maximum monthly + monthly_amount = min_( + p.average_monthly * contribution_factor, + p.maximum_monthly, + ) annual_amount = monthly_amount * 12 - - return where(eligible, annual_amount, 0) \ No newline at end of file + + return where(eligible, annual_amount, 0) diff --git a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py index e5ea52f7d..dacd59318 100644 --- a/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py +++ b/policyengine_canada/variables/gov/cra/benefits/cpp/cpp_years_of_contribution.py @@ -7,4 +7,5 @@ class cpp_years_of_contribution(Variable): label = "Years of CPP contributions" definition_period = YEAR unit = "year" - documentation = "Number of years person has contributed to CPP" \ No newline at end of file + documentation = "Number of years person has contributed to CPP" + reference = "https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html" From 3cef046d6ae510f51bab467a3ba722742e485582 Mon Sep 17 00:00:00 2001 From: PavelMakarchuk Date: Thu, 5 Mar 2026 18:56:44 +0100 Subject: [PATCH 4/4] Improve CPP parameter references, titles, and documentation notes - Fix max_contributory_years href to CPP Act s. 49 (page-11) - Add approximation note explaining 40-year simplification - Make all reference titles specific (Act section, data type) - Add historical data sourcing notes to average and maximum params Co-Authored-By: Claude Opus 4.6 --- .../gov/cra/benefits/cpp/retirement/average_monthly.yaml | 3 ++- .../gov/cra/benefits/cpp/retirement/eligibility_age.yaml | 2 +- .../cra/benefits/cpp/retirement/max_contributory_years.yaml | 5 +++-- .../gov/cra/benefits/cpp/retirement/maximum_monthly.yaml | 3 ++- 4 files changed, 8 insertions(+), 5 deletions(-) diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml index 2c74a1612..2c692feb3 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/average_monthly.yaml @@ -10,6 +10,7 @@ metadata: unit: currency-CAD period: month label: CPP average monthly retirement pension + note: "Historical averages (2020-2024) sourced from canada.ca at time of implementation. Canada.ca only displays current values; historical data may require archived sources to verify." reference: - - title: CPP retirement pension amount + - title: Canada Pension Plan — Monthly retirement pension amounts href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml index afe719bf0..c1e712503 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/eligibility_age.yaml @@ -6,5 +6,5 @@ metadata: period: year label: CPP retirement pension eligibility age reference: - - title: CPP retirement pension eligibility + - title: Canada Pension Plan — Retirement pension eligibility requirements href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/eligibility.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml index 2c7900bd3..4b8e31417 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/max_contributory_years.yaml @@ -5,6 +5,7 @@ metadata: unit: year period: year label: CPP maximum contributory years + note: "CPP Act s. 49 allows contributions from age 18 to 65 (~47 years), but dropout provisions (child-rearing, disability, low-earning years) typically reduce the effective contributory period. The 'best 39 years' rule (post-2024 CPP enhancement) makes 40 a reasonable simplified maximum." reference: - - title: Canada Pension Plan (R.S.C., 1985, c. C-8) - href: https://laws-lois.justice.gc.ca/eng/acts/c-8/page-5.html + - title: Canada Pension Plan Act, R.S.C. 1985, c. C-8, s. 49 — Contributory period + href: https://laws-lois.justice.gc.ca/eng/acts/c-8/page-11.html diff --git a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml index 9b1252894..86ac5da76 100644 --- a/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml +++ b/policyengine_canada/parameters/gov/cra/benefits/cpp/retirement/maximum_monthly.yaml @@ -10,6 +10,7 @@ metadata: unit: currency-CAD period: month label: CPP maximum monthly retirement pension + note: "Historical maximums (2020-2024) sourced from canada.ca at time of implementation. Canada.ca only displays current values; historical data may require archived sources to verify." reference: - - title: CPP retirement pension amount + - title: Canada Pension Plan — Maximum monthly retirement pension amount href: https://www.canada.ca/en/services/benefits/publicpensions/cpp/cpp-benefit/amount.html