const s=[{age:60,male_2025:26.036,female_2025:28.6125,source:"CPM2014 interpolé 2025"},{age:65,male_2025:21.6055,female_2025:23.987,source:"CPM2014 interpolé 2025"},{age:70,male_2025:17.4215,female_2025:19.5685,source:"CPM2014 interpolé 2025"},{age:75,male_2025:13.5175,female_2025:15.4225,source:"CPM2014 interpolé 2025"},{age:80,male_2025:10.0645,female_2025:11.643,source:"CPM2014 interpolé 2025"},{age:90,male_2025:4.958,female_2025:5.789,source:"CPM2014 interpolé 2025"},{age:100,male_2025:2.4625,female_2025:2.69,source:"CPM2014 interpolé 2025"}];function A(e){const a=s,t=e.age,c=e.gender;let l=0;if(t<60){const n=a.find(o=>o.age===60);if(n){const o=(60-t)*.2;l=(c==="male"?n.male_2025:n.female_2025)+o}}else if(t>100)l=Math.max(1,105-t);else{let n=a[0],o=a[a.length-1];for(let r=0;r=a[r].age&&t<=a[r+1].age){n=a[r],o=a[r+1];break}const m=(t-n.age)/(o.age-n.age),N=c==="male"?n.male_2025:n.female_2025,E=c==="male"?o.male_2025:o.female_2025;l=N+m*(E-N)}const _=t+l,u=Math.min(Math.round(_+3),100),I=t+25<=_?.3:.1;return{lifeExpectancy:Math.round(l*10)/10,recommendedPlanningAge:u,probability25Years:I,source:"Table CPM2014 - Institut canadien des actuaires",compliance:"IPF 2025 compliant"}}function C(e,a){return A({age:e,gender:a}).recommendedPlanningAge}function M(){return s.length>0&&s.every(e=>e.male_2025>0&&e.female_2025>0)}const d={source:"Institut canadien des actuaires",table:"CPM2014 - Mortalité des retraités canadiens",projection:"2025 avec échelle d'amélioration CMP B",compliance:"Conforme normes IPF 2025",implementationDate:new Date().toISOString(),dataFile:"214013T4f.xlsx"},i={INFLATION:.021,COURT_TERME:.024,REVENU_FIXE:.034,ACTIONS_CANADIENNES:.066,CROISSANCE_SALAIRE:.031,MONTE_CARLO:{INFLATION_MEAN:.021,INFLATION_STD:.008,INFLATION_MIN:.005,INFLATION_MAX:.06,STOCKS_CAN_MEAN:.066,STOCKS_CAN_STD:.16,STOCKS_CAN_MIN:-.45,STOCKS_CAN_MAX:.35,BONDS_MEAN:.034,BONDS_STD:.045,BONDS_MIN:-.15,BONDS_MAX:.25,EQUITY_SAFETY_MARGIN:.005},ALLOCATIONS_PAR_AGE:{JEUNE:{actions:.8,obligations:.15,liquidites:.05},MOYEN:{actions:.65,obligations:.3,liquidites:.05},SENIOR:{actions:.45,obligations:.45,liquidites:.1}},SOURCE:"Normes d'hypothèses de projection IPF 2025",MENTION_COMPLETE:"Projections préparées en utilisant les Normes d'hypothèses de projection de l'Institut de planification financière et du Conseil des normes de FP Canada (2025)"},g={convertGeometricToArithmetic(e,a,t=!1){const c=Math.pow(a,2)/2,l=t?i.MONTE_CARLO.EQUITY_SAFETY_MARGIN:0;return e+c+l},getAllocationByAge(e){return e<40?i.ALLOCATIONS_PAR_AGE.JEUNE:e<55?i.ALLOCATIONS_PAR_AGE.MOYEN:i.ALLOCATIONS_PAR_AGE.SENIOR},calculatePortfolioReturn(e){return e.actions*i.ACTIONS_CANADIENNES+e.obligations*i.REVENU_FIXE+e.liquidites*i.COURT_TERME},adjustForInflation(e){return e-i.INFLATION},getRealGrowthRate(e){return(1+e)/(1+i.INFLATION)-1}},O={calculateLifeExpectancy:A,getRecommendedPlanningAge:C,validateCompliance:M,metadata:d,getLifeExpectancyDisplay:(e,a)=>{const t=A({age:e,gender:a});return{lifeExpectancy:t.lifeExpectancy,finalAge:Math.round(e+t.lifeExpectancy),planningAge:t.recommendedPlanningAge,source:t.source}}};new Date().toISOString();export{d as C,i as F,O as M,g as a};