var S=Object.defineProperty;var M=(d,t,e)=>t in d?S(d,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):d[t]=e;var A=(d,t,e)=>M(d,typeof t!="symbol"?t+"":t,e);import{F as l,a as R}from"./financial-core-C_85DMsm.js";class y{static async runAdvancedSimulation(t,e,n){const i={...this.DEFAULT_PARAMS,...n};try{const a=this.prepareSimulationData(t,e),r=await this.generateEconomicScenarios(i),s=await this.executeSimulations(a,r,i),c=this.calculateStatistics(s),o=this.analyzeRisks(s,a),u=this.generateTypicalScenarios(s),h=this.generateRecommendations(c,o,t,e),m=this.prepareChartData(s,a);return{statistics:c,riskAnalysis:o,scenarios:u,recommendations:h,chartData:m}}catch(a){throw new Error(`Erreur simulation Monte Carlo: ${a instanceof Error?a.message:"Erreur inconnue"}`)}}static prepareSimulationData(t,e){const n=this.calculateAge(t.personal.naissance1),i=t.personal.ageRetraiteSouhaite1||65,a=t.retirement.esperanceVie1||85,r=a-Math.max(n,i),s=e.retirementCapital||0,c=this.estimatePortfolioAllocation(t,n),o=this.calculateGuaranteedIncome(t,e),u=(e.monthlyExpenses||0)*12*.75;return{currentAge:n,retirementAge:i,lifeExpectancy:a,projectionYears:Math.max(1,r),initialCapital:s,portfolioAllocation:c,guaranteedIncome:o,retirementExpenses:u,inflationProtection:c.stocks+c.reits}}static async generateEconomicScenarios(t){const e=[];for(let n=0;nsetTimeout(o,0))}return e}static async executeSimulations(t,e,n){const i=[];for(let a=0;asetTimeout(o,0))}return i}static simulateYearByYear(t,e,n){const i=[];let a=t.initialCapital,r=t.retirementAge,s=.04,c=!1;for(let o=0;o1.2?Math.min(t*1.1,.05):e<-.1&&a<5?t*.85:a>15?t*.95:t}static calculateStatistics(t){const e=t.map(i=>i.finalValue),n=t.filter(i=>i.success);return e.sort((i,a)=>i-a),{successRate:n.length/t.length,medianFinalValue:this.percentile(e,.5),averageFinalValue:e.reduce((i,a)=>i+a,0)/e.length,worstCase5th:this.percentile(e,.05),bestCase95th:this.percentile(e,.95),standardDeviation:this.calculateStdDev(e)}}static analyzeRisks(t,e){const n=t.filter(a=>!a.success);return{sequenceOfReturnsRisk:t.filter(a=>a.depletionAge&&a.depletionAgei.finalValue-a.finalValue),n=i=>{const a=Math.floor(i*(e.length-1)),r=e[a];return{finalValue:r.finalValue,depletionAge:r.depletionAge,averageAnnualReturn:r.averageReturn,maxDrawdown:r.maxDrawdown,inflationAdjustedValue:r.finalValue*.7,sustainabilityScore:r.success?85:25}};return{conservative:n(.25),moderate:n(.5),optimistic:n(.75),stressTest:n(.05)}}static generateRecommendations(t,e,n,i){const a={optimalWithdrawalRate:.04,portfolioAdjustments:[],contingencyPlans:[],reviewTriggers:[]};return t.successRate<.8&&(a.optimalWithdrawalRate=.035,a.portfolioAdjustments.push("Réduire le taux de retrait à 3.5% pour améliorer la durabilité"),a.contingencyPlans.push("Préparer un plan de réduction des dépenses de 10-15%")),e.inflationRisk>.3&&a.portfolioAdjustments.push("Augmenter l'allocation en actions pour protection contre l'inflation"),e.sequenceOfReturnsRisk>.4&&a.contingencyPlans.push("Constituer une réserve de liquidités pour 2-3 ans de dépenses"),a.reviewTriggers=["Perte de portfolio > 20% sur 12 mois","Inflation > 4% pendant 2 ans consécutifs","Changement majeur situation familiale","Révision annuelle systématique"],a}static prepareChartData(t,e){const n=[];for(let i=0;ir.yearlyData[i]).filter(r=>r!==void 0);if(a.length>0){const r=a.map(o=>o.portfolioValue).sort((o,u)=>o-u),s=a.map(o=>o.withdrawal),c=a.map(o=>o.inflation);n.push({year:i,age:e.retirementAge+i,medianValue:this.percentile(r,.5),percentile5:this.percentile(r,.05),percentile95:this.percentile(r,.95),withdrawal:s.reduce((o,u)=>o+u,0)/s.length,inflation:c.reduce((o,u)=>o+u,0)/c.length})}}return{yearlyProjections:n,distributionData:this.createDistributionData(t),sensitivityData:this.createSensitivityData(t)}}static calculateAge(t){if(!t)return 65;const e=new Date(t);return new Date().getFullYear()-e.getFullYear()}static calculateProjectionYears(t){const e=this.calculateAge(t.personal.naissance1),n=t.personal.ageRetraiteSouhaite1||65,i=t.retirement.esperanceVie1||85;return Math.max(1,i-Math.max(e,n))}static estimatePortfolioAllocation(t,e){let i=Math.max(.2,(100-e)/100);return e>60?i*=.8:e<40&&(i=Math.min(.9,i*1.2)),{stocks:i,bonds:(1-i)*.8,cash:(1-i)*.15,reits:(1-i)*.05}}static calculateGuaranteedIncome(t,e){let n=0;return e.rrqOptimization?.person1?.montantMensuelActuel&&(n+=e.rrqOptimization.person1.montantMensuelActuel*12),e.oasGisProjection?.householdTotal?.monthlyOAS&&(n+=e.oasGisProjection.householdTotal.monthlyOAS*12),t.retirement.pensionPrivee1&&(n+=t.retirement.pensionPrivee1*12),t.retirement.pensionPrivee2&&(n+=t.retirement.pensionPrivee2*12),n}static generateCorrelatedRandoms(t){const e=this.normalRandom(),n=this.normalRandom(),i=this.normalRandom();return{inflation:e,stocks:t.stocksInflation*e+Math.sqrt(1-t.stocksInflation*t.stocksInflation)*n,bonds:t.bondsInflation*e+t.stocksBonds*n+Math.sqrt(1-t.bondsInflation*t.bondsInflation-t.stocksBonds*t.stocksBonds)*i}}static normalRandom(){let t=0,e=0;for(;t===0;)t=Math.random();for(;e===0;)e=Math.random();return Math.sqrt(-2*Math.log(t))*Math.cos(2*Math.PI*e)}static applyDistribution(t,e){const n=e.mean+t*e.stdDev;return Math.max(e.min,Math.min(e.max,n))}static applyEconomicLogic(t,e,n){let i=e,a=n;return t>.04&&(a-=(t-.04)*2),t>.02&&t<.05&&(i+=(t-.02)*.5),{stocks:i,bonds:a}}static classifyEconomicRegime(t,e){return t<.01?"DEFLATION":t>.05&&e<.02?"STAGFLATION":e<-.05?"RECESSION":"GROWTH"}static calculatePortfolioReturn(t,e,n){return t.stocks*e.stockReturn+t.bonds*e.bondReturn+t.cash*.02+t.reits*(e.stockReturn*.8)}static findDepletionAge(t,e){for(const n of t)if(n.portfolioValue<=0)return e+n.year;return null}static isSimulationSuccessful(t){return t.length>0&&t[t.length-1].portfolioValue>0}static calculateMaxDrawdown(t){let e=0,n=0;for(const i of t)if(e=Math.max(e,i.portfolioValue),e>0){const a=(e-i.portfolioValue)/e;n=Math.max(n,a)}return n}static calculateAverageReturn(t){if(t.length===0)return 0;const e=t.map(n=>n.portfolioReturn);return e.reduce((n,i)=>n+i,0)/e.length}static percentile(t,e){const n=t.slice().sort((c,o)=>c-o),i=e*(n.length-1),a=Math.floor(i),r=Math.ceil(i),s=i%1;return r>=n.length?n[n.length-1]:n[a]*(1-s)+n[r]*s}static calculateStdDev(t){const e=t.reduce((a,r)=>a+r,0)/t.length,i=t.map(a=>Math.pow(a-e,2)).reduce((a,r)=>a+r,0)/t.length;return Math.sqrt(i)}static calculateLongevityRisk(t,e){return t.filter(i=>i.yearlyData.lengthn.yearlyData.reduce((a,r)=>a+r.inflation,0)/n.yearlyData.length>.04).length/t.length}static calculateMarketCrashRisk(t){return t.filter(n=>n.yearlyData.some(i=>i.portfolioReturn<-.3)).length/t.length}static createDistributionData(t){const e=t.map(c=>c.finalValue).sort((c,o)=>c-o),n=20,i=Math.min(...e),r=(Math.max(...e)-i)/n,s=[];for(let c=0;cm>=o&&m