var Ja=Object.defineProperty;var Ka=(n,t,s)=>t in n?Ja(n,t,{enumerable:!0,configurable:!0,writable:!0,value:s}):n[t]=s;var ve=(n,t,s)=>Ka(n,typeof t!="symbol"?t+"":t,s);import{r as m,j as e,d as Yt}from"./comparison-DdwL-fbx.js";import{u as Ke,R as Xa,A as Za,C as en,X as sn,Y as tn,T as an,a as St,L as nn,b as rn,c as ln}from"./ui-modules-WwJBNQE9.js";import{K as Ct,a as gs,X as ze,S as is,L as on,i as it,e as ie,c as je,j as cn,U as dn,k as ss,I as Oe,l as Qt,R as mn,m as Wt,n as Ft,o as Ht,p as Jt,f as Re,G as Ts,q as un,r as cs,d as Ae,B as ls,T as _e,D as Te,s as Qs,E as xn,H as fs,t as Vs,u as zs,v as pn,w as mt,x as Kt,y as hn,z as lt,J as Rt,M as gn,N as ks,O as fn,Q as vn,W as Et,V as Xt,Y as jn,_ as bn,$ as Le,F as vs,a0 as os,a1 as js,a2 as yn,a3 as Nn,a4 as Zt,a5 as ut,a6 as ea,a7 as sa,a8 as ta,a9 as wn,aa as An,ab as Sn,ac as Os,ad as Cn,g as Rn,ae as En,af as In,ag as Pn,ah as Mn,b as Tn,ai as kn,aj as Dn}from"./icons-Bl8z16Px.js";import{O as qn,F as It,D as rs,I as Cs,N as Pt,a as Ln,b as zn,c as On,A as Vn,L as $n,d as Ws,e as _n,f as Bn,g as Gn,G as Un,T as Yn,h as Mt,i as Fs,j as Qn,r as Tt,k as xt,l as Wn,S as Fn,m as Hn}from"./core-services-C5m_3GXM.js";import{S as Jn,R as aa,a as na,I as Kn,O as ra,P as Xn,C as ia,b as Zn,T as la,D as oa,c as er,d as sr,e as tr,H as ar,f as ca,g as da,h as nr,i as ma,j as rr,L as ua,k as xa,l as pa,m as ir,V as lr,n as ha,o as or,p as cr,q as ga,s as dr,t as fa,u as mr,v as ur,w as va,x as ja,y as ba,z as ya,A as xr,B as pr,E as hr,F as Na,G as wa,J as gr,K as Aa,M as fr,N as vr,Q as jr}from"./radix-CjQ3HxvQ.js";import{F as br,a as kt}from"./financial-core-C_85DMsm.js";import{u as Sa}from"./router-Dd84Hcmg.js";import{A as yr}from"./analytics-4lR5W04J.js";function Ca(n){var t,s,r="";if(typeof n=="string"||typeof n=="number")r+=n;else if(typeof n=="object")if(Array.isArray(n))for(t=0;tn&&(t=0,r=s,s=new Map)}return{get:function(l){var c=s.get(l);if(c!==void 0)return c;if((c=r.get(l))!==void 0)return a(l,c),c},set:function(l,c){s.has(l)?s.set(l,c):a(l,c)}}}var Ia="!";function Pr(n){var t=n.separator||":",s=t.length===1,r=t[0],a=t.length;return function(l){for(var c=[],o=0,x=0,v,p=0;px?v-x:void 0;return{modifiers:c,hasImportantModifier:w,baseClassName:R,maybePostfixModifierPosition:u}}}function Mr(n){if(n.length<=1)return n;var t=[],s=[];return n.forEach(function(r){var a=r[0]==="[";a?(t.push.apply(t,s.sort().concat([r])),s=[]):s.push(r)}),t.push.apply(t,s.sort()),t}function Tr(n){return{cache:Ir(n.cacheSize),splitModifiers:Pr(n),...Ar(n)}}var kr=/\s+/;function Dr(n,t){var s=t.splitModifiers,r=t.getClassGroupId,a=t.getConflictingClassGroupIds,i=new Set;return n.trim().split(kr).map(function(l){var c=s(l),o=c.modifiers,x=c.hasImportantModifier,v=c.baseClassName,p=c.maybePostfixModifierPosition,d=r(p?v.substring(0,p):v),g=!!p;if(!d){if(!p)return{isTailwindClass:!1,originalClassName:l};if(d=r(v),!d)return{isTailwindClass:!1,originalClassName:l};g=!1}var w=Mr(o).join(":"),R=x?w+Ia:w;return{isTailwindClass:!0,modifierId:R,classGroupId:d,originalClassName:l,hasPostfixModifier:g}}).reverse().filter(function(l){if(!l.isTailwindClass)return!0;var c=l.modifierId,o=l.classGroupId,x=l.hasPostfixModifier,v=c+o;return i.has(v)?!1:(i.add(v),a(o,x).forEach(function(p){return i.add(c+p)}),!0)}).reverse().map(function(l){return l.originalClassName}).join(" ")}function qr(){for(var n=arguments.length,t=new Array(n),s=0;stypeof n=="boolean"?`${n}`:n===0?"0":n,Ot=Kr,$s=(n,t)=>s=>{var r;if(t?.variants==null)return Ot(n,s?.class,s?.className);const{variants:a,defaultVariants:i}=t,l=Object.keys(a).map(x=>{const v=s?.[x],p=i?.[x];if(v===null)return null;const d=zt(v)||zt(p);return a[x][d]}),c=s&&Object.entries(s).reduce((x,v)=>{let[p,d]=v;return d===void 0||(x[p]=d),x},{}),o=t==null||(r=t.compoundVariants)===null||r===void 0?void 0:r.reduce((x,v)=>{let{class:p,className:d,...g}=v;return Object.entries(g).every(w=>{let[R,u]=w;return Array.isArray(u)?u.includes({...i,...c}[R]):{...i,...c}[R]===u})?[...x,p,d]:x},[]);return Ot(n,l,o,s?.class,s?.className)},Xr=$s("inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",{variants:{variant:{default:"bg-primary text-primary-foreground hover:bg-primary/90",destructive:"bg-destructive text-destructive-foreground hover:bg-destructive/90",outline:"border border-input bg-background hover:bg-accent hover:text-accent-foreground",secondary:"bg-secondary text-secondary-foreground hover:bg-secondary/80",ghost:"hover:bg-accent hover:text-accent-foreground",link:"text-primary underline-offset-4 hover:underline"},size:{default:"h-10 px-4 py-2",sm:"h-9 rounded-md px-3",lg:"h-11 rounded-md px-8",icon:"h-10 w-10"}},defaultVariants:{variant:"default",size:"default"}}),q=m.forwardRef(({className:n,variant:t,size:s,asChild:r=!1,...a},i)=>{const l=r?Jn:"button";return e.jsx(l,{className:se(Xr({variant:t,size:s,className:n})),ref:i,...a})});q.displayName="Button";const Y=m.forwardRef(({className:n,type:t,...s},r)=>e.jsx("input",{type:t,className:se("flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",n),ref:r,...s}));Y.displayName="Input";const ka=()=>{const[n,t]=m.useState(""),[s,r]=m.useState(null);return m.useEffect(()=>{const l=localStorage.getItem("promo-code");l&&r(l)},[]),{promoCode:n,setPromoCode:t,appliedCode:s,applyPromoCode:async l=>{if(["TESTER100","Calvin2025","EARLYBIRD30","SAVINGS40"].includes(l.toUpperCase())){const o=l.toUpperCase();return r(o),localStorage.setItem("promo-code",o),{success:!0,message:`Code promo "${o}" appliqué avec succès !`,code:o}}else return{success:!1,message:"Code promo invalide. Veuillez vérifier et réessayer."}},clearPromoCode:()=>{t(""),r(null),localStorage.removeItem("promo-code")}}},dl=()=>{const[n,t]=m.useState(!1),[s,r]=m.useState(""),[a,i]=m.useState(!1),[l,c]=m.useState(""),[o,x]=m.useState(!1),{applyPromoCode:v}=ka(),{language:p}=Ke(),d=p==="fr",g=async()=>{if(s.trim()){i(!0),c("");try{const R=await v(s.trim());R.success?(c(d?`Code "${s.trim().toUpperCase()}" appliqué avec succès ! Toutes les fonctionnalités sont maintenant déverrouillées.`:`Code "${s.trim().toUpperCase()}" applied successfully! All features are now unlocked.`),x(!0),r(""),setTimeout(()=>{t(!1),x(!1),c("")},2e3)):(c(R.message||(d?"Code invalide. Veuillez vérifier et réessayer.":"Invalid code. Please check and try again.")),x(!1))}catch{c(d?"Erreur lors de l'application du code.":"Error applying code."),x(!1)}finally{i(!1)}}},w=R=>{R.key==="Enter"&&g()};return e.jsxs(e.Fragment,{children:[e.jsx(q,{onClick:()=>t(!0),className:"fixed bottom-6 right-20 z-50 w-12 h-12 rounded-full bg-gray-600 hover:bg-gray-700 text-white shadow-lg transition-all duration-200 hover:scale-105",size:"icon",title:d?"Déverrouiller les fonctionnalités":"Unlock features",children:e.jsx(Ct,{className:"w-5 h-5"})}),n&&e.jsxs("div",{className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{className:"fixed inset-0 bg-black/50",onClick:()=>t(!1)}),e.jsxs("div",{className:"relative bg-white rounded-lg shadow-lg p-6 w-full max-w-md mx-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-4",children:[e.jsx(Ct,{className:"w-5 h-5 text-gray-600"}),e.jsx("h2",{className:"text-lg font-semibold text-gray-800",children:d?"Code de déverrouillage":"Unlock Code"})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx("label",{className:"text-sm font-medium text-gray-700",children:d?"Entrez votre code :":"Enter your code:"}),e.jsx(Y,{type:"text",value:s,onChange:R=>r(R.target.value.toUpperCase()),onKeyPress:w,placeholder:"GRATUIT",className:"text-center font-mono text-lg tracking-wider",disabled:a})]}),l&&e.jsx("div",{className:`p-3 rounded-lg text-sm ${o?"bg-green-50 text-green-800 border border-green-200":"bg-red-50 text-red-800 border border-red-200"}`,children:e.jsxs("div",{className:"flex items-center gap-2",children:[o?e.jsx(gs,{className:"w-4 h-4"}):e.jsx(ze,{className:"w-4 h-4"}),l]})}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{onClick:g,disabled:!s.trim()||a,className:"flex-1",children:a?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),d?"Application...":"Applying..."]}):d?"Appliquer":"Apply"}),e.jsx(q,{variant:"outline",onClick:()=>{t(!1),r(""),c(""),x(!1)},children:d?"Annuler":"Cancel"})]})]})]})]})]})},M=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("rounded-lg border bg-card text-card-foreground shadow-sm",n),...t}));M.displayName="Card";const $=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("flex flex-col space-y-1.5 p-6",n),...t}));$.displayName="CardHeader";const _=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("text-2xl font-semibold leading-none tracking-tight",n),...t}));_.displayName="CardTitle";const xe=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("text-sm text-muted-foreground",n),...t}));xe.displayName="CardDescription";const k=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("p-6 pt-0",n),...t}));k.displayName="CardContent";const Zr=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("flex items-center p-6 pt-0",n),...t}));Zr.displayName="CardFooter";const Ye=m.forwardRef(({className:n,orientation:t="horizontal",decorative:s=!0,...r},a)=>e.jsx(aa,{ref:a,decorative:s,orientation:t,className:se("shrink-0 bg-border",t==="horizontal"?"h-[1px] w-full":"h-full w-[1px]",n),...r}));Ye.displayName=aa.displayName;const ei=$s("relative w-full rounded-lg border p-4 [&>svg~*]:pl-7 [&>svg+div]:translate-y-[-3px] [&>svg]:absolute [&>svg]:left-4 [&>svg]:top-4 [&>svg]:text-foreground",{variants:{variant:{default:"bg-background text-foreground",destructive:"border-destructive/50 text-destructive dark:border-destructive [&>svg]:text-destructive"}},defaultVariants:{variant:"default"}}),pe=m.forwardRef(({className:n,variant:t,...s},r)=>e.jsx("div",{ref:r,role:"alert",className:se(ei({variant:t}),n),...s}));pe.displayName="Alert";const si=m.forwardRef(({className:n,...t},s)=>e.jsx("h5",{ref:s,className:se("mb-1 font-medium leading-none tracking-tight",n),...t}));si.displayName="AlertTitle";const he=m.forwardRef(({className:n,...t},s)=>e.jsx("div",{ref:s,className:se("text-sm [&_p]:leading-relaxed",n),...t}));he.displayName="AlertDescription";const ti=$s("inline-flex items-center rounded-full border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",{variants:{variant:{default:"border-transparent bg-primary text-primary-foreground hover:bg-primary/80",secondary:"border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",destructive:"border-transparent bg-destructive text-destructive-foreground hover:bg-destructive/80",outline:"text-foreground"}},defaultVariants:{variant:"default"}});function ee({className:n,variant:t,...s}){return e.jsx("div",{className:se(ti({variant:t}),n),...s})}const We=m.forwardRef(({className:n,value:t,...s},r)=>e.jsx(na,{ref:r,className:se("relative h-4 w-full overflow-hidden rounded-full bg-secondary",n),...s,children:e.jsx(Kn,{className:"h-full w-full flex-1 bg-primary transition-all",style:{transform:`translateX(-${100-(t||0)}%)`}})}));We.displayName=na.displayName;const ai=({onComplete:n,onSkip:t})=>e.jsxs("div",{className:"h-full flex flex-col",children:[e.jsxs("div",{className:"flex-1 overflow-y-auto space-y-3 pb-4",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"w-10 h-10 bg-blue-100 rounded-full flex items-center justify-center mx-auto mb-2",children:e.jsx(is,{className:"h-5 w-5 text-blue-600"})}),e.jsx("h2",{className:"text-lg font-bold text-gray-900 mb-2",children:"Bienvenue sur MonPlanRetraite.ca"}),e.jsx("p",{className:"text-sm text-gray-600",children:"Découvrez les fonctionnalités principales et la philosophie de sécurité de notre plateforme."})]}),e.jsx(M,{className:"border-green-200 bg-green-50",children:e.jsxs(k,{className:"p-3",children:[e.jsxs("div",{className:"flex items-center mb-2",children:[e.jsx(on,{className:"h-4 w-4 text-green-600 mr-2"}),e.jsx("h3",{className:"text-sm font-semibold text-green-800",children:"🛡️ Vos données restent sur VOTRE appareil"})]}),e.jsxs("div",{className:"grid grid-cols-3 gap-2 text-center",children:[e.jsxs("div",{children:[e.jsx(it,{className:"h-5 w-5 text-green-600 mx-auto mb-1"}),e.jsx("h4",{className:"font-medium text-green-800 text-xs mb-1",children:"Stockage local"}),e.jsx("p",{className:"text-xs text-green-700",children:"Données dans votre navigateur"})]}),e.jsxs("div",{children:[e.jsx(is,{className:"h-5 w-5 text-green-600 mx-auto mb-1"}),e.jsx("h4",{className:"font-medium text-green-800 text-xs mb-1",children:"AES-256"}),e.jsx("p",{className:"text-xs text-green-700",children:"Protection bancaire"})]}),e.jsxs("div",{children:[e.jsx(ie,{className:"h-5 w-5 text-green-600 mx-auto mb-1"}),e.jsx("h4",{className:"font-medium text-green-800 text-xs mb-1",children:"Zéro transmission"}),e.jsx("p",{className:"text-xs text-green-700",children:"Aucun envoi serveur"})]})]})]})}),e.jsxs("div",{className:"grid grid-cols-2 gap-2",children:[e.jsx(M,{children:e.jsxs(k,{className:"p-3",children:[e.jsx("h3",{className:"text-sm font-semibold mb-2",children:"🧮 Calculateurs"}),e.jsxs("ul",{className:"space-y-1 text-xs text-gray-600",children:[e.jsx("li",{children:"• Planification retraite"}),e.jsx("li",{children:"• Optimisation fiscale"}),e.jsx("li",{children:"• Gestion budget"})]})]})}),e.jsx(M,{children:e.jsxs(k,{className:"p-3",children:[e.jsx("h3",{className:"text-sm font-semibold mb-2",children:"📊 Analyses"}),e.jsxs("ul",{className:"space-y-1 text-xs text-gray-600",children:[e.jsx("li",{children:"• Rapports détaillés"}),e.jsx("li",{children:"• Comparaisons scénarios"}),e.jsx("li",{children:"• Conseils personnalisés"})]})]})})]})]}),e.jsx("div",{className:"flex justify-center pt-3 border-t bg-white",children:e.jsxs(q,{onClick:n,className:"bg-green-600 hover:bg-green-700 px-8 py-3 text-lg font-bold",children:[e.jsx(ie,{className:"h-5 w-5 mr-2"}),"J'ai compris, continuons !"]})})]}),ni=({onComplete:n,onSkip:t})=>{const[s,r]=m.useState(0),[a,i]=m.useState({}),l=[{title:"Qu'est-ce qu'un budget ?",content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-gray-700",children:"Un budget est un plan qui vous aide à gérer votre argent en comparant vos revenus et vos dépenses."}),e.jsx(M,{className:"border-blue-200 bg-blue-50",children:e.jsxs(k,{className:"p-4",children:[e.jsxs("div",{className:"flex items-center mb-3",children:[e.jsx(je,{className:"h-5 w-5 text-blue-600 mr-2"}),e.jsx("h4",{className:"font-semibold text-blue-800",children:"Formule simple"})]}),e.jsx("div",{className:"text-center text-lg font-mono bg-white p-3 rounded border",children:"Revenus - Dépenses = Surplus (ou Déficit)"})]})})]})},{title:"Les 3 types de dépenses",content:e.jsx("div",{className:"space-y-4",children:e.jsxs("div",{className:"grid gap-4",children:[e.jsx(M,{className:"border-red-200 bg-red-50",children:e.jsxs(k,{className:"p-4",children:[e.jsx("h4",{className:"font-semibold text-red-800 mb-2",children:"🏠 Dépenses fixes (essentielles)"}),e.jsx("p",{className:"text-sm text-red-700 mb-2",children:"Montant identique chaque mois"}),e.jsx("div",{className:"text-xs text-red-600",children:"Exemples : Loyer, assurances, paiements de prêt"})]})}),e.jsx(M,{className:"border-orange-200 bg-orange-50",children:e.jsxs(k,{className:"p-4",children:[e.jsx("h4",{className:"font-semibold text-orange-800 mb-2",children:"🛒 Dépenses variables (nécessaires)"}),e.jsx("p",{className:"text-sm text-orange-700 mb-2",children:"Montant qui varie mais nécessaires"}),e.jsx("div",{className:"text-xs text-orange-600",children:"Exemples : Épicerie, essence, électricité"})]})}),e.jsx(M,{className:"border-green-200 bg-green-50",children:e.jsxs(k,{className:"p-4",children:[e.jsx("h4",{className:"font-semibold text-green-800 mb-2",children:"🎬 Dépenses discrétionnaires (plaisir)"}),e.jsx("p",{className:"text-sm text-green-700 mb-2",children:"Optionnelles, pour le plaisir"}),e.jsx("div",{className:"text-xs text-green-600",children:"Exemples : Restaurants, loisirs, vêtements non-essentiels"})]})})]})})},{title:"La règle 50/30/20",content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-gray-700",children:"Une méthode simple pour répartir votre budget :"}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:"w-12 h-8 bg-red-500 rounded mr-3"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-semibold",children:"50% - Besoins essentiels"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Logement, nourriture, transport, assurances"})]})]}),e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:"w-12 h-8 bg-blue-500 rounded mr-3"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-semibold",children:"30% - Désirs et loisirs"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Restaurants, divertissement, achats non-essentiels"})]})]}),e.jsxs("div",{className:"flex items-center",children:[e.jsx("div",{className:"w-12 h-8 bg-green-500 rounded mr-3"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("div",{className:"font-semibold",children:"20% - Épargne et dettes"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Fonds d'urgence, REER, CELI, remboursement de dettes"})]})]})]})]})},{title:"Quiz rapide",content:e.jsxs("div",{className:"space-y-4",children:[e.jsx("p",{className:"text-gray-700 mb-4",children:"Testez vos connaissances :"}),e.jsx(M,{children:e.jsxs(k,{className:"p-4",children:[e.jsx("h4",{className:"font-semibold mb-3",children:`Dans quelle catégorie classeriez-vous "l'abonnement Netflix" ?`}),e.jsx("div",{className:"space-y-2",children:[{id:"fixed",label:"Dépense fixe essentielle"},{id:"variable",label:"Dépense variable nécessaire"},{id:"discretionary",label:"Dépense discrétionnaire"}].map(v=>e.jsxs("label",{className:"flex items-center space-x-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:"netflix",value:v.id,checked:a.netflix===v.id,onChange:p=>i(d=>({...d,netflix:p.target.value})),className:"text-blue-600"}),e.jsx("span",{children:v.label})]},v.id))}),a.netflix==="discretionary"&&e.jsxs("div",{className:"mt-3 p-3 bg-green-50 border border-green-200 rounded",children:[e.jsxs("div",{className:"flex items-center text-green-800",children:[e.jsx(ie,{className:"h-4 w-4 mr-2"}),e.jsx("span",{className:"font-medium",children:"Correct !"})]}),e.jsx("p",{className:"text-sm text-green-700 mt-1",children:"Netflix est un divertissement, donc une dépense discrétionnaire."})]}),a.netflix&&a.netflix!=="discretionary"&&e.jsxs("div",{className:"mt-3 p-3 bg-orange-50 border border-orange-200 rounded",children:[e.jsxs("div",{className:"flex items-center text-orange-800",children:[e.jsx(cn,{className:"h-4 w-4 mr-2"}),e.jsx("span",{className:"font-medium",children:"Pas tout à fait..."})]}),e.jsx("p",{className:"text-sm text-orange-700 mt-1",children:"Netflix est un divertissement, donc une dépense discrétionnaire (optionnelle)."})]})]})})]})}],c=()=>{s{s>0&&r(s-1)},x=(s+1)/l.length*100;return e.jsxs("div",{className:"h-full flex flex-col space-y-4",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h2",{className:"text-lg font-bold text-gray-900",children:"Les bases du budget"}),e.jsxs("span",{className:"text-sm text-gray-500",children:[s+1," / ",l.length]})]}),e.jsx(We,{value:x,className:"h-2"})]}),e.jsx(M,{className:"flex-1 flex flex-col",children:e.jsxs(k,{className:"p-4 flex-1 flex flex-col",children:[e.jsx("h3",{className:"text-base font-semibold mb-3 text-blue-800",children:l[s].title}),e.jsx("div",{className:"flex-1 overflow-y-auto",children:l[s].content})]})}),e.jsxs("div",{className:"flex justify-between items-center pt-3 border-t",children:[e.jsx(q,{variant:"outline",onClick:o,disabled:s===0,size:"sm",children:"Précédent"}),e.jsx("div",{className:"flex space-x-2",children:s{const{language:i}=Ke(),l=i==="fr",[c,o]=m.useState({currentPath:null,currentStepIndex:0,isProfileSetup:!r,showStepDetails:!1,isPlaying:!1,timeSpent:0}),[x,v]=m.useState(r||null),[p,d]=m.useState({completed:0,total:0,percentage:0}),[g,w]=m.useState(null),R=qn.getInstance(),u={next:l?"Continuer":"Next",pathTitle:l?"Parcours d'accompagnement":"Guidance Path",progression:l?"Progression":"Progress",steps:l?"étapes":"steps",details:l?"Détails":"Details",essential:l?"Essentiel":"Essential",recommended:l?"Recommandé":"Recommended",advanced:l?"Avancé":"Advanced",optional:l?"Optionnel":"Optional",minutes:"min",markCompleted:l?"Marquer comme terminé":"Mark as Completed",skipStep:l?"Passer cette étape":"Skip This Step",restart:l?"Recommencer":"Restart",previous:l?"Précédent":"Previous",step:l?"Étape":"Step",of:l?"sur":"of",practicalTips:l?"💡 Conseils pratiques :":"💡 Practical Tips:",pathCompleted:l?"Parcours terminé !":"Path Completed!",startPlanning:l?"Commencer ma planification":"Start My Planning"};m.useEffect(()=>{if(x&&!c.currentPath){const I=R.generatePersonalizedPath(x);o(F=>({...F,currentPath:I,isProfileSetup:!1}))}},[x]),m.useEffect(()=>{if(c.currentPath){const I=R.calculateProgress(c.currentPath);d(I);const F=R.getNextStep(c.currentPath);w(F)}},[c.currentPath,c.currentStepIndex]),m.useEffect(()=>{let I;return c.isPlaying&&(I=setInterval(()=>{o(F=>({...F,timeSpent:F.timeSpent+1}))},1e3)),()=>clearInterval(I)},[c.isPlaying]);const b=I=>{v(I),R.saveUserProfile(I),o(F=>({...F,isProfileSetup:!1}))},N=I=>{c.currentPath&&(R.completeStep(c.currentPath.id,I),o(W=>({...W,currentStepIndex:W.currentStepIndex+1})),R.calculateProgress(c.currentPath).percentage===100&&s?.())},S=()=>{g&&g.isOptional&&o(I=>({...I,currentStepIndex:I.currentStepIndex+1}))},j=()=>{o(I=>({...I,currentStepIndex:Math.max(0,I.currentStepIndex-1)}))},h=()=>{c.currentPath&&(R.resetPath(c.currentPath.id),o(I=>({...I,currentStepIndex:0,timeSpent:0})))},E=I=>{const F=Math.floor(I/60),W=I%60;return`${F}:${W.toString().padStart(2,"0")}`},f=I=>{switch(I){case"essential":return e.jsx(Re,{className:"h-4 w-4 text-red-500"});case"recommended":return e.jsx(Jt,{className:"h-4 w-4 text-blue-500"});case"advanced":return e.jsx(Ht,{className:"h-4 w-4 text-purple-500"})}},A=I=>{switch(I){case"essential":return"bg-red-100 text-red-800 border-red-200";case"recommended":return"bg-blue-100 text-blue-800 border-blue-200";case"advanced":return"bg-purple-100 text-purple-800 border-purple-200"}},L=I=>{const F=()=>{N(I.id)},W=()=>{S()};switch(I.component){case"WelcomeStep":return e.jsx(ai,{onComplete:F,onSkip:I.isOptional?W:void 0});case"BudgetBasicsStep":return e.jsx(ni,{onComplete:F,onSkip:I.isOptional?W:void 0});default:return e.jsx(M,{className:"border-2 border-dashed border-gray-200 flex-1",children:e.jsx(k,{className:"p-4 text-center h-full flex flex-col justify-center",children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("div",{className:"w-12 h-12 bg-blue-100 rounded-full flex items-center justify-center mx-auto",children:f(I.category)}),e.jsx("h3",{className:"text-lg font-semibold",children:I.title}),e.jsx("p",{className:"text-gray-600 text-sm",children:"Cette étape sera bientôt disponible avec du contenu interactif."}),e.jsxs("div",{className:"flex items-center justify-center space-x-3 pt-2",children:[e.jsxs(q,{onClick:F,className:"bg-green-600 hover:bg-green-700",size:"sm",children:[e.jsx(ie,{className:"h-4 w-4 mr-2"}),u.markCompleted]}),I.isOptional&&e.jsx(q,{variant:"outline",onClick:W,size:"sm",children:u.skipStep})]})]})})})}};return n?c.isProfileSetup?e.jsx("div",{className:`fixed inset-0 bg-white flex items-center justify-center z-50 p-4 ${a}`,children:e.jsxs(M,{className:"w-full max-w-2xl h-[90vh] flex flex-col shadow-2xl border-2 border-blue-200",children:[e.jsx($,{className:"border-b flex-shrink-0",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(_,{className:"text-xl flex items-center",children:[e.jsx(dn,{className:"h-6 w-6 mr-2 text-blue-600"}),"Configuration de votre profil"]}),e.jsx(q,{variant:"ghost",size:"sm",onClick:t,children:e.jsx(ze,{className:"h-4 w-4"})})]})}),e.jsx(k,{className:"p-6 flex-1 overflow-y-auto",children:e.jsx(ri,{onSubmit:b})})]})}):n?e.jsx("div",{className:`fixed inset-0 bg-white flex items-center justify-center z-50 p-4 ${a} animate-in fade-in duration-300`,onClick:t,children:e.jsxs(M,{className:"w-full max-w-5xl h-[95vh] overflow-hidden shadow-2xl border-2 border-blue-200 relative animate-in slide-in-from-bottom-4 duration-300",onClick:I=>I.stopPropagation(),children:[e.jsx(q,{variant:"ghost",size:"sm",onClick:t,className:"absolute top-4 right-4 z-10 hover:bg-red-100 hover:text-red-600",children:e.jsx(ze,{className:"h-5 w-5"})}),e.jsxs($,{className:"border-b bg-gradient-to-r from-blue-50 to-indigo-50",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(_,{className:"text-xl text-blue-900",children:c.currentPath?.name||u.pathTitle}),e.jsx("p",{className:"text-sm text-blue-700 mt-1",children:c.currentPath?.description})]}),e.jsx("div",{className:"flex items-center space-x-2",children:e.jsxs(ee,{variant:"outline",className:"text-xs",children:[e.jsx(ss,{className:"h-3 w-3 mr-1"}),E(c.timeSpent)]})})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm text-blue-700 mb-2",children:[e.jsx("span",{children:u.progression}),e.jsxs("span",{children:[p.completed,"/",p.total," ",u.steps]})]}),e.jsx(We,{value:p.percentage,className:"h-2"})]})]}),e.jsx(k,{className:"p-3 flex-1 flex flex-col overflow-hidden",children:g?e.jsxs("div",{className:"flex-1 flex flex-col min-h-0",children:[e.jsxs("div",{className:"flex items-start justify-between mb-3",children:[e.jsxs("div",{className:"flex-1 min-w-0",children:[e.jsxs("div",{className:"flex items-center space-x-2 mb-1",children:[f(g.category),e.jsx("h2",{className:"text-lg font-bold text-gray-900 truncate",children:g.title}),e.jsx(ee,{className:`text-xs ${A(g.category)}`,children:g.category==="essential"?u.essential:g.category==="recommended"?u.recommended:u.advanced})]}),e.jsx("p",{className:"text-gray-600 text-sm mb-2",children:g.description}),e.jsxs("div",{className:"flex items-center space-x-3 text-xs text-gray-500",children:[e.jsxs("span",{className:"flex items-center",children:[e.jsx(ss,{className:"h-3 w-3 mr-1"}),"~",g.estimatedTime," ",u.minutes]}),g.isOptional&&e.jsx(ee,{variant:"outline",className:"text-xs",children:u.optional})]})]}),e.jsxs(q,{variant:"outline",size:"sm",onClick:()=>o(I=>({...I,showStepDetails:!I.showStepDetails})),className:"ml-2 flex-shrink-0",children:[e.jsx(Oe,{className:"h-3 w-3 mr-1"}),u.details]})]}),c.showStepDetails&&e.jsxs(pe,{className:"border-blue-200 bg-blue-50 mb-3",children:[e.jsx(Oe,{className:"h-4 w-4"}),e.jsx(he,{children:e.jsxs("div",{className:"space-y-2",children:[e.jsx("p",{className:"text-xs",children:g.helpText}),g.tips.length>0&&e.jsxs("div",{children:[e.jsx("h4",{className:"font-medium text-xs mb-1",children:u.practicalTips}),e.jsx("ul",{className:"text-xs space-y-1",children:g.tips.map((I,F)=>e.jsxs("li",{className:"flex items-start",children:[e.jsx("span",{className:"mr-1",children:"•"}),e.jsx("span",{children:I})]},F))})]})]})})]}),e.jsx("div",{className:"flex-1 min-h-0",children:L(g)}),e.jsxs("div",{className:"flex items-center justify-between pt-3 border-t mt-3 flex-shrink-0",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsxs(q,{variant:"outline",onClick:j,disabled:c.currentStepIndex===0,size:"sm",children:[e.jsx(Qt,{className:"h-3 w-3 mr-1"}),u.previous]}),e.jsxs(q,{variant:"outline",onClick:h,size:"sm",children:[e.jsx(mn,{className:"h-3 w-3 mr-1"}),u.restart]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(q,{variant:"outline",onClick:()=>o(I=>({...I,isPlaying:!I.isPlaying})),size:"sm",children:c.isPlaying?e.jsx(Wt,{className:"h-3 w-3"}):e.jsx(Ft,{className:"h-3 w-3"})}),e.jsxs("span",{className:"text-xs text-gray-500",children:[u.step," ",c.currentStepIndex+1," ",u.of," ",c.currentPath?.steps.length||0]}),g&&e.jsx(q,{onClick:()=>N(g.id),size:"sm",className:"bg-blue-600 hover:bg-blue-700 text-white","aria-label":l?"Continuer":"Continue",children:u.next})]})]})]}):e.jsxs("div",{className:"text-center py-12",children:[e.jsx("div",{className:"w-20 h-20 bg-green-100 rounded-full flex items-center justify-center mx-auto mb-6",children:e.jsx(ie,{className:"h-10 w-10 text-green-600"})}),e.jsx("h2",{className:"text-2xl font-bold text-gray-900 mb-4",children:u.pathCompleted}),e.jsxs("p",{className:"text-gray-600 mb-6",children:["Vous avez complété votre parcours d'accompagnement en ",E(c.timeSpent),". Vous êtes maintenant prêt à utiliser tous les outils de MonPlanRetraite.ca !"]}),e.jsxs("div",{className:"flex items-center justify-center space-x-3",children:[e.jsx(q,{onClick:s,className:"bg-green-600 hover:bg-green-700",children:u.startPlanning}),e.jsx(q,{variant:"outline",onClick:h,children:u.restart})]})]})})]})}):null:null},ri=({onSubmit:n})=>{const[t,s]=m.useState({age:30,retirementAge:65,hasFinancialExperience:!1,primaryGoal:"budget",timeAvailable:"moderate",preferredLearningStyle:"interactive",hasPartner:!1,hasChildren:!1,employmentStatus:"employed"}),r=a=>{a.preventDefault(),n(t)};return e.jsxs("div",{className:"h-full flex flex-col",children:[e.jsx("div",{className:"flex-1 overflow-y-auto",children:e.jsxs("form",{onSubmit:r,className:"space-y-4",children:[e.jsxs("div",{className:"text-center mb-4",children:[e.jsx("h3",{className:"text-lg font-semibold mb-2",children:"Personnalisons votre expérience"}),e.jsx("p",{className:"text-gray-600 text-sm",children:"Ces informations nous aident à créer un parcours adapté à vos besoins."})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{htmlFor:"age-input",className:"block text-sm font-medium mb-1",children:"Âge"}),e.jsx("input",{id:"age-input",type:"number",value:t.age,onChange:a=>s(i=>({...i,age:parseInt(a.target.value)})),className:"w-full p-2 border rounded-md text-sm",min:"18",max:"100",title:"Votre âge actuel",placeholder:"Ex: 30"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"retirement-age-input",className:"block text-sm font-medium mb-1",children:"Âge de retraite souhaité"}),e.jsx("input",{id:"retirement-age-input",type:"number",value:t.retirementAge,onChange:a=>s(i=>({...i,retirementAge:parseInt(a.target.value)})),className:"w-full p-2 border rounded-md text-sm",min:"50",max:"75",title:"L'âge auquel vous souhaitez prendre votre retraite",placeholder:"Ex: 65"})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"goal-select",className:"block text-sm font-medium mb-1",children:"Objectif principal"}),e.jsxs("select",{id:"goal-select",value:t.primaryGoal,onChange:a=>s(i=>({...i,primaryGoal:a.target.value})),className:"w-full p-2 border rounded-md text-sm",title:"Votre objectif financier principal",children:[e.jsx("option",{value:"budget",children:"Maîtriser mon budget"}),e.jsx("option",{value:"savings",children:"Développer mon épargne"}),e.jsx("option",{value:"retirement",children:"Planifier ma retraite"}),e.jsx("option",{value:"debt",children:"Gérer mes dettes"}),e.jsx("option",{value:"investment",children:"Apprendre à investir"})]})]}),e.jsxs("div",{children:[e.jsx("label",{htmlFor:"time-select",className:"block text-sm font-medium mb-1",children:"Temps disponible"}),e.jsxs("select",{id:"time-select",value:t.timeAvailable,onChange:a=>s(i=>({...i,timeAvailable:a.target.value})),className:"w-full p-2 border rounded-md text-sm",title:"Temps que vous souhaitez consacrer au parcours",children:[e.jsx("option",{value:"quick",children:"Express (15-20 min)"}),e.jsx("option",{value:"moderate",children:"Équilibré (30-45 min)"}),e.jsx("option",{value:"thorough",children:"Complet (60+ min)"})]})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx("label",{htmlFor:"experience-select",className:"block text-sm font-medium mb-1",children:"Expérience financière"}),e.jsxs("select",{id:"experience-select",value:t.hasFinancialExperience?"yes":"no",onChange:a=>s(i=>({...i,hasFinancialExperience:a.target.value==="yes"})),className:"w-full p-2 border rounded-md text-sm",title:"Votre niveau d'expérience en planification financière",children:[e.jsx("option",{value:"no",children:"Débutant"}),e.jsx("option",{value:"yes",children:"Intermédiaire"})]})]})]})]})}),e.jsx("div",{className:"flex items-center justify-center pt-4 border-t bg-white",children:e.jsx(q,{onClick:r,className:"bg-blue-600 hover:bg-blue-700 px-8 py-3 text-lg font-bold",children:"Créer mon parcours personnalisé"})})]})},_s=er,ht=sr,ii=Xn,Da=m.forwardRef(({className:n,...t},s)=>e.jsx(ra,{ref:s,className:se("fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",n),...t}));Da.displayName=ra.displayName;const bs=m.forwardRef(({className:n,children:t,...s},r)=>e.jsxs(ii,{children:[e.jsx(Da,{}),e.jsxs(ia,{ref:r,className:se("fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",n),...s,children:[t,e.jsxs(Zn,{className:"absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground",children:[e.jsx(ze,{className:"h-4 w-4"}),e.jsx("span",{className:"sr-only",children:"Close"})]})]})]}));bs.displayName=ia.displayName;const ys=({className:n,...t})=>e.jsx("div",{className:se("flex flex-col space-y-1.5 text-center sm:text-left",n),...t});ys.displayName="DialogHeader";const Ns=m.forwardRef(({className:n,...t},s)=>e.jsx(la,{ref:s,className:se("text-lg font-semibold leading-none tracking-tight",n),...t}));Ns.displayName=la.displayName;const gt=m.forwardRef(({className:n,...t},s)=>e.jsx(oa,{ref:s,className:se("text-sm text-muted-foreground",n),...t}));gt.displayName=oa.displayName;const li=n=>"originalPrice"in n&&"onCodeApplied"in n,ul=n=>{const[t,s]=m.useState(""),[r,a]=m.useState(!1),[i,l]=m.useState(null),[c,o]=m.useState(0),[x,v]=m.useState(null),{applyPromoCode:p}=ka(),{language:d}=Ke(),g=d==="fr",w={fr:{placeholder:"Entrez votre code promo...",havePromoCode:"Avez-vous un code promo ?",enterCodeForDiscount:"Entrez votre code pour bénéficier d'une réduction",apply:"Appliquer",pressEnter:"Appuyez sur Entrée pour valider",invalidCode:"Code promo invalide",validationError:"Erreur lors de la validation du code",codeApplied:"Code promo appliqué",discountApplied:"Réduction appliquée",clear:"Effacer",remove:"Retirer"},en:{placeholder:"Enter your promo code...",havePromoCode:"Have a promo code?",enterCodeForDiscount:"Enter your code to get a discount",apply:"Apply",pressEnter:"Press Enter to validate",invalidCode:"Invalid promo code",validationError:"Error validating code",codeApplied:"Promo code applied",discountApplied:"Discount applied",clear:"Clear",remove:"Remove"}};if(li(n)){const{originalPrice:I,onCodeApplied:F,onCodeCleared:W,placeholder:y=w[g?"fr":"en"].placeholder,className:U=""}=n,V=async()=>{if(t.trim()){a(!0),v(null);try{const T=await p(t.trim());if(T.success){l(t.trim());let G=0;const H=t.trim().toUpperCase();H==="TESTER100"?G=100:H==="CALVIN2025"?G=50:H==="EARLYBIRD30"?G=30:H==="SAVINGS40"&&(G=40),o(G),F(t.trim(),G)}else v(T.message||w[g?"fr":"en"].invalidCode)}catch{v(w[g?"fr":"en"].validationError)}finally{a(!1)}}},O=()=>{s(""),l(null),o(0),v(null),W()},C=T=>{T.key==="Enter"&&V()},P=I*(1-c/100);return i?e.jsxs("div",{className:`space-y-4 ${U}`,children:[e.jsx("div",{className:"text-center",children:e.jsxs("h3",{className:"text-lg font-semibold text-purple-900 mb-2 flex items-center justify-center gap-2",children:[e.jsx(Ts,{className:"h-5 w-5"}),"Code promo appliqué"]})}),e.jsxs("div",{className:"flex items-center justify-center gap-2 p-4 bg-green-100 rounded-lg border border-green-200",children:[e.jsx(gs,{className:"h-5 w-5 text-green-600"}),e.jsxs("span",{className:"text-green-800 font-medium",children:["Code : ",i]}),e.jsxs(ee,{className:"bg-green-600 text-white",children:["-",c,"%"]}),e.jsx(q,{variant:"ghost",size:"sm",onClick:O,className:"h-6 w-6 p-0 hover:bg-green-200 ml-2",children:e.jsx(ze,{className:"h-4 w-4"})})]}),c>0&&e.jsxs("div",{className:"bg-white rounded-lg p-4 border border-purple-200",children:[e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsx("span",{className:"text-gray-600",children:"Prix original :"}),e.jsxs("span",{className:"line-through text-gray-500",children:[I.toFixed(2)," $"]})]}),e.jsxs("div",{className:"flex justify-between items-center mb-2",children:[e.jsxs("span",{className:"text-green-600 font-medium",children:["Réduction (",c,"%) :"]}),e.jsxs("span",{className:"text-green-600 font-medium",children:["-",(I-P).toFixed(2)," $"]})]}),e.jsxs("div",{className:"border-t pt-2 flex justify-between items-center",children:[e.jsx("span",{className:"text-lg font-bold",children:"Prix final :"}),e.jsx("span",{className:"text-lg font-bold text-green-600",children:c===100?"GRATUIT":`${P.toFixed(2)} $`})]})]}),e.jsx("div",{className:"text-center",children:e.jsx(q,{variant:"outline",onClick:O,className:"text-green-700 border-green-300 hover:bg-green-50",children:"Changer de code"})})]}):e.jsxs("div",{className:`space-y-4 ${U}`,children:[e.jsxs("div",{className:"text-center",children:[e.jsxs("h3",{className:"text-lg font-semibold text-purple-900 mb-2 flex items-center justify-center gap-2",children:[e.jsx(un,{className:"h-5 w-5"}),w[g?"fr":"en"].havePromoCode]}),e.jsx("p",{className:"text-sm text-purple-700",children:w[g?"fr":"en"].enterCodeForDiscount})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ts,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400"}),e.jsx(Y,{type:"text",value:t,onChange:T=>s(T.target.value.toUpperCase()),onKeyPress:C,placeholder:y,className:"pl-10 pr-4 text-center font-mono",disabled:r})]}),e.jsx(q,{onClick:V,disabled:!t.trim()||r,className:"px-6 bg-purple-600 hover:bg-purple-700",children:r?"...":w[g?"fr":"en"].apply})]}),x&&e.jsx("div",{className:"text-center p-3 bg-red-50 border border-red-200 rounded-lg",children:e.jsx("p",{className:"text-red-700 text-sm",children:x})}),t.trim()&&!x&&e.jsx("div",{className:"text-center",children:e.jsx(ee,{variant:"secondary",className:"text-xs",children:w[g?"fr":"en"].pressEnter})})]})}const{value:R,onChange:u,onSubmit:b,onClear:N,appliedCode:S,placeholder:j="Entrez votre code promo...",className:h=""}=n,[E,f]=m.useState(!1),A=async()=>{if(R.trim()){f(!0);try{await b()}finally{f(!1)}}},L=I=>{I.key==="Enter"&&A()};return S?e.jsxs("div",{className:`space-y-3 ${h}`,children:[e.jsxs("div",{className:"flex items-center justify-center gap-2 p-3 bg-green-100 rounded-lg border border-green-200",children:[e.jsx(gs,{className:"h-5 w-5 text-green-600"}),e.jsxs("span",{className:"text-green-800 font-medium",children:["Code promo appliqué : ",S]}),e.jsx(q,{variant:"ghost",size:"sm",onClick:N,className:"h-6 w-6 p-0 hover:bg-green-200",children:e.jsx(ze,{className:"h-4 w-4"})})]}),e.jsx("div",{className:"text-center",children:e.jsx(q,{variant:"outline",onClick:N,className:"text-green-700 border-green-300 hover:bg-green-50",children:"Changer de code"})})]}):e.jsxs("div",{className:`space-y-3 ${h}`,children:[e.jsxs("div",{className:"flex gap-2",children:[e.jsxs("div",{className:"relative flex-1",children:[e.jsx(Ts,{className:"absolute left-3 top-1/2 transform -translate-y-1/2 h-4 w-4 text-gray-400"}),e.jsx(Y,{type:"text",value:R,onChange:I=>u(I.target.value),onKeyPress:L,placeholder:j,className:"pl-10 pr-20",disabled:E})]}),e.jsx(q,{onClick:A,disabled:!R.trim()||E,className:"px-6",children:E?"...":"Appliquer"})]}),R.trim()&&e.jsx("div",{className:"text-center",children:e.jsx(ee,{variant:"secondary",className:"text-xs",children:"Appuyez sur Entrée pour valider"})})]})},xl=nr,oi=m.forwardRef(({className:n,...t},s)=>e.jsx(tr,{ref:s,className:se("border-b",n),...t}));oi.displayName="AccordionItem";const ci=m.forwardRef(({className:n,children:t,...s},r)=>e.jsx(ar,{className:"flex",children:e.jsxs(ca,{ref:r,className:se("flex flex-1 items-center justify-between py-4 font-medium transition-all hover:underline [&[data-state=open]>svg]:rotate-180",n),...s,children:[t,e.jsx(cs,{className:"h-4 w-4 shrink-0 transition-transform duration-200"})]})}));ci.displayName=ca.displayName;const di=m.forwardRef(({className:n,children:t,...s},r)=>e.jsx(da,{ref:r,className:"overflow-hidden text-sm transition-all data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",...s,children:e.jsx("div",{className:se("pb-4 pt-0",n),children:t})}));di.displayName=da.displayName;var mi={};function ui(){try{return new Function("try { return import.meta && import.meta.env || {}; } catch (_) { return {}; }")()}catch{return{}}}function Hs(n,t=!1){const s=ui();if(typeof s[n]<"u")return String(s[n])==="true";try{const r=mi?.[n];if(typeof r<"u")return String(r)==="true"}catch{}try{const r=globalThis?.__TEST_FLAGS__?.[n];if(typeof r<"u")return!!r}catch{}return t}const xi={SHOW_PLACEHOLDERS:Hs("VITE_SHOW_PLACEHOLDERS",!1),ENABLE_LABS:Hs("VITE_ENABLE_LABS",!1),ENABLE_ALL_TOOLS:Hs("VITE_ENABLE_ALL_TOOLS",!1)};function pi(){return m.useMemo(()=>xi,[])}const hi=$s("text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"),D=m.forwardRef(({className:n,...t},s)=>e.jsx(ma,{ref:s,className:se(hi(),n),...t}));D.displayName=ma.displayName;const Bs=rr,ws=m.forwardRef(({className:n,...t},s)=>e.jsx(ua,{ref:s,className:se("inline-flex h-10 items-center justify-center rounded-md bg-muted p-1 text-muted-foreground",n),...t}));ws.displayName=ua.displayName;const be=m.forwardRef(({className:n,...t},s)=>e.jsx(xa,{ref:s,className:se("inline-flex items-center justify-center whitespace-nowrap rounded-sm px-3 py-1.5 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow-sm",n),...t}));be.displayName=xa.displayName;const ye=m.forwardRef(({className:n,...t},s)=>e.jsx(pa,{ref:s,className:se("mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",n),...t}));ye.displayName=pa.displayName;const Es=n=>new Intl.NumberFormat("en-CA",{style:"currency",currency:"CAD",maximumFractionDigits:2}).format(isFinite(n)?n:0),Xe=(n,t=1)=>`${isFinite(n)?n.toFixed(t):"0.0"}%`;function pl({className:n}){const[t,s]=m.useState(5e5),[r,a]=m.useState(4),[i,l]=m.useState(Math.round(br.INFLATION*1e3)/10),[c,o]=m.useState(60),[x,v]=m.useState([]),[p,d]=m.useState([]),[g,w]=m.useState(!1),R=Sa(),u=m.useMemo(()=>{const A={actions:c/100,obligations:Math.max(0,1-c/100),liquidites:0};return kt.calculatePortfolioReturn(A)},[c]),b=(A,L,I,F,W=30)=>{const y=[];let U=A;const V=A*(L/100);for(let O=1;O<=W;O++){const C=V*Math.pow(1+I/100,O-1);U=U*(1+F)-C;const P=U/Math.pow(1+I/100,O-1);if(y.push({year:O,portfolioValue:Math.max(0,U),withdrawal:C,inflationAdjustedValue:Math.max(0,P)}),U<=0){for(let T=O+1;T<=W;T++)y.push({year:T,portfolioValue:0,withdrawal:V*Math.pow(1+I/100,T-1),inflationAdjustedValue:0});break}}return y},N=(A,L,I)=>{const F=[];for(let W=0;W<=100;W+=10){const y=Math.max(0,100-W),U=kt.calculatePortfolioReturn({actions:W/100,obligations:y/100,liquidites:0}),V=b(A,L,I,U,30),O=V[V.length-1]?.portfolioValue??0,C=It.calculateTrinityProbability(L,W/100,30)*100;F.push({stocks:W,bonds:y,cash:0,successRate:C,averageEndValue:O})}return F},S=()=>{w(!0);const A=b(t,r,i,u,30);v(A),d(N(t,r,i)),w(!1)};m.useEffect(()=>{S()},[t,r,i,c]);const j=It.calculateTrinityProbability(r,c/100,30)*100,h=A=>A>=95?"text-green-600":A>=90?"text-emerald-600":A>=80?"text-yellow-600":A>=70?"text-orange-600":"text-red-600",E=A=>A>=95?"Excellent! Your plan is very robust.":A>=90?"Very good! Solid strategy with safety margin.":A>=80?"Acceptable, but consider adjustments.":A>=70?"Risky. Reducing the withdrawal rate is recommended.":"Very risky! A major review is needed.",f=p.reduce((A,L)=>L.successRate>A.successRate?L:A,p[0]||{stocks:60,bonds:40,cash:0,successRate:0,averageEndValue:0});return e.jsx("div",{className:`space-y-6 ${n}`,children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(je,{className:"h-6 w-6 text-blue-600"}),e.jsx(_,{children:"Modernized 4% Rule"})]}),e.jsx(xe,{children:"Based on William Bengen’s work and the Trinity study (30 years). Quickly check the viability of your plan."})]}),e.jsx(k,{children:e.jsxs(Bs,{defaultValue:"calculator",className:"w-full",children:[e.jsxs(ws,{className:"grid w-full grid-cols-4",children:[e.jsx(be,{value:"calculator",children:"Calculator"}),e.jsx(be,{value:"scenarios",children:"Scenarios"}),e.jsx(be,{value:"historical",children:"History"}),e.jsx(be,{value:"education",children:"Education"})]}),e.jsxs(ye,{value:"calculator",className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"initial-amount-en",children:"Initial savings ($)"}),e.jsx(Y,{id:"initial-amount-en",type:"number",value:t,onChange:A=>s(Number(A.target.value)),className:"mt-1"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"withdrawal-rate-en",children:"Annual withdrawal rate (%)"}),e.jsx(Y,{id:"withdrawal-rate-en",type:"number",step:"0.1",value:r,onChange:A=>a(Number(A.target.value)),className:"mt-1"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"inflation-rate-en",children:"Inflation rate (%)"}),e.jsx(Y,{id:"inflation-rate-en",type:"number",step:"0.1",value:i,onChange:A=>l(Number(A.target.value)),className:"mt-1"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"stock-allocation-en",children:"Equity allocation (%)"}),e.jsx(Y,{id:"stock-allocation-en",type:"number",value:c,onChange:A=>o(Number(A.target.value)),className:"mt-1"})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsx(M,{className:"p-4",children:e.jsxs("div",{className:"text-center space-y-2",children:[e.jsx("div",{className:"text-2xl font-bold text-blue-600",children:Xe(j,1)}),e.jsx("div",{className:"text-sm text-gray-600",children:"Probability of success (Trinity, 30 years)"}),e.jsx(We,{value:j,className:"w-full"}),e.jsx("div",{className:`text-sm font-medium ${h(j)}`,children:E(j)}),e.jsx("div",{className:"text-xs text-gray-600 mt-2",children:"Educational note: the 4% rule is not a guarantee. Test your plan with a cash cushion (3–5 years)."})]})}),e.jsx(M,{className:"p-4",children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-sm",children:"Initial annual withdrawal:"}),e.jsx("span",{className:"font-medium",children:Es(t*r/100)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-sm",children:"Year 30 withdrawal:"}),e.jsx("span",{className:"font-medium",children:Es(t*(r/100)*Math.pow(1+i/100,30))})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-sm",children:"Optimal allocation:"}),e.jsxs("span",{className:"font-medium",children:[Xe(f.stocks,0)," equities"]})]})]})}),j<80&&e.jsxs(pe,{children:[e.jsx(Ae,{className:"h-4 w-4"}),e.jsxs(he,{children:["Low success rate. Reduce withdrawal to ",Xe(Math.max(r-.5,2),1)," or increase equity allocation to ",Xe(Math.min(c+10,80),0),"."]})]})]})]}),x.length>0&&e.jsxs(M,{className:"p-4",children:[e.jsx("h3",{className:"text-lg font-semibold mb-4",children:"Portfolio over 30 years"}),e.jsx(Xa,{width:"100%",height:300,children:e.jsxs(Za,{data:x,children:[e.jsx(en,{strokeDasharray:"3 3"}),e.jsx(sn,{dataKey:"year"}),e.jsx(tn,{tickFormatter:A=>`${(A/1e6).toFixed(1)}M`}),e.jsx(an,{formatter:(A,L)=>[Es(A),L==="portfolioValue"?"Portfolio value":L==="inflationAdjustedValue"?"Inflation-adjusted value":"Annual withdrawal"],labelFormatter:A=>`Year ${A}`}),e.jsx(St,{type:"monotone",dataKey:"portfolioValue",stroke:"#3b82f6",fill:"#3b82f6",fillOpacity:.3,name:"portfolioValue"}),e.jsx(St,{type:"monotone",dataKey:"inflationAdjustedValue",stroke:"#ef4444",fill:"#ef4444",fillOpacity:.2,name:"inflationAdjustedValue"}),e.jsx(nn,{type:"monotone",dataKey:"withdrawal",stroke:"#10b981",dot:!1,name:"withdrawal"})]})})]}),e.jsx("div",{className:"pt-2",children:e.jsx(q,{className:"w-full four-percent-btn",onClick:()=>R("/monte-carlo-simulator"),children:"Put to the test (Stress test)"})})]}),e.jsx(ye,{value:"scenarios",className:"space-y-6",children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:"Asset allocation comparison"}),e.jsx(xe,{children:"Impact of allocation on success probability (Trinity matrix)"})]}),e.jsxs(k,{children:[e.jsx("div",{className:"space-y-4",children:p.map((A,L)=>e.jsxs("div",{className:"flex items-center justify-between p-4 border rounded-lg",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"font-semibold",children:Xe(A.stocks,0)}),e.jsx("div",{className:"text-xs text-gray-500",children:"Equities"})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"font-semibold",children:Xe(A.bonds,0)}),e.jsx("div",{className:"text-xs text-gray-500",children:"Bonds"})]})]}),e.jsxs("div",{className:"flex items-center gap-6",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:`font-bold ${h(A.successRate)}`,children:Xe(A.successRate,1)}),e.jsx("div",{className:"text-xs text-gray-500",children:"Success"})]}),e.jsxs("div",{className:"hidden md:block text-center",children:[e.jsx("div",{className:"font-semibold",children:Es(A.averageEndValue)}),e.jsx("div",{className:"text-xs text-gray-500",children:"Value at year 30"})]}),A.successRate===Math.max(...p.map(I=>I.successRate))&&e.jsx(ee,{variant:"default",className:"bg-green-100 text-green-800",children:"Optimal"})]})]},L))}),e.jsxs(pe,{className:"mt-6",children:[e.jsx(ls,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Key insight:"})," 100% cash is often the riskiest over 30 years (lower success probability)."]})]})]})]})}),e.jsx(ye,{value:"historical",className:"space-y-6",children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:"Historical context (recap)"}),e.jsx(xe,{children:"The 4% rule has endured many market regimes over 30-year spans."})]}),e.jsx(k,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex justify-between p-3 bg-red-50 rounded",children:[e.jsx("span",{children:"1929 (Great Depression)"}),e.jsx("span",{className:"font-semibold text-green-600",children:"✓ Endured"})]}),e.jsxs("div",{className:"flex justify-between p-3 bg-red-50 rounded",children:[e.jsx("span",{children:"1973 (Oil shock)"}),e.jsx("span",{className:"font-semibold text-green-600",children:"✓ Endured"})]}),e.jsxs("div",{className:"flex justify-between p-3 bg-red-50 rounded",children:[e.jsx("span",{children:"2000 (Tech bubble)"}),e.jsx("span",{className:"font-semibold text-green-600",children:"✓ Endured"})]}),e.jsxs("div",{className:"flex justify-between p-3 bg-red-50 rounded",children:[e.jsx("span",{children:"2008 (Financial crisis)"}),e.jsx("span",{className:"font-semibold text-green-600",children:"✓ Endured"})]})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs(M,{className:"p-4 text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-blue-600",children:"~30 years"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Typical retirement horizon"})]}),e.jsxs(pe,{children:[e.jsx(_e,{className:"h-4 w-4"}),e.jsx(he,{children:"Maintaining a reasonable equity allocation helps preserve purchasing power (inflation)."})]})]})]})})]})}),e.jsx(ye,{value:"education",className:"space-y-6",children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:"Understanding the 4% rule"}),e.jsx(xe,{children:"Withdraw 4% in year one, then adjust for inflation annually."})]}),e.jsx(k,{className:"space-y-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(Re,{className:"h-4 w-4"}),"Core idea"]}),e.jsx("p",{className:"text-sm text-gray-600",children:"A well-calibrated withdrawal rate increases your chances of success over 30 years without exhausting savings too quickly."}),e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(ls,{className:"h-4 w-4"}),"Suggested allocation"]}),e.jsx("p",{className:"text-sm text-gray-600",children:"A balanced allocation (e.g., 60% equities / 40% bonds) tends to better protect against inflation."})]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(Ae,{className:"h-4 w-4"}),"Pitfalls to avoid"]}),e.jsxs("div",{className:"space-y-2 text-sm",children:[e.jsx("div",{className:"p-2 bg-red-50 rounded",children:"❌ 100% cash = safety (often false in the long run)"}),e.jsx("div",{className:"p-2 bg-green-50 rounded",children:"✅ Reasonable growth helps protect purchasing power"})]}),e.jsxs("h4",{className:"font-semibold flex items-center gap-2",children:[e.jsx(Te,{className:"h-4 w-4"}),"Success factors"]}),e.jsxs("ul",{className:"text-sm text-gray-600 space-y-1",children:[e.jsx("li",{children:"• Diversification"}),e.jsx("li",{children:"• Periodic rebalancing"}),e.jsx("li",{children:"• Flexible withdrawal rate"}),e.jsx("li",{children:"• Emotional discipline"})]})]})]})})]})})]})})]})})}const hl=({userPlan:n})=>{const[t,s]=m.useState(0),[r,a]=m.useState([]),[i,l]=m.useState(null),[c,o]=m.useState(!1),[x,v]=m.useState(!1),p=[{id:"1",title:"Aversion aux Pertes",description:"Test de votre réaction face aux pertes potentielles",scenario:"Votre portefeuille a perdu 10% cette année. Que faites-vous?",options:["Je vends tout pour éviter d'autres pertes","Je garde mes positions et j'attends","J'achète plus à prix réduit","Je réévalue ma stratégie calmement"],correctAnswer:3,biasType:"lossAversion",explanation:"L'aversion aux pertes nous pousse à prendre des décisions émotionnelles. La meilleure approche est de réévaluer rationnellement.",impact:"Peut coûter 2-4% de rendement annuel en vendant au mauvais moment."},{id:"2",title:"Excès de Confiance",description:"Évaluation de votre confiance en vos capacités d'investissement",scenario:"Vous avez eu 3 bons placements consécutifs. Comment voyez-vous vos prochains investissements?",options:["Je suis maintenant un expert, j'augmente mes risques","C'était probablement de la chance","Je continue ma stratégie sans changement","J'analyse pourquoi ça a fonctionné"],correctAnswer:3,biasType:"overconfidence",explanation:"L'excès de confiance après des succès peut mener à des prises de risques excessives.",impact:"Peut réduire les rendements de 3-6% par sur-trading et mauvaise diversification."},{id:"3",title:"Biais d'Ancrage",description:"Test de votre tendance à vous fixer sur des références",scenario:"Une action que vous avez payée 50$ vaut maintenant 30$. Les analystes prévoient 40$. Votre décision?",options:["J'attends qu'elle remonte à 50$","Je vends à 30$ pour limiter les pertes","Je me base sur la valeur future de 40$","J'ignore le prix d'achat et réévalue"],correctAnswer:3,biasType:"anchoringBias",explanation:"Le prix d'achat ne devrait pas influencer les décisions futures. Seule la valeur actuelle compte.",impact:"Peut causer des pertes de 1-3% en gardant de mauvais investissements trop longtemps."},{id:"4",title:"Comportement Grégaire",description:"Évaluation de votre tendance à suivre la foule",scenario:`Tout le monde parle d'un nouveau secteur "révolutionnaire". Votre réaction?`,options:["J'investis rapidement avant que ce soit trop tard","J'attends de voir ce qui se passe","Je fais mes propres recherches d'abord","J'évite les tendances populaires"],correctAnswer:2,biasType:"herding",explanation:"Suivre la foule peut mener à acheter haut et vendre bas. La recherche indépendante est cruciale.",impact:"Peut coûter 4-8% en achetant dans des bulles et vendant dans des paniques."},{id:"5",title:"Biais de Récence",description:"Test de l'influence des événements récents sur vos décisions",scenario:"Après une correction de marché, comment ajustez-vous votre allocation?",options:["Je réduis mes actions, c'est trop risqué","J'augmente mes actions, elles sont en solde","Je ne change rien, c'est temporaire","Je révise ma stratégie à long terme"],correctAnswer:3,biasType:"recencyBias",explanation:"Les événements récents ne devraient pas dicter la stratégie long terme. La discipline est clé.",impact:"Peut réduire les rendements de 2-5% en sur-réagissant aux fluctuations court terme."},{id:"6",title:"Comptabilité Mentale",description:"Évaluation de votre tendance à compartimenter l'argent",scenario:"Vous avez 10 000$ d'héritage et 5 000$ de dettes de carte de crédit (18% d'intérêt). Que faites-vous?",options:["J'investis l'héritage, c'est de l'argent spécial","Je rembourse la dette et investis le reste","Je garde l'héritage en épargne","Je dépense l'héritage pour quelque chose de spécial"],correctAnswer:1,biasType:"mentalAccounting",explanation:"L'argent est fongible. Rembourser une dette à 18% équivaut à un rendement garanti de 18%.",impact:"Peut coûter des milliers en intérêts évitables et opportunités manquées."}],d=()=>{v(!0),setTimeout(()=>{const N={lossAversion:0,overconfidence:0,anchoringBias:0,herding:0,recencyBias:0,mentalAccounting:0};r.forEach((S,j)=>{const h=p[j],E=h.biasType,f=Math.abs(S-h.correctAnswer),A=Math.min(100,f*33);N[E]=Math.max(N[E],A)}),l(N),o(!0),v(!1)},1500)},g=()=>i?[{bias:"lossAversion",name:"Aversion aux Pertes",description:"Tendance à ressentir les pertes plus intensément que les gains équivalents",symptoms:["Vendre rapidement lors de baisses","Éviter les investissements risqués même appropriés","Garder trop longtemps les perdants"],solutions:["Définir des règles de vente à l'avance","Se concentrer sur les objectifs long terme","Utiliser des ordres stop-loss automatiques"],severity:i.lossAversion>66?"high":i.lossAversion>33?"medium":"low",financialImpact:i.lossAversion*40},{bias:"overconfidence",name:"Excès de Confiance",description:"Surestimation de ses capacités et connaissances en investissement",symptoms:["Trading fréquent","Concentration excessive dans quelques titres","Ignorer les conseils d'experts"],solutions:["Tenir un journal de trading","Diversifier automatiquement","Consulter régulièrement des conseillers"],severity:i.overconfidence>66?"high":i.overconfidence>33?"medium":"low",financialImpact:i.overconfidence*50},{bias:"anchoringBias",name:"Biais d'Ancrage",description:"Fixation excessive sur des références comme le prix d'achat",symptoms:["Attendre le retour au prix d'achat","Baser les décisions sur des références arbitraires","Difficulté à couper les pertes"],solutions:["Évaluer régulièrement sans regarder le prix d'achat","Utiliser des critères objectifs de vente","Se concentrer sur la valeur future"],severity:i.anchoringBias>66?"high":i.anchoringBias>33?"medium":"low",financialImpact:i.anchoringBias*25},{bias:"herding",name:"Comportement Grégaire",description:"Tendance à suivre les décisions de la majorité",symptoms:["Acheter ce qui est populaire","Paniquer lors de ventes massives","Suivre les tendances médiatiques"],solutions:["Développer sa propre stratégie","Éviter les médias financiers sensationnalistes","Investir de façon contrariante"],severity:i.herding>66?"high":i.herding>33?"medium":"low",financialImpact:i.herding*60},{bias:"recencyBias",name:"Biais de Récence",description:"Surpondération des événements récents dans les décisions",symptoms:["Changer de stratégie après chaque fluctuation","Extrapoler les tendances récentes","Oublier les leçons du passé"],solutions:["Maintenir une perspective historique","Réviser la stratégie annuellement seulement","Documenter les raisons des décisions"],severity:i.recencyBias>66?"high":i.recencyBias>33?"medium":"low",financialImpact:i.recencyBias*35},{bias:"mentalAccounting",name:"Comptabilité Mentale",description:"Traitement différent de l'argent selon sa source ou destination",symptoms:[`Traiter différemment l'argent "gagné" vs "hérité"`,"Garder des dettes coûteuses tout en épargnant","Compartimenter les décisions financières"],solutions:["Voir l'argent comme fongible","Optimiser globalement les finances","Prioriser les dettes à haut intérêt"],severity:i.mentalAccounting>66?"high":i.mentalAccounting>33?"medium":"low",financialImpact:i.mentalAccounting*30}].filter(N=>N.severity!=="low"):[],w=N=>{const S=[...r,N];a(S),t{s(0),a([]),l(null),o(!1)},u=g(),b=u.reduce((N,S)=>N+S.financialImpact,0);return n==="free"?e.jsxs(M,{className:"w-full max-w-4xl mx-auto",children:[e.jsxs($,{className:"text-center",children:[e.jsx("div",{className:"mx-auto w-16 h-16 bg-gradient-to-r from-purple-500 to-pink-500 rounded-full flex items-center justify-center mb-4",children:e.jsx(Qs,{className:"w-8 h-8 text-white"})}),e.jsx(_,{className:"text-2xl font-bold text-gray-900",children:"Éducateur de Biais Comportementaux"}),e.jsx(xe,{className:"text-lg text-gray-600",children:"Identifiez et corrigez vos biais d'investissement"})]}),e.jsx(k,{className:"text-center py-12",children:e.jsxs("div",{className:"max-w-md mx-auto",children:[e.jsx(is,{className:"w-16 h-16 text-gray-400 mx-auto mb-6"}),e.jsx("h3",{className:"text-xl font-semibold text-gray-900 mb-4",children:"Fonctionnalité Premium"}),e.jsx("p",{className:"text-gray-600 mb-6",children:"L'éducation sur les biais comportementaux est disponible avec les plans Professionnel et Expert."}),e.jsx("div",{className:"bg-purple-50 border border-purple-200 rounded-lg p-4 mb-6",children:e.jsxs("p",{className:"text-sm text-purple-800",children:[e.jsx("strong",{children:"Impact critique:"})," Les biais comportementaux peuvent coûter 3-7% de rendement annuel"]})}),e.jsx(q,{className:"bg-gradient-to-r from-blue-600 to-purple-600 hover:from-blue-700 hover:to-purple-700",children:"Débloquer le Module"})]})})]}):c?e.jsxs("div",{className:"w-full max-w-6xl mx-auto space-y-6",children:[e.jsx(M,{children:e.jsxs($,{className:"text-center",children:[e.jsx("div",{className:"mx-auto w-16 h-16 bg-gradient-to-r from-purple-500 to-pink-500 rounded-full flex items-center justify-center mb-4",children:e.jsx(Qs,{className:"w-8 h-8 text-white"})}),e.jsx(_,{className:"text-2xl font-bold text-gray-900",children:"Votre Profil de Biais Comportementaux"}),e.jsx(xe,{className:"text-lg text-gray-600",children:"Analyse complète et recommandations personnalisées"})]})}),e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(Te,{className:"w-5 h-5"}),"Impact Financier Estimé"]})}),e.jsxs(k,{children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[e.jsxs("div",{className:"text-center p-4 bg-red-50 rounded-lg",children:[e.jsxs("div",{className:"text-2xl font-bold text-red-600",children:["-",b.toLocaleString(),"$"]}),e.jsx("div",{className:"text-sm text-gray-600",children:"Coût Annuel Potentiel"}),e.jsx("div",{className:"text-xs text-gray-500 mt-1",children:"Sur un portefeuille de 100k$"})]}),e.jsxs("div",{className:"text-center p-4 bg-orange-50 rounded-lg",children:[e.jsxs("div",{className:"text-2xl font-bold text-orange-600",children:["-",(b*10).toLocaleString(),"$"]}),e.jsx("div",{className:"text-sm text-gray-600",children:"Impact sur 10 ans"}),e.jsx("div",{className:"text-xs text-gray-500 mt-1",children:"Sans correction"})]}),e.jsxs("div",{className:"text-center p-4 bg-green-50 rounded-lg",children:[e.jsxs("div",{className:"text-2xl font-bold text-green-600",children:["+",(b*15).toLocaleString(),"$"]}),e.jsx("div",{className:"text-sm text-gray-600",children:"Économies Potentielles"}),e.jsx("div",{className:"text-xs text-gray-500 mt-1",children:"Avec correction des biais"})]})]}),b>2e3&&e.jsxs(pe,{className:"mt-4",children:[e.jsx(Ae,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Impact significatif détecté!"})," Vos biais comportementaux pourraient vous coûter",b.toLocaleString(),"$ par année. Une correction est fortement recommandée."]})]})]})]}),u.map((N,S)=>e.jsxs(M,{children:[e.jsx($,{children:e.jsxs("div",{className:"flex justify-between items-start",children:[e.jsxs("div",{children:[e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(fs,{className:"w-5 h-5"}),N.name]}),e.jsx(xe,{children:N.description})]}),e.jsx(ee,{className:`${N.severity==="high"?"bg-red-100 text-red-800":N.severity==="medium"?"bg-yellow-100 text-yellow-800":"bg-green-100 text-green-800"}`,children:N.severity==="high"?"Critique":N.severity==="medium"?"Modéré":"Faible"})]})}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{children:[e.jsxs("h4",{className:"font-semibold text-gray-900 mb-3 flex items-center gap-2",children:[e.jsx(Ae,{className:"w-4 h-4 text-orange-500"}),"Symptômes Identifiés"]}),e.jsx("ul",{className:"space-y-2",children:N.symptoms.map((j,h)=>e.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-600",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-orange-500 rounded-full mt-2 flex-shrink-0"}),j]},h))})]}),e.jsxs("div",{children:[e.jsxs("h4",{className:"font-semibold text-gray-900 mb-3 flex items-center gap-2",children:[e.jsx(ie,{className:"w-4 h-4 text-green-500"}),"Solutions Recommandées"]}),e.jsx("ul",{className:"space-y-2",children:N.solutions.map((j,h)=>e.jsxs("li",{className:"flex items-start gap-2 text-sm text-gray-600",children:[e.jsx("div",{className:"w-1.5 h-1.5 bg-green-500 rounded-full mt-2 flex-shrink-0"}),j]},h))})]})]}),e.jsx("div",{className:"bg-gray-50 border rounded-lg p-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm text-gray-600",children:"Impact financier annuel estimé:"}),e.jsxs("span",{className:"font-semibold text-red-600",children:["-",N.financialImpact.toLocaleString(),"$ par année"]})]})})]})]},S)),e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(Re,{className:"w-5 h-5"}),"Plan d'Action Personnalisé"]})}),e.jsxs(k,{children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-2 h-2 bg-purple-500 rounded-full mt-2"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold",children:"Prise de Conscience"}),e.jsx("p",{className:"text-sm text-gray-600",children:"Reconnaissez vos biais principaux et leurs déclencheurs émotionnels."})]})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-2 h-2 bg-blue-500 rounded-full mt-2"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold",children:"Mise en Place de Garde-Fous"}),e.jsx("p",{className:"text-sm text-gray-600",children:"Implémentez des règles automatiques et des processus de décision structurés."})]})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-2 h-2 bg-green-500 rounded-full mt-2"}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold",children:"Suivi et Amélioration"}),e.jsx("p",{className:"text-sm text-gray-600",children:"Tenez un journal de vos décisions et révisez régulièrement vos progrès."})]})]})]}),e.jsxs("div",{className:"mt-6 flex gap-4",children:[e.jsx(q,{onClick:R,variant:"outline",className:"flex-1",children:"Refaire l'Évaluation"}),e.jsx(q,{className:"flex-1 bg-gradient-to-r from-purple-500 to-pink-500 hover:from-purple-600 hover:to-pink-600",children:"Télécharger le Rapport"})]})]})]})]}):e.jsxs("div",{className:"w-full max-w-4xl mx-auto space-y-6",children:[e.jsx(M,{children:e.jsxs($,{className:"text-center",children:[e.jsx("div",{className:"mx-auto w-16 h-16 bg-gradient-to-r from-purple-500 to-pink-500 rounded-full flex items-center justify-center mb-4",children:e.jsx(Qs,{className:"w-8 h-8 text-white"})}),e.jsx(_,{className:"text-2xl font-bold text-gray-900",children:"Éducateur de Biais Comportementaux"}),e.jsxs(xe,{className:"text-lg text-gray-600",children:["Évaluation de vos biais d'investissement - Question ",t+1," sur ",p.length]})]})}),e.jsx(M,{children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between text-sm text-gray-600",children:[e.jsx("span",{children:"Progression"}),e.jsxs("span",{children:[Math.round(t/p.length*100),"%"]})]}),e.jsx(We,{value:t/p.length*100,className:"h-2"})]})})}),e.jsxs(M,{children:[e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(xn,{className:"w-5 h-5"}),p[t].title]}),e.jsx(xe,{children:p[t].description})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsx("div",{className:"p-4 bg-blue-50 border border-blue-200 rounded-lg",children:e.jsx("p",{className:"text-gray-800 font-medium",children:p[t].scenario})}),e.jsx("div",{className:"space-y-3",children:p[t].options.map((N,S)=>e.jsx(q,{variant:"outline",className:"w-full text-left justify-start h-auto p-4 hover:bg-blue-50",onClick:()=>w(S),children:e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx("div",{className:"w-6 h-6 rounded-full bg-blue-100 text-blue-600 flex items-center justify-center text-sm font-semibold mt-0.5",children:String.fromCharCode(65+S)}),e.jsx("span",{className:"text-gray-700",children:N})]})},S))})]})]}),x&&e.jsx(M,{children:e.jsxs(k,{className:"text-center py-8",children:[e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600",children:"Analyse de vos biais comportementaux en cours..."})]})})]})};class dt{static analyzeRRQAdvanced(t){const{ageActuel:s,montantActuel:r,montant70:a,montant72:i,esperanceVie:l}=t,c={montantMensuel:r,montantAnnuel:r*12,ageDebut:s,valeurActuelle:this.calculatePresentValue(r,s,l,s)};this.calculatePresentValue(i,s,l,72);const o=this.analyzeInflationImpact(r,s,l),x=this.performSensitivityAnalysis(t),v=this.generateAlternativeScenarios(t),p=this.generatePersonalizedRecommendation(t,c,v),d=this.analyzeRRQRisks(t,l);return{...c,impactInflation:o,analyseSensibilite:x,scenariosAlternatifs:v,recommandationPersonnalisee:p,riskAnalysis:d}}static analyzeInflationImpact(t,s,r){const a=this.calculatePresentValue(t,s,r,s,.025),i=this.calculatePresentValue(t,s,r,s,.03),l=a-i,c=t/Math.pow(1.025,30);return{tauxInflationReel:2.5,valeurActuelleAjustee:a,impactSur30Ans:l,pouvoirAchatProjetete:c}}static performSensitivityAnalysis(t){const{ageActuel:s,montantActuel:r,esperanceVie:a}=t,i={};for(let x=-5;x<=5;x++){const v=a+x;i[v]=this.calculatePresentValue(r,s,v,s)}const l={};[.015,.02,.025,.03,.035,.04].forEach(x=>{l[x*100]=this.calculatePresentValue(r,s,a,s,x)});const o=this.calculateBreakEvenAge(t);return{impactEsperanceVie:i,impactTauxInflation:l,seuilRentabilite:o,facteursCritiques:[{nom:"Espérance de vie",impactParAnnee:(i[a+1]-i[a-1])/2,sensibilite:"HAUTE"},{nom:"Taux d'inflation",impactParPourcent:(l[3.5]-l[2.5])/1,sensibilite:"MOYENNE"}]}}static generateAlternativeScenarios(t){const{ageActuel:s,montantActuel:r,montant70:a,montant72:i,esperanceVie:l}=t,c=[];if(s>=60&&c.push({nom:"Commencer immédiatement",ageDebut:s,montantMensuel:r,valeurActuelleNette:this.calculatePresentValue(r,s,l,s),avantages:["Revenus immédiats","Sécurité garantie","Pas de risque politique"],inconvenients:["Montant réduit à vie","Moins d'optimisation fiscale"]}),s<65){const o=this.calculateMontantSelonAge(r,65);c.push({nom:"Attendre l'âge normal (65 ans)",ageDebut:65,montantMensuel:o,valeurActuelleNette:this.calculatePresentValue(o,s,l,65),avantages:["Pension pleine sans réduction","Équilibre risque/rendement"],inconvenients:["Années sans revenu RRQ","Risque de changements futurs"]})}return s<70&&c.push({nom:"Reporter à 70 ans",ageDebut:70,montantMensuel:a,valeurActuelleNette:this.calculatePresentValue(a,s,l,70),avantages:["Pension maximisée","Bonification de 42%"],inconvenients:["Risque de longévité","Perte si décès prématuré"]}),s<72&&c.push({nom:"Reporter à 72 ans (NOUVEAU)",ageDebut:72,montantMensuel:i,valeurActuelleNette:this.calculatePresentValue(i,s,l,72),avantages:["Pension maximale absolue","Bonification de 58.8%"],inconvenients:["Risque de longévité élevé","Nombreuses années sans RRQ"]}),c.sort((o,x)=>x.valeurActuelleNette-o.valeurActuelleNette)}static generatePersonalizedRecommendation(t,s,r){const{ageActuel:a,situationFinanciere:i,esperanceVie:l,sexe:c}=t,o=c==="M"?82:86;let x,v=[],p=75;return i==="URGENTE"?(x="COMMENCER_MAINTENANT",v=["Votre situation financière nécessite des revenus immédiats","La sécurité prime sur l'optimisation","Risque réduit vs gains potentiels futurs"],p=90):l>o+3?(x="ATTENDRE_JUSQU_72",v=["Votre espérance de vie élevée favorise le report","Gain substantiel en valeur actualisée","Bonification maximale justifiée"],p=85):l=a){const v=t*12,p=Math.pow(1+i,o);l+=v/p}return l}static calculateBreakEvenAge(t){return 67}static analyzeRRQRisks(t,s){const{ageActuel:r,sexe:a}=t;return{risqueLongevite:s>(a==="M"?82:86)?.7:.3,risqueInflation:.6,risquePolitique:.4,strategiesMitigation:[{risque:"Longévité",strategie:"Diversifier les sources de revenus",impact:"Réduit la dépendance au RRQ",facilite:"MODERE"},{risque:"Inflation",strategie:"Investir dans des actifs anti-inflation",impact:"Protège le pouvoir d'achat",facilite:"DIFFICILE"}]}}}ve(dt,"PARAMS_2025",{MGA:68500,EXEMPTION_BASE:3500,TAUX_COTISATION_EMPLOYE:.0652,TAUX_COTISATION_EMPLOYEUR:.0652,FACTEUR_REDUCTION_MENSUEL:.006,FACTEUR_BONIFICATION_MENSUEL:.007,AGE_NORMAL:65,AGE_MINIMUM:60,AGE_MAXIMUM:72,PENSION_MAXIMALE_65_ANS:1364.6,PENSION_MAXIMALE_72_ANS:2166.98}),ve(dt,"TAUX_INFLATION_REEL",.025);class ns{static calculateOASGIS(t){const s=this.calculateOASAmount(t.anneesResidence),r=this.calculateOASClawback(t.revenuAnnuel,t.age),a=Math.max(0,s-r),i=this.calculateGISAmount(t.revenuAnnuel,t.statutConjoint,t.revenuConjoint);return{securiteVieillesse:{montantMensuel:a,ageDebut:t.age>=65?t.age:65,seuil_recuperation:this.SV_SEUIL_RECUPERATION_2025,recuperationPartielle:r,recuperationComplete:this.SV_SEUIL_RECUPERATION_COMPLETE_2025},supplementRevenuGaranti:i,optimisationCombinaison:this.optimizeOASGISCombination(a,i,t.revenuAnnuel)}}static calculateOASAmount(t){const s=Math.min(t/40,1);return this.SV_MONTANT_MAX_2025*s}static calculateOASClawback(t,s){const r=s>=75?153771:this.SV_SEUIL_RECUPERATION_2025;if(t<=r)return 0;const a=.15,i=t-r;return Math.min(i*a/12,this.SV_MONTANT_MAX_2025)}static calculateGISAmount(t,s,r){const a=t+(r||0),i=s==="SEUL"?this.SRG_SEUIL_REVENUE_MAX_2025:this.SRG_SEUIL_REVENUE_MAX_2025*1.32;if(!(a<=i))return{montantMensuel:0,seuilRevenu:i,eligible:!1,combinaisonOptimale:!1};const c=s==="SEUL"?this.SRG_MONTANT_MAX_2025:this.SRG_MONTANT_MAX_2025*.6,x=a*.5/12,v=Math.max(0,c-x);return{montantMensuel:v,seuilRevenu:i,eligible:!0,combinaisonOptimale:v>0}}static optimizeOASGISCombination(t,s,r){const a=t+s.montantMensuel;return{strategieRecommandee:s.eligible?"Commencer SV immédiatement à 65 ans - pas de bonification avec SRG":"Considérer reporter SV pour bonification si revenus élevés",impactFiscal:t*12*.15,revenuNetProjecte:a}}}ve(ns,"SV_MONTANT_MAX_2025",717.15),ve(ns,"SV_SEUIL_RECUPERATION_2025",90997),ve(ns,"SV_SEUIL_RECUPERATION_COMPLETE_2025",148451),ve(ns,"SRG_MONTANT_MAX_2025",1065.47),ve(ns,"SRG_SEUIL_REVENUE_MAX_2025",21456);class qa{static analyzeEmploymentImpact(t,s,r,a){const i=this.calculateAdjustedCurrentIncome(t,r),l=this.projectAnnualIncome(t,r,s,a),c=this.calculateAverageIncome5Years(t,r),o=this.calculateRetirementContributionsImpact(r,i,a-s),x=this.assessEmploymentRisks(t,s,r),v=this.generateEmploymentStrategies(t,s,x),p=this.identifyUrgentActions(t,s,x),d=this.generatePlanningScenarios(t,s,r,a);return{revenuActuelAjuste:i,revenuAnnuelProjetee:l,revenuMoyenSur5Ans:c,cotisationsRRQPerdues:o.rrqLoss,cotisationsRPCPerdues:o.cppLoss,impactPensionFinale:o.pensionImpact,risqueChomageRecurrent:x.unemploymentRecurrence,risqueRevenuInstable:x.incomeInstability,risqueRetraiteRetardee:x.delayedRetirement,strategiesRecommandees:v,actionsUrgentes:p,scenarioOptimiste:d.optimistic,scenarioRealiste:d.realistic,scenarioPessimiste:d.pessimistic}}static calculateUnemploymentBenefits(t,s,r,a){let i;if(r<6?i=this.EI_PARAMS_2025.heuresRequises.regionFaibleChomage:r<=8.9?i=this.EI_PARAMS_2025.heuresRequises.regionMoyenChomage:i=this.EI_PARAMS_2025.heuresRequises.regionFortChomage,!(s>=i))return{enCours:!1,dateDebut:"",montantHebdomadaire:0,nombreSemainesEligibles:0,nombreSemainesUtilisees:0,montantMensuel:0,montantAnnuelProrate:0,typePrestation:"reguliere",regionEconomique:a,tauxChomageRegional:r,cotisationsRRQSuspendues:!0,cotisationsRPCSuspendues:!0,rechercheEmploiActive:!1};const c=Math.min(t*this.EI_PARAMS_2025.tauxPrestation,this.EI_PARAMS_2025.gainsMoyensMaximum),o=this.calculateBenefitDuration(s,r),x=c*4.33,v=c*o;return{enCours:!0,dateDebut:new Date().toISOString().split("T")[0],montantHebdomadaire:c,nombreSemainesEligibles:o,nombreSemainesUtilisees:0,montantMensuel:x,montantAnnuelProrate:v,typePrestation:"reguliere",regionEconomique:a,tauxChomageRegional:r,cotisationsRRQSuspendues:!0,cotisationsRPCSuspendues:!0,rechercheEmploiActive:!0}}static projectIncomeWithEmploymentGaps(t,s,r){const a=[];for(let i=0;i=55?i+=30:t>=45?i+=15:t<25&&(i+=10),i+={technologie:5,sante:10,education:15,finance:20,manufacturier:35,retail:40,restauration:45,construction:30}[s.toLowerCase()]||25,i+={specialise:5,expert:10,intermediaire:20,debutant:35}[r]||25;const x=a.filter(v=>{const p=new Date(v.dateFin);return(new Date().getTime()-p.getTime())/(1e3*60*60*24*365)<=5}).filter(v=>v.raisonFin==="licenciement"||v.raisonFin==="fermeture").length;return i+=x*10,Math.min(100,Math.max(0,i))}static calculateAdjustedCurrentIncome(t,s){if(t.statutEmploi1==="chomage_assurance")return t.assuranceChomage1?.montantAnnuelProrate||0;if(t.statutEmploi1==="contrat_determine"){const r=t.contratTravail1;if(r){const a=this.calculateContractDurationMonths(r);return r.salaireContrat/a*12}}return s}static projectAnnualIncome(t,s,r,a){const i=a-r;return this.projectIncomeWithEmploymentGaps(s,t,i).reduce((c,o)=>c+o,0)/i}static calculateAverageIncome5Years(t,s){return this.projectIncomeWithEmploymentGaps(s,t,5).reduce((a,i)=>a+i,0)/5}static calculateRetirementContributionsImpact(t,s,r){const a=t-s,i=a*.0652,l=a*.0595,c=i*r,o=l*r,x=(c+o)*.02;return{rrqLoss:c,cppLoss:o,pensionImpact:x}}static assessEmploymentRisks(t,s,r){let a=0,i=0,l=0;return(t.statutEmploi1==="chomage_assurance"||t.statutEmploi1==="chomage_sans_assurance")&&(a=60,i=80,l=40),(t.statutEmploi1==="contrat_determine"||t.statutEmploi1==="emploi_temporaire")&&(a=40,i=60,l=25),s>=55&&(a+=20,l+=30),{unemploymentRecurrence:Math.min(100,a),incomeInstability:Math.min(100,i),delayedRetirement:Math.min(100,l)}}static generateEmploymentStrategies(t,s,r){const a=[];return t.statutEmploi1==="chomage_assurance"&&a.push({nom:"Maximiser la période d'assurance-emploi",description:"Utiliser pleinement les prestations tout en cherchant activement un emploi",priorite:"haute",delaiImplementation:"Immédiat",impactFinancier:15e3,difficulte:"facile",etapes:["Confirmer l'éligibilité maximale aux prestations","S'inscrire aux services d'aide à l'emploi","Maintenir un journal de recherche d'emploi","Considérer la formation subventionnée"],ressourcesNecessaires:["Accès internet","CV à jour","Références professionnelles"],indicateursSucces:["Prestations reçues","Entrevues obtenues","Formation complétée"]}),t.statutEmploi1==="contrat_determine"&&a.push({nom:"Planification de fin de contrat",description:"Préparer la transition avant la fin du contrat",priorite:"haute",delaiImplementation:"3 mois avant la fin",impactFinancier:0,difficulte:"modere",etapes:["Négocier une extension si possible","Commencer la recherche d'emploi 3 mois avant","Constituer un fonds d'urgence","Évaluer l'éligibilité à l'assurance-emploi"],ressourcesNecessaires:["Épargne d'urgence","Réseau professionnel"],indicateursSucces:["Nouveau contrat signé","Fonds d'urgence constitué"]}),r.incomeInstability>50&&a.push({nom:"Diversification des sources de revenus",description:"Créer des revenus multiples pour réduire la dépendance",priorite:"moyenne",delaiImplementation:"6-12 mois",impactFinancier:5e3,difficulte:"difficile",etapes:["Identifier des compétences monétisables","Développer une activité secondaire","Créer des revenus passifs","Maximiser les crédits d'impôt"],ressourcesNecessaires:["Temps libre","Compétences spécialisées","Capital initial"],indicateursSucces:["Revenus secondaires générés","Stabilité financière améliorée"]}),a}static identifyUrgentActions(t,s,r){const a=[];if(t.statutEmploi1==="chomage_assurance"&&(a.push({action:"Faire une demande d'assurance-emploi immédiatement",delai:"4 semaines maximum après la perte d'emploi",impact:"critique",cout:0,situationApplicable:["chomage_assurance"],ressourcesGouvernementales:["https://www.canada.ca/fr/services/prestations/ae.html","Service Canada - 1-800-206-7218"]}),a.push({action:"Constituer un fonds d'urgence de 6 mois",delai:"Dès que possible",impact:"critique",cout:0,situationApplicable:["chomage_assurance","chomage_sans_assurance"],organismesSoutien:["Centres d'aide financière locaux"]})),t.statutEmploi1==="contrat_determine"){const i=t.contratTravail1;if(i){const l=new Date(i.dateFin),c=new Date;(l.getTime()-c.getTime())/(1e3*60*60*24*30)<=3&&a.push({action:"Intensifier la recherche d'emploi",delai:"Immédiatement",impact:"critique",cout:0,situationApplicable:["contrat_determine"],organismesSoutien:["Centres d'emploi locaux","Agences de placement"]})}}return s>=55&&r.delayedRetirement>50&&a.push({action:"Consulter un planificateur financier spécialisé en retraite",delai:"1 mois",impact:"important",cout:500,situationApplicable:["chomage_assurance","contrat_determine","emploi_temporaire"],ageMinimum:55,organismesSoutien:["Institut québécois de planification financière"]}),a}static generatePlanningScenarios(t,s,r,a){const i={nom:"Scénario optimiste",probabilite:25,revenuAnnuelMoyen:r*1.1,dureeEmploiMoyenne:36,periodesChomage:0,ageRetraiteRealiste:a,capitalRetraiteProjetee:r*15,pensionsGouvernementales:r*.4,epargneUrgenceRequise:r*.5,assurancesRecommandees:["Assurance invalidité"],formationsUtiles:["Perfectionnement professionnel"]},l={nom:"Scénario réaliste",probabilite:50,revenuAnnuelMoyen:r*.9,dureeEmploiMoyenne:24,periodesChomage:1,ageRetraiteRealiste:a+2,capitalRetraiteProjetee:r*12,pensionsGouvernementales:r*.35,epargneUrgenceRequise:r*.75,assurancesRecommandees:["Assurance invalidité","Assurance vie"],formationsUtiles:["Reconversion professionnelle","Compétences numériques"]},c={nom:"Scénario pessimiste",probabilite:25,revenuAnnuelMoyen:r*.7,dureeEmploiMoyenne:18,periodesChomage:2,ageRetraiteRealiste:a+5,capitalRetraiteProjetee:r*8,pensionsGouvernementales:r*.3,epargneUrgenceRequise:r*1,assurancesRecommandees:["Assurance invalidité","Assurance vie","Assurance maladie grave"],formationsUtiles:["Reconversion complète","Entrepreneuriat","Compétences de base"]};return{optimistic:i,realistic:l,pessimistic:c}}static calculateBenefitDuration(t,s){let r=this.EI_PARAMS_2025.semainesMinimum;return t>=1e3&&(r+=8),t>=1500&&(r+=8),t>=2e3&&(r+=8),s>9?r+=8:s>6&&(r+=4),Math.min(r,this.EI_PARAMS_2025.semainesMaximum)}static calculateContractIncome(t,s){new Date(t.dateDebut),new Date(t.dateFin);const r=this.calculateContractDurationMonths(t);return t.salaireContrat/r*12}static calculateContractDurationMonths(t){const s=new Date(t.dateDebut);return(new Date(t.dateFin).getTime()-s.getTime())/(1e3*60*60*24*30.44)}}ve(qa,"EI_PARAMS_2025",{gainsMoyensMaximum:668,tauxPrestation:.55,semainesMinimum:16,semainesMaximum:40,heuresRequises:{regionFaibleChomage:700,regionMoyenChomage:595,regionFortChomage:490},delaiCarence:1,tauxCotisationEmploye:.0229,tauxCotisationEmployeur:.0321,plafondCotisable:68500});class Ds{static analyzeREERvsCELI(t){const{revenuActuel:s,revenuProjetteRetraite:r,ageActuel:a,montantDisponible:i}=t,l=this.calculateTauxMarginal(s),c=this.calculateTauxMarginal(r),o=i*l,x=i*c,v=o-x,p=this.calculatePSVImpact(r,i);let d,g=[];return l>c+.05?(d="REER_PRIORITE",g=[`Taux marginal actuel (${(l*100).toFixed(1)}%) > taux futur (${(c*100).toFixed(1)}%)`,`Économie fiscale immédiate : ${this.formatCurrency(o)}`,"Optimisation via déduction fiscale"]):r>this.PARAMS.psvSeuilRecuperationPartielle?(d="CELI_PRIORITE",g=["Revenu de retraite élevé → risque récupération PSV","CELI ne compte pas comme revenu imposable",`Évite la récupération PSV (seuil: ${this.formatCurrency(this.PARAMS.psvSeuilRecuperationPartielle)})`]):(d="EQUILIBRE",g=["Taux marginaux similaires présent vs futur","Diversification fiscale recommandée","Flexibilité CELI + déduction REER"]),{recommandation:d,raisonnement:g,repartitionSuggeree:this.calculateOptimalSplit(i,d),impactFiscal:{economieImmediateREER:o,impactFuturREER:x,avantageNetREER:v,impactPSV:p},strategiesComplementaires:this.generateComplementaryStrategies(t)}}static optimizeWithdrawalSequence(t){const{ageDebut:s,reerValue:r,celiValue:a,placementsValue:i,revenuGaranti:l,depensesAnnuelles:c,esperanceVie:o}=t,x=Math.max(0,c-l),v=[];return s<65&&v.push({ageDebut:s,ageFin:65,sourcesPrioritaires:["CELI","PLACEMENTS_NON_ENREGISTRES"],rationale:"Éviter pénalités REER et préserver revenus garantis futurs",tauxRetrait:.035,impactFiscal:"MINIMAL"}),v.push({ageDebut:Math.max(s,65),ageFin:71,sourcesPrioritaires:this.determinePrioriteSources(l+x),rationale:"Équilibrer sources pour rester sous seuils PSV",tauxRetrait:.04,impactFiscal:"OPTIMISE"}),v.push({ageDebut:72,ageFin:o,sourcesPrioritaires:["FERR","CELI_COMPLEMENT"],rationale:"Décaissement FERR obligatoire + CELI pour équilibrer",tauxRetrait:.0527,impactFiscal:"CONTRAINT"}),{sequencePhases:v,impactFiscalTotal:this.calculateTotalTaxImpact(v,r),flexibiliteScore:this.assessFlexibilityScore(a,r+i),recommendationsSpeciales:this.generateSpecialRecommendations(t)}}static analyzeFondsSolidarite(t){const{revenuAnnuel:s,ageActuel:r,ageRetraite:a,capaciteEpargne:i}=t,l=a-r,c=.133,o=.134,v=i*(1-.3),p=v*Math.pow(1+c,Math.min(l,10)),d=v*Math.pow(1+o,Math.min(l,10)),g=i*Math.pow(1.06,l);return{recommandation:this.evaluateFondsSolidariteViability(s,l),projections:{fondaction:{investissementNet:v,valeurFinale:p,rendementEffectif:c,avantageVsREER:p-g},ftq:{investissementNet:v,valeurFinale:d,rendementEffectif:o,avantageVsREER:d-g}},contraintes:["Immobilisation jusqu'à la retraite ou 65 ans","Risque de liquidité en cas d'urgence","Performance liée à l'économie québécoise"],eligibilite:this.checkFondsSolidariteEligibility(s)}}static calculateTauxMarginal(t){for(const s of Object.values(this.PARAMS.tauxMarginauxCombines))if(t>=s.min&&t90997?["CELI","PLACEMENTS_NON_ENREGISTRES","REER_MINIMAL"]:["REER_OPTIMISE","CELI","PLACEMENTS_NON_ENREGISTRES"]}static calculateTotalTaxImpact(t,s){return t.reduce((r,a)=>a.impactFiscal==="OPTIMISE"?r+s*.04:a.impactFiscal==="CONTRAINT"?r+s*.0527:r,0)}static assessFlexibilityScore(t,s){const r=t/s;return Math.min(100,Math.round(r*100))}static generateSpecialRecommendations(t){return["Surveiller les seuils PSV annuellement","Ajuster la stratégie selon les changements fiscaux","Consulter un conseiller fiscal pour optimisations complexes"]}static evaluateFondsSolidariteViability(t,s){return s>=8&&t>6e4?"RECOMMANDE":s>=5&&t>4e4?"ACCEPTABLE":"NON_RECOMMANDE"}static checkFondsSolidariteEligibility(t){return t>3e4}static formatCurrency(t){return new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",minimumFractionDigits:0,maximumFractionDigits:0}).format(t)}}ve(Ds,"PARAMS",{reerPlafond:32490,celiPlafond:7e3,psvSeuilRecuperationPartielle:90997,psvSeuilRecuperationComplete:148451,psvSeuilRecuperationComplete75Plus:153771,creditAgeSeuilRevenu:42335,creditAgeReductionTaux:.15,tauxMarginauxCombines:{tranche1:{min:0,max:51780,taux:.2779},tranche2:{min:51780,max:103545,taux:.3612},tranche3:{min:103545,max:126e3,taux:.4612},tranche4:{min:126e3,max:1/0,taux:.5312}}});class Vt{static analyzeRetirementExpenseChanges(t){const s={eliminees:[{categorie:"Cotisations RRQ",montantActuel:t.rrqCotisations||0,pourcentageReduction:100},{categorie:"Cotisations REER employeur",montantActuel:t.reerEmployeur||0,pourcentageReduction:100},{categorie:"Cotisations professionnelles",montantActuel:t.cotisationsPro||0,pourcentageReduction:100},{categorie:"Assurance-emploi",montantActuel:t.assuranceEmploi||0,pourcentageReduction:100}],diminuees:[{categorie:"Transport",montantActuel:t.transport,pourcentageReduction:30},{categorie:"Vêtements",montantActuel:t.vetements,pourcentageReduction:25},{categorie:"Entretien véhicule",montantActuel:t.vehicule,pourcentageReduction:20}],stables:[{categorie:"Logement",montantActuel:t.logement,pourcentageReduction:0},{categorie:"Alimentation",montantActuel:t.alimentation,pourcentageReduction:0}],augmentees:[{categorie:"Soins de santé",montantActuel:t.sante,pourcentageAugmentation:40},{categorie:"Activités sociales",montantActuel:t.loisirs,pourcentageAugmentation:25},{categorie:"Frais de voyage",montantActuel:t.voyages||0,pourcentageAugmentation:60}]},a=this.calculateTotalRetirementExpenses(s)*4,i={compteDependesFixes:this.calculateFixedExpensesAccount(s),compteGestionCourante:this.calculateVariableExpensesAccount(s),justification:["Séparation dépenses fixes vs variables pour meilleur contrôle","Évite les frais bancaires avec soldes minimums","Simplification gestion en couple"]};return{depensesProjectees:s,fondUrgenceRequis:a,repartitionComptes:i,optimisationFiscale:this.generateTaxOptimizationSuggestions(s)}}static analyzeEstateConsiderations(t){const{ageActuel:s,situationFamiliale:r,enfants:a,valeursPatrimoine:i}=t,l=[{ordre:1,action:"Rédiger/réviser testament",urgence:r==="UNION_FAIT"||a?"CRITIQUE":"IMPORTANTE",justification:"Protection des héritiers et respect des volontés"},{ordre:2,action:"Préparer mandat en cas d'inaptitude",urgence:s>=60?"CRITIQUE":"IMPORTANTE",justification:"Sécurité financière en cas d'incapacité"},{ordre:3,action:"Éviter comptes entièrement conjoints",urgence:"MOYENNE",justification:"Éviter blocage fonds lors du décès (plusieurs semaines/mois)"}],c=this.generateEstateStrategies(i,r);return{prioritesSuccessorales:l,strategiesSuccessorales:c,impactFiscalSuccession:this.calculateEstateImpact(i),documentsRequis:this.listRequiredDocuments(r,a),timelineActions:this.createEstateTimeline(l)}}static calculateTotalRetirementExpenses(t){let s=0;return s+=t.eliminees.reduce((r,a)=>r+a.montantActuel*0,0),s+=t.diminuees.reduce((r,a)=>r+a.montantActuel*(1-(a.pourcentageReduction||0)/100),0),s+=t.stables.reduce((r,a)=>r+a.montantActuel,0),s+=t.augmentees.reduce((r,a)=>r+a.montantActuel*(1+(a.pourcentageAugmentation||0)/100),0),s}static calculateFixedExpensesAccount(t){const s=t.stables.find(a=>a.categorie==="Logement")?.montantActuel||0,r=t.augmentees.find(a=>a.categorie==="Soins de santé")?.montantActuel||0;return s+r*1.4}static calculateVariableExpensesAccount(t){const s=t.stables.find(i=>i.categorie==="Alimentation")?.montantActuel||0,r=t.diminuees.find(i=>i.categorie==="Transport")?.montantActuel||0,a=t.augmentees.find(i=>i.categorie==="Activités sociales")?.montantActuel||0;return s+r*.7+a*1.25}static generateTaxOptimizationSuggestions(t){const s=this.calculateTotalRetirementExpenses(t);let r="BASSE",a=0;return s>6e4?(r="HAUTE",a=s*.15):s>4e4&&(r="MOYENNE",a=s*.1),{strategies:["Utiliser CELI pour dépenses variables (pas d'impact sur PSV)","Planifier retraits REER en début d'année pour optimiser impôts","Considérer revenus de dividendes pour crédits d'impôt"],impactPotentiel:a,priorite:r}}static generateEstateStrategies(t,s){const r=[];return s==="COUPLE"&&r.push({type:"REER_CONJOINT",description:"Attribuer les REER au conjoint à revenu plus faible",avantages:["Réduction de l'impôt au retrait","Optimisation des seuils PSV"],inconvenients:["Perte de contrôle sur les fonds","Risque en cas de séparation"]}),r.push({type:"CELI_INDIVIDUEL",description:"Maintenir des CELI individuels pour chaque personne",avantages:["Flexibilité maximale","Pas d'impact sur PSV","Accessibilité immédiate"],inconvenients:["Pas de déduction fiscale à la cotisation"]}),r.push({type:"COMPTE_SEPARE",description:"Éviter les comptes entièrement conjoints",avantages:["Évite le blocage lors du décès","Contrôle individuel maintenu"],inconvenients:["Gestion plus complexe","Frais bancaires potentiels"]}),r.push({type:"MANDAT_INAPTITUDE",description:"Préparer un mandat en cas d'inaptitude",avantages:["Protection financière","Décisions médicales respectées"],inconvenients:["Coûts de préparation","Révision régulière nécessaire"]}),r}static calculateEstateImpact(t){t.reer+t.celi+t.residence+t.placements;const s=t.reer*.25,r=t.placements*.15;return s+r}static listRequiredDocuments(t,s){const r=["Testament","Mandat en cas d'inaptitude"];return t==="UNION_FAIT"&&r.push("Contrat de vie commune","Protocole d'entente"),s&&r.push("Nomination de tuteur","Protection du patrimoine familial"),r.push("Directives médicales anticipées","Assurance-vie (si applicable)"),r}static createEstateTimeline(t){return t.map((s,r)=>{let a="Immédiat";return s.urgence==="CRITIQUE"?a="Dans les 30 jours":s.urgence==="IMPORTANTE"?a="Dans les 3 mois":a="Dans les 6 mois",{action:s.action,description:s.justification,delai:a}})}}class La{static calculerSRG(t){try{if(!t.personal?.naissance1)return this.createErrorResult("Données personnelles incomplètes");const s=this.calculerAge(t.personal.naissance1),r=t.personal.naissance2?this.calculerAge(t.personal.naissance2):null;if(s=this.PARAMS_2025.ageMinimum?this.calculerMontantIndividuel(a,i):0,c=r&&r>=this.PARAMS_2025.ageMinimum?this.calculerMontantIndividuel(a,i):0,o=l+c,x=this.calculerReduction(a,i),v=this.genererStrategies(a,i,o,t),p=this.genererAlertes(a,o,i),d=this.calculerImpactFinancier(o);return{eligible:o>0,statutConjugal:i,revenuFamilial:a,montantSRG1:l,montantSRG2:c,montantTotal:o,reductionAppliquee:x,strategiesOptimisation:v,alertes:p,impactFinancier:d}}catch{return this.createErrorResult("Erreur lors du calcul SRG")}}static calculerRevenuFamilialSRG(t){let s=0;try{const r=t.personal||{},a=t.savings||{},i=t.retirement||{},l=r.salaire1||0,c=r.salaire2||0,o=l+c,x=this.appliquerExemptionEmploi(o);s+=x,s+=i.pensionPrivee1||0,s+=i.pensionPrivee2||0,s+=i.retraitREER1||0,s+=i.retraitREER2||0,a.nonEnregistre&&a.nonEnregistre>0&&(s+=a.nonEnregistre*.04)}catch{}return Math.max(0,s)}static appliquerExemptionEmploi(t){if(t<=5e3)return 0;if(t<=1e4){const r=(t-5e3)*.5;return t-r}return t-7500}static determinerStatutConjugal(t,s){return s?t>=65&&s>=65?"conjoint-avec-sv":"conjoint-sans-sv":"celibataire"}static calculerMontantIndividuel(t,s){let r;switch(s){case"celibataire":r=this.PARAMS_2025.montantMaximalCelibataire;break;case"conjoint-avec-sv":case"conjoint-sans-sv":r=this.PARAMS_2025.montantMaximalCouple;break;default:return 0}const a=this.calculerReduction(t,s),i=s.includes("conjoint")?a/2:a;return Math.max(0,Math.round(r-i))}static calculerReduction(t,s){return t<=this.PARAMS_2025.seuilReduction?0:(t-this.PARAMS_2025.seuilReduction)*this.PARAMS_2025.tauxReduction}static genererStrategies(t,s,r,a){const i=[];return r>0&&i.push({titre:"Optimisation des retraits",description:"Maximiser le SRG en privilégiant les sources non-imposables",actions:["Privilégier les retraits CELI (0% imposable)","Reporter les retraits REER si possible","Étaler les gains en capital sur plusieurs années",`Maintenir revenu familial sous ${this.PARAMS_2025.seuilReduction.toLocaleString()} $`],impact:`Peut préserver jusqu'à ${Math.round(r*.2)} $ de SRG annuel`,priorite:"haute",delaiMiseEnOeuvre:"Avant prochain retrait important"}),s.includes("conjoint")&&r>0&&i.push({titre:"Fractionnement de revenus",description:"Égaliser les revenus entre conjoints",actions:["Fractionner revenus de pension à 65 ans","Optimiser répartition des retraits REER","Considérer cotisations REER du conjoint à revenu plus faible"],impact:"Peut réduire la perte de SRG de 25% à 50%",priorite:"haute",delaiMiseEnOeuvre:"Planifier 2-3 ans avant 65 ans"}),r===0&&t>this.PARAMS_2025.seuilReduction&&i.push({titre:"Préparation future au SRG",description:"Planifier pour éligibilité future potentielle",actions:["Surveiller évolution des seuils annuellement","Planifier séquence de décaissement après 75 ans","Considérer report de revenus importants"],impact:"Peut créer éligibilité SRG dans le futur",priorité:"moyenne",delaiMiseEnOeuvre:"Révision annuelle"}),i}static genererAlertes(t,s,r){const a=[];return s>0&&t>this.PARAMS_2025.seuilReduction*.8&&a.push({type:"attention",message:"Revenus proches du seuil de réduction SRG",action:"Réviser stratégie de décaissement avant prochains retraits",impact:"Risque de perte partielle du SRG"}),s>0&&s<1e3&&a.push({type:"info",message:"Montant SRG faible - optimisation possible",action:"Analyser sources de revenus imposables pour réductions possibles"}),s===0&&t>this.PARAMS_2025.seuilReduction*1.5&&a.push({type:"info",message:"Non éligible au SRG - revenus élevés",action:"Considérer autres optimisations fiscales (PSV, fractionnement)"}),a}static calculerImpactFinancier(t){const s=t*10,r=s*1.15;return{annuel:t,decennal:s,optimise:r,gainPotentiel:r-s}}static calculerAge(t){if(!t)return 0;const s=new Date(t);return new Date().getFullYear()-s.getFullYear()}static createErrorResult(t){return{eligible:!1,raison:t,statutConjugal:"celibataire",revenuFamilial:0,montantSRG1:0,montantSRG2:0,montantTotal:0,reductionAppliquee:0,strategiesOptimisation:[],alertes:[{type:"critique",message:t,action:"Vérifier les données saisies"}],impactFinancier:{annuel:0,decennal:0,optimise:0,gainPotentiel:0}}}}ve(La,"PARAMS_2025",{montantMaximalCelibataire:11928,montantMaximalCouple:7176,seuilReduction:23712,tauxReduction:.5,ageMinimum:65,requiresSV:!0});class Ge{static async calculateAllAdvanced(t,s){try{const r=await this.calculateAll(t);let a;try{a=await yr.runAdvancedSimulation(t,r,s?.yearlyRebalancing===!0?{yearlyRebalancing:!0}:void 0)}catch{a=void 0}return{...r,monteCarloResults:a}}catch{return this.calculateAll(t)}}static calculateAll(t){try{const s={netWorth:this.calculateNetWorth(t),retirementCapital:this.calculateRetirementCapital(t),sufficiency:this.calculateSufficiency(t),taxSavings:this.calculateTaxSavings(t),monthlyIncome:this.calculateMonthlyIncome(t),monthlyExpenses:this.calculateMonthlyExpenses(t)};let r;try{r=this.calculateRRQOptimization(t)}catch{r=void 0}let a;try{a=this.calculateOASGISProjection(t)}catch{a=void 0}let i;try{i=this.calculateRetirementRisks(t)}catch{i=void 0}let l;try{l=this.generateRecommendedActions(t)}catch{l=void 0}let c;try{c=this.calculateEmploymentImpact(t)}catch{c=void 0}let o;try{o=this.calculateREERCELIOptimization(t)}catch{o=void 0}let x;try{x=this.calculateWithdrawalStrategy(t)}catch{x=void 0}let v;try{v=this.calculateRetirementBudgetAnalysis(t)}catch{v=void 0}let p;try{p=this.calculateFondsSolidariteAnalysis(t)}catch{p=void 0}let d;try{d=this.calculateEstateConsiderations(t)}catch{d=void 0}return{...s,rrqOptimization:r,oasGisProjection:a,riskAnalysis:i,recommendedActions:l,employmentImpactAnalysis:c}}catch{return{netWorth:this.calculateNetWorth(t),retirementCapital:this.calculateRetirementCapital(t),sufficiency:this.calculateSufficiency(t),taxSavings:this.calculateTaxSavings(t),monthlyIncome:this.calculateMonthlyIncome(t),monthlyExpenses:this.calculateMonthlyExpenses(t),rrqOptimization:void 0,oasGisProjection:void 0,riskAnalysis:void 0,recommendedActions:void 0}}}static calculateRRQOptimizationEnhanced(t){try{const s=this.analyzePersonRRQ(t,1),r=this.analyzePersonRRQ(t,2);return{person1:s,person2:r,combinedStrategy:this.optimizeCombinedRRQStrategy(s,r),householdImpact:this.calculateHouseholdImpact(s,r)}}catch(s){throw s}}static analyzePersonRRQ(t,s){const r=s===1,a=r?this.calculateAge(t.personal.naissance1):this.calculateAge(t.personal.naissance2),i=r?t.retirement.rrqMontantActuel1:t.retirement.rrqMontantActuel2,l=r?t.retirement.rrqMontant70_1:t.retirement.rrqMontant70_2,c=this.calculateRRQAt72(i,a),o=r?t.retirement.esperanceVie1:t.retirement.esperanceVie2,x=r?t.personal.sexe1:t.personal.sexe2,v=this.evaluateFinancialSituation(t);return!i||!x?null:dt.analyzeRRQAdvanced({ageActuel:a,montantActuel:i,montant70:l,montant72:c,esperanceVie:o,sexe:x,situationFinanciere:v,autrePension:r?t.retirement.pensionPrivee1:t.retirement.pensionPrivee2,conjointRRQ:r?t.retirement.rrqMontantActuel2:t.retirement.rrqMontantActuel1})}static calculateRRQAt72(t,s){if(s>=72)return t;const a=84*.007;let i=t;if(s<65){const c=(65-s)*12*.006;i=t/(1-c)}else if(s>65){const c=(s-65)*12*.007;i=t/(1+c)}return i*(1+a)}static evaluateFinancialSituation(t){const s=this.calculateMonthlyIncome(t),r=this.calculateMonthlyExpenses(t),a=this.calculateNetWorth(t),l=(t.savings.epargne1+t.savings.epargne2+t.savings.celi1+t.savings.celi2)/r,c=(s-r)/s;return l<6||c<0||a=12&&c>=.15&&a>=r*240?"CONFORTABLE":"STABLE"}static optimizeCombinedRRQStrategy(t,s){if(!t||!s)return null;const a=[{nom:"Échelonnement optimal",description:"Une personne commence tôt, l'autre reporte",person1Action:t.ageActuel({...l,valeurActuelleNette:this.calculateStrategyValue(t,s,l),niveauRisque:this.assessStrategyRisk(l),scoreTotal:0})),i=a.reduce((l,c)=>c.valeurActuelleNette>l.valeurActuelleNette?c:l);return{strategieRecommandee:i,alternativeStrategies:a.filter(l=>l!==i),raisonnement:this.generateCouplesReasoning(t,s,i)}}static calculateOASGISProjection(t){const s=this.calculatePersonOASGIS(t,1),r=this.calculatePersonOASGIS(t,2);return{person1:s,person2:r,householdTotal:{monthlyOAS:(s?.securiteVieillesse.montantMensuel||0)+(r?.securiteVieillesse.montantMensuel||0),monthlyGIS:(s?.supplementRevenuGaranti.montantMensuel||0)+(r?.supplementRevenuGaranti.montantMensuel||0),optimizationOpportunities:this.identifyOASGISOptimizations(s,r)}}}static calculatePersonOASGIS(t,s){const r=s===1,a=r?this.calculateAge(t.personal.naissance1):this.calculateAge(t.personal.naissance2);if(a<60)return null;r?t.personal.salaire1:t.personal.salaire2;const i=r?t.retirement.rrqMontantActuel1:t.retirement.rrqMontantActuel2,l=r?t.retirement.pensionPrivee1:t.retirement.pensionPrivee2,c=i*12+l*12,o=r?t.personal.salaire2:t.personal.salaire1;return ns.calculateOASGIS({age:a,revenuAnnuel:c,statutConjoint:o>0?"MARIE":"SEUL",revenuConjoint:o,anneesResidence:Math.min(a-18,40)})}static calculateRetirementRisks(t){const s=this.calculateAge(t.personal.naissance1),r=t.personal.ageRetraiteSouhaite1||65,a=t.retirement.esperanceVie1||85,i={longevityRisk:this.assessLongevityRisk(a,s),inflationRisk:this.assessInflationRisk(t),sequenceRisk:this.assessSequenceOfReturnsRisk(t,r),liquidityRisk:this.assessLiquidityRisk(t),healthCareRisk:this.assessHealthCareRisk(s),overallRiskScore:0};return i.overallRiskScore=this.calculateOverallRiskScore(i),{...i,mitigationStrategies:this.generateRiskMitigationStrategies(i,t),priorityActions:this.identifyPriorityRiskActions(i)}}static assessLongevityRisk(t,s){const a=t>88?"ÉLEVÉ":t<78?"FAIBLE":"MODÉRÉ",i=Math.max(0,t-83),l=i*5e4;return{niveau:a,anneesSupplementaires:i,capitalAdditionnelRequis:l,probabiliteDepasser:this.calculateExceedanceProbability(t),strategies:["Maximiser les revenus viagers (RRQ, SV)","Constituer un fonds de longévité","Considérer une rente viagère"]}}static assessInflationRisk(t){const s=this.calculateMonthlyExpenses(t),r=t.savings.epargne1+t.savings.epargne2,a=t.savings.placements1+t.savings.placements2,i=a/(r+a);return{niveau:i<.4?"ÉLEVÉ":i>.7?"FAIBLE":"MODÉRÉ",protectionActuelle:i*100,impactSur20Ans:this.calculateInflationImpact(s,20),strategies:["Augmenter les investissements en actions","Considérer les obligations à rendement réel","Maintenir des revenus indexés (RRQ, SV)"]}}static assessSequenceOfReturnsRisk(t,s){const r=this.calculateAge(t.personal.naissance1),a=s-r,i=this.calculateRetirementCapital(t),l=5,c=i*this.WITHDRAWAL_RATE;return{niveau:a<=l?"ÉLEVÉ":a<=10?"MODÉRÉ":"FAIBLE",anneesAvantRetraite:a,retraitAnnuel:c,strategies:["Constituer une réserve de liquidités (3-5 ans)","Adopter une stratégie de retrait flexible","Échelonner les investissements par échéance"]}}static calculateEmploymentImpact(t){if(!t.employmentStatus)return;const s=this.calculateAge(t.personal.naissance1),r=t.personal.ageRetraiteSouhaite1||65,a=t.personal.salaire1||0;return qa.analyzeEmploymentImpact(t.employmentStatus,s,a,r)}static generateRecommendedActions(t){const s=[],r=this.calculateAge(t.personal.naissance1);r>=55&&r<60&&s.push({priorite:"HAUTE",categorie:"PLANIFICATION",action:"Obtenir votre relevé de participation RRQ",description:"Vérifiez vos droits accumulés et projetez vos prestations",delai:"2 semaines",impact:"ÉLEVÉ",lienUtile:"https://www.rrq.gouv.qc.ca/en/mes-renseignements/releve-participation/"}),r>=60&&s.push({priorite:"MOYENNE",categorie:"OPTIMISATION",action:"Analyser le moment optimal pour commencer le RRQ",description:"Comparez les scénarios de début à différents âges",delai:"1 mois",impact:"ÉLEVÉ"}),r>=64&&s.push({priorite:"HAUTE",categorie:"PRESTATIONS",action:"Préparer votre demande de Sécurité de la vieillesse",description:"Inscription automatique ou demande manuelle",delai:"3 mois avant 65 ans",impact:"ÉLEVÉ"});const a=this.calculateNetWorth(t),i=this.calculateMonthlyExpenses(t);return al.priorite==="HAUTE"),actionsMoyenTerme:s.filter(l=>l.priorite==="MOYENNE"),actionsLongTerme:s.filter(l=>l.priorite==="FAIBLE"),scoreUrgence:this.calculateUrgencyScore(t,s)}}static calculateRRQOptimization(t){try{const s={ageActuel:this.calculateAge(t.personal.naissance1),montantActuel:t.retirement.rrqMontantActuel1||0,montant70:t.retirement.rrqMontant70_1||0},r={ageActuel:this.calculateAge(t.personal.naissance2),montantActuel:t.retirement.rrqMontantActuel2||0,montant70:t.retirement.rrqMontant70_2||0};return{totalMaintenant:s.montantActuel+r.montantActuel,total70:s.montant70+r.montant70,montantPerdu:s.montant70+r.montant70-(s.montantActuel+r.montantActuel),ageRentabilite:67,valeurActualiseeMaintenant:s.montantActuel+r.montantActuel,valeurActualisee70:s.montant70+r.montant70,recommandation:"Considérer reporter jusqu'à 70 ans pour maximiser les prestations",difference:s.montant70+r.montant70-(s.montantActuel+r.montantActuel)}}catch{return}}static safeAdd(t,s){return(t||0)+(s||0)}static safeSubtract(t,s){return(t||0)-(s||0)}static calculateAge(t){if(!t)return 0;try{const s=new Date(t),r=new Date;let a=r.getFullYear()-s.getFullYear();const i=r.getMonth()-s.getMonth();return(i<0||i===0&&r.getDate()l.priorite==="HAUTE").length,a=this.calculateAge(t.personal.naissance1);let i=r*20;return a>=60&&(i+=20),a>=65&&(i+=30),Math.min(100,i)}static calculateHouseholdImpact(t,s){return{revenuTotal:(t?.montantMensuel||0)+(s?.montantMensuel||0),impactFiscal:"À calculer selon la situation combinée",strategies:["Optimisation fiscale couple","Coordination des prestations"]}}static calculateNetWorth(t){try{const{savings:s}=t;if(!s)throw new Error("Données d'épargne manquantes");const r=this.safeAdd(s.reer1,s.reer2)+this.safeAdd(s.celi1,s.celi2)+this.safeAdd(s.placements1,s.placements2)+this.safeAdd(s.epargne1,s.epargne2)+this.safeAdd(s.cri1,s.cri2),a=this.safeSubtract(s.residenceValeur,s.residenceHypotheque);return Math.max(0,r+a)}catch{return 0}}static calculateRetirementCapital(t){try{const{savings:s}=t;if(!s)throw new Error("Données d'épargne manquantes");const r=this.safeAdd(s.reer1,s.reer2)+this.safeAdd(s.celi1,s.celi2)+this.safeAdd(s.placements1,s.placements2)+this.safeAdd(s.cri1,s.cri2),a=this.calculateYearsToRetirement(t),i=this.calculateFutureSavings(t,a);return r*Math.pow(1+this.INVESTMENT_RETURN,a)+i}catch{return 0}}static calculateSufficiency(t){try{const s=this.calculateRetirementCapital(t),r=this.calculateRetirementTarget(t);return r<=0?0:Math.min(100,Math.round(s/r*100))}catch{return 0}}static calculateTaxSavings(t){try{const{savings:s}=t;if(!s)return 0;const r=this.safeAdd(s.reer1,s.reer2),a=this.calculateMarginalTaxRate(t);return r*a}catch{return 0}}static calculateMonthlyIncome(t){try{return this.safeAdd(t.personal.salaire1,t.personal.salaire2)/12}catch{return 0}}static calculateMonthlyExpenses(t){try{const{cashflow:s}=t;return s?this.safeAdd(s.logement,0)+this.safeAdd(s.servicesPublics,0)+this.safeAdd(s.assurances,0)+this.safeAdd(s.telecom,0)+this.safeAdd(s.alimentation,0)+this.safeAdd(s.transport,0)+this.safeAdd(s.sante,0)+this.safeAdd(s.loisirs,0):0}catch{return 0}}static calculateYearsToRetirement(t){const s=this.calculateAge(t.personal.naissance1),r=t.personal.ageRetraiteSouhaite1||65;return Math.max(0,r-s)}static calculateFutureSavings(t,s){const r=this.calculateMonthlyIncome(t),a=this.calculateMonthlyExpenses(t),i=Math.max(0,r-a);let l=0;for(let c=0;c1?r/100:r:void 0)??this.RETIREMENT_EXPENSE_RATIO;return s*i*12/this.WITHDRAWAL_RATE}static calculateMarginalTaxRate(t){const s=this.safeAdd(t.personal.salaire1,t.personal.salaire2);return s>1e5?.45:s>5e4?.35:s>25e3?.25:.15}static assessLiquidityRisk(t){const s=t.savings.epargne1+t.savings.epargne2+t.savings.celi1+t.savings.celi2,r=this.calculateMonthlyExpenses(t),a=s/r;return{niveau:a<6?"ÉLEVÉ":a<12?"MODÉRÉ":"FAIBLE",moisDeLiquidite:a,strategies:["Maintenir 6-12 mois de dépenses en liquidités","Diversifier les sources de revenus"]}}static calculateREERCELIOptimization(t){try{const s=(t.personal?.salaire1||0)+(t.personal?.salaire2||0),r=this.calculateAge(t.personal?.naissance1),a=t.personal?.ageRetraiteSouhaite1||65,i=this.estimateRetirementIncome(t),l=this.calculateAvailableSavingsCapacity(t);return Ds.analyzeREERvsCELI({revenuActuel:s,revenuProjetteRetraite:i,ageActuel:r,ageRetraite:a,montantDisponible:l,situationConjoint:t.personal?.salaire2>0?"COUPLE":"SEUL"})}catch(s){throw s}}static calculateWithdrawalStrategy(t){try{const s=t.personal?.ageRetraiteSouhaite1||65,r=t.retirement?.esperanceVie1||85,a=(t.savings?.reer1||0)+(t.savings?.reer2||0),i=(t.savings?.celi1||0)+(t.savings?.celi2||0),l=(t.savings?.placements1||0)+(t.savings?.placements2||0),c=(t.retirement?.rrqMontantActuel1||0)+(t.retirement?.rrqMontantActuel2||0),o=717.15*2,x=(c+o)*12,v=this.calculateMonthlyExpenses(t)*12*.75;return Ds.optimizeWithdrawalSequence({ageDebut:s,reerValue:a,celiValue:i,placementsValue:l,revenuGaranti:x,depensesAnnuelles:v,esperanceVie:r})}catch(s){throw s}}static calculateRetirementBudgetAnalysis(t){try{const s=t.cashflow||{},r={logement:s.logement||0,alimentation:s.alimentation||0,transport:s.transport||0,sante:s.sante||0,loisirs:s.loisirs||0,vetements:s.vetements||0,vehicule:s.vehicule||0,rrqCotisations:s.rrqCotisations||0,reerEmployeur:s.reerEmployeur||0,cotisationsPro:s.cotisationsPro||0,assuranceEmploi:s.assuranceEmploi||0,voyages:s.voyages||0};return Vt.analyzeRetirementExpenseChanges(r)}catch(s){throw s}}static calculateFondsSolidariteAnalysis(t){try{const s=(t.personal?.salaire1||0)+(t.personal?.salaire2||0),r=this.calculateAge(t.personal?.naissance1),a=t.personal?.ageRetraiteSouhaite1||65,i=this.calculateAvailableSavingsCapacity(t);return Ds.analyzeFondsSolidarite({revenuAnnuel:s,ageActuel:r,ageRetraite:a,capaciteEpargne:i})}catch(s){throw s}}static calculateEstateConsiderations(t){try{const s=this.calculateAge(t.personal?.naissance1),r=t.personal?.salaire2>0?"COUPLE":"CELIBATAIRE",a=t.personal?.nombreEnfants||0,i=(t.savings?.residenceValeur||0)-(t.savings?.residenceHypotheque||0),l={reer:(t.savings?.reer1||0)+(t.savings?.reer2||0),celi:(t.savings?.celi1||0)+(t.savings?.celi2||0),placements:(t.savings?.placements1||0)+(t.savings?.placements2||0),residence:t.savings?.residenceValeur||0,residenceEquity:Math.max(0,i)};return Vt.analyzeEstateConsiderations({ageActuel:s,situationFamiliale:r,enfants:a,valeursPatrimoine:l})}catch(s){throw s}}static estimateRetirementIncome(t){(t.personal?.salaire1||0)+(t.personal?.salaire2||0);const s=(t.retirement?.rrqMontantActuel1||0)+(t.retirement?.rrqMontantActuel2||0),r=717.15*2;return(s+r)*12}static calculateAvailableSavingsCapacity(t){const s=this.calculateMonthlyIncome(t),r=this.calculateMonthlyExpenses(t);return Math.max(0,s-r)*12}static assessHealthCareRisk(t){return{niveau:t<50?"FAIBLE":t<65?"MODÉRÉ":"ÉLEVÉ",strategies:["Maintenir une assurance santé adéquate","Constituer un fonds de santé","Planifier les soins de longue durée"]}}static calculateSRG(t){try{return La.calculerSRG(t)}catch{return null}}static calculateRREGOP(t,s){try{return null}catch{return null}}static calculateGovernmentBenefits(t){try{const s={rrq:this.calculateRRQOptimizationEnhanced(t),sv:this.calculateOASGISProjection(t),srg:this.calculateSRG(t),rregop:{personne1:this.calculateRREGOP(t,1),personne2:this.calculateRREGOP(t,2)}},r=this.calculateTotalGuaranteedIncome(s);return{...s,revenuTotalGaranti:r,recommandations:this.generateGovernmentBenefitsRecommendations(s)}}catch(s){throw s}}static calculateTotalGuaranteedIncome(t){let s=0;return t.rrq?.person1?.montantMensuel&&(s+=t.rrq.person1.montantMensuel*12),t.rrq?.person2?.montantMensuel&&(s+=t.rrq.person2.montantMensuel*12),t.sv?.securiteVieillesse?.montantMensuel&&(s+=t.sv.securiteVieillesse.montantMensuel*12*2),t.srg?.montantTotal&&(s+=t.srg.montantTotal),t.rregop.personne1?.montantFinal&&(s+=t.rregop.personne1.montantFinal),t.rregop.personne2?.montantFinal&&(s+=t.rregop.personne2.montantFinal),s}static generateGovernmentBenefitsRecommendations(t){const s=[];return t.srg?.eligible?s.push("✅ Vous êtes éligible au SRG - Optimisez vos revenus pour maximiser le montant"):t.srg?.strategiesOptimisation?.length>0&&s.push("💡 Stratégies disponibles pour devenir éligible au SRG"),t.rregop.personne1?.recommandations?.length>0&&s.push("🏛️ Optimisations RREGOP disponibles pour la personne 1"),t.rregop.personne2?.recommandations?.length>0&&s.push("🏛️ Optimisations RREGOP disponibles pour la personne 2"),t.revenuTotalGaranti>0&&s.push(`💰 Revenu total garanti: ${t.revenuTotalGaranti.toLocaleString("fr-CA")} $/an`),s}}ve(Ge,"INFLATION_RATE",.021),ve(Ge,"INVESTMENT_RETURN",.06),ve(Ge,"TAX_RATE",.3),ve(Ge,"RETIREMENT_EXPENSE_RATIO",.75),ve(Ge,"WITHDRAWAL_RATE",.04),ve(Ge,"VOLATILITY_STOCKS",.15),ve(Ge,"VOLATILITY_BONDS",.05),ve(Ge,"CORRELATION_INFLATION_STOCKS",-.3);class gi{static sanitizeString(t){return typeof t!="string"?"":t.replace(/[<>]/g,"").replace(/javascript:/gi,"").replace(/on\w+\s*=/gi,"").replace(/\s+/g," ").trim()}static sanitizeName(t){return typeof t!="string"?"":t.replace(/[<>]/g,"").replace(/javascript:/gi,"").replace(/on\w+\s*=/gi,"")}static sanitizeNotes(t){return typeof t!="string"?"":t.replace(/[<>]/g,"").replace(/javascript:/gi,"").replace(/on\w+\s*=/gi,"")}static sanitizeNumber(t){const s=parseFloat(t);return isNaN(s)?0:s}static sanitizeEmail(t){if(typeof t!="string")return"";const s=t.toLowerCase().trim();return/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(s)?s:""}static sanitizeUserData(t){if(!t||typeof t!="object")return{};const s={},r=["prenom1","prenom2","nom1","nom2","nom","prenom"],a=["notesSupplementaires1","notesSupplementaires2","notes","commentaires","description"];for(const[i,l]of Object.entries(t)){const c=this.sanitizeString(i);typeof l=="string"?r.includes(i)?s[c]=this.sanitizeName(l):a.includes(i)?s[c]=this.sanitizeNotes(l):s[c]=this.sanitizeString(l):typeof l=="number"?s[c]=this.sanitizeNumber(l):typeof l=="boolean"?s[c]=!!l:Array.isArray(l)?s[c]=l.map(o=>typeof o=="string"?this.sanitizeString(o):o):l&&typeof l=="object"?s[c]=this.sanitizeUserData(l):s[c]=l}return s}static validateFileUpload(t,s,r){if(!t)return!1;if(!s.includes(t.type))throw new Error(`Type de fichier non autorisé. Types acceptés: ${s.join(", ")}`);if(t.size>r)throw new Error(`Fichier trop volumineux. Taille maximale: ${Math.round(r/1024/1024)}MB`);return!0}static createRateLimiter(t,s){const r=[];return function(){const i=Date.now();for(;r.length>0&&r[0]<=i-s;)r.shift();return r.length>=t?!0:(r.push(i),!1)}}}const $t="retirement-session-data",fi="retirement-backup-data",vi="retirement_data";function ji(n){try{return n?JSON.parse(n):null}catch{return null}}function bi(n){if(!n||typeof n!="object")return!1;const t=n.personal||{},s=n.retirement||{},r=Array.isArray(t.unifiedIncome1)&&t.unifiedIncome1.length>0||Array.isArray(t.unifiedIncome2)&&t.unifiedIncome2.length>0,a=(t.soldeREER1||0)>0||(t.soldeCELI1||0)>0||(t.soldeCRI1||0)>0||(t.soldeREER2||0)>0||(t.soldeCELI2||0)>0||(t.soldeCRI2||0)>0,i=(s.rrqMontantActuel1||0)>0||(s.rrqMontantActuel2||0)>0||!!s.svBiannual1||!!s.svBiannual2;return r||a||i}function yi(n,t){try{const s={...n,...t,personal:{...n.personal,...t?.personal,unifiedIncome1:Array.isArray(t?.personal?.unifiedIncome1)?t.personal.unifiedIncome1:[],unifiedIncome2:Array.isArray(t?.personal?.unifiedIncome2)?t.personal.unifiedIncome2:[]},retirement:{...n.retirement,...t?.retirement},savings:{...n.savings,...t?.savings},cashflow:{...n.cashflow,...t?.cashflow}};(s.personal.salaire1<0||s.personal.salaire2<0)&&(s.personal.salaire1=Math.max(0,s.personal.salaire1),s.personal.salaire2=Math.max(0,s.personal.salaire2));try{(s.personal?.depensesMensuelles||0)>0?s.personal.depensesRetraite=s.personal.depensesMensuelles:(s.personal?.depensesRetraite||0)>0&&(!s.personal?.depensesMensuelles||s.personal.depensesMensuelles===0)&&(s.personal.depensesMensuelles=s.personal.depensesRetraite)}catch{}try{const i=[["reer1","soldeREER1"],["reer2","soldeREER2"],["celi1","soldeCELI1"],["celi2","soldeCELI2"],["cri1","soldeCRI1"],["cri2","soldeCRI2"]];for(const[l,c]of i){const o=Number(s.savings?.[l]??0),x=Number(s.personal?.[c]??0);(o||0)<=0&&(x||0)>0&&(s.savings[l]=x),(o||0)>0&&(x||0)<=0&&(s.personal[c]=o)}}catch{}const r=(s.personal?.statutMatrimonial||"").toLowerCase()==="celibataire"||(s.personal?.statutMatrimonial||"").toLowerCase()==="single",a=!!(s.personal?.prenom2||s.personal?.nom2||s.personal?.naissance2||s.personal?.sexe2||s.personal?.salaire2);if(r||!a){try{s.personal.prenom2=""}catch{}try{s.personal.nom2=""}catch{}try{s.personal.naissance2=""}catch{}try{s.personal.sexe2=""}catch{}try{s.personal.salaire2=0}catch{}try{s.personal.unifiedIncome2=[]}catch{}try{s.savings.reer2=0,s.savings.celi2=0,s.savings.placements2=0,s.savings.epargne2=0,s.savings.cri2=0}catch{}}return s}catch{return n}}const xs={loadInitialData(n){try{const t=ji(sessionStorage.getItem($t));let s=bi(t)?t:n;try{s&&rs.needsMigration()&&rs.migrateUserData(s)?.success&&rs.saveMigratedData(s)}catch{}return yi(n,s)}catch{return n}},save(n){try{sessionStorage.setItem($t,JSON.stringify(n))}catch{}},saveBackupBeforeUnload(n,t){},restoreBackup(n){return null},clearBackup(){try{localStorage.removeItem(fi),localStorage.removeItem(vi)}catch{}}},Js="retirement-session-data",Ni="retirement-backup-data",Ce={personal:{prenom1:"",nom1:"",prenom2:"",nom2:"",naissance1:"",naissance2:"",sexe1:"",sexe2:"",salaire1:0,salaire2:0,statutProfessionnel1:"",statutProfessionnel2:"",ageRetraiteSouhaite1:0,ageRetraiteSouhaite2:0,depensesRetraite:0,unifiedIncome1:[],unifiedIncome2:[],soldeREER1:0,dateREER1:"",soldeCELI1:0,dateCELI1:"",soldeCRI1:0,dateCRI1:"",soldeREER2:0,dateREER2:"",soldeCELI2:0,dateCELI2:"",soldeCRI2:0,dateCRI2:"",statutMatrimonial:"",enfants:!1,situationFamiliale:"",niveauCompetences1:void 0,niveauCompetences2:void 0,secteurActivite1:"",secteurActivite2:"",regionEconomique:"",tauxChomageRegional:0,experienceFinanciere1:void 0,experienceFinanciere2:void 0,objectifPrincipal:void 0,tempsDisponible:void 0,toleranceRisqueInvestissement1:void 0,toleranceRisqueInvestissement2:void 0,etatSante1:"",etatSante2:"",modeVieActif1:"",modeVieActif2:"",smokingStatus1:"",smokingStatus2:"",yearsQuitSmoking1:0,yearsQuitSmoking2:0,height1:0,height2:0,weight1:0,weight2:0,physicalActivity1:"",physicalActivity2:"",chronicConditions1:[],chronicConditions2:[],livingEnvironment1:"",livingEnvironment2:"",housingType1:"",housingType2:"",familyComposition1:"",familyComposition2:"",distanceToSpecializedCare1:0,distanceToSpecializedCare2:0,waterQuality1:"",waterQuality2:"",airQuality1:"",airQuality2:"",noiseLevel1:"",noiseLevel2:"",accessToGreenSpaces1:"",accessToGreenSpaces2:"",transportAccess1:"",transportAccess2:"",communitySupport1:"",communitySupport2:"",crimeRate1:"",crimeRate2:"",climateStressors1:[],climateStressors2:[]},retirement:{rrqAgeActuel1:0,rrqMontantActuel1:0,rrqMontant70_1:0,esperanceVie1:0,rrqAgeActuel2:0,rrqMontantActuel2:0,rrqMontant70_2:0,esperanceVie2:0,rregopMembre1:"",rregopAnnees1:0,pensionPrivee1:0,pensionPrivee2:0,svMontant1:0,svMontant2:0,svRevenus1:0,svRevenus2:0,svAgeDebut1:0,svAgeDebut2:0,svBiannual1:void 0,svBiannual2:void 0},savings:{reer1:0,reer2:0,celi1:0,celi2:0,placements1:0,placements2:0,epargne1:0,epargne2:0,cri1:0,cri2:0,residenceValeur:0,residenceHypotheque:0},cashflow:{logement:0,servicesPublics:0,assurances:0,telecom:0,alimentation:0,transport:0,sante:0,loisirs:0}},Ks=n=>{try{const t={...Ce,...n,personal:{...Ce.personal,...n.personal,unifiedIncome1:Array.isArray(n.personal?.unifiedIncome1)?n.personal.unifiedIncome1:[],unifiedIncome2:Array.isArray(n.personal?.unifiedIncome2)?n.personal.unifiedIncome2:[]},retirement:{...Ce.retirement,...n.retirement},savings:{...Ce.savings,...n.savings},cashflow:{...Ce.cashflow,...n.cashflow}};(t.personal.salaire1<0||t.personal.salaire2<0)&&(t.personal.salaire1=Math.max(0,t.personal.salaire1),t.personal.salaire2=Math.max(0,t.personal.salaire2));try{(t.personal?.depensesMensuelles||0)>0?t.personal.depensesRetraite=t.personal.depensesMensuelles:(t.personal?.depensesRetraite||0)>0&&(!t.personal?.depensesMensuelles||t.personal.depensesMensuelles===0)&&(t.personal.depensesMensuelles=t.personal.depensesRetraite)}catch{}try{const s=[["reer1","soldeREER1"],["reer2","soldeREER2"],["celi1","soldeCELI1"],["celi2","soldeCELI2"],["cri1","soldeCRI1"],["cri2","soldeCRI2"]];for(const[r,a]of s){const i=Number(t.savings?.[r]??0),l=Number(t.personal?.[a]??0);(i||0)<=0&&(l||0)>0&&(t.savings[r]=l),(i||0)>0&&(l||0)<=0&&(t.personal[a]=i)}}catch{}try{const s=(t.personal?.statutMatrimonial||"").toLowerCase(),r=s==="celibataire"||s==="single",a=!!(t.personal?.prenom2||t.personal?.nom2||t.personal?.naissance2||t.personal?.sexe2||t.personal?.salaire2);(r||!a)&&(t.personal.prenom2="",t.personal.nom2="",t.personal.naissance2="",t.personal.sexe2="",t.personal.salaire2=0,t.personal.unifiedIncome2=[],t.savings.reer2=0,t.savings.celi2=0,t.savings.placements2=0,t.savings.epargne2=0,t.savings.cri2=0)}catch{}return t}catch{return Ce}},wi=()=>{const[n,t]=m.useState(Ce),[s,r]=m.useState(!0),[a,i]=m.useState(null),[l]=m.useState(()=>`session_${Date.now()}_${Math.random().toString(36).substr(2,9)}`);m.useEffect(()=>{(()=>{try{r(!0),i(null);try{const I=xs.loadInitialData(Ce);t(I);return}catch{}const N=sessionStorage.getItem(Js),S=localStorage.getItem("retirement_data"),j=I=>{try{return I?JSON.parse(I):null}catch{return null}},h=I=>{if(!I||typeof I!="object")return!1;const F=I.personal||{},W=I.retirement||{},y=Array.isArray(F.unifiedIncome1)&&F.unifiedIncome1.length>0||Array.isArray(F.unifiedIncome2)&&F.unifiedIncome2.length>0,U=(F.soldeREER1||0)>0||(F.soldeCELI1||0)>0||(F.soldeCRI1||0)>0||(F.soldeREER2||0)>0||(F.soldeCELI2||0)>0||(F.soldeCRI2||0)>0,V=(W.rrqMontantActuel1||0)>0||(W.rrqMontantActuel2||0)>0||!!W.svBiannual1||!!W.svBiannual2;return y||U||V},E=j(N),f=j(S);let A=null;if(h(f)&&!h(E)){A=f;try{sessionStorage.setItem(Js,JSON.stringify(f))}catch{}}else h(E)?A=E:f?A=f:A=Ce;try{A&&rs.needsMigration()&&rs.migrateUserData(A).success&&rs.saveMigratedData(A)}catch{}const L=Ks(A);t(L)}catch{i("Impossible de charger les données de session"),t(Ce)}finally{r(!1)}})()},[]),m.useEffect(()=>{if(!s&&n!==Ce)try{xs.save(n)}catch{i("Impossible de sauvegarder les données")}},[n,s]),m.useEffect(()=>{const b=N=>{try{const S=N.detail.data,j=Ks(S);t(j)}catch{}};return window.addEventListener("retirementDataImported",b),()=>{window.removeEventListener("retirementDataImported",b)}},[]),m.useEffect(()=>{const b=()=>{try{n!==Ce&&xs.saveBackupBeforeUnload(l,n)}catch{}},N=()=>{document.visibilityState==="hidden"&&b()};return window.addEventListener("beforeunload",b),document.addEventListener("visibilitychange",N),()=>{window.removeEventListener("beforeunload",b),document.removeEventListener("visibilitychange",N),b()}},[n,l]);const c=m.useMemo(()=>{try{return Ge.calculateAll(n)}catch{return i("Erreur dans les calculs financiers"),{netWorth:0,retirementCapital:0,sufficiency:0,taxSavings:0,monthlyIncome:0,monthlyExpenses:0}}},[n]);return{userData:n,updateUserData:(b,N)=>{try{i(null);const S=gi.sanitizeUserData(N);t(j=>({...j,[b]:{...j[b],...S}}))}catch{i("Erreur lors de la mise à jour des données")}},calculations:c,isLoading:s,error:a,resetData:()=>{try{i(null),t(Ce),sessionStorage.removeItem(Js)}catch{i("Erreur lors de la réinitialisation")}},exportData:()=>{try{const b=JSON.stringify(n,null,2),N=new Blob([b],{type:"application/json"}),S=URL.createObjectURL(N),j=document.createElement("a");j.href=S,j.download=`retirement-data-${new Date().toISOString().split("T")[0]}.json`,j.click(),URL.revokeObjectURL(S)}catch{i("Impossible d'exporter les données")}},importData:b=>{const N=new FileReader;N.onload=S=>{try{const j=S.target?.result,h=JSON.parse(j),E=h?.data??h;if(!E||typeof E!="object")throw new Error("Invalid content");const f=Ks(E);t(f),i(null)}catch{i("Format de fichier invalide")}},N.readAsText(b)},restoreFromBackup:()=>{try{const b=xs.restoreBackup(Ce);return!1}catch{return i("Impossible de restaurer les données de sauvegarde"),!1}},clearBackup:()=>{try{xs.clearBackup()}catch{}},hasBackup:()=>{try{return localStorage.getItem(Ni)!==null}catch{return!1}},clearError:()=>i(null),sessionId:l,calculateSectionProgress:b=>{try{const N=n[b];let S=0,j=0;switch(b){case"personal":const h=["prenom1","naissance1","sexe1","salaire1","statutProfessionnel1","ageRetraiteSouhaite1","depensesRetraite"];S=h.length,j=h.filter(L=>{const I=N[L];return I!=null&&I!==""&&I!==0}).length;break;case"retirement":const E=["rrqAgeActuel1","esperanceVie1","rregopMembre1","pensionPrivee1"];S=E.length,j=E.filter(L=>{const I=N[L];return I!=null&&I!==""&&I!==0}).length;break;case"savings":const f=["reer1","celi1","placements1","epargne1","residenceValeur"];S=f.length,j=f.filter(L=>{const I=N[L];return I!=null&&I!==""&&I!==0}).length;break;case"cashflow":const A=["logement","servicesPublics","assurances","telecom","alimentation","transport","sante","loisirs"];S=A.length,j=A.filter(L=>{const I=N[L];return I!=null&&I!==""&&I!==0}).length;break;default:return 0}return S>0?Math.round(j/S*100):0}catch{return 0}},getSectionStatus:b=>b===0?"not-started":b<100?"in-progress":"completed"}},me=ir,ue=lr,oe=m.forwardRef(({className:n,children:t,...s},r)=>e.jsxs(ha,{ref:r,className:se("flex h-10 w-full items-center justify-between rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",n),...s,children:[t,e.jsx(or,{asChild:!0,children:e.jsx(cs,{className:"h-4 w-4 opacity-50"})})]}));oe.displayName=ha.displayName;const za=m.forwardRef(({className:n,...t},s)=>e.jsx(va,{ref:s,className:se("flex cursor-default items-center justify-center py-1",n),...t,children:e.jsx(Vs,{className:"h-4 w-4"})}));za.displayName=va.displayName;const Oa=m.forwardRef(({className:n,...t},s)=>e.jsx(ja,{ref:s,className:se("flex cursor-default items-center justify-center py-1",n),...t,children:e.jsx(cs,{className:"h-4 w-4"})}));Oa.displayName=ja.displayName;const ce=m.forwardRef(({className:n,children:t,position:s="popper",sideOffset:r=8,collisionPadding:a=16,...i},l)=>e.jsx(cr,{children:e.jsxs(ga,{ref:l,className:se("relative z-50 min-w-[8rem] overflow-hidden rounded-xl border-2 border-blue-200 bg-white text-blue-900 shadow-xl data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",s==="popper"&&"data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",n),position:s,sideOffset:r,collisionPadding:a,...i,children:[e.jsx(za,{}),e.jsx(dr,{className:se("p-1 max-h-[60vh] overflow-auto",s==="popper"&&"h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"),children:t}),e.jsx(Oa,{})]})}));ce.displayName=ga.displayName;const Ai=m.forwardRef(({className:n,...t},s)=>e.jsx(ba,{ref:s,className:se("py-1.5 pl-8 pr-2 text-sm font-semibold",n),...t}));Ai.displayName=ba.displayName;const B=m.forwardRef(({className:n,children:t,...s},r)=>e.jsxs(fa,{ref:r,className:se("relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",n),...s,children:[e.jsx("span",{className:"absolute left-2 flex h-3.5 w-3.5 items-center justify-center",children:e.jsx(mr,{children:e.jsx(gs,{className:"h-4 w-4"})})}),e.jsx(ur,{children:t})]}));B.displayName=fa.displayName;const Si=m.forwardRef(({className:n,...t},s)=>e.jsx(ya,{ref:s,className:se("-mx-1 my-1 h-px bg-muted",n),...t}));Si.displayName=ya.displayName;const Gs=xr,Va=pr,$a=hr,ft=m.forwardRef(({className:n,sideOffset:t=4,...s},r)=>e.jsx(Na,{ref:r,sideOffset:t,className:se("z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2",n),...s}));ft.displayName=Na.displayName;const K=(n,t)=>{if(isNaN(n)||!isFinite(n))return"0 $";const{showCents:s=!1,compact:r=!1}=t||{};return r&&Math.abs(n)>=1e6?new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",notation:"compact",maximumFractionDigits:1}).format(n):new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",minimumFractionDigits:s?2:0,maximumFractionDigits:s?2:0}).format(n)},gl=(n,t)=>{if(isNaN(n)||!isFinite(n))return"0 %";const{showPlusSign:s=!1,decimals:r=1}={},a=n.toFixed(r);return`${s&&n>0?"+":""}${a}%`},fl=({userData:n,updateUserData:t,isFrench:s,personNumber:r=1})=>{const[a,i]=m.useState({householdIncome:0,education:"",workSector:"",maritalStatus:"",region:"",unemploymentRate:0,financialExperience:"",mainObjective:"",availableTime:"",riskTolerance:""}),[l,c]=m.useState(0),[o,x]=m.useState(!1);m.useEffect(()=>{const R=n.personal||{},u=r===1?"1":"2",b=Cs.synchronizeHouseholdIncome(n);i({householdIncome:b.totalHouseholdIncome,education:R[`niveauCompetences${u}`]||"",workSector:R[`secteurActivite${u}`]||"",maritalStatus:R.situationFamiliale||"",region:R.regionEconomique||"",unemploymentRate:R.tauxChomageRegional||0,financialExperience:R[`experienceFinanciere${u}`]||"",mainObjective:R.objectifPrincipal||"",availableTime:R.tempsDisponible||"",riskTolerance:R[`toleranceRisqueInvestissement${u}`]||""}),Cs.updateUserDataWithSynchronizedIncome(n,t)},[n,r,t]),m.useEffect(()=>{const R=Object.values(a),u=R.filter(N=>N!==""&&N!==0&&N!==null&&N!==void 0).length,b=Math.round(u/R.length*100);c(b)},[a]);const v=(R,u)=>{i(N=>({...N,[R]:u})),n.personal;const b=r===1?"1":"2";switch(R){case"householdIncome":t("personal",{[`salaire${b}`]:u});break;case"education":t("personal",{[`niveauCompetences${b}`]:u});break;case"workSector":t("personal",{[`secteurActivite${b}`]:u});break;case"maritalStatus":t("personal",{situationFamiliale:u});break;case"region":t("personal",{regionEconomique:u});break;case"unemploymentRate":t("personal",{tauxChomageRegional:u});break;case"financialExperience":t("personal",{[`experienceFinanciere${b}`]:u});break;case"mainObjective":t("personal",{objectifPrincipal:u});break;case"availableTime":t("personal",{tempsDisponible:u});break;case"riskTolerance":t("personal",{[`toleranceRisqueInvestissement${b}`]:u});break}},p=R=>{switch(R){case"tres-conservateur":return{impact:-.5,description:s?"Réduction de 0.5 an d'espérance de vie":"0.5 year reduction in life expectancy"};case"conservateur":return{impact:-.3,description:s?"Réduction de 0.3 an d'espérance de vie":"0.3 year reduction in life expectancy"};case"equilibre":return{impact:0,description:s?"Aucun impact":"No impact"};case"dynamique":return{impact:.2,description:s?"Augmentation de 0.2 an d'espérance de vie":"0.2 year increase in life expectancy"};case"agressif":return{impact:.3,description:s?"Augmentation de 0.3 an d'espérance de vie":"0.3 year increase in life expectancy"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},d=R=>{switch(R){case"debutant":return .95;case"intermediaire":return 1;case"experimente":return 1.05;case"expert":return 1.1;default:return 1}},w=(()=>{const R=p(a.riskTolerance),u=d(a.financialExperience),b=65,N=Cs.synchronizeHouseholdIncome(n),S=Cs.calculateIncomeLongevityImpact(N);return{adjustedRetirementAge:Math.max(60,Math.min(70,b+R.impact+(u-1)*2+S.lifeExpectancyAdjustment)),riskImpact:R,educationMultiplier:u,incomeMultiplier:S.healthMultiplier,sectorImpact:N.sectorImpact,lifeExpectancyAdjustment:S.lifeExpectancyAdjustment,stressReduction:S.stressReduction,totalAdjustment:R.impact+(u-1)*2+S.lifeExpectancyAdjustment}})();return e.jsx(Gs,{children:e.jsxs(M,{className:"bg-white border-2 border-blue-200 shadow-lg",children:[e.jsxs($,{className:"border-b-2 border-blue-100 bg-blue-50",children:[e.jsxs(_,{className:"text-xl font-bold text-blue-800 flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 bg-blue-600 rounded-full flex items-center justify-center text-white font-bold",children:r}),e.jsx(zs,{className:"w-6 h-6"}),s?"Profil socio-économique":"Socio-Economic Profile",e.jsxs(ee,{variant:l===100?"default":"secondary",className:"ml-auto",children:[l,"% ",s?"complété":"complete"]})]}),e.jsx(We,{value:l,className:"w-full h-2"})]}),e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(zs,{className:"w-5 h-5 inline mr-2"}),s?"Situation familiale":"Marital Status"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.maritalStatus,onValueChange:R=>v("maritalStatus",R),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"celibataire",className:"text-lg py-3",children:s?"Célibataire":"Single"}),e.jsx(B,{value:"marie",className:"text-lg py-3",children:s?"Marié(e)":"Married"}),e.jsx(B,{value:"conjoint",className:"text-lg py-3",children:s?"Conjoint(e) de fait":"Common-law"}),e.jsx(B,{value:"divorce",className:"text-lg py-3",children:s?"Divorcé(e)":"Divorced"}),e.jsx(B,{value:"veuf",className:"text-lg py-3",children:s?"Veuf(ve)":"Widowed"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(Te,{className:"w-5 h-5 inline mr-2"}),s?"Revenus annuels totaux":"Total Annual Income"]}),e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"bg-gray-50 border-2 border-gray-300 text-gray-700 text-lg h-12 px-3 flex items-center rounded-md",children:a.householdIncome>0?e.jsxs(e.Fragment,{children:["$",a.householdIncome.toLocaleString(),e.jsxs("span",{className:"text-sm text-gray-500 ml-2",children:["(",s?"Mensuel:":"Monthly:"," ",K(a.householdIncome/12,{showCents:!1}),")"]}),e.jsxs("span",{className:"text-xs text-blue-600 ml-2",children:["(",s?"Personne 1 + 2":"Person 1 + 2",")"]})]}):e.jsx("span",{className:"text-gray-500 italic",children:s?'Complétez la section "Revenus"':'Complete the "Income" section'})})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(pn,{className:"w-5 h-5 inline mr-2"}),s?"Niveau d'éducation":"Education Level"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.education,onValueChange:R=>v("education",R),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"secondaire",className:"text-lg py-3",children:s?"Secondaire":"High School"}),e.jsx(B,{value:"college",className:"text-lg py-3",children:s?"Collégial":"College/CEGEP"}),e.jsx(B,{value:"universitaire",className:"text-lg py-3",children:s?"Universitaire":"University"}),e.jsx(B,{value:"maitrise",className:"text-lg py-3",children:s?"Maîtrise/doctorat":"Master's/PhD"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(mt,{className:"w-5 h-5 inline mr-2"}),s?"Secteur d'activité":"Work Sector"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.workSector,onValueChange:R=>v("workSector",R),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"technologie",className:"text-lg py-3",children:s?"Technologie":"Technology"}),e.jsx(B,{value:"sante",className:"text-lg py-3",children:s?"Santé":"Healthcare"}),e.jsx(B,{value:"finance",className:"text-lg py-3",children:"Finance"}),e.jsx(B,{value:"education",className:"text-lg py-3",children:s?"Éducation":"Education"}),e.jsx(B,{value:"construction",className:"text-lg py-3",children:"Construction"}),e.jsx(B,{value:"commerce",className:"text-lg py-3",children:s?"Commerce":"Retail"}),e.jsx(B,{value:"manufacturier",className:"text-lg py-3",children:s?"Manufacturier":"Manufacturing"}),e.jsx(B,{value:"services",className:"text-lg py-3",children:"Services"}),e.jsx(B,{value:"autre",className:"text-lg py-3",children:s?"Autre":"Other"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(_e,{className:"w-5 h-5 inline mr-2"}),s?"Expérience financière":"Financial Experience"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.financialExperience,onValueChange:R=>v("financialExperience",R),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"debutant",className:"text-lg py-3",children:s?"Débutant":"Beginner"}),e.jsx(B,{value:"intermediaire",className:"text-lg py-3",children:s?"Intermédiaire":"Intermediate"}),e.jsx(B,{value:"experimente",className:"text-lg py-3",children:s?"Expérimenté":"Experienced"}),e.jsx(B,{value:"expert",className:"text-lg py-3",children:"Expert"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(Ae,{className:"w-5 h-5 inline mr-2"}),s?"Tolérance au risque":"Risk Tolerance"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.riskTolerance,onValueChange:R=>v("riskTolerance",R),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"tres-conservateur",className:"text-lg py-3",children:s?"Très conservateur":"Very conservative"}),e.jsx(B,{value:"conservateur",className:"text-lg py-3",children:s?"Conservateur":"Conservative"}),e.jsx(B,{value:"equilibre",className:"text-lg py-3",children:s?"Équilibré":"Balanced"}),e.jsx(B,{value:"dynamique",className:"text-lg py-3",children:s?"Dynamique":"Dynamic"}),e.jsx(B,{value:"agressif",className:"text-lg py-3",children:s?"Agressif":"Aggressive"})]})]})})]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t border-gray-200",children:[e.jsxs(q,{variant:"outline",onClick:()=>x(!o),className:"flex items-center gap-2",children:[e.jsx(je,{className:"w-4 h-4"}),s?"Analyse d'impact":"Impact Analysis"]}),l===100&&e.jsxs(ee,{variant:"default",className:"flex items-center gap-1",children:[e.jsx(ie,{className:"w-4 h-4"}),s?"Profil complet":"Complete Profile"]})]}),o&&e.jsxs(pe,{className:"border-blue-300 bg-blue-50",children:[e.jsx(je,{className:"h-5 w-5 text-blue-500"}),e.jsxs(he,{className:"space-y-2",children:[e.jsx("h4",{className:"font-semibold text-blue-800",children:s?"Analyse d'impact sur la retraite":"Retirement Impact Analysis"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("strong",{children:s?"Âge de retraite ajusté:":"Adjusted retirement age:"}),e.jsxs("span",{className:"ml-2 text-blue-700",children:[w.adjustedRetirementAge," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Impact du risque:":"Risk impact:"}),e.jsxs("span",{className:`ml-2 ${w.riskImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[w.riskImpact.impact>=0?"+":"",w.riskImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Multiplicateur éducation:":"Education multiplier:"}),e.jsxs("span",{className:"ml-2 text-purple-700",children:[w.educationMultiplier.toFixed(2),"x"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Impact revenus:":"Income impact:"}),e.jsxs("span",{className:"ml-2 text-green-700",children:[w.incomeMultiplier.toFixed(2),"x"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Ajustement longévité:":"Longevity adjustment:"}),e.jsxs("span",{className:`ml-2 ${w.lifeExpectancyAdjustment>=0?"text-green-700":"text-red-700"}`,children:[w.lifeExpectancyAdjustment>=0?"+":"",w.lifeExpectancyAdjustment.toFixed(1)," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Réduction stress:":"Stress reduction:"}),e.jsxs("span",{className:"ml-2 text-blue-700",children:[(w.stressReduction*100).toFixed(1),"%"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Ajustement total:":"Total adjustment:"}),e.jsxs("span",{className:`ml-2 ${w.totalAdjustment>=0?"text-green-700":"text-red-700"}`,children:[w.totalAdjustment>=0?"+":"",w.totalAdjustment.toFixed(1)," ",s?"ans":"years"]})]})]}),e.jsx("p",{className:"text-xs text-gray-600 mt-2",children:s?"Ces calculs sont des estimations basées sur vos réponses. Consultez un professionnel pour des conseils personnalisés.":"These calculations are estimates based on your answers. Consult a professional for personalized advice."})]})]})]})]})})},vl=({userData:n,updateUserData:t,isFrench:s,personNumber:r=1})=>{const[a,i]=m.useState({healthStatus:"",lifestyle:"",smokingStatus:"",yearsQuitSmoking:0,height:0,weight:0,physicalActivity:"",chronicConditions:[]}),[l,c]=m.useState(0),[o,x]=m.useState(""),[v,p]=m.useState(0),[d,g]=m.useState(!1);m.useEffect(()=>{const h=n.personal||{},E=r===1?"1":"2";i({healthStatus:h[`etatSante${E}`]||"",lifestyle:h[`modeVieActif${E}`]||"",smokingStatus:h[`smokingStatus${E}`]||"",yearsQuitSmoking:h[`yearsQuitSmoking${E}`]||0,height:h[`height${E}`]||0,weight:h[`weight${E}`]||0,physicalActivity:h[`physicalActivity${E}`]||"",chronicConditions:h[`chronicConditions${E}`]||[]})},[n,r]),m.useEffect(()=>{if(a.height>0&&a.weight>0){const h=a.weight/(a.height/100)**2;c(Math.round(h*10)/10),h<18.5?x(s?"Sous-poids":"Underweight"):h<25?x(s?"Poids normal":"Normal weight"):h<30?x(s?"Surpoids":"Overweight"):x(s?"Obésité":"Obese")}else c(0),x("")},[a.height,a.weight,s]),m.useEffect(()=>{const h=[a.healthStatus,a.lifestyle,a.smokingStatus,a.height>0?a.height:"",a.weight>0?a.weight:"",a.physicalActivity],E=h.filter(A=>A!==""&&A!==0&&A!==null&&A!==void 0).length,f=Math.round(E/h.length*100);p(f)},[a]);const w=(h,E)=>{i(A=>({...A,[h]:E})),n.personal;const f=r===1?"1":"2";switch(h){case"healthStatus":t("personal",{[`etatSante${f}`]:E});break;case"lifestyle":t("personal",{[`modeVieActif${f}`]:E});break;case"smokingStatus":t("personal",{[`smokingStatus${f}`]:E});break;case"yearsQuitSmoking":t("personal",{[`yearsQuitSmoking${f}`]:E});break;case"height":t("personal",{[`height${f}`]:E});break;case"weight":t("personal",{[`weight${f}`]:E});break;case"physicalActivity":t("personal",{[`physicalActivity${f}`]:E});break;case"chronicConditions":t("personal",{[`chronicConditions${f}`]:E});break}},R=h=>{switch(h){case"excellent":return{impact:2,description:s?"+2.0 ans d'espérance de vie":"+2.0 years life expectancy"};case"tresbon":return{impact:1,description:s?"+1.0 an d'espérance de vie":"+1.0 year life expectancy"};case"bon":return{impact:.5,description:s?"+0.5 an d'espérance de vie":"+0.5 year life expectancy"};case"moyen":return{impact:0,description:s?"Aucun impact":"No impact"};case"fragile":return{impact:-1.5,description:s?"-1.5 ans d'espérance de vie":"-1.5 years life expectancy"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},u=h=>{switch(h){case"sedentaire":return{impact:-.5,description:s?"-0.5 an (sédentaire)":"-0.5 year (sedentary)"};case"legerementActif":return{impact:0,description:s?"Aucun impact":"No impact"};case"modere":return{impact:.5,description:s?"+0.5 an (activité modérée)":"+0.5 year (moderate activity)"};case"actif":return{impact:.8,description:s?"+0.8 an (actif)":"+0.8 year (active)"};case"tresActif":return{impact:1,description:s?"+1.0 an (très actif)":"+1.0 year (very active)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},b=(h,E)=>{switch(h){case"never":return{impact:0,description:s?"Aucun impact":"No impact"};case"former":const f=E?Math.min(E*.1,1):0;return{impact:-2+f,description:s?`Fumeur ancien: -2.0 ans +${f.toFixed(1)} ans récupérés`:`Former smoker: -2.0 years +${f.toFixed(1)} years recovered`};case"current":return{impact:-2,description:s?"-2.0 ans (fumeur actuel)":"-2.0 years (current smoker)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},N=h=>h<18.5?{impact:-.3,description:s?"-0.3 an (sous-poids)":"-0.3 year (underweight)"}:h<25?{impact:0,description:"Optimal"}:h<30?{impact:-.5,description:s?"-0.5 an (surpoids)":"-0.5 year (overweight)"}:{impact:-1,description:s?"-1.0 an (obésité)":"-1.0 year (obesity)"},j=(()=>{const h=R(a.healthStatus),E=u(a.lifestyle),f=b(a.smokingStatus,a.yearsQuitSmoking),A=N(l),L=h.impact+E.impact+f.impact+A.impact;return{healthImpact:h,lifestyleImpact:E,smokingImpact:f,bmiImpact:A,totalImpact:L}})();return e.jsx(Gs,{children:e.jsxs(M,{className:"bg-white border-2 border-green-200 shadow-lg",children:[e.jsxs($,{className:"border-b-2 border-green-100 bg-green-50",children:[e.jsxs(_,{className:"text-xl font-bold text-green-800 flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 bg-green-600 rounded-full flex items-center justify-center text-white font-bold",children:r}),e.jsx(fs,{className:"w-6 h-6"}),s?"Facteurs de santé":"Health Factors",e.jsxs(ee,{variant:v===100?"default":"secondary",className:"ml-auto",children:[v,"% ",s?"complété":"complete"]})]}),e.jsx(We,{value:v,className:"w-full h-2"})]}),e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(fs,{className:"w-5 h-5 inline mr-2"}),s?"État de santé général":"General Health Status"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.healthStatus,onValueChange:h=>w("healthStatus",h),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"excellent",className:"text-lg py-3",children:"Excellent"}),e.jsx(B,{value:"tresbon",className:"text-lg py-3",children:s?"Très bon":"Very good"}),e.jsx(B,{value:"bon",className:"text-lg py-3",children:s?"Bon":"Good"}),e.jsx(B,{value:"moyen",className:"text-lg py-3",children:s?"Moyen":"Average"}),e.jsx(B,{value:"fragile",className:"text-lg py-3",children:s?"Fragile":"Poor"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(Kt,{className:"w-5 h-5 inline mr-2"}),s?"Mode de vie actif":"Active Lifestyle"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.lifestyle,onValueChange:h=>w("lifestyle",h),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"sedentaire",className:"text-lg py-3",children:s?"Sédentaire":"Sedentary"}),e.jsx(B,{value:"legerementActif",className:"text-lg py-3",children:s?"Légèrement actif":"Lightly active"}),e.jsx(B,{value:"modere",className:"text-lg py-3",children:s?"Modérément actif":"Moderately active"}),e.jsx(B,{value:"actif",className:"text-lg py-3",children:s?"Actif":"Active"}),e.jsx(B,{value:"tresActif",className:"text-lg py-3",children:s?"Très actif":"Very active"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:[e.jsx(hn,{className:"w-5 h-5 inline mr-2"}),s?"Statut tabagique":"Smoking Status"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.smokingStatus,onValueChange:h=>w("smokingStatus",h),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"never",className:"text-lg py-3",children:s?"Jamais fumé":"Never smoked"}),e.jsx(B,{value:"former",className:"text-lg py-3",children:s?"Ancien fumeur":"Former smoker"}),e.jsx(B,{value:"current",className:"text-lg py-3",children:s?"Fumeur actuel":"Current smoker"})]})]})})]}),a.smokingStatus==="former"&&e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(D,{className:"text-lg font-semibold text-gray-900 w-72 flex-shrink-0",children:s?"Années depuis l'arrêt":"Years since quitting"}),e.jsx("div",{className:"flex-1",children:e.jsx(Y,{type:"number",value:a.yearsQuitSmoking||"",onChange:h=>w("yearsQuitSmoking",parseInt(h.target.value)||0),className:"bg-white border-2 border-gray-300 text-gray-900 placeholder-gray-500 focus:border-green-600 focus:ring-2 focus:ring-green-200 text-lg h-12",placeholder:"Ex: 5",min:"0",max:"50"})})]}),e.jsxs("div",{className:"space-y-4 p-4 bg-blue-50 rounded-lg border border-blue-200",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900",children:[e.jsx(lt,{className:"w-5 h-5 inline mr-2"}),s?"Calculateur d'IMC":"BMI Calculator"]}),e.jsxs(Va,{children:[e.jsx($a,{children:e.jsx(Oe,{className:"w-4 h-4 text-gray-400"})}),e.jsx(ft,{children:e.jsx("p",{children:s?"L'indice de masse corporelle (IMC) influence la santé et l'espérance de vie":"Body Mass Index (BMI) affects health and life expectancy"})})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{className:"text-sm text-gray-700",children:s?"Taille (cm)":"Height (cm)"}),e.jsx(Y,{type:"number",value:a.height||"",onChange:h=>w("height",parseFloat(h.target.value)||0),className:"bg-white border-2 border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-600 focus:ring-2 focus:ring-blue-200 text-lg h-12",placeholder:"Ex: 170",min:"100",max:"250"})]}),e.jsxs("div",{children:[e.jsx(D,{className:"text-sm text-gray-700",children:s?"Poids (kg)":"Weight (kg)"}),e.jsx(Y,{type:"number",value:a.weight||"",onChange:h=>w("weight",parseFloat(h.target.value)||0),className:"bg-white border-2 border-gray-300 text-gray-900 placeholder-gray-500 focus:border-blue-600 focus:ring-2 focus:ring-blue-200 text-lg h-12",placeholder:"Ex: 70",min:"30",max:"300"})]})]}),l>0&&e.jsx("div",{className:"mt-4 p-3 bg-white rounded border",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsxs("span",{className:"text-lg font-semibold",children:[s?"IMC:":"BMI:"," ",l]}),e.jsxs("span",{className:"ml-4 text-sm text-gray-600",children:["(",o,")"]})]}),e.jsx(ee,{variant:l>=18.5&&l<25?"default":"destructive",children:l>=18.5&&l<25?"Optimal":s?"À surveiller":"Needs attention"})]})})]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t border-gray-200",children:[e.jsxs(q,{variant:"outline",onClick:()=>g(!d),className:"flex items-center gap-2",children:[e.jsx(je,{className:"w-4 h-4"}),s?"Analyse d'impact":"Impact Analysis"]}),v===100&&e.jsxs(ee,{variant:"default",className:"flex items-center gap-1",children:[e.jsx(ie,{className:"w-4 h-4"}),s?"Profil complet":"Complete Profile"]})]}),d&&e.jsxs(pe,{className:"border-green-300 bg-green-50",children:[e.jsx(je,{className:"h-5 w-5 text-green-500"}),e.jsxs(he,{className:"space-y-2",children:[e.jsx("h4",{className:"font-semibold text-green-800",children:s?"Analyse d'impact sur la santé et longévité":"Health and Longevity Impact Analysis"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("strong",{children:s?"État de santé:":"Health status:"}),e.jsxs("span",{className:`ml-2 ${j.healthImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[j.healthImpact.impact>=0?"+":"",j.healthImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Mode de vie:":"Lifestyle:"}),e.jsxs("span",{className:`ml-2 ${j.lifestyleImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[j.lifestyleImpact.impact>=0?"+":"",j.lifestyleImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Tabagisme:":"Smoking:"}),e.jsxs("span",{className:`ml-2 ${j.smokingImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[j.smokingImpact.impact>=0?"+":"",j.smokingImpact.impact.toFixed(1)," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"IMC:":"BMI:"}),e.jsxs("span",{className:`ml-2 ${j.bmiImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[j.bmiImpact.impact>=0?"+":"",j.bmiImpact.impact," ",s?"ans":"years"]})]})]}),e.jsxs("div",{className:"mt-4 p-3 bg-white rounded border",children:[e.jsx("strong",{className:"text-green-800",children:s?"Impact total sur l'espérance de vie:":"Total impact on life expectancy:"}),e.jsxs("span",{className:`ml-2 text-lg font-bold ${j.totalImpact>=0?"text-green-700":"text-red-700"}`,children:[j.totalImpact>=0?"+":"",j.totalImpact.toFixed(1)," ",s?"ans":"years"]})]}),e.jsx("p",{className:"text-xs text-gray-600 mt-2",children:s?"Ces calculs sont des estimations basées sur des études médicales. Consultez un professionnel de santé pour des conseils personnalisés.":"These calculations are estimates based on medical studies. Consult a healthcare professional for personalized advice."})]})]})]})]})})},jl=({userData:n,updateUserData:t,isFrench:s,personNumber:r=1})=>{const[a,i]=m.useState({livingEnvironment:"",housingType:"",familyComposition:"",distanceToSpecializedCare:0,waterQuality:"",airQuality:"",noiseLevel:"",accessToGreenSpaces:"",transportAccess:"",communitySupport:"",crimeRate:"",climateStressors:[]}),[l,c]=m.useState(0),[o,x]=m.useState(!1);m.useEffect(()=>{const j=n.personal||{},h=r===1?"1":"2";i({livingEnvironment:j[`livingEnvironment${h}`]||"",housingType:j[`housingType${h}`]||"",familyComposition:j[`familyComposition${h}`]||"",distanceToSpecializedCare:j[`distanceToSpecializedCare${h}`]||0,waterQuality:j[`waterQuality${h}`]||"",airQuality:j[`airQuality${h}`]||"",noiseLevel:j[`noiseLevel${h}`]||"",accessToGreenSpaces:j[`accessToGreenSpaces${h}`]||"",transportAccess:j[`transportAccess${h}`]||"",communitySupport:j[`communitySupport${h}`]||"",crimeRate:j[`crimeRate${h}`]||"",climateStressors:j[`climateStressors${h}`]||[]})},[n,r]),m.useEffect(()=>{const j=[a.livingEnvironment,a.housingType,a.familyComposition,a.distanceToSpecializedCare>0?a.distanceToSpecializedCare:"",a.waterQuality,a.airQuality,a.noiseLevel,a.accessToGreenSpaces,a.transportAccess,a.communitySupport,a.crimeRate],h=j.filter(f=>f!==""&&f!==0&&f!==null&&f!==void 0).length,E=Math.round(h/j.length*100);c(E)},[a]);const v=(j,h)=>{i(f=>({...f,[j]:h}));const E=r===1?"1":"2";switch(j){case"livingEnvironment":t("personal",{[`livingEnvironment${E}`]:h});break;case"housingType":t("personal",{[`housingType${E}`]:h});break;case"familyComposition":t("personal",{[`familyComposition${E}`]:h});break;case"distanceToSpecializedCare":t("personal",{[`distanceToSpecializedCare${E}`]:h});break;case"waterQuality":t("personal",{[`waterQuality${E}`]:h});break;case"airQuality":t("personal",{[`airQuality${E}`]:h});break;case"noiseLevel":t("personal",{[`noiseLevel${E}`]:h});break;case"accessToGreenSpaces":t("personal",{[`accessToGreenSpaces${E}`]:h});break;case"transportAccess":t("personal",{[`transportAccess${E}`]:h});break;case"communitySupport":t("personal",{[`communitySupport${E}`]:h});break;case"crimeRate":t("personal",{[`crimeRate${E}`]:h});break;case"climateStressors":t("personal",{[`climateStressors${E}`]:h});break}},p=j=>{switch(j){case"urbain":return{impact:-.2,description:s?"-0.2 an (stress urbain)":"-0.2 year (urban stress)"};case"suburbain":return{impact:.3,description:s?"+0.3 an (équilibre optimal)":"+0.3 year (optimal balance)"};case"rural":return{impact:.5,description:s?"+0.5 an (air pur, moins de stress)":"+0.5 year (clean air, less stress)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},d=j=>{switch(j){case"excellente":return{impact:.3,description:s?"+0.3 an (eau pure)":"+0.3 year (pure water)"};case"bonne":return{impact:.1,description:s?"+0.1 an (bonne qualité)":"+0.1 year (good quality)"};case"moyenne":return{impact:0,description:s?"Aucun impact":"No impact"};case"pauvre":return{impact:-.5,description:s?"-0.5 an (contamination)":"-0.5 year (contamination)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},g=j=>{switch(j){case"excellente":return{impact:.8,description:s?"+0.8 an (air pur)":"+0.8 year (clean air)"};case"bonne":return{impact:.3,description:s?"+0.3 an (bonne qualité)":"+0.3 year (good quality)"};case"moyenne":return{impact:0,description:s?"Aucun impact":"No impact"};case"pauvre":return{impact:-1.2,description:s?"-1.2 ans (pollution)":"-1.2 years (pollution)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},w=j=>{switch(j){case"excellent":return{impact:.6,description:s?"+0.6 an (nature accessible)":"+0.6 year (accessible nature)"};case"bon":return{impact:.3,description:s?"+0.3 an (espaces verts)":"+0.3 year (green spaces)"};case"limite":return{impact:0,description:s?"Aucun impact":"No impact"};case"aucun":return{impact:-.4,description:s?"-0.4 an (manque de nature)":"-0.4 year (lack of nature)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},R=j=>j<=5?{impact:.4,description:s?"+0.4 an (soins proches)":"+0.4 year (nearby care)"}:j<=15?{impact:.1,description:s?"+0.1 an (accès raisonnable)":"+0.1 year (reasonable access)"}:j<=30?{impact:0,description:s?"Aucun impact":"No impact"}:j<=60?{impact:-.3,description:s?"-0.3 an (accès limité)":"-0.3 year (limited access)"}:{impact:-.8,description:s?"-0.8 an (accès difficile)":"-0.8 year (difficult access)"},u=j=>{switch(j){case"fort":return{impact:.7,description:s?"+0.7 an (soutien social fort)":"+0.7 year (strong social support)"};case"modere":return{impact:.2,description:s?"+0.2 an (soutien modéré)":"+0.2 year (moderate support)"};case"faible":return{impact:-.3,description:s?"-0.3 an (isolement social)":"-0.3 year (social isolation)"};default:return{impact:0,description:s?"Aucun impact":"No impact"}}},N=(()=>{const j=p(a.livingEnvironment),h=d(a.waterQuality),E=g(a.airQuality),f=w(a.accessToGreenSpaces),A=R(a.distanceToSpecializedCare),L=u(a.communitySupport),I=j.impact+h.impact+E.impact+f.impact+A.impact+L.impact;return{environmentImpact:j,waterImpact:h,airImpact:E,greenSpacesImpact:f,healthcareImpact:A,communityImpact:L,totalImpact:I}})(),S=[{value:"canicule",label:s?"Canicules fréquentes":"Frequent heat waves"},{value:"froid-extreme",label:s?"Froid extrême":"Extreme cold"},{value:"humidite",label:s?"Humidité élevée":"High humidity"},{value:"secheresse",label:s?"Sécheresse":"Drought"},{value:"tempetes",label:s?"Tempêtes fréquentes":"Frequent storms"},{value:"inondations",label:s?"Risque d'inondations":"Flood risk"}];return e.jsx(Gs,{children:e.jsxs(M,{className:"bg-white border-2 border-emerald-200 shadow-lg",children:[e.jsxs($,{className:"border-b-2 border-emerald-100 bg-emerald-50",children:[e.jsxs(_,{className:"text-xl font-bold text-emerald-800 flex items-center gap-3",children:[e.jsx("div",{className:"w-8 h-8 bg-emerald-600 rounded-full flex items-center justify-center text-white font-bold",children:r}),e.jsx(Rt,{className:"w-6 h-6"}),s?"Environnement de vie":"Living Environment",e.jsxs(ee,{variant:l===100?"default":"secondary",className:"ml-auto",children:[l,"% ",s?"complété":"complete"]})]}),e.jsx(We,{value:l,className:"w-full h-2"})]}),e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(gn,{className:"w-5 h-5 inline mr-2"}),s?"Type de milieu":"Environment Type"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.livingEnvironment,onValueChange:j=>v("livingEnvironment",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"urbain",className:"text-lg py-3",children:s?"Urbain (ville)":"Urban (city)"}),e.jsx(B,{value:"suburbain",className:"text-lg py-3",children:s?"Suburbain (banlieue)":"Suburban"}),e.jsx(B,{value:"rural",className:"text-lg py-3",children:s?"Rural (campagne)":"Rural (countryside)"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(ks,{className:"w-5 h-5 inline mr-2"}),s?"Type de logement":"Housing Type"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.housingType,onValueChange:j=>v("housingType",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"maison",className:"text-lg py-3",children:s?"Maison individuelle":"Single house"}),e.jsx(B,{value:"condo",className:"text-lg py-3",children:"Condominium"}),e.jsx(B,{value:"appartement",className:"text-lg py-3",children:s?"Appartement":"Apartment"}),e.jsx(B,{value:"duplex",className:"text-lg py-3",children:"Duplex/Triplex"}),e.jsx(B,{value:"residence",className:"text-lg py-3",children:s?"Résidence pour aînés":"Senior residence"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(ks,{className:"w-5 h-5 inline mr-2"}),s?"Composition du ménage":"Household Composition"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.familyComposition,onValueChange:j=>v("familyComposition",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"seul",className:"text-lg py-3",children:s?"Seul":"Alone"}),e.jsx(B,{value:"couple",className:"text-lg py-3",children:s?"En couple":"Couple"}),e.jsx(B,{value:"famille",className:"text-lg py-3",children:s?"Famille avec enfants":"Family with children"}),e.jsx(B,{value:"multigenerationnel",className:"text-lg py-3",children:s?"Multigénérationnel":"Multigenerational"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(fn,{className:"w-5 h-5 inline mr-2"}),s?"Distance soins spécialisés (km)":"Distance to Specialized Care (km)"]}),e.jsx("div",{className:"flex-1",children:e.jsx(Y,{type:"number",value:a.distanceToSpecializedCare||"",onChange:j=>v("distanceToSpecializedCare",parseInt(j.target.value)||0),className:"bg-white border-2 border-gray-300 text-gray-900 placeholder-gray-500 focus:border-emerald-600 focus:ring-2 focus:ring-emerald-200 text-lg h-12",placeholder:"Ex: 15",min:"0",max:"500"})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(vn,{className:"w-5 h-5 inline mr-2"}),s?"Qualité de l'eau":"Water Quality"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.waterQuality,onValueChange:j=>v("waterQuality",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"excellente",className:"text-lg py-3",children:s?"Excellente":"Excellent"}),e.jsx(B,{value:"bonne",className:"text-lg py-3",children:s?"Bonne":"Good"}),e.jsx(B,{value:"moyenne",className:"text-lg py-3",children:s?"Moyenne":"Average"}),e.jsx(B,{value:"pauvre",className:"text-lg py-3",children:s?"Pauvre":"Poor"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(Et,{className:"w-5 h-5 inline mr-2"}),s?"Qualité de l'air":"Air Quality"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.airQuality,onValueChange:j=>v("airQuality",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"excellente",className:"text-lg py-3",children:s?"Excellente":"Excellent"}),e.jsx(B,{value:"bonne",className:"text-lg py-3",children:s?"Bonne":"Good"}),e.jsx(B,{value:"moyenne",className:"text-lg py-3",children:s?"Moyenne":"Average"}),e.jsx(B,{value:"pauvre",className:"text-lg py-3",children:s?"Pauvre":"Poor"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(Rt,{className:"w-5 h-5 inline mr-2"}),s?"Accès aux espaces verts":"Access to Green Spaces"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.accessToGreenSpaces,onValueChange:j=>v("accessToGreenSpaces",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"excellent",className:"text-lg py-3",children:s?"Excellent (parcs, forêts à proximité)":"Excellent (parks, forests nearby)"}),e.jsx(B,{value:"bon",className:"text-lg py-3",children:s?"Bon (quelques espaces verts)":"Good (some green spaces)"}),e.jsx(B,{value:"limite",className:"text-lg py-3",children:s?"Limité (peu d'espaces verts)":"Limited (few green spaces)"}),e.jsx(B,{value:"aucun",className:"text-lg py-3",children:s?"Aucun (environnement bétonné)":"None (concrete environment)"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(Xt,{className:"w-5 h-5 inline mr-2"}),s?"Accès aux transports":"Transportation Access"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.transportAccess,onValueChange:j=>v("transportAccess",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"excellent",className:"text-lg py-3",children:s?"Excellent (transport public fréquent)":"Excellent (frequent public transport)"}),e.jsx(B,{value:"bon",className:"text-lg py-3",children:s?"Bon (transport disponible)":"Good (transport available)"}),e.jsx(B,{value:"limite",className:"text-lg py-3",children:s?"Limité (transport occasionnel)":"Limited (occasional transport)"}),e.jsx(B,{value:"aucun",className:"text-lg py-3",children:s?"Aucun (voiture nécessaire)":"None (car required)"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(ks,{className:"w-5 h-5 inline mr-2"}),s?"Soutien communautaire":"Community Support"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.communitySupport,onValueChange:j=>v("communitySupport",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"fort",className:"text-lg py-3",children:s?"Fort (communauté active, voisinage solidaire)":"Strong (active community, supportive neighborhood)"}),e.jsx(B,{value:"modere",className:"text-lg py-3",children:s?"Modéré (quelques liens sociaux)":"Moderate (some social connections)"}),e.jsx(B,{value:"faible",className:"text-lg py-3",children:s?"Faible (peu de liens sociaux)":"Weak (few social connections)"})]})]})})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0",children:[e.jsx(Ae,{className:"w-5 h-5 inline mr-2"}),s?"Sécurité du quartier":"Neighborhood Safety"]}),e.jsx("div",{className:"flex-1",children:e.jsxs(me,{value:a.crimeRate,onValueChange:j=>v("crimeRate",j),children:[e.jsx(oe,{className:"bg-white border-2 border-gray-300 text-gray-900 h-12 text-lg",children:e.jsx(ue,{placeholder:s?"Sélectionner":"Select"})}),e.jsxs(ce,{className:"bg-white border-2 border-gray-300",children:[e.jsx(B,{value:"tres-securitaire",className:"text-lg py-3",children:s?"Très sécuritaire":"Very safe"}),e.jsx(B,{value:"securitaire",className:"text-lg py-3",children:s?"Sécuritaire":"Safe"}),e.jsx(B,{value:"moyen",className:"text-lg py-3",children:s?"Moyennement sécuritaire":"Moderately safe"}),e.jsx(B,{value:"peu-securitaire",className:"text-lg py-3",children:s?"Peu sécuritaire":"Not very safe"})]})]})})]}),e.jsxs("div",{className:"flex items-start gap-4",children:[e.jsxs(D,{className:"text-lg font-semibold text-gray-900 w-96 flex-shrink-0 pt-2",children:[e.jsx(Et,{className:"w-5 h-5 inline mr-2"}),s?"Facteurs climatiques stressants":"Climate Stressors"]}),e.jsx("div",{className:"flex-1",children:e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:S.map(j=>{const h=a.climateStressors||[],E=h.includes(j.value);return e.jsxs("label",{className:"flex items-center gap-3 text-lg p-2 border rounded hover:bg-gray-50 cursor-pointer",children:[e.jsx("input",{type:"checkbox",checked:E,onChange:()=>{const f=E?h.filter(A=>A!==j.value):[...h,j.value];v("climateStressors",f)},className:"w-5 h-5 rounded border-gray-300 text-emerald-600 focus:ring-emerald-500"}),e.jsx("span",{className:"flex-1",children:j.label})]},j.value)})})})]}),e.jsxs("div",{className:"flex items-center justify-between pt-4 border-t border-gray-200",children:[e.jsxs(q,{variant:"outline",onClick:()=>x(!o),className:"flex items-center gap-2",children:[e.jsx(je,{className:"w-4 h-4"}),s?"Analyse d'impact":"Impact Analysis"]}),l===100&&e.jsxs(ee,{variant:"default",className:"flex items-center gap-1",children:[e.jsx(ie,{className:"w-4 h-4"}),s?"Profil complet":"Complete Profile"]})]}),o&&e.jsxs(pe,{className:"border-emerald-300 bg-emerald-50",children:[e.jsx(je,{className:"h-5 w-5 text-emerald-500"}),e.jsxs(he,{className:"space-y-2",children:[e.jsx("h4",{className:"font-semibold text-emerald-800",children:s?"Analyse d'impact environnemental sur la longévité":"Environmental Impact Analysis on Longevity"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsx("strong",{children:s?"Type de milieu:":"Environment type:"}),e.jsxs("span",{className:`ml-2 ${N.environmentImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.environmentImpact.impact>=0?"+":"",N.environmentImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Qualité de l'eau:":"Water quality:"}),e.jsxs("span",{className:`ml-2 ${N.waterImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.waterImpact.impact>=0?"+":"",N.waterImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Qualité de l'air:":"Air quality:"}),e.jsxs("span",{className:`ml-2 ${N.airImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.airImpact.impact>=0?"+":"",N.airImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Espaces verts:":"Green spaces:"}),e.jsxs("span",{className:`ml-2 ${N.greenSpacesImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.greenSpacesImpact.impact>=0?"+":"",N.greenSpacesImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Accès aux soins:":"Healthcare access:"}),e.jsxs("span",{className:`ml-2 ${N.healthcareImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.healthcareImpact.impact>=0?"+":"",N.healthcareImpact.impact," ",s?"ans":"years"]})]}),e.jsxs("div",{children:[e.jsx("strong",{children:s?"Soutien communautaire:":"Community support:"}),e.jsxs("span",{className:`ml-2 ${N.communityImpact.impact>=0?"text-green-700":"text-red-700"}`,children:[N.communityImpact.impact>=0?"+":"",N.communityImpact.impact," ",s?"ans":"years"]})]})]}),e.jsxs("div",{className:"mt-4 p-3 bg-white rounded border",children:[e.jsx("strong",{className:"text-emerald-800",children:s?"Impact total environnemental sur l'espérance de vie:":"Total environmental impact on life expectancy:"}),e.jsxs("span",{className:`ml-2 text-lg font-bold ${N.totalImpact>=0?"text-green-700":"text-red-700"}`,children:[N.totalImpact>=0?"+":"",N.totalImpact.toFixed(1)," ",s?"ans":"years"]})]}),e.jsx("p",{className:"text-xs text-gray-600 mt-2",children:s?"Ces calculs sont des estimations basées sur des études environnementales et de santé publique. Consultez un professionnel pour des conseils personnalisés.":"These calculations are estimates based on environmental and public health studies. Consult a professional for personalized advice."})]})]})]})]})})},Ci=()=>{const[n,t]=m.useState(()=>{const r=window.location.pathname;return r.includes("/en/")||r.startsWith("/en")?"en":"fr"});return m.useEffect(()=>{const r=()=>{const a=window.location.pathname,i=a.includes("/en/")||a.startsWith("/en")?"en":"fr";i!==n&&t(i)};return window.addEventListener("popstate",r),()=>{window.removeEventListener("popstate",r)}},[n]),{language:n,setLanguage:r=>{t(r);const a=window.location.pathname;let i=a;r==="en"&&!a.includes("/en")?i=`/en${a}`:r==="fr"&&a.includes("/en")&&(i=a.replace("/en","")),i!==a&&window.history.pushState({},"",i)},isEnglish:n==="en",isFrench:n==="fr"}},Ri=n=>{try{const t=new Date(n),s=isNaN(t.getTime())?n:t.toLocaleDateString("fr-CA"),r=isNaN(t.getTime())?"":` ${t.toLocaleTimeString("fr-CA",{hour:"2-digit",minute:"2-digit"})}`;return s+r}catch{return n}},Ei=n=>{switch(n){case"RRQ":return"Demande RRQ";case"SV":return"Demande SV";case"FERR":return"Conversion REER→FERR";case"WITHDRAWAL_NOTICE":return"Préavis retrait";default:return n}},bl=({scenarioId:n="default"})=>{const t=Sa(),[s,r]=m.useState(""),[a,i]=m.useState(""),[l,c]=m.useState(""),[o,x]=m.useState(null),v=m.useMemo(()=>{try{return Pt.list(n)}catch{return x("Impossible de charger les notifications planifiées."),[]}},[n]),p=m.useMemo(()=>{const d=Date.now();return v.filter(g=>new Date(g.scheduledAt).getTime()>=d).slice(0,10)},[v]);return e.jsxs(M,{className:"border-2 border-amber-200",children:[e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center gap-2 text-amber-800",children:[e.jsx(jn,{className:"w-5 h-5"}),"Rappels 90/60/30 jours"]}),e.jsx(xe,{children:"Programmez des rappels pour RRQ / SV / Conversion FERR et retraits avec préavis."})]}),e.jsxs(k,{className:"space-y-4",children:[o&&e.jsx(pe,{className:"border-red-200 bg-red-50 text-red-800",children:e.jsx(he,{children:o})}),e.jsx("div",{className:"p-3 rounded-md bg-amber-50 border border-amber-200",children:e.jsxs("div",{className:"flex items-center justify-between gap-2 flex-wrap",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(bn,{className:"w-4 h-4 text-amber-700"}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-amber-800",children:"Conversion REER → FERR"}),e.jsx("div",{className:"text-xs text-amber-700",children:"Planifier automatiquement la série 90/60/30 selon votre année des 71 ans"})]})]}),e.jsx(q,{className:"bg-amber-600 hover:bg-amber-700",onClick:()=>t("/notifications/apply?type=FERR&scenarioId=default&leads=90,60,30&channels=inapp"),children:"Planifier FERR"})]})}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsxs("div",{className:"p-3 rounded-md border",children:[e.jsx("div",{className:"text-sm font-semibold mb-2",children:"Demande RRQ (date cible)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"date",className:"border rounded px-2 py-1 flex-1",value:s,onChange:d=>r(d.target.value),title:"Date cible RRQ","aria-label":"Date cible RRQ",placeholder:"YYYY-MM-DD"}),e.jsx(q,{variant:"outline",onClick:()=>{if(!s)return x("Veuillez sélectionner une date RRQ (YYYY-MM-DD)");t(`/notifications/apply?type=RRQ&date=${s}&scenarioId=default&leads=90,60,30&channels=inapp`)},children:"Planifier"})]})]}),e.jsxs("div",{className:"p-3 rounded-md border",children:[e.jsx("div",{className:"text-sm font-semibold mb-2",children:"Demande SV (date cible)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"date",className:"border rounded px-2 py-1 flex-1",value:a,onChange:d=>i(d.target.value),title:"Date cible SV","aria-label":"Date cible SV",placeholder:"YYYY-MM-DD"}),e.jsx(q,{variant:"outline",onClick:()=>{if(!a)return x("Veuillez sélectionner une date SV (YYYY-MM-DD)");t(`/notifications/apply?type=SV&date=${a}&scenarioId=default&leads=90,60,30&channels=inapp`)},children:"Planifier"})]})]})]}),e.jsxs("div",{className:"p-3 rounded-md border",children:[e.jsx("div",{className:"text-sm font-semibold mb-2",children:"Préavis retrait d’investissement (date de retrait)"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{type:"date",className:"border rounded px-2 py-1 flex-1",value:l,onChange:d=>c(d.target.value),title:"Date de retrait d’investissement","aria-label":"Date de retrait d’investissement",placeholder:"YYYY-MM-DD"}),e.jsx(q,{variant:"outline",onClick:()=>{if(!l)return x("Veuillez sélectionner une date de retrait (YYYY-MM-DD)");t(`/notifications/apply?type=WITHDRAWAL_NOTICE&date=${l}&scenarioId=default&leads=90,60,30&channels=inapp`)},children:"Planifier"})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(Le,{className:"w-4 h-4 text-slate-700"}),e.jsx("div",{className:"font-semibold",children:"Prochains rappels"}),e.jsx(ee,{variant:"outline",children:p.length})]}),p.length===0?e.jsxs("div",{className:"text-sm text-slate-600 flex items-center gap-2",children:[e.jsx(Oe,{className:"w-4 h-4"}),"Aucun rappel à venir. Programmez vos rappels ci-dessus."]}):e.jsx("div",{className:"space-y-2",children:p.map(d=>e.jsxs("div",{className:"flex items-center justify-between border rounded px-3 py-2",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(ee,{variant:"outline",children:Ei(d.type)}),e.jsxs("div",{children:[e.jsx("div",{className:"text-sm font-medium",children:d.title}),e.jsx("div",{className:"text-xs text-slate-600",children:d.message})]})]}),e.jsx("div",{className:"text-sm text-slate-700",children:Ri(d.scheduledAt)})]},d.id))})]}),e.jsxs("div",{className:"flex items-center gap-2 pt-2",children:[e.jsx(q,{variant:"outline",onClick:()=>t("/notifications"),children:"Voir tout"}),e.jsx(q,{variant:"ghost",onClick:()=>{Pt.clear(n),window.location.reload()},children:"Effacer tout"})]})]})]})},Qe=({value:n,onChange:t,className:s,placeholder:r})=>{const[a,i]=m.useState(""),l=m.useRef(null);m.useEffect(()=>{i(n||"")},[n]);const c=g=>{const R=g.replace(/\D/g,"").slice(0,8);let u="";return R.length>0&&(u=R.slice(0,4),R.length>4&&(u+="-"+R.slice(4,6),R.length>6&&(u+="-"+R.slice(6,8)))),u},o=g=>{const w=g.target.value,R=g.target.selectionStart||0;if(w.length{if(l.current){const b=w.replace(/\D/g,"");if(b.length===4&&!w.includes("-"))l.current.setSelectionRange(5,5);else if(b.length===6&&w.match(/^\d{4}-\d{2}$/))l.current.setSelectionRange(8,8);else{const N=Math.min(u.length,R+(u.length-a.length));l.current.setSelectionRange(N,N)}}},0)},x=g=>{["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(g.key)||g.ctrlKey||g.metaKey||/^\d$/.test(g.key)||g.preventDefault()},p=(g=>{if(!g||g.length!==10||!/^\d{4}-\d{2}-\d{2}$/.test(g))return!1;const[R,u,b]=g.split("-").map(Number);if(R<1900||R>new Date().getFullYear()||u<1||u>12||b<1||b>31)return!1;const N=new Date(R,u-1,b);return N.getFullYear()===R&&N.getMonth()===u-1&&N.getDate()===b})(a),d=a.length===10&&!p;return e.jsxs("div",{className:"space-y-1",children:[e.jsx(Y,{ref:l,type:"text",value:a,onChange:o,onKeyDown:x,className:`${s} ${d?"border-red-500 focus:border-red-500 focus:ring-red-500":""}`,placeholder:r||"AAAA-MM-JJ",maxLength:10}),d&&e.jsx("p",{className:"text-red-400 text-sm",children:"Date invalide. Format attendu: AAAA-MM-JJ"})]})},Me=({value:n,onChange:t,placeholder:s="0",className:r,disabled:a=!1,allowDecimals:i=!0,currency:l="$"})=>{const[c,o]=m.useState(""),[x,v]=m.useState(!1),p=b=>{if(b===0)return"";const N=b.toFixed(i?2:0).split("."),S=N[0].replace(/\B(?=(\d{3})+(?!\d))/g," ");return i&&N[1]&&N[1]!=="00"?`${S},${N[1]}`:S},d=b=>{if(!b||b.trim()==="")return 0;const N=b.replace(/\s/g,"").replace(",","."),S=parseFloat(N);return isNaN(S)?0:S};m.useEffect(()=>{x||o(p(n))},[n,x,i]);const g=b=>{const N=b.target.value;if(!/^[\d\s,.]*$/.test(N))return;o(N);const j=d(N);t(j)},w=()=>{if(v(!0),n===0)o("");else{const b=n.toFixed(i?2:0).replace(".",",");o(b.endsWith(",00")?b.slice(0,-3):b)}},R=()=>{v(!1),o(p(n))},u=b=>{["Backspace","Delete","Tab","Escape","Enter","ArrowLeft","ArrowRight","ArrowUp","ArrowDown","Home","End"].includes(b.key)||b.ctrlKey||b.metaKey||/^\d$/.test(b.key)||i&&b.key===","&&!c.includes(",")||b.key!==" "&&b.preventDefault()};return e.jsxs("div",{className:"relative",children:[e.jsx("span",{className:"absolute left-3 top-1/2 transform -translate-y-1/2 text-gray-400 pointer-events-none",children:l}),e.jsx(Y,{type:"text",value:c,onChange:g,onFocus:w,onBlur:R,onKeyDown:u,placeholder:s,disabled:a,className:se("pl-8",r)})]})},_a=m.forwardRef(({className:n,...t},s)=>e.jsx(wa,{ref:s,className:se("peer h-4 w-4 shrink-0 rounded-sm border border-primary ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=checked]:text-primary-foreground",n),...t,children:e.jsx(gr,{className:se("flex items-center justify-center text-current"),children:e.jsx(gs,{className:"h-4 w-4"})})}));_a.displayName=wa.displayName;const Ii=({isOpen:n,onClose:t,onConsent:s,featureName:r,isFrench:a=!0})=>{const[i,l]=m.useState(!1),c=()=>{i&&(s(),l(!1))},o=()=>{l(!1),t()};return e.jsx(_s,{open:n,onOpenChange:o,children:e.jsxs(bs,{className:"max-w-2xl",children:[e.jsxs(ys,{children:[e.jsxs(Ns,{className:"text-2xl font-bold text-red-700 flex items-center gap-3",children:[e.jsx(Ae,{className:"w-8 h-8"}),a?"Consentement requis":"Consent Required"]}),e.jsx(gt,{className:"text-lg text-gray-600",children:a?`Avant d'utiliser ${r}, veuillez lire et accepter les conditions suivantes :`:`Before using ${r}, please read and accept the following conditions:`})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs(pe,{className:"border-yellow-400 bg-yellow-50",children:[e.jsx(Ae,{className:"h-5 w-5 text-yellow-600"}),e.jsx(he,{className:"text-yellow-800 font-medium",children:a?"Je comprends que j'utilise cette plateforme de planification financière comme un outil éducatif et informatif qui ne remplace en aucun cas une consultation avec un professionnel qualifié.":"I understand that I am using this financial planning platform as an educational and informational tool that in no way replaces consultation with a qualified professional."})]}),e.jsxs("div",{className:"bg-gray-50 rounded-lg p-6",children:[e.jsxs("h3",{className:"text-lg font-semibold text-gray-900 mb-4 flex items-center gap-2",children:[e.jsx(lt,{className:"w-5 h-5"}),a?"Il est de ma responsabilité de :":"It is my responsibility to:"]}),e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(is,{className:"w-5 h-5 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("p",{className:"text-gray-700",children:a?"Consulter un planificateur financier autorisé pour les décisions importantes":"Consult an authorized financial planner for important decisions"})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(vs,{className:"w-5 h-5 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("p",{className:"text-gray-700",children:a?"Vérifier la validité fiscale de mes stratégies avec un comptable qualifié":"Verify the tax validity of my strategies with a qualified accountant"})]}),e.jsxs("div",{className:"flex items-start gap-3",children:[e.jsx(lt,{className:"w-5 h-5 text-purple-600 mt-0.5 flex-shrink-0"}),e.jsx("p",{className:"text-gray-700",children:a?"Obtenir des conseils juridiques pour la planification successorale":"Obtain legal advice for estate planning"})]})]})]}),e.jsxs(pe,{className:"border-red-400 bg-red-50",children:[e.jsx(Ae,{className:"h-5 w-5 text-red-600"}),e.jsxs(he,{className:"text-red-800",children:[e.jsx("strong",{children:a?"Important :":"Important:"})," ",a?"Les résultats générés par cet outil sont basés sur des hypothèses et des projections qui peuvent ne pas refléter la réalité future. Ils ne constituent pas des conseils financiers personnalisés.":"The results generated by this tool are based on assumptions and projections that may not reflect future reality. They do not constitute personalized financial advice."]})]}),e.jsxs("div",{className:"flex items-start space-x-3 p-4 bg-blue-50 rounded-lg border border-blue-200",children:[e.jsx(_a,{id:"consent",checked:i,onCheckedChange:x=>l(x),className:"mt-1"}),e.jsx("label",{htmlFor:"consent",className:"text-sm font-medium text-blue-900 cursor-pointer leading-relaxed",children:a?"J'ai lu, compris et j'accepte ces conditions. Je reconnais que cette plateforme est un outil éducatif et que je dois consulter des professionnels qualifiés pour mes décisions financières importantes.":"I have read, understood and accept these conditions. I acknowledge that this platform is an educational tool and that I must consult qualified professionals for my important financial decisions."})]}),e.jsxs("div",{className:"flex gap-4 justify-end",children:[e.jsx(q,{variant:"outline",onClick:o,className:"px-6",children:a?"Annuler":"Cancel"}),e.jsx(q,{onClick:c,disabled:!i,className:"px-6 bg-blue-600 hover:bg-blue-700 disabled:opacity-50 disabled:cursor-not-allowed",children:a?"J'accepte et continuer":"I Accept and Continue"})]})]})]})})},Ba=()=>{const{user:n}=rn(),t=c=>{switch(c){case"expert":return{hasCashflowManagement:!0,hasMonteCarloSimulations:!0,hasAdvancedAnalytics:!0,hasPremiumFeatures:!0,hasAPIIntegration:!0,maxReportsPerMonth:100,maxDataPoints:1e4,hasExportFeatures:!0};case"professional":return{hasCashflowManagement:!0,hasMonteCarloSimulations:!0,hasAdvancedAnalytics:!0,hasPremiumFeatures:!1,hasAPIIntegration:!1,maxReportsPerMonth:50,maxDataPoints:5e3,hasExportFeatures:!0};case"free":default:return{hasCashflowManagement:!1,hasMonteCarloSimulations:!1,hasAdvancedAnalytics:!1,hasPremiumFeatures:!1,hasAPIIntegration:!1,maxReportsPerMonth:5,maxDataPoints:1e3,hasExportFeatures:!1}}},s=n?.subscription?.plan||"free",r=t(s);return{limits:r,currentPlan:s,checkAccess:c=>r[c],checkLimit:(c,o)=>{const x=r[c];return o{const x=r[c];return Math.max(0,x-o)},isFree:s==="free",isProfessional:s==="professional",isExpert:s==="expert"}},yl=({isFrench:n=!0})=>{const{userData:t,updateUserData:s}=wi(),[r,a]=m.useState(!1),[i,l]=m.useState(!1),[c,o]=m.useState(!1),[x,v]=m.useState(!1),[p,d]=m.useState(!1),{currentPlan:g}=Ba(),[w,R]=m.useState(()=>{const C=t.personal;return C?.returnCalculatorAccounts?C.returnCalculatorAccounts:[{accountType:"REER",startDate:"",endDate:"",startBalance:0,endBalance:0,contributions:[]}]}),[u,b]=m.useState(()=>t.personal?.returnCalculatorResults||[]);m.useEffect(()=>{s("personal",{returnCalculatorAccounts:w,returnCalculatorResults:u})},[w,u]),m.useEffect(()=>{const C=t.personal;C?.returnCalculatorAccounts&&C.returnCalculatorAccounts.length>0&&R(C.returnCalculatorAccounts),C?.returnCalculatorResults&&C.returnCalculatorResults.length>0&&b(C.returnCalculatorResults)},[]);const N=C=>{if(C.startBalance===0&&C.contributions.length===0)return 0;const P=new Date(C.startDate),T=new Date(C.endDate),G=C.contributions.sort((re,ge)=>new Date(re.date).getTime()-new Date(ge.date).getTime());if(G.length===0){if(C.startBalance===0)return 0;const ge=(T.getTime()-P.getTime())/(1e3*60*60*24)/365.25;return Math.pow(C.endBalance/C.startBalance,1/ge)-1}let H=1,X=C.startBalance,Z=P;for(const re of G){const ge=new Date(re.date);if((ge.getTime()-Z.getTime())/(1e3*60*60*24)>0&&X>0){const Q=X/(X-(re.type==="deposit"?0:re.amount));H*=Q}X+=re.type==="deposit"?re.amount:-re.amount,Z=ge}if((T.getTime()-Z.getTime())/(1e3*60*60*24)>0&&X>0){const re=C.endBalance/X;H*=re}const ae=(T.getTime()-P.getTime())/(1e3*60*60*24)/365.25;return Math.pow(H,1/ae)-1},S=C=>{const P=[];P.push({date:new Date(C.startDate),amount:-C.startBalance});for(const T of C.contributions)P.push({date:new Date(T.date),amount:T.type==="deposit"?-T.amount:T.amount});return P.push({date:new Date(C.endDate),amount:C.endBalance}),zn.mwr(P,{guess:.1})},j=()=>{o(!0)},h=()=>{o(!1),f()},E=()=>{o(!1)},f=()=>{l(!0),setTimeout(()=>{const C=w.map(P=>{const T=P.contributions.filter(Ve=>Ve.type==="deposit").reduce((Ve,ds)=>Ve+ds.amount,0),G=P.contributions.filter(Ve=>Ve.type==="withdrawal").reduce((Ve,ds)=>Ve+ds.amount,0),H=T-G,X=P.endBalance-P.startBalance-H,Z=N(P),J=S(P),ne=P.startBalance+H,ae=ne>0?(P.endBalance-ne)/ne:0,re=new Date(P.startDate),Q=(new Date(P.endDate).getTime()-re.getTime())/(1e3*60*60*24)/365.25,Ie=Q>0?Math.pow(1+ae,1/Q)-1:0;return{accountType:P.accountType,totalReturn:ae,annualizedReturn:Ie,totalContributions:T,totalWithdrawals:G,netContributions:H,capitalGain:X,timeWeightedReturn:Z,moneyWeightedReturn:J}});b(C),l(!1)},500)},A=()=>{if(g==="free"&&w.length>=1){d(!0);return}const C={accountType:"CELI",startDate:"2024-01-01",endDate:"2024-12-31",startBalance:0,endBalance:0,contributions:[]};R([...w,C])},L=C=>{R(w.filter((P,T)=>T!==C))},I=(C,P,T)=>{const G=[...w];G[C]={...G[C],[P]:T},R(G)},F=C=>{const P={id:Date.now().toString(),date:"2024-06-01",amount:0,type:"deposit",description:""},T=[...w];T[C].contributions.push(P),R(T)},W=(C,P)=>{const T=[...w];T[C].contributions=T[C].contributions.filter(G=>G.id!==P),R(T)},y=(C,P,T,G)=>{const H=[...w],X=H[C].contributions.findIndex(Z=>Z.id===P);X!==-1&&(H[C].contributions[X]={...H[C].contributions[X],[T]:G},R(H))},U=async()=>{try{v(!0);const C=await Ln.generatePerformanceReport(n?"fr":"en",{accounts:u.map(G=>({accountType:G.accountType,totalReturn:G.totalReturn,annualizedReturn:G.annualizedReturn,timeWeightedReturn:G.timeWeightedReturn,moneyWeightedReturn:G.moneyWeightedReturn,netContributions:G.netContributions,capitalGain:G.capitalGain}))}),P=URL.createObjectURL(C),T=document.createElement("a");T.href=P,T.download=n?"rapport-performance.pdf":"performance-report.pdf",document.body.appendChild(T),T.click(),document.body.removeChild(T),URL.revokeObjectURL(P)}finally{v(!1)}},V=C=>{switch(C){case"REER":return is;case"CELI":return Re;case"CRI":return mt}},O=C=>{switch(C){case"REER":return"text-blue-600 bg-blue-50 border-blue-200";case"CELI":return"text-green-600 bg-green-50 border-green-200";case"CRI":return"text-purple-600 bg-purple-50 border-purple-200"}};return e.jsxs(_s,{open:r,onOpenChange:a,children:[e.jsx(ht,{asChild:!0,children:e.jsxs(q,{size:"lg",className:"bg-gradient-to-r from-indigo-500 via-purple-500 to-pink-600 hover:from-indigo-600 hover:via-purple-600 hover:to-pink-700 text-white font-bold shadow-xl transform hover:scale-105 transition-all duration-300",children:[e.jsx(je,{className:"w-6 h-6 mr-3"}),n?"📊 Calculette de rendement avancée":"📊 Advanced Return Calculator",e.jsx(_e,{className:"w-6 h-6 ml-3"})]})}),e.jsxs(bs,{className:"max-w-6xl max-h-[90vh] overflow-y-auto",children:[e.jsxs(ys,{children:[e.jsxs(Ns,{className:"text-2xl font-bold text-indigo-700 flex items-center gap-3",children:[e.jsx(ls,{className:"w-8 h-8"}),n?"Calculette de rendement professionnelle":"Professional Return Calculator"]}),e.jsx(gt,{className:"text-lg text-gray-600",children:n?"Analysez et comparez les rendements de vos REER, CELI et CRI avec calculs IRR avancés":"Analyze and compare returns of your RRSP, TFSA and LIRA with advanced IRR calculations"})]}),e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("h3",{className:"text-xl font-semibold text-gray-800",children:n?"Comptes à analyser":"Accounts to analyze"}),e.jsxs(q,{onClick:A,variant:"outline",size:"sm",children:[e.jsx(os,{className:"w-4 h-4 mr-2"}),n?"Ajouter un compte":"Add account"]})]}),g==="free"&&p&&e.jsx("div",{className:"text-amber-800 bg-amber-50 border border-amber-200 rounded-md px-3 py-2 text-sm mb-2",children:n?"Le plan Gratuit permet un seul compte. Passez à Pro/Expert pour comparer plusieurs comptes et exporter en PDF.":"Free plan allows a single account. Upgrade to Pro/Expert to compare multiple accounts and export to PDF."}),w.map((C,P)=>{const T=V(C.accountType);return e.jsxs(M,{className:`border-2 ${O(C.accountType)}`,children:[e.jsx($,{className:"pb-4",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(_,{className:"flex items-center gap-3",children:[e.jsx(T,{className:"w-6 h-6"}),C.accountType,e.jsxs("span",{className:"text-sm font-normal text-gray-500",children:["#",P+1]})]}),w.length>1&&e.jsx(q,{onClick:()=>L(P),variant:"ghost",size:"sm",className:"text-red-600 hover:text-red-800 hover:bg-red-50",children:e.jsx(js,{className:"w-4 h-4"})})]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsx(D,{children:n?"Type de compte":"Account type"}),e.jsxs(me,{value:C.accountType,onValueChange:G=>I(P,"accountType",G),children:[e.jsx(oe,{children:e.jsx(ue,{})}),e.jsxs(ce,{children:[e.jsx(B,{value:"REER",children:"REER"}),e.jsx(B,{value:"CELI",children:"CELI"}),e.jsx(B,{value:"CRI",children:"CRI"})]})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{className:"flex items-center gap-2",children:[e.jsx(Le,{className:"w-4 h-4"}),n?"Date de début":"Start date"]}),e.jsx(Qe,{value:C.startDate,onChange:G=>I(P,"startDate",G),className:"w-full"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{className:"flex items-center gap-2",children:[e.jsx(Le,{className:"w-4 h-4"}),n?"Date de fin":"End date"]}),e.jsx(Qe,{value:C.endDate,onChange:G=>I(P,"endDate",G),className:"w-full"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{className:"flex items-center gap-2",children:[e.jsx(Te,{className:"w-4 h-4"}),n?"Solde initial":"Starting balance"]}),e.jsx(Me,{value:C.startBalance,onChange:G=>I(P,"startBalance",G),className:"w-full",allowDecimals:!0})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs(D,{className:"flex items-center gap-2",children:[e.jsx(Te,{className:"w-4 h-4"}),n?"Solde final":"Ending balance"]}),e.jsx(Me,{value:C.endBalance,onChange:G=>I(P,"endBalance",G),className:"w-full",allowDecimals:!0})]})]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx(D,{className:"text-lg font-semibold",children:n?"Contributions et retraits":"Contributions and withdrawals"}),e.jsxs(q,{onClick:()=>F(P),variant:"outline",size:"sm",children:[e.jsx(os,{className:"w-4 h-4 mr-2"}),n?"Ajouter":"Add"]})]}),C.contributions.map(G=>e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-5 gap-3 p-3 bg-gray-50 rounded-lg",children:[e.jsxs("div",{className:"space-y-1",children:[e.jsx(D,{className:"text-xs",children:"Date"}),e.jsx(Qe,{value:G.date,onChange:H=>y(P,G.id,"date",H),className:"w-full"})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(D,{className:"text-xs",children:"Type"}),e.jsxs(me,{value:G.type,onValueChange:H=>y(P,G.id,"type",H),children:[e.jsx(oe,{children:e.jsx(ue,{})}),e.jsxs(ce,{children:[e.jsx(B,{value:"deposit",children:n?"Dépôt":"Deposit"}),e.jsx(B,{value:"withdrawal",children:n?"Retrait":"Withdrawal"})]})]})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(D,{className:"text-xs",children:n?"Montant":"Amount"}),e.jsx(Me,{value:G.amount,onChange:H=>y(P,G.id,"amount",H),className:"w-full",allowDecimals:!0})]}),e.jsxs("div",{className:"space-y-1",children:[e.jsx(D,{className:"text-xs",children:"Description"}),e.jsx(Y,{value:G.description||"",onChange:H=>y(P,G.id,"description",H.target.value),placeholder:n?"Optionnel":"Optional",className:"w-full"})]}),e.jsx("div",{className:"flex items-end",children:e.jsx(q,{onClick:()=>W(P,G.id),variant:"ghost",size:"sm",className:"text-red-600 hover:text-red-800 hover:bg-red-50",children:e.jsx(js,{className:"w-4 h-4"})})})]},G.id))]})]})]},P)})]}),e.jsx("div",{className:"text-center",children:e.jsx(q,{onClick:j,disabled:i,size:"lg",className:"bg-gradient-to-r from-green-500 to-emerald-600 hover:from-green-600 hover:to-emerald-700 text-white font-bold px-8 py-3",children:i?e.jsxs(e.Fragment,{children:[e.jsx(yn,{className:"w-5 h-5 mr-3 animate-spin"}),n?"Calcul en cours...":"Calculating..."]}):e.jsxs(e.Fragment,{children:[e.jsx(je,{className:"w-5 h-5 mr-3"}),n?"Calculer les rendements":"Calculate returns"]})})}),u.length>0&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h3",{className:"text-xl font-semibold text-gray-800 flex items-center gap-2",children:[e.jsx(_e,{className:"w-6 h-6"}),n?"Résultats de l'analyse":"Analysis results"]}),g!=="free"?e.jsx(q,{onClick:U,variant:"outline",size:"sm",disabled:x,children:x?n?"Export en cours...":"Exporting...":n?"Exporter en PDF":"Export PDF"}):e.jsx(q,{variant:"outline",size:"sm",onClick:()=>d(!0),className:"border-amber-300 text-amber-900",children:"Pro/Expert: Export PDF"})]}),e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4",children:u.map((C,P)=>{const T=V(C.accountType);return e.jsxs(M,{className:`border-2 ${O(C.accountType)}`,children:[e.jsx($,{className:"pb-3",children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(T,{className:"w-5 h-5"}),C.accountType]})}),e.jsx(k,{className:"space-y-3",children:e.jsxs("div",{className:"grid grid-cols-2 gap-3 text-sm",children:[e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:n?"Rendement total":"Total return"}),e.jsxs("div",{className:`text-lg font-bold ${C.totalReturn>=0?"text-green-600":"text-red-600"}`,children:[(C.totalReturn*100).toFixed(2)," %"]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:n?"Rendement annualisé":"Annualized return"}),e.jsxs("div",{className:`text-lg font-bold ${C.annualizedReturn>=0?"text-green-600":"text-red-600"}`,children:[(C.annualizedReturn*100).toFixed(2)," %"]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:"TWR"}),e.jsxs("div",{className:`font-bold ${C.timeWeightedReturn>=0?"text-green-600":"text-red-600"}`,children:[(C.timeWeightedReturn*100).toFixed(2)," %"]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:"MWR (IRR)"}),e.jsxs("div",{className:`font-bold ${C.moneyWeightedReturn>=0?"text-green-600":"text-red-600"}`,children:[(C.moneyWeightedReturn*100).toFixed(2)," %"]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:n?"Contributions nettes":"Net contributions"}),e.jsxs("div",{className:"font-bold text-blue-600",children:["$",C.netContributions.toLocaleString()]})]}),e.jsxs("div",{children:[e.jsx("div",{className:"font-semibold text-gray-600",children:n?"Gain en capital":"Capital gain"}),e.jsxs("div",{className:`font-bold ${C.capitalGain>=0?"text-green-600":"text-red-600"}`,children:["$",C.capitalGain.toLocaleString()]})]})]})})]},P)})}),e.jsxs(pe,{children:[e.jsx(Oe,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:n?"Légende :":"Legend:"}),e.jsx("br",{}),e.jsx("strong",{children:"TWR"})," = ",n?"Rendement pondéré dans le temps (performance du gestionnaire)":"Time-Weighted Return (manager performance)",e.jsx("br",{}),e.jsx("strong",{children:"MWR (IRR)"})," = ",n?"Rendement pondéré par l'argent (performance de l'investisseur)":"Money-Weighted Return (investor performance)"]})]})]}),e.jsx(Ii,{isOpen:c,onClose:E,onConsent:h,featureName:n?"Calculette de rendement avancée":"Advanced Return Calculator",isFrench:n})]})]})]})},Nl=({personNumber:n,personName:t,data:s=[],onDataChange:r,isFrench:a,userData:i})=>{const[l,c]=m.useState(s),[o,x]=m.useState(null),[v,p]=m.useState(!1),d=m.useRef({});m.useEffect(()=>{},[s,n,l,r]),m.useEffect(()=>{s&&s.length>0&&c(s)},[s,n]),m.useEffect(()=>{o&&d.current[o]&&d.current[o]?.scrollIntoView({behavior:"smooth",block:"center"})},[o]);const g=[{value:"weekly",label:a?"Hebdomadaire (52x/an)":"Weekly (52x/year)"},{value:"biweekly",label:a?"Aux 2 semaines (26x/an)":"Bi-weekly (26x/year)"},{value:"bimonthly",label:a?"2x par mois (24x/an)":"2x per month (24x/year)"},{value:"monthly",label:a?"Mensuel (12x/an)":"Monthly (12x/year)"}],w=[{value:"weekly",label:a?"Hebdomadaire (52x/an)":"Weekly (52x/year)"},{value:"biweekly",label:a?"Aux 2 semaines (26x/an)":"Bi-weekly (26x/year)"}],R=[{value:"monthly",label:a?"Mensuel":"Monthly"},{value:"quarterly",label:a?"Trimestriel":"Quarterly"},{value:"semi-annual",label:a?"Semi-annuel":"Semi-annual"},{value:"annual",label:a?"Annuel":"Annual"}],u=[{value:"daily",label:a?"Jour":"Daily"},{value:"weekend",label:a?"Week-end (3 jours - ven, sam, dim)":"Weekend (3 days - Fri, Sat, Sun)"},{value:"weekly",label:a?"Semaine (7 jours)":"Weekly (7 days)"},{value:"monthly",label:a?"Mensuel":"Monthly"}],b=[{value:"salaire",label:a?"Salaire":"Salary",description:a?"Votre salaire avec dates et fréquence de paiement":"Your salary with dates and payment frequency",frequency:"annual",showToDate:!1,color:"bg-blue-600",icon:"💼"},{value:"emploi-saisonnier",label:a?"Emploi saisonnier":"Seasonal Employment",description:a?"Salaire pour emploi saisonnier avec dates de début/fin":"Seasonal job salary with start/end dates",frequency:"annual",showToDate:!1,color:"bg-amber-600",icon:"🌦️"},{value:"rentes",label:a?"Pensions/Rentes":"Pensions/Annuities",description:a?"Vos pensions de retraite ou rentes mensuelles":"Your retirement pensions or monthly annuities",frequency:"monthly",showToDate:!1,color:"bg-purple-600",icon:"🏦"},{value:"assurance-emploi",label:a?"Assurance emploi":"Employment Insurance",description:a?"Prestations d'assurance emploi (hebdomadaires)":"Employment insurance benefits (weekly)",frequency:"weekly",showToDate:!0,color:"bg-orange-600",icon:"🛡️"},{value:"dividendes",label:a?"Dividendes":"Dividends",description:a?"Revenus de dividendes d'investissements":"Dividend income from investments",frequency:"annual",showToDate:!1,color:"bg-green-600",icon:"📈"},{value:"revenus-location",label:a?"Revenus de location":"Rental Income",description:a?"Revenus mensuels de propriétés locatives":"Monthly income from rental properties",frequency:"monthly",showToDate:!1,color:"bg-yellow-600",icon:"🏠"},{value:"travail-autonome",label:a?"Travail autonome":"Self-Employment",description:a?"Revenus annuels de votre travail autonome":"Annual income from your self-employment",frequency:"annual",showToDate:!1,color:"bg-indigo-600",icon:"💻"},{value:"autres",label:a?"Autres revenus":"Other Income",description:a?"Tous autres types de revenus":"All other types of income",frequency:"annual",showToDate:!1,color:"bg-gray-600",icon:"💰"}],N=()=>{const y={id:`income-${Date.now()}`,type:"salaire",description:"",isActive:!0,annualAmount:0,salaryFrequency:"monthly",salaryNetAmount:0},U=[...l,y];c(U),x(y.id)},S=m.useCallback((y,U)=>{const V=l.map(C=>{if(C.id===y){const P={...C,...U};return U.type&&U.type!==C.type&&(U.type==="salaire"||U.type==="emploi-saisonnier"?(P.salaryFrequency||(P.salaryFrequency="monthly"),P.salaryNetAmount||(P.salaryNetAmount=0)):U.type==="rentes"?(P.pensionFrequency||(P.pensionFrequency="monthly"),P.pensionAmount||(P.pensionAmount=0)):U.type==="revenus-location"&&(P.rentalFrequency||(P.rentalFrequency="monthly"),P.rentalAmount||(P.rentalAmount=0))),P}return C});c(V),r(V);const O={...i,personal:{...i?.personal,[`unifiedIncome${n}`]:V}};On.saveCriticalData(O)},[l,r,n,i]),j=y=>{if(window.confirm(a?"Êtes-vous sûr de vouloir supprimer ce revenu ?":"Are you sure you want to delete this income?")){const U=l.filter(V=>V.id!==y);c(U),r(U)}},h=y=>b.find(U=>U.value===y)||b[0],E=y=>new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",minimumFractionDigits:0,maximumFractionDigits:0}).format(y),f=l.filter(y=>y.type!=="assurance-emploi"),A="text-sm font-semibold text-blue-900",L="space-y-2",I="w-full h-14 rounded-xl border-2 border-blue-200 bg-white px-4 text-lg font-medium text-blue-900 transition focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-blue-200 focus:border-blue-400",F="w-full h-14 rounded-xl border-2 border-blue-100 bg-blue-50 flex items-center px-4 text-lg font-semibold text-blue-900",W="inline-flex items-center gap-2 rounded-full border px-4 py-1.5 text-sm font-semibold";return e.jsx(e.Fragment,{children:e.jsx(Gs,{children:e.jsxs(M,{className:"bg-white border-4 border-blue-200 shadow-xl",children:[e.jsxs($,{className:"border-b-4 border-blue-100 bg-blue-50",children:[e.jsxs(_,{className:"text-3xl font-bold text-blue-800 flex items-center gap-4",children:[e.jsx("div",{className:`w-12 h-12 ${n===1?"bg-blue-600":"bg-green-600"} rounded-full flex items-center justify-center text-white font-bold text-xl shadow-lg`,children:n}),e.jsx("div",{className:"flex-1",children:e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Te,{className:"w-8 h-8 text-blue-600"}),e.jsxs("span",{children:[a?"Tableau des revenus":"Income Table"," - ",t]}),e.jsxs(Va,{children:[e.jsx($a,{children:e.jsx(Nn,{className:"w-6 h-6 text-blue-500 cursor-help"})}),e.jsx(ft,{className:"max-w-md",children:e.jsx("p",{className:"text-lg",children:a?"Cette section vous permet de saisir tous vos types de revenus. Les calculs se font automatiquement.":"This section allows you to enter all your income types. Calculations are done automatically."})})]})]})})]}),e.jsx(xe,{className:"text-xl text-blue-700 mt-2",children:a?"Gestion unifiée de tous vos types de revenus avec calculs automatiques":"Unified management of all your income types with automatic calculations"})]}),e.jsxs(k,{className:"p-6 space-y-6 relative overflow-visible",children:[e.jsxs("div",{className:"grid grid-cols-8 gap-4 text-xl font-bold text-blue-800 border-b-4 border-blue-200 pb-4",children:[e.jsx("div",{className:"col-span-2",children:a?"Type de revenu":"Income Type"}),e.jsx("div",{className:"col-span-2",children:"Description"}),e.jsx("div",{className:"col-span-2",children:a?"Montant":"Amount"}),e.jsx("div",{className:"col-span-2",children:a?"fréquence":"frequency"})]}),f.length===0?e.jsx("div",{className:"flex items-center justify-end gap-3 p-4 bg-gray-50 rounded-xl border border-blue-100",children:e.jsxs(q,{onClick:N,size:"lg",className:"text-white text-xl px-8 py-4 h-16 shadow-lg hover:opacity-80 transition-opacity",style:{backgroundColor:"var(--senior-success)"},children:[e.jsx(os,{className:"w-6 h-6 mr-3"}),a?"Ajouter un revenu":"Add Income"]})}):e.jsx("div",{className:"space-y-6",children:f.map(y=>{const U=h(y.type),V=o===y.id,O=y.type==="salaire"||y.type==="emploi-saisonnier",C=y.type==="assurance-emploi",P=y.type==="rentes",T=y.type==="revenus-location",G=b.filter(Q=>Q.value===y.type||Q.value!=="assurance-emploi"&&Q.value!=="rentes"&&Q.value!=="autres"),H=V?"border-blue-300 bg-white shadow-xl ring-2 ring-blue-100":y.isActive?"border-green-200 bg-white shadow-md":"border-gray-200 bg-gray-100 opacity-70",X=O&&y.salaryNetAmount?E(y.salaryNetAmount):y.type==="assurance-emploi"&&y.weeklyNet?E(y.weeklyNet):P&&y.pensionAmount?E(y.pensionAmount):T&&y.rentalAmount?E(y.rentalAmount):y.annualAmount?E(y.annualAmount):"-",Z=(()=>{if(O){const Q=g.find(Ie=>Ie.value===y.salaryFrequency);return Q?Q.label:"-"}if(y.type==="assurance-emploi"){const Q=w.find(Ie=>Ie.value===y.eiPaymentFrequency);return Q?Q.label:"-"}if(P){const Q=R.find(Ie=>Ie.value===y.pensionFrequency);return Q?Q.label:"-"}if(T){const Q=u.find(Ie=>Ie.value===y.rentalFrequency);return Q?Q.label:a?"Mensuel":"Monthly"}return a?"Annuel":"Annual"})(),J=O?y.salaryStartDate||"":y.type==="assurance-emploi"?y.eiStartDate||"":P?y.pensionStartDate||"":T&&y.rentalStartDate||"",ne=O?y.salaryEndDate||"":T&&y.rentalEndDate||"",ae=O||C||P||T,re=O||T,ge=a?C?"Début des prestations":"Date de début":C?"Start of benefits":"Start date",Ee=a?"Date de fin":"End date";return e.jsx("div",{ref:Q=>{Q?d.current[y.id]=Q:delete d.current[y.id]},className:`rounded-3xl border-2 transition ${H}`,children:e.jsxs("div",{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-3",children:[e.jsxs("h3",{className:"text-2xl font-semibold text-blue-900 flex items-center gap-3",children:[e.jsx("span",{className:"text-3xl leading-none",children:U.icon}),e.jsxs("span",{children:[U.label," — ",y.description||(a?"Sans nom":"Unnamed")]})]}),e.jsx("span",{className:`${W} ${y.isActive?"border-green-500 bg-green-50 text-green-700":"border-gray-300 bg-white text-gray-600"}`,children:y.isActive?a?"Actif":"Active":a?"Inactif":"Inactive"})]}),V?e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Type de revenu":"Income type"}),e.jsxs(me,{value:y.type,onValueChange:Q=>S(y.id,{type:Q}),children:[e.jsx(oe,{className:`${I} justify-between`,children:e.jsx(ue,{placeholder:a?"Choisir le type":"Select a type"})}),e.jsx(ce,{className:"bg-white",align:"start",position:"popper",sideOffset:12,collisionPadding:16,children:G.map(Q=>e.jsxs(B,{value:Q.value,className:"text-lg",children:[Q.icon," ",Q.label]},Q.value))})]})]}),e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:"Description"}),e.jsx(Y,{value:y.description,onChange:Q=>S(y.id,{description:Q.target.value}),placeholder:"Description...",className:I})]})]}),e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Montant":"Amount"}),e.jsx(Me,{value:O?y.salaryNetAmount||0:y.type==="assurance-emploi"?y.weeklyNet||0:P?y.pensionAmount||0:T?y.rentalAmount||0:y.annualAmount||0,onChange:Q=>{O?S(y.id,{salaryNetAmount:Q}):y.type==="assurance-emploi"?S(y.id,{weeklyNet:Q}):P?S(y.id,{pensionAmount:Q}):T?S(y.id,{rentalAmount:Q}):S(y.id,{annualAmount:Q})},className:`${I} pl-10`,placeholder:"0",allowDecimals:!0})]}),e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Fréquence":"Frequency"}),O&&e.jsxs(me,{value:y.salaryFrequency||"monthly",onValueChange:Q=>S(y.id,{salaryFrequency:Q}),children:[e.jsx(oe,{className:`${I} justify-between`,children:e.jsx(ue,{placeholder:a?"Choisir une fréquence":"Select a frequency"})}),e.jsx(ce,{className:"bg-white",align:"start",position:"popper",sideOffset:12,collisionPadding:16,children:g.map(Q=>e.jsx(B,{value:Q.value,className:"text-lg py-3",children:Q.label},Q.value))})]}),P&&e.jsxs(me,{value:y.pensionFrequency||"monthly",onValueChange:Q=>S(y.id,{pensionFrequency:Q}),children:[e.jsx(oe,{className:`${I} justify-between`,children:e.jsx(ue,{placeholder:a?"Choisir une fréquence":"Select a frequency"})}),e.jsx(ce,{className:"bg-white",align:"start",position:"popper",sideOffset:12,collisionPadding:16,children:R.map(Q=>e.jsx(B,{value:Q.value,className:"text-lg py-3",children:Q.label},Q.value))})]}),T&&e.jsxs(me,{value:y.rentalFrequency||"monthly",onValueChange:Q=>S(y.id,{rentalFrequency:Q}),children:[e.jsx(oe,{className:`${I} justify-between`,children:e.jsx(ue,{placeholder:a?"Choisir une fréquence":"Select a frequency"})}),e.jsx(ce,{className:"bg-white",align:"start",position:"popper",sideOffset:12,collisionPadding:16,children:u.map(Q=>e.jsx(B,{value:Q.value,className:"text-lg py-3",children:Q.label},Q.value))})]}),!O&&!P&&!T&&e.jsx("div",{className:F,children:Z})]})]}),(ae||re)&&e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[ae&&e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:ge}),e.jsx(Qe,{value:J,onChange:Q=>{O?S(y.id,{salaryStartDate:Q}):y.type==="assurance-emploi"?S(y.id,{eiStartDate:Q}):P?S(y.id,{pensionStartDate:Q}):T&&S(y.id,{rentalStartDate:Q})},className:I,placeholder:"AAAA-MM-JJ"})]}),re&&e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:Ee}),e.jsx(Qe,{value:ne,onChange:Q=>{O?S(y.id,{salaryEndDate:Q}):T&&S(y.id,{rentalEndDate:Q})},className:I,placeholder:"AAAA-MM-JJ"})]})]})]}):e.jsxs("div",{className:"grid gap-4 md:grid-cols-2",children:[e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Type de revenu":"Income type"}),e.jsxs("div",{className:F,children:[U.icon," ",U.label]})]}),e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:"Description"}),e.jsx("div",{className:F,children:y.description||(a?"Sans nom":"Unnamed")})]}),e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Montant":"Amount"}),e.jsx("div",{className:F,children:X})]}),e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:a?"Fréquence":"Frequency"}),e.jsx("div",{className:F,children:Z})]}),J&&e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:ge}),e.jsx("div",{className:F,children:J})]}),ne&&e.jsxs("div",{className:L,children:[e.jsx("span",{className:A,children:Ee}),e.jsx("div",{className:F,children:ne})]})]}),e.jsxs("div",{className:"flex flex-wrap items-center justify-between gap-4 border-t border-blue-100 pt-4",children:[e.jsx("div",{children:e.jsx(q,{onClick:()=>S(y.id,{isActive:!y.isActive}),className:`h-11 rounded-xl px-4 text-sm font-semibold shadow-sm ${y.isActive?"bg-green-50 text-green-700 border border-green-400 hover:bg-green-100":"bg-white text-gray-600 border border-gray-300 hover:bg-gray-100"}`,children:y.isActive?a?"Revenu actif":"Income active":a?"Activer ce revenu":"Activate income"})}),e.jsxs("div",{className:"flex flex-wrap items-center gap-3",children:[V?e.jsxs(e.Fragment,{children:[e.jsxs(q,{onClick:()=>x(null),className:"h-12 rounded-xl bg-green-500 px-6 text-white text-base font-semibold shadow hover:bg-green-600 focus-visible:ring-2 focus-visible:ring-green-300",children:[e.jsx(ie,{className:"w-5 h-5 mr-2"}),a?"Sauvegarder":"Save"]}),e.jsxs(q,{onClick:()=>x(null),className:"h-12 rounded-xl bg-blue-500 px-6 text-white text-base font-semibold shadow hover:bg-blue-600 focus-visible:ring-2 focus-visible:ring-blue-300",children:[e.jsx(ze,{className:"w-5 h-5 mr-2"}),a?"Annuler":"Cancel"]})]}):e.jsxs(e.Fragment,{children:[e.jsxs(q,{onClick:N,className:"h-12 rounded-xl bg-green-500 px-6 text-white text-base font-semibold shadow hover:bg-green-600 focus-visible:ring-2 focus-visible:ring-green-300",children:[e.jsx(os,{className:"w-5 h-5 mr-2"}),a?"Ajouter":"Add"]}),e.jsxs(q,{onClick:()=>x(y.id),className:"h-12 rounded-xl bg-blue-500 px-6 text-white text-base font-semibold shadow hover:bg-blue-600 focus-visible:ring-2 focus-visible:ring-blue-300",children:[e.jsx(Zt,{className:"w-5 h-5 mr-2"}),a?"Modifier":"Edit"]})]}),e.jsxs(q,{onClick:()=>j(y.id),className:"h-12 rounded-xl bg-red-500 px-6 text-white text-base font-semibold shadow hover:bg-red-600 focus-visible:ring-2 focus-visible:ring-red-300",children:[e.jsx(js,{className:"w-5 h-5 mr-2"}),a?"Supprimer":"Delete"]})]})]})]})},y.id)})})]})]})})})},Pi=({personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a})=>{const[i,l]=m.useState({ageActuel:"",prestationActuelle:"",prestation70:""});m.useEffect(()=>{const o=n===1?s?.retirement?.rrqAgeActuel1:s?.retirement?.rrqAgeActuel2,x=n===1?s?.retirement?.rrqMontantActuel1:s?.retirement?.rrqMontantActuel2,v=n===1?s?.retirement?.rrqMontant70_1:s?.retirement?.rrqMontant70_2;l({ageActuel:o?o.toString():"",prestationActuelle:x?x.toString():"",prestation70:v?v.toString():""})},[s,n]);const c=(o,x)=>{const v={...i,[o]:x};l(v);const d={[{ageActuel:n===1?"rrqAgeActuel1":"rrqAgeActuel2",prestationActuelle:n===1?"rrqMontantActuel1":"rrqMontantActuel2",prestation70:n===1?"rrqMontant70_1":"rrqMontant70_2"}[o]]:x===""?0:parseFloat(x)||0};r(d)};return e.jsxs(M,{className:"bg-white border-2 border-blue-200 shadow-lg",children:[e.jsxs($,{className:"bg-blue-50 border-b-2 border-blue-200",children:[e.jsxs(_,{className:"text-xl font-bold text-blue-800 flex items-center gap-2",children:[e.jsx(ut,{className:"w-6 h-6"}),a?"RRQ/CPP - Régime de rentes du Québec":"QPP/CPP - Quebec Pension Plan"]}),e.jsx("p",{className:"text-sm text-blue-600",children:a?`Saisissez vos montants RRQ/CPP pour Personne ${n} et Personne 2`:`Enter your QPP/CPP amounts for Person ${n} and Person 2`})]}),e.jsx(k,{className:"p-6",children:e.jsx("div",{className:"space-y-6",children:e.jsxs("div",{className:"bg-gray-50 p-6 rounded-lg border-2 border-gray-200",children:[e.jsxs("h3",{className:"text-lg font-bold text-gray-800 mb-4",children:[n," RRQ/CPP - ",t]}),e.jsx("p",{className:"text-sm text-gray-600 mb-4",children:t}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{htmlFor:"ageActuel",className:"text-sm font-semibold text-gray-700 min-w-[120px]",children:a?"Âge actuel":"Current Age"}),e.jsx(Y,{id:"ageActuel",type:"number",value:i.ageActuel,onChange:o=>c("ageActuel",o.target.value),placeholder:"Ex: 58",className:"h-10 text-sm flex-1"})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{htmlFor:"prestationActuelle",className:"text-sm font-semibold text-gray-700 min-w-[120px]",children:a?"Prestation RRQ actuelle":"Current QPP Benefit"}),e.jsx(Y,{id:"prestationActuelle",type:"number",value:i.prestationActuelle,onChange:o=>c("prestationActuelle",o.target.value),placeholder:"Ex: 1 200",className:"h-10 text-sm flex-1"}),e.jsx("span",{className:"text-xs text-gray-600 flex-1",children:a?'Montant mensuel exact fourni par RRQ (consultez "Mon Dossier")':'Exact monthly amount provided by QPP (consult "My File")'})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsx("label",{htmlFor:"prestation70",className:"text-sm font-semibold text-gray-700 min-w-[120px]",children:a?"Prestation RRQ à 70 ans":"QPP Benefit at 70 years old"}),e.jsx(Y,{id:"prestation70",type:"number",value:i.prestation70,onChange:o=>c("prestation70",o.target.value),placeholder:"Ex: 1 500",className:"h-10 text-sm flex-1"}),e.jsx("span",{className:"text-xs text-gray-600 flex-1",children:a?"Montant mensuel si vous attendez jusqu'à 70 ans":"Monthly amount if you wait until 70 years old"})]})]})]})})})]})},Mi=({personNumber:n,userData:t,isFrench:s})=>{const r=n===1?t?.retirement?.rrqBiannual1:t?.retirement?.rrqBiannual2,a=n===1?t?.retirement?.rrqMontantActuel1:t?.retirement?.rrqMontantActuel2,i=r?.periode1?.montantMensuel?parseFloat(r.periode1.montantMensuel):a||0,l=r?.periode1?.montantMensuel?parseFloat(r.periode1.montantMensuel)*6:i*6,c=r?.periode2?.montantMensuel?parseFloat(r.periode2.montantMensuel)*6:i*6,o=l+c,x=new Date().getMonth()+1;let v=0;r?.periode1?.montantMensuel?x<=6?v=parseFloat(r.periode1.montantMensuel)*x:v=l+(r?.periode2?.montantMensuel?parseFloat(r.periode2.montantMensuel)*(x-6):0):v=i*x;const p=c-l,d=p>0;return e.jsxs(M,{className:"bg-white border-2 border-blue-200 shadow-lg",children:[e.jsxs($,{className:"bg-blue-50 border-b-2 border-blue-200",children:[e.jsxs(_,{className:"text-xl font-bold text-blue-800 flex items-center gap-2",children:[e.jsx(ut,{className:"w-6 h-6"}),s?"Résumé RRQ/CPP 2025":"RRQ/CPP 2025 Summary"]}),e.jsx("p",{className:"text-sm text-blue-600",children:s?"Personne "+n+" - Synthèse des montants RRQ":"Person "+n+" - RRQ amounts summary"})]}),e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsxs("div",{className:"bg-blue-50 p-4 rounded-lg border border-blue-200",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(Te,{className:"w-5 h-5 text-blue-600"}),e.jsx("h3",{className:"text-lg font-semibold text-blue-800",children:s?"Montant actuel":"Current Amount"})]}),e.jsx("p",{className:"text-2xl font-bold text-blue-600",children:K(v)}),e.jsx("p",{className:"text-sm text-blue-600 mt-1",children:s?"Montant reçu à ce jour en 2025":"Amount received to date in 2025"})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"bg-gray-50 p-4 rounded-lg border border-gray-200",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(Le,{className:"w-4 h-4 text-gray-600"}),e.jsx("h4",{className:"font-semibold text-gray-800",children:s?"Période 1":"Period 1"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-sm text-gray-600",children:s?"Janvier - Juin":"January - June"}),e.jsx("span",{className:"font-semibold text-gray-800",children:K(l)})]}),e.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[e.jsx("span",{children:s?"Mensuel:":"Monthly:"}),e.jsx("span",{children:r?.periode1?.montantMensuel?K(parseFloat(r.periode1.montantMensuel)):K(i)})]})]})]}),e.jsxs("div",{className:"bg-orange-50 p-4 rounded-lg border border-orange-200",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-3",children:[e.jsx(Le,{className:"w-4 h-4 text-orange-600"}),e.jsx("h4",{className:"font-semibold text-gray-800",children:s?"Période 2":"Period 2"}),e.jsx("span",{className:"bg-orange-500 text-white px-2 py-1 rounded-full text-xs font-medium",children:s?"Récupération":"Recovery"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-sm text-gray-600",children:s?"Juillet - Décembre":"July - December"}),e.jsx("span",{className:"font-semibold text-gray-800",children:K(c)})]}),e.jsxs("div",{className:"flex justify-between text-sm text-gray-500",children:[e.jsx("span",{children:s?"Mensuel:":"Monthly:"}),e.jsx("span",{children:r?.periode2?.montantMensuel?K(parseFloat(r.periode2.montantMensuel)):K(i)})]})]})]})]}),d&&e.jsxs("div",{className:"bg-green-50 p-4 rounded-lg border border-green-200",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(_e,{className:"w-5 h-5 text-green-600"}),e.jsx("h3",{className:"text-lg font-semibold text-green-800",children:s?"Récupération fiscale":"Tax Recovery"})]}),e.jsx("p",{className:"text-green-700",children:s?`Augmentation de ${K(p)} pour la période 2`:`Increase of ${K(p)} for period 2`}),e.jsx("p",{className:"text-sm text-green-600 mt-1",children:s?"Basé sur les revenus de 2024":"Based on 2024 income"})]}),e.jsx("div",{className:"bg-blue-100 p-4 rounded-lg border border-blue-300",children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsx("h3",{className:"text-lg font-semibold text-blue-800",children:s?"Total annuel 2025":"Total Annual 2025"}),e.jsx("span",{className:"text-2xl font-bold text-blue-600",children:K(o)})]})}),e.jsx("div",{className:"bg-gray-50 p-4 rounded-lg border border-gray-200",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Oe,{className:"w-5 h-5 text-gray-500 mt-0.5"}),e.jsxs("div",{className:"text-sm text-gray-600",children:[e.jsx("p",{className:"font-semibold mb-1",children:s?"Informations importantes:":"Important information:"}),e.jsxs("ul",{className:"space-y-1 text-xs",children:[e.jsxs("li",{children:["• ",s?"Les montants sont calculés automatiquement selon les périodes définies":"Amounts are automatically calculated according to defined periods"]}),e.jsxs("li",{children:["• ",s?"La récupération fiscale est basée sur les revenus de 2024":"Tax recovery is based on 2024 income"]}),e.jsxs("li",{children:["• ",s?"Les paiements sont effectués le dernier jour ouvrable du mois":"Payments are made on the last business day of the month"]})]})]})]})})]})]})},Ti=({personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a})=>{const[i,l]=m.useState("input");return e.jsxs(M,{className:"bg-white border-2 border-blue-200 shadow-xl",children:[e.jsxs($,{className:"bg-blue-50 border-b-2 border-blue-200",children:[e.jsxs(_,{className:"text-2xl font-bold text-blue-800 flex items-center gap-3",children:[e.jsx(ut,{className:"w-8 h-8"}),a?"RRQ/CPP - Gestion 2025":"QPP/CPP - 2025 Management"]}),e.jsx("p",{className:"text-blue-600",children:a?"Personne "+n+" - Configuration et suivi des montants RRQ":"Person "+n+" - RRQ amounts configuration and tracking"})]}),e.jsxs(k,{className:"p-0",children:[e.jsxs("div",{className:"flex border-b border-gray-200",children:[e.jsxs(q,{variant:i==="input"?"default":"ghost",onClick:()=>l("input"),className:`flex-1 rounded-none border-0 ${i==="input"?"bg-blue-600 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,children:[e.jsx(ea,{className:"w-4 h-4 mr-2"}),a?"Saisie des données":"Data Entry"]}),e.jsxs(q,{variant:i==="summary"?"default":"ghost",onClick:()=>l("summary"),className:`flex-1 rounded-none border-0 ${i==="summary"?"bg-blue-600 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,children:[e.jsx(ls,{className:"w-4 h-4 mr-2"}),a?"Résumé":"Summary"]})]}),e.jsxs("div",{className:"p-0",children:[i==="input"&&e.jsx(Pi,{personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a}),i==="summary"&&e.jsx(Mi,{personNumber:n,userData:s,isFrench:a})]})]})]})},ki=({personNumber:n,personName:t,data:s,onDataChange:r,isFrench:a})=>{const i=new Date().getFullYear(),[l,c]=m.useState(!s),[o,x]=m.useState(s||{annee:i,periode1:{dateDebut:"01-01",dateFin:"06-30",montant:0},periode2:{dateDebut:"07-01",dateFin:"12-31",montant:0},raisonAjustement:"",revenus_annee_precedente:void 0}),v=713.34,p=90997,d=(N,S)=>{if(N<=p)return S;const E=(N-p)*.15/12;return Math.max(0,S-E)},g=()=>{r(o),c(!1)},w=()=>{s&&x(s),c(!1)},R=()=>o.periode1.montant*6+o.periode2.montant*6,u=()=>R()/12,b=()=>o.revenus_annee_precedente&&o.revenus_annee_precedente>p?d(o.revenus_annee_precedente,v):0;return m.useEffect(()=>{s&&(x(s),c(!1))},[s]),e.jsxs(M,{className:"bg-white border-4 border-gray-300 shadow-lg",children:[e.jsxs($,{className:"border-b-4 border-gray-300 bg-gray-50",children:[e.jsxs(_,{className:"text-2xl font-bold text-gray-900 flex items-center gap-4",children:[e.jsx("div",{className:`w-10 h-10 ${n===1?"bg-blue-600":"bg-green-600"} rounded-full flex items-center justify-center text-white font-bold text-lg`,children:n}),a?"Sécurité de la vieillesse":"Old Age Security"," - ",t]}),e.jsx(xe,{className:"text-lg text-gray-700",children:a?"Gérez vos montants SV par période (récupération fiscale en juillet)":"Manage your OAS amounts by period (tax clawback in July)"})]}),e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsxs(pe,{className:"border-4 border-orange-500 bg-orange-50",children:[e.jsx(Ae,{className:"h-6 w-6 text-orange-600"}),e.jsxs(he,{className:"text-sm text-gray-900",children:[e.jsx("strong",{children:a?"Important :":"Important:"})," ",a?`La récupération fiscale s'applique à partir de juillet selon les revenus de l'année précédente. Seuil 2024 : ${K(p)}`:`Tax clawback applies from July based on previous year's income. 2024 threshold: ${K(p)}`]})]}),l?e.jsxs("div",{className:"space-y-6",children:[e.jsx("div",{className:"bg-gray-100 border-2 border-gray-300 rounded-lg p-4",children:e.jsxs(D,{className:"text-gray-900 font-bold text-xl",children:[a?"Année de référence":"Reference Year",": ",o.annee]})}),e.jsxs("div",{className:"senior-result-card",children:[e.jsxs("div",{className:"flex items-center gap-4 mb-4",children:[e.jsxs("label",{className:"flex items-center gap-3 text-lg font-bold text-gray-900 min-w-fit",children:[e.jsx(je,{className:"w-6 h-6 text-blue-600"}),a?`Revenus de ${o.annee-1} (optionnel)`:`${o.annee-1} Income (optional)`]}),e.jsx(Me,{value:o.revenus_annee_precedente||0,onChange:N=>x(S=>({...S,revenus_annee_precedente:N})),className:"h-12 text-lg flex-1",placeholder:a?"Ex: 95 000":"Ex: 95,000",allowDecimals:!0})]}),e.jsx("p",{className:"text-sm text-gray-600",children:a?"Utilisé pour calculer automatiquement la récupération fiscale à partir de juillet":"Used to automatically calculate tax clawback from July"}),o.revenus_annee_precedente&&o.revenus_annee_precedente>p&&e.jsxs("div",{className:"text-xl text-orange-600 bg-orange-100 border-2 border-orange-300 p-4 rounded-lg",children:[a?"Montant suggéré pour juillet-décembre : ":"Suggested amount for July-December: ",e.jsx("strong",{className:"text-2xl",children:K(b())})]})]}),e.jsxs("div",{className:"bg-green-50 border-4 border-green-300 rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Le,{className:"w-6 h-6 text-green-600"}),e.jsx("h4",{className:"text-lg font-bold text-green-800",children:a?"Période 1 : janvier à juin":"Period 1: January to June"})]}),e.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[e.jsx("span",{className:"font-semibold",children:a?"Du":"From"}),e.jsxs("span",{className:"bg-gray-100 px-3 py-1 rounded font-bold",children:[o.annee,"-01-01"]}),e.jsx("span",{className:"font-semibold",children:a?"Au":"To"}),e.jsxs("span",{className:"bg-gray-100 px-3 py-1 rounded font-bold",children:[o.annee,"-06-30"]})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-sm font-semibold text-gray-700",children:a?"Montant mensuel :":"Monthly Amount:"}),e.jsx(Me,{value:o.periode1.montant,onChange:N=>x(S=>({...S,periode1:{...S.periode1,montant:N}})),className:"w-32 h-10 text-sm",placeholder:a?"713,34":"713.34",allowDecimals:!0})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-semibold text-gray-700",children:a?"Total période 1 :":"Period 1 total:"}),e.jsx("span",{className:"text-lg font-bold text-green-600",children:K(o.periode1.montant*6)})]})]})]}),e.jsxs("div",{className:"bg-orange-50 border-4 border-orange-300 rounded-lg p-4 space-y-3",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx(Le,{className:"w-6 h-6 text-orange-600"}),e.jsx("h4",{className:"text-lg font-bold text-orange-800",children:a?"Période 2 : juillet à décembre":"Period 2: July to December"}),e.jsx("span",{className:"text-sm bg-orange-600 px-3 py-1 rounded text-white font-bold",children:a?"Récupération fiscale":"Tax clawback"})]}),e.jsxs("div",{className:"flex items-center gap-4 text-sm",children:[e.jsx("span",{className:"font-semibold",children:a?"Du":"From"}),e.jsxs("span",{className:"bg-gray-100 px-3 py-1 rounded font-bold",children:[o.annee,"-07-01"]}),e.jsx("span",{className:"font-semibold",children:a?"Au":"To"}),e.jsxs("span",{className:"bg-gray-100 px-3 py-1 rounded font-bold",children:[o.annee,"-12-31"]})]}),e.jsxs("div",{className:"flex items-center gap-4",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("label",{className:"text-sm font-semibold text-gray-700",children:a?"Montant mensuel :":"Monthly Amount:"}),n===1?e.jsx(Me,{value:o.periode2.montant,onChange:N=>x(S=>({...S,periode2:{...S.periode2,montant:N}})),className:"w-32 h-10 text-sm",placeholder:a?"500,00":"500.00",allowDecimals:!0}):e.jsxs("div",{className:"flex gap-2",children:[e.jsx(Me,{value:o.periode2.montant,onChange:N=>x(S=>({...S,periode2:{...S.periode2,montant:N}})),className:"w-32 h-10 text-sm",placeholder:a?"500,00":"500.00",allowDecimals:!0}),o.revenus_annee_precedente&&o.revenus_annee_precedente>p&&e.jsx(q,{size:"sm",variant:"outline",onClick:()=>x(N=>({...N,periode2:{...N.periode2,montant:b()}})),className:"border-2 border-orange-500 text-orange-600 hover:bg-orange-100 h-10 px-3",title:a?"Utiliser le montant calculé":"Use calculated amount",children:e.jsx(je,{className:"w-4 h-4"})})]})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("span",{className:"text-sm font-semibold text-gray-700",children:a?"Total période 2 :":"Period 2 total:"}),e.jsx("span",{className:"text-lg font-bold text-orange-600",children:K(o.periode2.montant*6)})]})]})]}),e.jsxs("div",{className:"bg-gray-100 border-2 border-gray-300 rounded-lg p-4 space-y-3",children:[e.jsx(D,{className:"text-gray-900 font-bold text-lg",children:a?"Raison de l'ajustement (optionnel)":"Reason for adjustment (optional)"}),e.jsx("textarea",{value:o.raisonAjustement||"",onChange:N=>x(S=>({...S,raisonAjustement:N.target.value})),className:"w-full bg-white border-2 border-gray-300 text-gray-900 placeholder-gray-500 rounded-lg p-3 min-h-[80px] text-sm",placeholder:a?"Ex: Récupération fiscale basée sur les revenus de 2023...":"Ex: Tax clawback based on 2023 income..."})]}),e.jsxs("div",{className:"bg-blue-50 border-4 border-blue-300 rounded-lg p-6",children:[e.jsx("h4",{className:"text-2xl font-bold text-blue-800 mb-6",children:a?"Résumé annuel":"Annual Summary"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6 text-center",children:[e.jsxs("div",{className:"bg-white border-2 border-gray-300 rounded-lg p-4",children:[e.jsx("div",{className:"text-3xl font-bold text-green-600",children:K(R())}),e.jsx("div",{className:"text-lg text-gray-700 font-semibold",children:a?"Total annuel":"Annual total"})]}),e.jsxs("div",{className:"bg-white border-2 border-gray-300 rounded-lg p-4",children:[e.jsx("div",{className:"text-3xl font-bold text-blue-600",children:K(u())}),e.jsx("div",{className:"text-lg text-gray-700 font-semibold",children:a?"Moyenne mensuelle":"Monthly average"})]}),e.jsxs("div",{className:"bg-white border-2 border-gray-300 rounded-lg p-4",children:[e.jsx("div",{className:"text-3xl font-bold text-orange-600",children:K(Math.abs(o.periode1.montant-o.periode2.montant))}),e.jsx("div",{className:"text-lg text-gray-700 font-semibold",children:a?"Différence périodes":"Period difference"})]})]})]}),e.jsxs("div",{className:"flex gap-6",children:[e.jsxs(q,{onClick:g,className:"bg-green-600 hover:bg-green-700 text-white text-xl font-bold h-16 px-8",children:[e.jsx(ie,{className:"w-6 h-6 mr-3"}),a?"Sauvegarder":"Save"]}),e.jsx(q,{variant:"outline",onClick:w,className:"border-4 border-gray-500 text-gray-700 text-xl font-bold h-16 px-8",children:a?"Annuler":"Cancel"})]})]}):e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs("div",{className:"bg-green-50 border-4 border-green-300 rounded-lg p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx(Le,{className:"w-6 h-6 text-green-600"}),e.jsxs("span",{className:"text-xl text-green-800 font-bold",children:[a?"Jan - Juin":"Jan - June"," ",s?.annee]})]}),e.jsx("div",{className:"text-3xl font-bold text-green-600",children:K(s?.periode1.montant||0)}),e.jsx("div",{className:"text-lg text-gray-700 font-semibold",children:a?"par mois":"per month"})]}),e.jsxs("div",{className:"bg-orange-50 border-4 border-orange-300 rounded-lg p-6",children:[e.jsxs("div",{className:"flex items-center gap-3 mb-4",children:[e.jsx(Le,{className:"w-6 h-6 text-orange-600"}),e.jsxs("span",{className:"text-xl text-orange-800 font-bold",children:[a?"Juil - Déc":"Jul - Dec"," ",s?.annee]})]}),e.jsx("div",{className:"text-3xl font-bold text-orange-600",children:K(s?.periode2.montant||0)}),e.jsx("div",{className:"text-lg text-gray-700 font-semibold",children:a?"par mois":"per month"})]})]}),e.jsx("div",{className:"bg-blue-50 border-4 border-blue-300 rounded-lg p-6",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-2xl font-bold text-blue-800",children:a?"Total annuel":"Annual Total"}),e.jsx("p",{className:"text-lg text-gray-700",children:a?"Sécurité de la vieillesse":"Old Age Security"})]}),e.jsxs("div",{className:"text-right",children:[e.jsx("div",{className:"text-3xl font-bold text-blue-600",children:K(R())}),e.jsxs("div",{className:"text-lg text-gray-700 font-semibold",children:[a?"Moyenne : ":"Average: ",K(u()),"/mois"]})]})]})}),s?.raisonAjustement&&e.jsxs("div",{className:"bg-gray-100 border-2 border-gray-300 rounded-lg p-6",children:[e.jsx("h5",{className:"text-xl font-bold text-gray-900 mb-3",children:a?"Raison de l'ajustement :":"Reason for adjustment:"}),e.jsx("p",{className:"text-lg text-gray-700",children:s.raisonAjustement})]}),e.jsxs(q,{onClick:()=>c(!0),variant:"outline",className:"w-full border-4 border-blue-500 text-blue-700 hover:bg-blue-100 text-xl font-bold h-16",children:[e.jsx(sa,{className:"w-6 h-6 mr-3"}),a?"Modifier les montants":"Edit amounts"]})]}),e.jsxs(pe,{className:"border-4 border-blue-500 bg-blue-50",children:[e.jsx(Oe,{className:"h-6 w-6 text-blue-600"}),e.jsxs(he,{className:"text-gray-900",children:[e.jsx("div",{className:"text-lg"}),e.jsx("div",{className:"text-sm mt-1",children:a?"La récupération fiscale s'applique si vos revenus dépassent le seuil.":"Tax clawback applies if your income exceeds the threshold."})]})]})]})]})},Us=m.forwardRef(({className:n,...t},s)=>e.jsx("textarea",{className:se("flex min-h-[80px] w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50",n),ref:s,...t}));Us.displayName="Textarea";const Ga=Yt.memo(({personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a})=>{const[i,l]=m.useState([]),[c,o]=m.useState(!1),[x,v]=m.useState(null),[p,d]=m.useState({name:"",monthlyAmount:0,startDate:new Date().toISOString().split("T")[0],frequency:"monthly",paymentDay:1,description:"",isActive:!0});m.useEffect(()=>{const f=n===1?"privatePensions1":"privatePensions2",A=s?.retirement?.[f]||[];l(A)},[s,n]);const g=()=>{const f=new Date,A=f.getFullYear(),L=new Date(A,0,1);return i.reduce((I,F)=>{if(!F.isActive)return I;const W=new Date(F.startDate),y=F.paymentDay||1;if(W>f)return I;const U=W>L?W:L,V=f.getMonth(),O=new Date(A,V,y),C=f>=O?O:new Date(A,V-1,y);let P=0;const T=new Date(U);for(T.getDate()<=y?T.setDate(y):T.setMonth(T.getMonth()+1,y);T<=C;)P++,F.frequency==="monthly"?T.setMonth(T.getMonth()+1):F.frequency==="quarterly"?T.setMonth(T.getMonth()+3):F.frequency==="annually"&&T.setFullYear(T.getFullYear()+1);return I+F.monthlyAmount*P},0)},w=m.useCallback(f=>{r({[n===1?"privatePensions1":"privatePensions2"]:f})},[n,r]),R=m.useCallback(()=>{d({name:"",monthlyAmount:0,startDate:new Date().toISOString().split("T")[0],frequency:"monthly",paymentDay:1,description:"",isActive:!0}),o(!1),v(null)},[]),u=m.useCallback(()=>{if(!p.name||p.monthlyAmount<=0)return;const f={id:Date.now().toString(),name:p.name||"",monthlyAmount:p.monthlyAmount||0,startDate:p.startDate||new Date().toISOString().split("T")[0],endDate:p.endDate,frequency:p.frequency||"monthly",description:p.description||"",isActive:!0},A=[...i,f];l(A),w(A),R()},[p,i,w,R]),b=m.useCallback(f=>{const A=i.find(L=>L.id===f);A&&(d(A),v(f),o(!0))},[i]),N=m.useCallback(()=>{if(!x||!p.name||p.monthlyAmount<=0)return;const f=i.map(A=>A.id===x?{...A,...p}:A);l(f),w(f),R()},[x,p,i,w,R]),S=m.useCallback(f=>{const A=i.filter(L=>L.id!==f);l(A),w(A)},[i,w]),j=m.useCallback(f=>{const A=i.map(L=>L.id===f?{...L,isActive:!L.isActive}:L);l(A),w(A)},[i,w]),h=m.useCallback(f=>{d(A=>({...A,frequency:f.target.value}))},[]),E=g();return e.jsxs(M,{className:"bg-white border-2 border-orange-200 shadow-lg",children:[e.jsx($,{className:"bg-orange-50 border-b-2 border-orange-200",children:e.jsxs(_,{className:"text-xl font-bold text-orange-800 flex items-center gap-2",children:[e.jsx(Te,{className:"w-6 h-6"}),a?"Rentes privées":"Private Pensions"," - ",t]})}),e.jsxs(k,{className:"p-6 space-y-6",children:[i.length>0&&e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"text-lg font-semibold text-gray-800",children:a?"Rentes configurées":"Configured Pensions"}),i.map(f=>e.jsx("div",{className:"bg-gray-50 p-4 rounded-lg border border-gray-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("h5",{className:"font-semibold text-gray-800",children:f.name}),e.jsx("span",{className:`px-2 py-1 rounded text-xs ${f.isActive?"bg-green-100 text-green-800":"bg-gray-100 text-gray-600"}`,children:f.isActive?a?"Actif":"Active":a?"Inactif":"Inactive"})]}),e.jsxs("p",{className:"text-sm text-gray-600",children:[K(f.monthlyAmount,{showCents:!0})," / ",a?"mois":"month"]}),f.description&&e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:f.description})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{variant:"outline",size:"sm",onClick:()=>j(f.id),className:"text-blue-600 hover:text-blue-800",children:f.isActive?"Désactiver":"Activer"}),e.jsx(q,{variant:"outline",size:"sm",onClick:()=>b(f.id),className:"text-green-600 hover:text-green-800",children:e.jsx(sa,{className:"w-4 h-4"})}),e.jsx(q,{variant:"outline",size:"sm",onClick:()=>S(f.id),className:"text-red-600 hover:text-red-800",children:e.jsx(js,{className:"w-4 h-4"})})]})]})},f.id))]}),c&&e.jsxs(M,{className:"border-2 border-orange-300",children:[e.jsx($,{className:"bg-orange-100",children:e.jsx(_,{className:"text-lg text-orange-800",children:x?a?"Modifier la rente privée":"Edit Private Pension":a?"Ajouter une rente privée":"Add Private Pension"})}),e.jsxs(k,{className:"p-4 space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"pensionName",children:a?"Nom de la rente":"Pension Name"}),e.jsx(Y,{id:"pensionName",value:p.name||"",onChange:f=>d(A=>({...A,name:f.target.value})),placeholder:a?"Ex: Rente de l'employeur":"Ex: Employer Pension"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"monthlyAmount",children:a?"Montant mensuel":"Monthly Amount"}),e.jsx(Me,{value:p.monthlyAmount||0,onChange:f=>d(A=>({...A,monthlyAmount:f})),className:"w-full",placeholder:"Ex: 500",allowDecimals:!0})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"startDate",children:a?"Date de début":"Start Date"}),e.jsx(Y,{id:"startDate",type:"date",value:p.startDate||"",onChange:f=>d(A=>({...A,startDate:f.target.value}))})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"frequency",children:a?"Fréquence":"Frequency"}),e.jsxs("select",{id:"frequency",value:p.frequency||"monthly",onChange:h,title:a?"Sélectionner la fréquence de paiement":"Select payment frequency",className:"w-full p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500 focus:border-orange-500",children:[e.jsx("option",{value:"monthly",children:a?"Mensuel":"Monthly"}),e.jsx("option",{value:"quarterly",children:a?"Trimestriel":"Quarterly"}),e.jsx("option",{value:"annually",children:a?"Annuel":"Annually"})]})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"paymentDay",children:a?"Jour de versement":"Payment Day"}),e.jsxs("select",{id:"paymentDay",value:p.paymentDay||1,onChange:f=>d(A=>({...A,paymentDay:parseInt(f.target.value)})),title:a?"Jour du mois de versement":"Day of month for payment",className:"w-full p-2 border border-gray-300 rounded-md focus:outline-none focus:ring-2 focus:ring-orange-500 focus:border-orange-500",children:[e.jsx("option",{value:1,children:"1er"}),e.jsx("option",{value:10,children:"10"}),e.jsx("option",{value:15,children:"15"}),e.jsx("option",{value:30,children:"30"})]})]})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"description",children:a?"Description (optionnel)":"Description (optional)"}),e.jsx(Us,{id:"description",value:p.description||"",onChange:f=>d(A=>({...A,description:f.target.value})),placeholder:a?"Ex: Rente de l'ancien employeur, rente viagère, etc.":"Ex: Former employer pension, annuity, etc.",rows:2})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsxs(q,{onClick:x?N:u,className:"bg-orange-600 hover:bg-orange-700 text-white",children:[e.jsx(ie,{className:"w-4 h-4 mr-2"}),x?a?"Modifier":"Update":a?"Ajouter":"Add"]}),e.jsxs(q,{variant:"outline",onClick:R,className:"border-gray-400 text-gray-600",children:[e.jsx(ze,{className:"w-4 h-4 mr-2"}),a?"Annuler":"Cancel"]})]})]})]}),!c&&e.jsx("div",{className:"text-center",children:e.jsxs(q,{onClick:()=>o(!0),variant:"outline",size:"lg",className:"border-orange-400 text-orange-600 hover:bg-orange-50",children:[e.jsx(os,{className:"w-5 h-5 mr-2"}),a?"Ajouter une rente privée":"Add Private Pension"]})}),e.jsx("div",{className:"bg-orange-50 p-4 rounded-lg border border-orange-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"text-lg font-semibold text-orange-800",children:a?"Total à ce jour":"Total to Date"}),e.jsx("p",{className:"text-sm text-gray-600",children:a?"Calculé automatiquement basé sur les rentes actives":"Automatically calculated based on active pensions"})]}),e.jsx("div",{className:"text-2xl font-bold text-orange-600",children:K(E)})]})})]})]})});Ga.displayName="PrivatePensionManager";const wl=({personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a,isCollapsed:i=!1,onToggleCollapse:l})=>{const[c,o]=m.useState(null);m.useEffect(()=>{try{const d=n===1?"advancedEI1":"advancedEI2",g=!!s?.retirement?.[d],w=n===1?s?.personal?.advancedEI1:s?.personal?.advancedEI2;!g&&w&&(w.eiStartDate||w.eiWeeklyGross)&&r({[d]:w})}catch{}},[n,s?.retirement,s?.personal,r]);const x=()=>{try{const d=n===1?1:2,g=n===1?s?.personal?.naissance1:s?.personal?.naissance2,w=n===1?s?.retirement?.advancedEI1||s?.personal?.advancedEI1:s?.retirement?.advancedEI2||s?.personal?.advancedEI2;if(!g||!w||!w.eiStartDate)return 0;const R=new Date().toISOString().split("T")[0],u=[{id:`ei-${d}`,type:"ei",startDate:w.eiStartDate,endDate:R,grossAmount:w.eiWeeklyGross||0,deductions:{federalTax:w.eiFederalTax||0,provincialTax:w.eiProvincialTax||0},details:{weeklyRate:w.eiWeeklyGross||0,maxWeeks:w.eiMaxWeeks||35,weeksUsed:w.eiWeeksUsed||0}}],b=Vn.calculateEIDetails(u,g,R),N=u[0].details?.maxWeeks||35,j=Math.min(b.totalWeeksUsed,N)*(b.netWeeklyAmount||0);return isFinite(j)&&!isNaN(j)?j:0}catch{return 0}},p=(()=>{const d={rrq:0,securiteVieillesse:0,rentesPrivees:0,assuranceEmploi:0,total:0};if(s?.retirement){const g=new Date,w=g.getMonth()+1,R=Math.max(0,w-1),u=n===1?s.retirement.rrqMontantActuel1||0:s.retirement.rrqMontantActuel2||0;d.rrq=u*R;const b=n===1?s.retirement.svBiannual1:s.retirement.svBiannual2;if(b){const S=(b.periode1?.montant||0)+(b.periode2?.montant||0);d.securiteVieillesse=S*R}const N=n===1?s.retirement.privatePensions1||[]:s.retirement.privatePensions2||[];if(N.length>0){const S=g.getMonth()+1,j=g.getFullYear();d.rentesPrivees=N.reduce((h,E)=>{if(!E.isActive)return h;const f=new Date(E.startDate),A=f.getMonth()+1,L=f.getFullYear(),I=(j-L)*12+(S-A),F=Math.max(0,I);let W=E.monthlyAmount;return E.frequency==="quarterly"?W=E.monthlyAmount/3:E.frequency==="annually"&&(W=E.monthlyAmount/12),h+W*F},0)}}return d.assuranceEmploi=x(),d.total=d.rrq+d.securiteVieillesse+d.rentesPrivees+d.assuranceEmploi,d})();return e.jsxs(M,{className:"bg-gradient-to-r from-blue-50 to-indigo-50 border-4 border-blue-200 shadow-xl",children:[e.jsx($,{className:"border-b-4 border-blue-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(_,{className:"text-2xl font-bold text-blue-800 flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-blue-600 rounded-full flex items-center justify-center text-white font-bold text-xl",children:n}),a?"Prestations":"Benefits"," - ",t]}),l&&e.jsx(q,{variant:"ghost",size:"sm",onClick:l,className:"text-blue-600 hover:text-blue-800",children:i?e.jsx(cs,{className:"w-6 h-6"}):e.jsx(Vs,{className:"w-6 h-6"})})]})}),!i&&e.jsxs(k,{className:"p-6 space-y-6",children:[e.jsx(Ti,{personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a}),e.jsx(ki,{personNumber:n,personName:t,data:n===1?s?.retirement?.svBiannual1:s?.retirement?.svBiannual2,onDataChange:d=>{r({[n===1?"svBiannual1":"svBiannual2"]:d})},isFrench:a}),e.jsxs("div",{className:"bg-white p-6 rounded-lg border-2 border-indigo-200",children:[e.jsxs("h3",{className:"text-xl font-bold text-indigo-800 mb-4 flex items-center gap-2",children:[e.jsx(Te,{className:"w-6 h-6"}),a?"Assurance emploi (AE)":"Employment Insurance (EI)"]}),e.jsxs("div",{className:"grid grid-cols-1 gap-4",children:[e.jsx(ln,{personNumber:n,personName:t,birthDate:(n===1?s?.personal?.naissance1:s?.personal?.naissance2)||"",onDataChange:d=>{r({[n===1?"advancedEI1":"advancedEI2"]:d})},isFrench:a}),e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Montant à ce jour":"Amount to Date"}),e.jsx("div",{className:"p-3 bg-gray-100 border-2 border-gray-300 rounded-lg text-lg font-bold text-indigo-600",children:K(p.assuranceEmploi)})]}),e.jsx("p",{className:"text-sm text-gray-600 mt-1",children:a?"Calculé automatiquement à partir de la date de début et du taux hebdomadaire":"Automatically calculated from start date and weekly rate"})]})]}),e.jsx(Ga,{personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a})]})]})},Al=({personNumber:n,personName:t,userData:s,onDataChange:r,isFrench:a,isCollapsed:i=!1,onToggleCollapse:l})=>{const[c,o]=m.useState(null),v=(()=>{const p={reer:0,celi:0,cri:0,crypto:0,total:0};return p.reer=n===1?s?.personal?.soldeREER1||0:s?.personal?.soldeREER2||0,p.celi=n===1?s?.personal?.soldeCELI1||0:s?.personal?.soldeCELI2||0,p.cri=n===1?s?.personal?.soldeCRI1||0:s?.personal?.soldeCRI2||0,p.crypto=n===1?s?.personal?.soldeCrypto1||0:s?.personal?.soldeCrypto2||0,p.total=p.reer+p.celi+p.cri+p.crypto,p})();return e.jsxs(M,{className:"bg-gradient-to-r from-orange-50 to-red-50 border-4 border-orange-200 shadow-xl",children:[e.jsx($,{className:"border-b-4 border-orange-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(_,{className:"text-2xl font-bold text-orange-800 flex items-center gap-3",children:[e.jsx("div",{className:"w-10 h-10 bg-orange-600 rounded-full flex items-center justify-center text-white font-bold text-xl",children:n}),a?"Investissements":"Investments"," - ",t]}),l&&e.jsx(q,{variant:"ghost",size:"sm",onClick:l,className:"text-orange-600 hover:text-orange-800",children:i?e.jsx(cs,{className:"w-6 h-6"}):e.jsx(Vs,{className:"w-6 h-6"})})]})}),!i&&e.jsxs(k,{className:"p-4 space-y-4 investments-compact",children:[e.jsxs("div",{className:"bg-white p-3 rounded-lg border-2 border-blue-200",children:[e.jsxs("h3",{className:"text-lg font-bold text-blue-800 mb-2 flex items-center gap-2",children:[e.jsx(ls,{className:"w-5 h-5"}),a?"REER (Régime enregistré d'épargne-retraite)":"RRSP (Registered Retirement Savings Plan)"]}),e.jsxs("div",{className:"mpr-form-row cols-2",children:[e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Solde REER":"RRSP Balance"}),e.jsx(Me,{value:v.reer,onChange:p=>{r({[n===1?"soldeREER1":"soldeREER2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"Ex: 150 000":"Ex: 150,000",allowDecimals:!0})]}),e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Date du solde":"Balance Date"}),e.jsx(Qe,{value:n===1?s?.personal?.dateREER1||"":s?.personal?.dateREER2||"",onChange:p=>{r({[n===1?"dateREER1":"dateREER2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"AAAA-MM-JJ":"YYYY-MM-DD"})]})]})]}),e.jsxs("div",{className:"bg-white p-3 rounded-lg border-2 border-green-200",children:[e.jsxs("h3",{className:"text-lg font-bold text-green-800 mb-2 flex items-center gap-2",children:[e.jsx(_e,{className:"w-5 h-5"}),a?"CELI (Compte d'épargne libre d'impôt)":"TFSA (Tax-Free Savings Account)"]}),e.jsxs("div",{className:"mpr-form-row cols-2",children:[e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Solde CELI":"TFSA Balance"}),e.jsx(Me,{value:v.celi,onChange:p=>{r({[n===1?"soldeCELI1":"soldeCELI2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"Ex: 75 000":"Ex: 75,000",allowDecimals:!0})]}),e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Date du solde":"Balance Date"}),e.jsx(Qe,{value:n===1?s?.personal?.dateCELI1||"":s?.personal?.dateCELI2||"",onChange:p=>{r({[n===1?"dateCELI1":"dateCELI2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"AAAA-MM-JJ":"YYYY-MM-DD"})]})]})]}),e.jsxs("div",{className:"bg-white p-3 rounded-lg border-2 border-yellow-200",children:[e.jsxs("h3",{className:"text-lg font-bold text-yellow-800 mb-2 flex items-center gap-2",children:[e.jsx(Te,{className:"w-5 h-5"}),a?"CRI (Compte de retraite immobilisé)":"LIRA (Locked-in Retirement Account)"]}),e.jsxs("div",{className:"mpr-form-row cols-2",children:[e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Solde CRI":"LIRA Balance"}),e.jsx(Me,{value:v.cri,onChange:p=>{r({[n===1?"soldeCRI1":"soldeCRI2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"Ex: 200 000":"Ex: 200,000",allowDecimals:!0})]}),e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Date du solde":"Balance Date"}),e.jsx(Qe,{value:n===1?s?.personal?.dateCRI1||"":s?.personal?.dateCRI2||"",onChange:p=>{r({[n===1?"dateCRI1":"dateCRI2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"AAAA-MM-JJ":"YYYY-MM-DD"})]})]})]}),e.jsxs("div",{className:"bg-white p-3 rounded-lg border-2 border-purple-200",children:[e.jsxs("h3",{className:"text-lg font-bold text-purple-800 mb-2 flex items-center gap-2",children:[e.jsx("span",{className:"text-xl",children:"₿"}),a?"Crypto-monnaie":"Cryptocurrency"]}),e.jsxs("div",{className:"mpr-form-row cols-2",children:[e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Valeur totale crypto":"Total Crypto Value"}),e.jsx(Me,{value:v.crypto,onChange:p=>{r({[n===1?"soldeCrypto1":"soldeCrypto2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"Ex: 25 000":"Ex: 25,000",allowDecimals:!0})]}),e.jsxs("div",{className:"senior-field-inline",children:[e.jsx("label",{className:"senior-form-label",children:a?"Date d'évaluation":"Valuation Date"}),e.jsx(Qe,{value:n===1?s?.personal?.dateCrypto1||"":s?.personal?.dateCrypto2||"",onChange:p=>{r({[n===1?"dateCrypto1":"dateCrypto2"]:p})},className:"p-2 border-2 border-gray-300 rounded-lg text-[1.05rem] font-semibold w-40",placeholder:a?"AAAA-MM-JJ":"YYYY-MM-DD"})]})]})]}),e.jsx(M,{className:"bg-gradient-to-r from-green-50 to-emerald-50 border-4 border-green-200",children:e.jsxs(k,{className:"p-6",children:[e.jsxs("h4",{className:"text-2xl font-bold text-green-800 mb-4 flex items-center gap-3",children:[e.jsx(je,{className:"w-6 h-6"}),a?"Résumé des investissements":"Investments Summary"]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-5 gap-4 text-center",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-3xl font-bold text-blue-600",children:K(v.reer)}),e.jsx("div",{className:"text-lg text-gray-700",children:a?"REER":"RRSP"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-3xl font-bold text-green-600",children:K(v.celi)}),e.jsx("div",{className:"text-lg text-gray-700",children:a?"CELI":"TFSA"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-3xl font-bold text-yellow-600",children:K(v.cri)}),e.jsx("div",{className:"text-lg text-gray-700",children:a?"CRI":"LIRA"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-3xl font-bold text-purple-600",children:K(v.crypto)}),e.jsx("div",{className:"text-lg text-gray-700",children:"Crypto"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-3xl font-bold text-green-600",children:K(v.total)}),e.jsx("div",{className:"text-lg text-gray-700",children:"Total"})]})]})]})})]})]})},vt=(n,t,s="info")=>{const r=new Date;r.toISOString().split("T")[0],r.toLocaleTimeString("fr-CA",{hour12:!1,hour:"2-digit",minute:"2-digit",second:"2-digit"})},De=(n,t,s)=>{vt()},Xs=(n,t,s)=>{const r=t instanceof Error?t.message:t;vt(`${n} - Erreur: ${r}`,s,"error")},Zs=(n,t,s)=>{vt(`${n} - Avertissement: ${t}`,s,"warn")},Sl=({userData:n,isFrench:t})=>{const r=(()=>{const a={salaire:0,assuranceEmploi:0,travailAutonome:0,revenusLocation:0,emploisSaisonniers:0,dividendes:0,autresRevenus:0,totalRevenus:0,rrq:0,securiteVieillesse:0,rentesPrivees:0,totalPrestations:0,reer:0,celi:0,cri:0,crypto:0,totalInvestissements:0,totalGeneral:0},i=n?.personal?.unifiedIncome1||[],l=n?.personal?.unifiedIncome2||[];De("GlobalSummary","Data Analysis",{unifiedIncome1Length:i.length,unifiedIncome2Length:l.length});const c=y=>{if(De("GlobalSummary","calculateToDateAmount - Entry Processing",{isActive:y.isActive,type:y.type}),!y.isActive)return Zs("GlobalSummary","Entry not active, returning 0",{entryId:y.id}),0;const U=new Date,V=new Date(U.getFullYear(),U.getMonth(),U.getDate());switch(De("GlobalSummary","calculateToDateAmount - Date Info",{today:V.toISOString().split("T")[0],entryType:y.type,currentMonth:U.getMonth()+1,currentYear:U.getFullYear()}),y.type){case"salaire":case"emploi-saisonnier":if(De("GlobalSummary","Processing salary/seasonal entry",{salaryNetAmount:y.salaryNetAmount,salaryFrequency:y.salaryFrequency,description:y.description,startDate:y.startDate,endDate:y.endDate,salaryStartDate:y.salaryStartDate,salaryEndDate:y.salaryEndDate}),y.type==="emploi-saisonnier"&&y.salaryStartDate&&y.salaryEndDate){const O=y.salaryStartDate.split("-").map(Number),C=y.salaryEndDate.split("-").map(Number),P=new Date(O[0],O[1]-1,O[2]),T=new Date(C[0],C[1]-1,C[2]);if(De("GlobalSummary","Seasonal employment dates analysis",{startDate:P.toISOString().split("T")[0],endDate:T.toISOString().split("T")[0],today:V.toISOString().split("T")[0]}),VT?T:V,H=Math.max(0,Math.floor((G.getTime()-P.getTime())/(1e3*60*60*24))+1);if(y.salaryNetAmount&&y.salaryFrequency){const X=y.salaryNetAmount,Z=y.salaryFrequency;if(Z==="monthly"){const J=new Date(P.getFullYear(),P.getMonth(),P.getDate()),ne=new Date(G.getFullYear(),G.getMonth(),G.getDate()),ae=J.getMonth(),re=ne.getMonth(),ge=J.getFullYear(),Q=(ne.getFullYear()-ge)*12+(re-ae)+1,Ie=X*Q;return De("GlobalSummary","Seasonal monthly calculation",{startDate:P.toISOString().split("T")[0],endDate:T.toISOString().split("T")[0],effectiveEndDate:G.toISOString().split("T")[0],localStartMonth:J.getMonth(),localEndMonth:ne.getMonth()}),Ie}else if(Z==="weekly"){const J=Math.ceil(H/7);return X*J}else{const J=Math.floor((T.getTime()-P.getTime())/864e5)+1;return X*Math.ceil(Z==="biweekly"?J/14:J/30)*H/J}}}if(y.salaryNetAmount&&y.salaryFrequency){const O=y.salaryNetAmount,C=y.salaryFrequency;if(C==="monthly"){const P=Math.max(0,U.getMonth()+1);return O*P}else if(C==="biweekly"){const P=[new Date("2025-01-02"),new Date("2025-01-16"),new Date("2025-01-30"),new Date("2025-02-13"),new Date("2025-02-27"),new Date("2025-03-13"),new Date("2025-03-27"),new Date("2025-04-10")];let T=0;for(const H of P)H<=V&&T++;return T*O}else{const P=new Date(U.getFullYear(),0,1),T=Math.max(0,Math.floor((V.getTime()-P.getTime())/(1e3*60*60*24)));let G=0;switch(C){case"weekly":G=Math.floor(T/7);break;case"biweekly":G=Math.floor(T/14);break;case"bimonthly":G=Math.floor(T/15);break;default:G=Math.floor(T/30)}return O*G}}else if(y.monthlyAmount){const O=Math.max(0,U.getMonth()+1);return y.monthlyAmount*O}else if(y.projectedAnnual){const O=Math.max(0,U.getMonth()+1);return y.projectedAnnual/12*O}else return 0;case"assurance-emploi":if(y.eiStartDate&&y.eiFirstPaymentDate){const O=new Date(y.eiStartDate);if(new Date(y.eiFirstPaymentDate),V>=O){const P=Math.floor((V.getTime()-O.getTime())/6048e5);return Math.max(0,P)*635}}break;case"travail-autonome":return y.projectedAnnual||0;case"revenus-location":if(y.rentalAmount&&y.rentalFrequency){const O=new Date;if(y.rentalStartDate&&y.rentalEndDate)try{const C=y.rentalStartDate.split("-").map(Number),P=y.rentalEndDate.split("-").map(Number);if(C.length!==3||P.length!==3||C.some(isNaN)||P.some(isNaN))return Xs("GlobalSummary","Invalid date format for rental income",{rentalStartDate:y.rentalStartDate,rentalEndDate:y.rentalEndDate}),y.projectedAnnual||0;const T=new Date(C[0],C[1]-1,C[2]),G=new Date(P[0],P[1]-1,P[2]);if(isNaN(T.getTime())||isNaN(G.getTime()))return Xs("GlobalSummary","Invalid date values for rental income",{startDate:T.toString(),endDate:G.toString(),rentalStartDate:y.rentalStartDate,rentalEndDate:y.rentalEndDate}),y.projectedAnnual||0;const H=new Date(O.getFullYear(),O.getMonth(),O.getDate());if(De("GlobalSummary","Rental income with specific dates",{rentalAmount:y.rentalAmount,rentalFrequency:y.rentalFrequency,startDate:T.toISOString().split("T")[0],endDate:G.toISOString().split("T")[0],today:H.toISOString().split("T")[0]}),HG?G:H,Z=Math.floor((X.getTime()-T.getTime())/(1e3*60*60*24))+1;let J=0;switch(y.rentalFrequency){case"weekend":J=Math.floor(Z/7)+(Z%7>=3?1:0),Z<=3&&(J=1);break;case"weekly":J=Math.ceil(Z/7);break;case"monthly":const ae=T.getMonth(),re=X.getMonth(),ge=T.getFullYear();J=(X.getFullYear()-ge)*12+(re-ae)+1;break}const ne=y.rentalAmount*J;return De("GlobalSummary","Rental income calculated with dates",{daysDiff:Z,periods:J,rentalAmount:y.rentalAmount,result:ne,calculationMethod:"Specific date range"}),ne}catch(C){Xs("GlobalSummary","Error calculating rental income with dates",{error:C.message,rentalStartDate:y.rentalStartDate,rentalEndDate:y.rentalEndDate,rentalAmount:y.rentalAmount});const P=Math.max(0,O.getMonth()+1);return y.rentalAmount*Math.floor(P*4.33)}else{const C=Math.max(0,O.getMonth()+1);switch(y.rentalFrequency){case"weekend":const P=Math.floor(C*4.33);return y.rentalAmount*P;case"weekly":const T=Math.floor(C*4.33);return y.rentalAmount*T;case"monthly":return y.rentalAmount*C;default:return y.rentalAmount*C}}}return y.projectedAnnual||0}return 0};De("GlobalSummary","Person 1 Income Processing",{numberOfEntries:i.length}),i.forEach((y,U)=>{De();const V=c(y);switch(De("GlobalSummary","Person 1 Calculated Amount",{entryType:y.type,description:y.description}),y.type){case"salaire":a.salaire+=V;break;case"emploi-saisonnier":a.emploisSaisonniers+=V;break;case"assurance-emploi":a.assuranceEmploi+=V;break;case"travail-autonome":a.travailAutonome+=V;break;case"revenus-location":a.revenusLocation+=V;break;case"dividendes":a.dividendes+=V;break;case"autres":a.autresRevenus+=V;break;case"rentes":const O=y.description?.toLowerCase()||"";O.includes("rrq")||O.includes("cpp")||O.includes("régime de retraite du québec")?a.rrq+=V:O.includes("sv")||O.includes("sécurité vieillesse")||O.includes("oas")||O.includes("old age security")?a.securiteVieillesse+=V:a.rentesPrivees+=V;break}}),l.forEach((y,U)=>{const V=c(y);switch(y.type){case"salaire":a.salaire+=V;break;case"emploi-saisonnier":a.emploisSaisonniers+=V;break;case"assurance-emploi":a.assuranceEmploi+=V;break;case"travail-autonome":a.travailAutonome+=V;break;case"revenus-location":a.revenusLocation+=V;break;case"dividendes":a.dividendes+=V;break;case"autres":a.autresRevenus+=V;break;case"rentes":const O=y.description?.toLowerCase()||"";O.includes("rrq")||O.includes("cpp")||O.includes("régime de retraite du québec")?a.rrq+=V:O.includes("sv")||O.includes("sécurité vieillesse")||O.includes("oas")||O.includes("old age security")?a.securiteVieillesse+=V:a.rentesPrivees+=V;break}}),a.totalRevenus=a.salaire+a.travailAutonome+a.revenusLocation+a.emploisSaisonniers+a.dividendes+a.autresRevenus;const o=new Date,x=o.getMonth()+1,v=Math.max(0,x-1),p=n?.retirement?.rrqMontantActuel1||0,d=n?.retirement?.rrqMontantActuel2||0;a.rrq=(p+d)*v;const g=n?.retirement?.svBiannual1,w=n?.retirement?.svBiannual2;if(a.securiteVieillesse=0,g&&g.periode1&&g.periode2){const y=o.getMonth()+1,U=Math.max(0,y-1);let V=0;const O=Math.min(6,U);if(O>0&&(V+=O*g.periode1.montant),U>6){const C=Math.min(6,U-6);V+=C*g.periode2.montant}a.securiteVieillesse+=V}else{const y=n?.retirement?.svMontant1||0;y>0&&(a.securiteVieillesse+=v*y)}if(w&&w.periode1&&w.periode2){const y=o.getMonth()+1,U=Math.max(0,y-1);let V=0;const O=Math.min(6,U);if(O>0&&(V+=O*w.periode1.montant),U>6){const C=Math.min(6,U-6);V+=C*w.periode2.montant}a.securiteVieillesse+=V}else{const y=n?.retirement?.svMontant2||0;y>0&&(a.securiteVieillesse+=v*y)}if(w&&w.periode1&&w.periode2){const y=o.getMonth()+1,U=Math.max(0,y-1);let V=0;const O=Math.min(6,U);if(O>0&&(V+=O*w.periode1.montant),U>6){const C=Math.min(6,U-6);V+=C*w.periode2.montant}a.securiteVieillesse+=V}const R=n?.retirement?.privatePensions1||[],u=n?.retirement?.privatePensions2||[],b=y=>{const U=new Date,V=U.getFullYear(),O=new Date(V,0,1);return y.reduce((C,P)=>{if(!P.isActive)return C;const T=new Date(P.startDate),G=P.paymentDay||1;if(T>U)return C;const H=T>O?T:O,X=U.getMonth(),Z=new Date(V,X,G),J=U>=Z?Z:new Date(V,X-1,G);let ne=0;const ae=new Date(H);for(ae.getDate()<=G?ae.setDate(G):ae.setMonth(ae.getMonth()+1,G);ae<=J;)ne++,P.frequency==="monthly"?ae.setMonth(ae.getMonth()+1):P.frequency==="quarterly"?ae.setMonth(ae.getMonth()+3):P.frequency==="annually"&&ae.setFullYear(ae.getFullYear()+1);return C+P.monthlyAmount*ne},0)},N=b(R),S=b(u);a.rentesPrivees=N+S,a.totalPrestations=a.rrq+a.securiteVieillesse+a.rentesPrivees+a.assuranceEmploi;const j=(y,U)=>{const O=Math.floor((U.getTime()-y.getTime())/6048e5)+1;return Math.max(0,O)},h=y=>{const U=new Date,V=new Date(U.getFullYear(),0,1),O=new Date(U.getFullYear(),11,31);let C=0;for(const P of y||[]){if(!P||P.type!=="assurance-emploi"||P.isActive===!1)continue;const T=Number(P.weeklyGross??P.weeklyAmount??0)||0,G=Number(P.eiFederalTaxWeekly??0)||0,H=Number(P.eiProvincialTaxWeekly??0)||0,X=Math.max(0,T-G-H);if(X<=0)continue;const Z=P.eiStartDate||P.salaryStartDate||P.startDate,J=Z?new Date(Z):V,ne=Number(P.maxWeeks??P.eiEligibleWeeks??0)||0,ae=ne>0?new Date(J.getTime()+ne*7*24*60*60*1e3):O,re=J0&&(Q=Math.min(Q,ne)),Q=Math.min(Q,Ee),C+=X*Q}return C};a.assuranceEmploi=h(i)+h(l);const E=y=>{try{if(!y||!y.eiStartDate)return 0;const U=new Date,V=new Date(U.getFullYear(),0,1),O=new Date(y.eiStartDate),C=O0&&(J=Math.min(J,P)),J=Math.min(J,Z),X*J}catch{return 0}};a.assuranceEmploi+=E(n?.retirement?.advancedEI1),a.assuranceEmploi+=E(n?.retirement?.advancedEI2),a.totalPrestations=a.rrq+a.securiteVieillesse+a.rentesPrivees+a.assuranceEmploi;const f=(n?.personal?.soldeREER1||0)+(n?.personal?.soldeREER2||0),A=(n?.personal?.soldeCELI1||0)+(n?.personal?.soldeCELI2||0),L=(n?.personal?.soldeCRI1||0)+(n?.personal?.soldeCRI2||0),I=(n?.savings?.reer1||0)+(n?.savings?.reer2||0),F=(n?.savings?.celi1||0)+(n?.savings?.celi2||0),W=(n?.savings?.cri1||0)+(n?.savings?.cri2||0);return a.reer=f>0?f:I,a.celi=A>0?A:F,a.cri=L>0?L:W,a.crypto=(n?.personal?.soldeCrypto1||0)+(n?.personal?.soldeCrypto2||0),a.totalInvestissements=a.reer+a.celi+a.cri+a.crypto,a.totalGeneral=a.totalRevenus+a.totalPrestations,a})();return e.jsxs(M,{className:"bg-gradient-to-r from-indigo-900 to-purple-900 border-4 border-indigo-300 shadow-2xl mb-8",children:[e.jsx($,{className:"border-b-4 border-indigo-300",children:e.jsxs(_,{className:"text-3xl font-bold text-white flex items-center justify-center gap-4",children:[e.jsx(je,{className:"w-10 h-10 text-indigo-300"}),t?"Résumé familial":"Family Summary"]})}),e.jsxs(k,{className:"p-8",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-8",children:[e.jsxs("div",{className:"bg-white/10 backdrop-blur-sm rounded-lg p-6 border-2 border-blue-300",children:[e.jsxs("h3",{className:"text-xl font-bold text-blue-300 mb-4 flex items-center gap-2",children:[e.jsx(mt,{className:"w-6 h-6"}),t?"Revenus de travail":"Work Income"]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Salaire:":"Salary:"}),e.jsx("span",{className:"font-bold text-blue-300",children:K(r.salaire)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Travail autonome:":"Self-employment:"}),e.jsx("span",{className:"font-bold text-purple-300",children:K(r.travailAutonome)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Revenus location:":"Rental Income:"}),e.jsx("span",{className:"font-bold text-green-300",children:K(r.revenusLocation)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Emplois saisonniers":"Seasonal Employment"}),e.jsx("span",{className:"font-bold text-yellow-300",children:K(r.emploisSaisonniers)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Dividendes":"Dividends"}),e.jsx("span",{className:"font-bold text-cyan-300",children:K(r.dividendes)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Autres revenus":"Other Income"}),e.jsx("span",{className:"font-bold text-pink-300",children:K(r.autresRevenus)})]}),e.jsx("div",{className:"border-t border-blue-300 pt-2 mt-4",children:e.jsxs("div",{className:"flex justify-between text-lg",children:[e.jsx("span",{className:"text-white font-bold",children:t?"Total revenus:":"Total Income:"}),e.jsx("span",{className:"font-bold text-blue-300",children:K(r.totalRevenus)})]})})]})]}),e.jsxs("div",{className:"bg-white/10 backdrop-blur-sm rounded-lg p-6 border-2 border-purple-300",children:[e.jsxs("h3",{className:"text-xl font-bold text-purple-300 mb-4 flex items-center gap-2",children:[e.jsx(is,{className:"w-6 h-6"}),t?"Prestations":"Benefits"]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"RRQ/CPP:":"QPP/CPP:"}),e.jsx("span",{className:"font-bold text-blue-300",children:K(r.rrq)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Sécurité vieillesse:":"Old Age Security:"}),e.jsx("span",{className:"font-bold text-purple-300",children:K(r.securiteVieillesse)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Assurance emploi:":"Employment Insurance:"}),e.jsx("span",{className:"font-bold text-orange-300",children:K(r.assuranceEmploi)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"Rentes privées:":"Private Pensions:"}),e.jsx("span",{className:"font-bold text-yellow-300",children:K(r.rentesPrivees)})]}),e.jsx("div",{className:"border-t border-purple-300 pt-2 mt-4",children:e.jsxs("div",{className:"flex justify-between text-lg",children:[e.jsx("span",{className:"text-white font-bold",children:t?"Total prestations:":"Total Benefits:"}),e.jsx("span",{className:"font-bold text-purple-300",children:K(r.totalPrestations)})]})})]})]}),e.jsxs("div",{className:"bg-white/10 backdrop-blur-sm rounded-lg p-6 border-2 border-orange-300",children:[e.jsxs("h3",{className:"text-xl font-bold text-orange-300 mb-4 flex items-center gap-2",children:[e.jsx(_e,{className:"w-6 h-6"}),t?"Investissements":"Investments"]}),e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"REER:":"RRSP:"}),e.jsx("span",{className:"font-bold text-blue-300",children:K(r.reer)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"CELI:":"TFSA:"}),e.jsx("span",{className:"font-bold text-green-300",children:K(r.celi)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:t?"CRI:":"LIRA:"}),e.jsx("span",{className:"font-bold text-yellow-300",children:K(r.cri)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{className:"text-white",children:"Crypto:"}),e.jsx("span",{className:"font-bold text-purple-300",children:K(r.crypto)})]}),e.jsx("div",{className:"border-t border-orange-300 pt-2 mt-4",children:e.jsxs("div",{className:"flex justify-between text-lg",children:[e.jsx("span",{className:"text-white font-bold",children:t?"Total investissements:":"Total Investments:"}),e.jsx("span",{className:"font-bold text-orange-300",children:K(r.totalInvestissements)})]})})]})]})]}),e.jsx("div",{className:"mt-8 pt-6 border-t-4 border-white/30",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-4xl font-bold text-white mb-2",children:K(r.totalGeneral)}),e.jsx("div",{className:"text-xl text-indigo-200",children:t?"Total des revenus et prestations annuels":"Total Annual Income and Benefits"})]})})]})]})},Cl=({title:n,children:t,isCollapsed:s=!1,onToggle:r,className:a="",icon:i})=>e.jsxs("div",{className:`bg-white rounded-lg border-2 border-gray-200 shadow-lg ${a}`,children:[e.jsx("div",{className:"p-4 border-b-2 border-gray-200",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("h2",{className:"text-2xl font-bold text-gray-800 flex items-center gap-3",children:[i,n]}),r&&e.jsx(q,{variant:"ghost",size:"sm",onClick:r,className:"text-gray-600 hover:text-gray-800",children:s?e.jsx(cs,{className:"w-6 h-6"}):e.jsx(Vs,{className:"w-6 h-6"})})]})}),!s&&e.jsx("div",{className:"p-6",children:t})]}),Rl=({moduleId:n,onComplete:t,onClose:s,className:r=""})=>{const[a,i]=m.useState(null),[l,c]=m.useState(null),[o,x]=m.useState({currentContentIndex:0,isQuizMode:!1,quizAnswers:{},quizSubmitted:!1,timeSpent:0,isPlaying:!1,showNotes:!1,noteText:""}),v=$n.getInstance();if(m.useEffect(()=>{const f=v.getAllModules().find(A=>A.id===n);if(f){i(f);const A=v.getUserProgress(n);c(A),A&&x(L=>({...L,currentContentIndex:A.currentContentIndex,timeSpent:A.timeSpent}))}},[n]),m.useEffect(()=>{let f;return o.isPlaying&&(f=setInterval(()=>{x(A=>({...A,timeSpent:A.timeSpent+1})),o.timeSpent%60===0&&v.updateProgress(n,o.currentContentIndex,1)},6e4)),()=>clearInterval(f)},[o.isPlaying,o.timeSpent,n,o.currentContentIndex]),!a)return e.jsx("div",{className:"flex items-center justify-center h-64",children:e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"animate-spin rounded-full h-8 w-8 border-b-2 border-blue-600 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600",children:"Chargement du module..."})]})});const p=a.content[o.currentContentIndex],d=o.currentContentIndex===a.content.length-1,g=Math.round((o.currentContentIndex+1)/a.content.length*100),w=()=>{d?x(f=>({...f,isQuizMode:!0})):(x(f=>({...f,currentContentIndex:f.currentContentIndex+1})),v.updateProgress(n,o.currentContentIndex+1,1))},R=()=>{o.currentContentIndex>0&&x(f=>({...f,currentContentIndex:f.currentContentIndex-1}))},u=(f,A)=>{x(L=>({...L,quizAnswers:{...L.quizAnswers,[f]:A}}))},b=()=>{const f=v.submitQuiz(n,o.quizAnswers);x(A=>({...A,quizSubmitted:!0,quizResults:f})),f.passed&&t?.(f.certificate)},N=()=>{p&&v.addBookmark(n,p.id)},S=()=>{p&&o.noteText.trim()&&(v.addNote(n,p.id,o.noteText),x(f=>({...f,noteText:"",showNotes:!1})))},j=f=>{const A=Math.floor(f/60),L=f%60;return A>0?`${A}h ${L}min`:`${L}min`},h=f=>{switch(f){case"text":return e.jsx(vs,{className:"h-5 w-5 text-blue-500"});case"video":return e.jsx(Cn,{className:"h-5 w-5 text-red-500"});case"interactive":return e.jsx(Re,{className:"h-5 w-5 text-purple-500"});case"example":return e.jsx(Os,{className:"h-5 w-5 text-yellow-500"});case"tip":return e.jsx(Os,{className:"h-5 w-5 text-green-500"});case"warning":return e.jsx(Ae,{className:"h-5 w-5 text-orange-500"});default:return e.jsx(vs,{className:"h-5 w-5 text-gray-500"})}},E=f=>{switch(f){case"tip":return"border-green-200 bg-green-50";case"warning":return"border-orange-200 bg-orange-50";case"example":return"border-yellow-200 bg-yellow-50";case"interactive":return"border-purple-200 bg-purple-50";default:return"border-blue-200 bg-blue-50"}};return o.isQuizMode?o.quizSubmitted&&o.quizResults?e.jsxs(M,{className:`w-full max-w-4xl mx-auto ${r}`,children:[e.jsxs($,{className:"text-center",children:[e.jsx("div",{className:"w-20 h-20 mx-auto mb-4 rounded-full flex items-center justify-center bg-gradient-to-r from-blue-500 to-purple-600",children:o.quizResults.passed?e.jsx(ie,{className:"h-10 w-10 text-white"}):e.jsx(ze,{className:"h-10 w-10 text-white"})}),e.jsx(_,{className:"text-2xl",children:o.quizResults.passed?"Félicitations !":"Quiz non réussi"}),e.jsxs("p",{className:"text-gray-600",children:["Score obtenu : ",o.quizResults.score,"% (minimum requis : ",a.quiz.passingScore,"%)"]})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"space-y-4",children:[e.jsx("h3",{className:"text-lg font-semibold",children:"Résultats détaillés"}),o.quizResults.results.map((f,A)=>e.jsx(M,{className:`border-l-4 ${f.isCorrect?"border-green-500":"border-red-500"}`,children:e.jsxs(k,{className:"pt-4",children:[e.jsxs("div",{className:"flex items-start justify-between mb-2",children:[e.jsx("p",{className:"font-medium",children:f.question}),e.jsxs(ee,{variant:f.isCorrect?"default":"destructive",children:[f.points," pts"]})]}),e.jsxs("p",{className:"text-sm text-gray-600 mb-2",children:["Votre réponse : ",e.jsx("span",{className:"font-medium",children:f.userAnswer})]}),!f.isCorrect&&e.jsxs("p",{className:"text-sm text-green-600 mb-2",children:["Bonne réponse : ",e.jsx("span",{className:"font-medium",children:f.correctAnswer})]}),e.jsx("p",{className:"text-sm text-gray-700",children:f.explanation})]})},A))]}),o.quizResults.certificate&&e.jsx(M,{className:"border-gold bg-gradient-to-r from-yellow-50 to-orange-50",children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"text-center",children:[e.jsx(Ht,{className:"h-12 w-12 text-yellow-600 mx-auto mb-4"}),e.jsx("h3",{className:"text-xl font-bold text-yellow-800 mb-2",children:"Certificat de réussite"}),e.jsx("p",{className:"text-yellow-700 mb-4",children:o.quizResults.certificate.title}),e.jsxs("p",{className:"text-sm text-yellow-600 mb-4",children:["ID : ",o.quizResults.certificate.credentialId]}),e.jsxs(q,{className:"bg-yellow-600 hover:bg-yellow-700",children:[e.jsx(ta,{className:"h-4 w-4 mr-2"}),"Télécharger le certificat"]})]})})}),e.jsx("div",{className:"flex justify-center space-x-4",children:o.quizResults.passed?e.jsx(q,{onClick:()=>t?.(o.quizResults.certificate),children:"Terminer le module"}):e.jsxs(e.Fragment,{children:[e.jsx(q,{variant:"outline",onClick:()=>x(f=>({...f,isQuizMode:!1,currentContentIndex:0,quizSubmitted:!1,quizAnswers:{}})),children:"Revoir le contenu"}),a.quiz.allowRetake&&e.jsx(q,{onClick:()=>x(f=>({...f,quizSubmitted:!1,quizAnswers:{}})),children:"Reprendre le quiz"})]})})]})]}):e.jsxs(M,{className:`w-full max-w-4xl mx-auto ${r}`,children:[e.jsxs($,{children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs(_,{className:"text-xl",children:["Quiz - ",a.title]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[a.quiz.timeLimit&&e.jsxs(ee,{variant:"outline",children:[e.jsx(ss,{className:"h-3 w-3 mr-1"}),a.quiz.timeLimit," min"]}),e.jsx(q,{variant:"ghost",size:"sm",onClick:s,children:e.jsx(ze,{className:"h-4 w-4"})})]})]}),e.jsxs("p",{className:"text-gray-600",children:[a.quiz.questions.length," questions • Score minimum : ",a.quiz.passingScore,"%"]})]}),e.jsxs(k,{className:"space-y-6",children:[a.quiz.questions.map((f,A)=>e.jsx(Di,{question:f,questionNumber:A+1,onAnswer:L=>u(f.id,L),selectedAnswer:o.quizAnswers[f.id]},f.id)),e.jsx("div",{className:"flex justify-center pt-6",children:e.jsx(q,{onClick:b,disabled:Object.keys(o.quizAnswers).length!==a.quiz.questions.length,className:"bg-green-600 hover:bg-green-700",children:"Soumettre le quiz"})})]})]}):e.jsxs(M,{className:`w-full max-w-4xl mx-auto ${r}`,children:[e.jsxs($,{className:"border-b",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{children:[e.jsx(_,{className:"text-xl",children:a.title}),e.jsx("p",{className:"text-sm text-gray-600 mt-1",children:a.description})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsxs(ee,{variant:"outline",className:"text-xs",children:[e.jsx(ss,{className:"h-3 w-3 mr-1"}),j(o.timeSpent)]}),e.jsx(q,{variant:"ghost",size:"sm",onClick:s,children:e.jsx(ze,{className:"h-4 w-4"})})]})]}),e.jsxs("div",{className:"mt-4",children:[e.jsxs("div",{className:"flex items-center justify-between text-sm text-gray-600 mb-2",children:[e.jsx("span",{children:"Progression"}),e.jsxs("span",{children:[o.currentContentIndex+1,"/",a.content.length]})]}),e.jsx(We,{value:g,className:"h-2"})]})]}),e.jsx(k,{className:"p-6",children:p&&e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center space-x-3",children:[h(p.type),e.jsxs("div",{children:[e.jsx("h2",{className:"text-xl font-bold",children:p.title}),e.jsx(ee,{variant:"outline",className:"text-xs mt-1",children:p.type})]})]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(q,{variant:"outline",size:"sm",onClick:N,children:e.jsx(wn,{className:"h-4 w-4"})}),e.jsx(q,{variant:"outline",size:"sm",onClick:()=>x(f=>({...f,showNotes:!f.showNotes})),children:e.jsx(An,{className:"h-4 w-4"})})]})]}),e.jsx(M,{className:`border-2 ${E(p.type)}`,children:e.jsxs(k,{className:"p-6",children:[e.jsx("div",{className:"prose max-w-none",children:p.content.split(` `).map((f,A)=>e.jsx("p",{className:"mb-4 last:mb-0",children:f},A))}),p.mediaUrl&&e.jsx("div",{className:"mt-6",children:e.jsx("video",{controls:!0,className:"w-full rounded-lg",src:p.mediaUrl,children:"Votre navigateur ne supporte pas la lecture vidéo."})}),p.interactiveComponent&&e.jsx("div",{className:"mt-6 p-4 bg-white rounded-lg border-2 border-dashed border-gray-300",children:e.jsxs("p",{className:"text-center text-gray-600",children:["Composant interactif : ",p.interactiveComponent]})})]})}),o.showNotes&&e.jsx(M,{className:"border-yellow-200 bg-yellow-50",children:e.jsxs(k,{className:"pt-4",children:[e.jsx("h3",{className:"font-medium mb-3",children:"Ajouter une note"}),e.jsx(Us,{value:o.noteText,onChange:f=>x(A=>({...A,noteText:f.target.value})),placeholder:"Écrivez votre note ici...",className:"mb-3"}),e.jsxs("div",{className:"flex justify-end space-x-2",children:[e.jsx(q,{variant:"outline",size:"sm",onClick:()=>x(f=>({...f,showNotes:!1,noteText:""})),children:"Annuler"}),e.jsx(q,{size:"sm",onClick:S,children:"Sauvegarder"})]})]})}),e.jsxs("div",{className:"flex items-center justify-between pt-6 border-t",children:[e.jsxs(q,{variant:"outline",onClick:R,disabled:o.currentContentIndex===0,children:[e.jsx(Qt,{className:"h-4 w-4 mr-2"}),"Précédent"]}),e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(q,{variant:"outline",onClick:()=>x(f=>({...f,isPlaying:!f.isPlaying})),size:"sm",children:o.isPlaying?e.jsx(Wt,{className:"h-4 w-4"}):e.jsx(Ft,{className:"h-4 w-4"})}),e.jsxs("span",{className:"text-sm text-gray-500",children:[o.currentContentIndex+1," / ",a.content.length]})]}),e.jsxs(q,{onClick:w,children:[d?"Passer au quiz":"Suivant",e.jsx(Sn,{className:"h-4 w-4 ml-2"})]})]})]})})]})},Di=({question:n,questionNumber:t,onAnswer:s,selectedAnswer:r})=>{const a=i=>{s(i)};return e.jsx(M,{className:"border-l-4 border-blue-500",children:e.jsx(k,{className:"pt-4",children:e.jsxs("div",{className:"flex items-start space-x-3",children:[e.jsx(ee,{className:"mt-1",children:t}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"font-medium mb-3",children:n.question}),n.type==="multiple-choice"&&n.options&&e.jsx("div",{className:"space-y-2",children:n.options.map((i,l)=>e.jsxs("label",{className:"flex items-center space-x-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:`question-${n.id}`,value:i,checked:r===i,onChange:()=>a(i),className:"text-blue-600"}),e.jsx("span",{children:i})]},l))}),n.type==="true-false"&&e.jsxs("div",{className:"space-y-2",children:[e.jsxs("label",{className:"flex items-center space-x-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:`question-${n.id}`,value:"Vrai",checked:r==="Vrai",onChange:()=>a("Vrai"),className:"text-blue-600"}),e.jsx("span",{children:"Vrai"})]}),e.jsxs("label",{className:"flex items-center space-x-2 cursor-pointer",children:[e.jsx("input",{type:"radio",name:`question-${n.id}`,value:"Faux",checked:r==="Faux",onChange:()=>a("Faux"),className:"text-blue-600"}),e.jsx("span",{children:"Faux"})]})]}),n.type==="calculation"&&e.jsx("input",{type:"number",value:r||"",onChange:i=>a(parseFloat(i.target.value)),placeholder:"Entrez votre réponse",className:"w-full p-2 border rounded-md"}),e.jsxs("div",{className:"flex items-center justify-between mt-3 text-sm text-gray-500",children:[e.jsxs("span",{children:["Difficulté: ",n.difficulty]}),e.jsxs("span",{children:[n.points," points"]})]})]})]})})})},qi=` .senior-form-row { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; align-items: center; margin-bottom: 16px; min-height: 48px; } .senior-form-label { font-size: 18px; font-weight: 600; color: #1a365d; text-align: left; } .senior-form-input { font-size: 18px; min-height: 48px; padding: 12px 16px; border: 2px solid #e2e8f0; border-radius: 8px; background: white; } .senior-form-input:focus { border-color: #4c6ef5; box-shadow: 0 0 0 3px rgba(76, 110, 245, 0.1); outline: none; } @media (max-width: 768px) { .senior-form-row { grid-template-columns: 1fr; gap: 8px; } .senior-form-label { text-align: left; } } `,El=()=>{Yt.useEffect(()=>{const o=document.createElement("style");return o.textContent=qi,document.head.appendChild(o),()=>{document.head.contains(o)&&document.head.removeChild(o)}},[]);const[n,t]=m.useState({currentAge:30,retirementAge:65,currentSavings:5e4,annualExpenses:48e3,expectedReturn:7}),[s,r]=m.useState(null),[a,i]=m.useState(!1);m.useEffect(()=>{l()},[n]);const l=()=>{const o=n.retirementAge-n.currentAge,x=n.annualExpenses/.04,v=n.expectedReturn/100,p=n.currentSavings*Math.pow(1+v,o),d=p>=x;let g=n.currentAge,w=0;if(!d){const u=x/Math.pow(1+v,o)-n.currentSavings;if(u>0){const b=v/12,N=12;b===0?w=u/N:w=u*b/(Math.pow(1+b,N)-1),g=n.currentAge+1}}r({targetAmount:x,coastFIREAge:g,yearsToCoastFIRE:g-n.currentAge,monthlyContributionNeeded:w,canCoastFIRE:d,projectedValue:p})},c=o=>new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",minimumFractionDigits:0,maximumFractionDigits:0}).format(o);return e.jsxs("div",{className:"space-y-6",children:[e.jsx(M,{className:"border-2 border-blue-200 bg-gradient-to-r from-blue-50 to-indigo-50",children:e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center text-xl text-blue-900",children:[e.jsx(_e,{className:"h-6 w-6 mr-2"}),"Calculateur de liberté financière"]}),e.jsx("p",{className:"text-blue-700",children:"Découvrez à quel âge vous pourrez arrêter d'épargner et laisser vos placements croître jusqu'à la retraite."})]})}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-6",children:[e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center",children:[e.jsx(je,{className:"h-5 w-5 mr-2"}),"Vos informations"]})}),e.jsx(k,{children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"senior-form-row",children:[e.jsx("label",{htmlFor:"current-savings",className:"senior-form-label",children:"Épargne actuelle ($)"}),e.jsx("input",{id:"current-savings",type:"number",value:n.currentSavings,onChange:o=>t({...n,currentSavings:parseFloat(o.target.value)||0}),className:"senior-form-input",placeholder:"Ex: 50000",title:"Montant total de votre épargne actuelle"})]}),e.jsxs("div",{className:"senior-form-row",children:[e.jsx("label",{htmlFor:"annual-expenses",className:"senior-form-label",children:"Dépenses annuelles à la retraite ($)"}),e.jsx("input",{id:"annual-expenses",type:"number",value:n.annualExpenses,onChange:o=>t({...n,annualExpenses:parseFloat(o.target.value)||0}),className:"senior-form-input",placeholder:"Ex: 40000",title:"Montant annuel nécessaire pour vos dépenses à la retraite"})]}),e.jsxs("div",{className:"senior-form-row",children:[e.jsx("label",{htmlFor:"current-age",className:"senior-form-label",children:"Âge actuel"}),e.jsx("input",{id:"current-age",type:"number",value:n.currentAge,onChange:o=>t({...n,currentAge:parseInt(o.target.value)||0}),className:"senior-form-input",placeholder:"Ex: 30",title:"Votre âge actuel en années"})]}),e.jsxs("div",{className:"senior-form-row",children:[e.jsx("label",{htmlFor:"retirement-age",className:"senior-form-label",children:"Âge de retraite souhaité"}),e.jsx("input",{id:"retirement-age",type:"number",value:n.retirementAge,onChange:o=>t({...n,retirementAge:parseInt(o.target.value)||0}),className:"senior-form-input",placeholder:"Ex: 65",title:"L'âge auquel vous souhaitez prendre votre retraite"})]}),e.jsxs("div",{className:"senior-form-row",children:[e.jsx("label",{htmlFor:"expected-return",className:"senior-form-label",children:"Rendement annuel attendu (%)"}),e.jsx("input",{id:"expected-return",type:"number",step:"0.1",value:n.expectedReturn,onChange:o=>t({...n,expectedReturn:parseFloat(o.target.value)||0}),className:"senior-form-input",placeholder:"Ex: 7.0",title:"Rendement annuel moyen attendu de vos investissements"})]}),e.jsxs(q,{onClick:()=>i(!a),variant:"outline",className:"w-full",children:[e.jsx(Oe,{className:"h-4 w-4 mr-2"}),a?"Masquer":"Afficher"," l'explication"]})]})})]}),e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center",children:[e.jsx(Re,{className:"h-5 w-5 mr-2"}),"Vos résultats de liberté financière"]})}),e.jsx(k,{children:s&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"p-4 bg-blue-50 rounded-lg",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Capital cible nécessaire :"}),e.jsx("span",{className:"font-bold text-blue-600",children:c(s.targetAmount)})]}),e.jsxs("p",{className:"text-xs text-gray-600",children:["Basé sur la règle du 4% pour ",c(n.annualExpenses)," de dépenses annuelles"]})]}),s.canCoastFIRE?e.jsxs("div",{className:"p-4 bg-green-50 rounded-lg border border-green-200",children:[e.jsx("div",{className:"flex items-center mb-2",children:e.jsx(ee,{className:"bg-green-100 text-green-800",children:"🎉 Félicitations !"})}),e.jsx("p",{className:"text-sm font-medium text-green-800 mb-2",children:"Vous avez atteint la liberté financière !"}),e.jsx("p",{className:"text-xs text-green-700",children:"Vos épargnes actuelles croîtront naturellement pour atteindre votre objectif de retraite. Vous pouvez arrêter d'épargner dès maintenant !"})]}):e.jsxs("div",{className:"p-4 bg-orange-50 rounded-lg border border-orange-200",children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Âge de liberté financière estimé :"}),e.jsxs("span",{className:"font-bold text-orange-600",children:[s.coastFIREAge," ans"]})]}),e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("span",{className:"text-sm font-medium",children:"Contribution mensuelle nécessaire :"}),e.jsx("span",{className:"font-bold text-orange-600",children:c(s.monthlyContributionNeeded)})]}),e.jsx("p",{className:"text-xs text-orange-700",children:"En épargnant ce montant pendant 1 an, vous atteindrez la liberté financière."})]}),e.jsx("div",{className:"p-3 bg-green-50 rounded-lg",children:e.jsxs("div",{className:"flex items-center justify-between",children:[e.jsx("span",{className:"text-sm font-medium",children:"Valeur projetée à la retraite :"}),e.jsx("span",{className:"font-bold text-green-600",children:c(s.projectedValue)})]})})]})})]})]}),a&&e.jsxs(pe,{className:"border-blue-200 bg-blue-50",children:[e.jsx(Oe,{className:"h-4 w-4"}),e.jsx(he,{children:e.jsxs("div",{className:"space-y-3",children:[e.jsx("h4",{className:"font-semibold",children:"Qu'est-ce que la liberté financière précoce ?"}),e.jsx("p",{className:"text-sm",children:"La liberté financière précoce est le point où vous avez suffisamment d'épargnes pour que, même sans contributions supplémentaires, vos placements croissent naturellement jusqu'à atteindre votre objectif de retraite."}),e.jsx("h4",{className:"font-semibold",children:"Comment ça fonctionne ?"}),e.jsxs("ul",{className:"text-sm space-y-1 list-disc list-inside",children:[e.jsx("li",{children:"Basé sur la règle du 4% : vous pouvez retirer 4% de votre capital annuellement"}),e.jsx("li",{children:"Utilise la croissance composée de vos placements existants"}),e.jsx("li",{children:"Vous permet d'arrêter d'épargner tout en atteignant vos objectifs de retraite"}),e.jsx("li",{children:"Offre plus de flexibilité dans vos choix de carrière"})]}),e.jsx("h4",{className:"font-semibold",children:"Avantages de la liberté financière précoce :"}),e.jsxs("ul",{className:"text-sm space-y-1 list-disc list-inside",children:[e.jsx("li",{children:"Réduction du stress financier"}),e.jsx("li",{children:"Liberté de changer de carrière ou réduire ses heures"}),e.jsx("li",{children:"Possibilité de prendre des risques calculés"}),e.jsx("li",{children:"Équilibre travail-vie personnelle amélioré"})]})]})})]})]})},et=[{id:1,title:"Réduire la température de 1 °C",description:"Baisser le thermostat de 1 °C peut réduire votre facture de chauffage de 5-7 %. Utilisez des couvertures supplémentaires.",category:"habitation",difficulty:"facile",potentialSavings:"100-200$/an",timeToImplement:"Immédiat",tags:["chauffage","énergie","hiver"]},{id:2,title:"Installer un thermostat programmable",description:"Programmez des températures plus basses la nuit et quand vous êtes absent. Économies automatiques.",category:"habitation",difficulty:"moyen",potentialSavings:"150-300$/an",timeToImplement:"1-2 heures",tags:["chauffage","automatisation","énergie"]},{id:3,title:"Calfeutrer portes et fenêtres",description:"Utilisez du calfeutrage ou des coupe-froid pour éliminer les fuites d'air. Matériaux peu coûteux, grandes économies.",category:"habitation",difficulty:"facile",potentialSavings:"50-150$/an",timeToImplement:"2-3 heures",tags:["isolation","bricolage","énergie"]},{id:4,title:"Utiliser des ampoules DEL",description:"Remplacez toutes vos ampoules par des DEL. Durent 25 fois plus longtemps et consomment 75 % moins d'énergie.",category:"habitation",difficulty:"facile",potentialSavings:"75-125$/an",timeToImplement:"30 minutes",tags:["électricité","éclairage","DEL"]},{id:5,title:"Débrancher les appareils en veille",description:"Les appareils en veille consomment jusqu'à 10% de votre électricité. Utilisez des barres d'alimentation.",category:"habitation",difficulty:"facile",potentialSavings:"50-100$/an",timeToImplement:"15 minutes",tags:["électricité","veille","habitudes"]},{id:6,title:"Planifier vos déplacements",description:"Regroupez vos courses et rendez-vous pour réduire le nombre de sorties. Économisez essence et temps.",category:"transport",difficulty:"facile",potentialSavings:"200-400$/an",timeToImplement:"Planification hebdomadaire",tags:["essence","planification","efficacité"]},{id:7,title:"Maintenir la pression des pneus",description:"Des pneus bien gonflés réduisent la consommation d'essence de 3-4%. Vérifiez mensuellement.",category:"transport",difficulty:"facile",potentialSavings:"100-200$/an",timeToImplement:"10 minutes/mois",tags:["essence","entretien","pneus"]},{id:8,title:"Utiliser le transport en commun",description:"Remplacez 2-3 trajets auto par semaine par le transport en commun. Économies substantielles.",category:"transport",difficulty:"moyen",potentialSavings:"500-1000$/an",timeToImplement:"Changement d'habitude",tags:["transport public","essence","stationnement"]},{id:9,title:"Planifier les repas hebdomadaires",description:"Établissez un menu pour la semaine et faites une liste d'épicerie précise. Évitez les achats impulsifs.",category:"alimentation",difficulty:"moyen",potentialSavings:"100-200$/mois",timeToImplement:"30 min/semaine",tags:["planification","épicerie","gaspillage"]},{id:10,title:"Cuisiner en grandes quantités",description:"Préparez de gros lots et congelez les portions. Économisez temps et argent sur les repas préparés.",category:"alimentation",difficulty:"moyen",potentialSavings:"150-300$/mois",timeToImplement:"Dimanche après-midi",tags:["cuisine","congélation","batch cooking"]},{id:11,title:"Acheter les marques maison",description:"Les produits de marque maison coûtent 20-40% moins cher pour une qualité similaire.",category:"alimentation",difficulty:"facile",potentialSavings:"50-100$/mois",timeToImplement:"Immédiat",tags:["épicerie","marque maison","qualité-prix"]},{id:12,title:"Utiliser les circulaires et coupons",description:"Planifiez vos achats selon les spéciaux. Utilisez les applications de coupons numériques.",category:"alimentation",difficulty:"moyen",potentialSavings:"75-150$/mois",timeToImplement:"15 min/semaine",tags:["spéciaux","coupons","planification"]},{id:13,title:"Profiter des activités gratuites",description:"Explorez les parcs, bibliothèques, musées gratuits, festivals communautaires. Divertissement sans coût.",category:"loisirs",difficulty:"facile",potentialSavings:"100-300$/mois",timeToImplement:"Recherche locale",tags:["gratuit","communauté","culture"]},{id:14,title:"Partager les abonnements",description:"Partagez Netflix, Spotify, Amazon Prime avec famille/amis. Divisez les coûts légalement.",category:"loisirs",difficulty:"facile",potentialSavings:"200-400$/an",timeToImplement:"30 minutes",tags:["streaming","partage","abonnements"]},{id:15,title:"Négocier vos forfaits télécoms",description:"Appelez annuellement pour négocier. Mentionnez la concurrence. Obtenez souvent des rabais.",category:"technologie",difficulty:"moyen",potentialSavings:"200-500$/an",timeToImplement:"1 heure/an",tags:["négociation","télécom","forfait"]},{id:16,title:"Acheter des appareils reconditionnés",description:"Téléphones, ordinateurs reconditionnés offrent 30-50% d'économies avec garantie.",category:"technologie",difficulty:"moyen",potentialSavings:"300-800$/achat",timeToImplement:"Recherche avant achat",tags:["reconditionné","électronique","garantie"]},{id:17,title:"Acheter hors saison",description:"Achetez vêtements d'hiver en été et vice-versa. Rabais de 50-70% sur les collections précédentes.",category:"vetements",difficulty:"moyen",potentialSavings:"200-500$/an",timeToImplement:"Planification saisonnière",tags:["saison","rabais","planification"]},{id:18,title:"Entretenir et réparer",description:"Apprenez à coudre boutons, réparer fermetures. Prolongez la vie de vos vêtements de qualité.",category:"vetements",difficulty:"moyen",potentialSavings:"100-300$/an",timeToImplement:"Apprentissage graduel",tags:["réparation","entretien","durabilité"]},{id:19,title:"Utiliser les médicaments génériques",description:"Demandez toujours la version générique. Même efficacité, 50-80% moins cher.",category:"sante",difficulty:"facile",potentialSavings:"100-400$/an",timeToImplement:"À chaque prescription",tags:["médicaments","générique","pharmacie"]},{id:20,title:"Prévenir plutôt que guérir",description:"Exercice régulier, alimentation saine, sommeil suffisant réduisent les coûts médicaux futurs.",category:"sante",difficulty:"moyen",potentialSavings:"500-2000$/an",timeToImplement:"Mode de vie",tags:["prévention","exercice","alimentation"]},{id:21,title:"Utiliser la bibliothèque publique",description:"Livres, films, cours en ligne, espaces de travail gratuits. Ressource sous-utilisée fantastique.",category:"education",difficulty:"facile",potentialSavings:"200-500$/an",timeToImplement:"Visite d'exploration",tags:["bibliothèque","gratuit","apprentissage"]},{id:22,title:"Faire des cadeaux maison",description:"Cuisine, artisanat, services personnalisés. Plus significatifs et économiques que les achats.",category:"cadeaux",difficulty:"moyen",potentialSavings:"300-800$/an",timeToImplement:"Planification créative",tags:["fait maison","créativité","personnel"]},{id:23,title:"Automatiser l'épargne",description:"Virement automatique vers épargne dès la paie reçue. 'Payez-vous en premier' - principe fondamental.",category:"general",difficulty:"facile",potentialSavings:"Variable selon %",timeToImplement:"Configuration unique",tags:["épargne","automatisation","discipline"]},{id:24,title:"Réviser les assurances annuellement",description:"Comparez les primes, ajustez les couvertures selon vos besoins actuels. Économies substantielles possibles.",category:"general",difficulty:"moyen",potentialSavings:"200-800$/an",timeToImplement:"2-3 heures/an",tags:["assurance","comparaison","révision"]},{id:25,title:"Éliminer les frais bancaires",description:"Choisissez un compte sans frais, maintenez les soldes minimums, utilisez les guichets de votre banque.",category:"general",difficulty:"facile",potentialSavings:"100-300$/an",timeToImplement:"Changement de compte",tags:["banque","frais","compte"]}],Li={habitation:ks,transport:Xt,alimentation:Mn,loisirs:fs,technologie:Pn,vetements:In,sante:fs,education:Jt,cadeaux:Ts,general:Te},_t={habitation:"Habitation",transport:"Transport",alimentation:"Alimentation",loisirs:"Loisirs",technologie:"Technologie",vetements:"Vêtements",sante:"Santé",education:"Éducation",cadeaux:"Cadeaux",general:"Général"},zi={facile:"bg-green-100 text-green-800",moyen:"bg-yellow-100 text-yellow-800",avance:"bg-red-100 text-red-800"},Il=()=>{const[n,t]=m.useState(""),[s,r]=m.useState("all"),[a,i]=m.useState("all"),[l,c]=m.useState([]),[o,x]=m.useState([]),[v,p]=m.useState(et);m.useEffect(()=>{let u=et;n&&(u=u.filter(b=>b.title.toLowerCase().includes(n.toLowerCase())||b.description.toLowerCase().includes(n.toLowerCase())||b.tags.some(N=>N.toLowerCase().includes(n.toLowerCase())))),s!=="all"&&(u=u.filter(b=>b.category===s)),a!=="all"&&(u=u.filter(b=>b.difficulty===a)),p(u)},[n,s,a]);const d=u=>{c(b=>b.includes(u)?b.filter(N=>N!==u):[...b,u])},g=u=>{x(b=>b.includes(u)?b.filter(N=>N!==u):[...b,u])},w=()=>et.filter(b=>o.includes(b.id)).length*150,R=Object.keys(_t);return e.jsxs("div",{className:"space-y-6",children:[e.jsx(M,{className:"border-2 border-green-200 bg-gradient-to-r from-green-50 to-emerald-50",children:e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center text-xl text-green-900",children:[e.jsx(Rn,{className:"h-6 w-6 mr-2"}),"99 trucs pour économiser sans trop se priver"]}),e.jsx(xe,{className:"text-green-700",children:"Guide pratique basé sur l'expertise Retraite101 pour optimiser vos dépenses dans tous les domaines de la vie."})]})}),o.length>0&&e.jsx(M,{className:"border-blue-200 bg-blue-50",children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 text-center",children:[e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-blue-600",children:o.length}),e.jsx("div",{className:"text-sm text-blue-700",children:"Trucs implémentés"})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"text-2xl font-bold text-green-600",children:[w(),"$"]}),e.jsx("div",{className:"text-sm text-green-700",children:"Économies estimées/an"})]}),e.jsxs("div",{children:[e.jsx("div",{className:"text-2xl font-bold text-purple-600",children:l.length}),e.jsx("div",{className:"text-sm text-purple-700",children:"Favoris sauvegardés"})]})]})})}),e.jsx(M,{children:e.jsx(k,{className:"pt-6",children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"relative",children:[e.jsx(En,{className:"absolute left-3 top-3 h-4 w-4 text-gray-400"}),e.jsx(Y,{placeholder:"Rechercher un truc d'économie...",value:n,onChange:u=>t(u.target.value),className:"pl-10"})]}),e.jsxs("div",{className:"flex flex-wrap gap-2",children:[e.jsxs("select",{value:s,onChange:u=>r(u.target.value),className:"px-3 py-2 border rounded-md",title:"Filtrer par catégorie","aria-label":"Filtrer par catégorie",children:[e.jsx("option",{value:"all",children:"Toutes catégories"}),R.map(u=>e.jsx("option",{value:u,children:_t[u]},u))]}),e.jsxs("select",{value:a,onChange:u=>i(u.target.value),className:"px-3 py-2 border rounded-md",title:"Filtrer par niveau de difficulté","aria-label":"Filtrer par niveau de difficulté",children:[e.jsx("option",{value:"all",children:"Toutes difficultés"}),e.jsx("option",{value:"facile",children:"Facile"}),e.jsx("option",{value:"moyen",children:"Moyen"}),e.jsx("option",{value:"avance",children:"Avancé"})]})]})]})})}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4",children:v.map(u=>{const b=Li[u.category],N=l.includes(u.id),S=o.includes(u.id);return e.jsxs(M,{className:`relative ${S?"border-green-300 bg-green-50":""}`,children:[e.jsxs($,{className:"pb-3",children:[e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex items-center space-x-2",children:[e.jsx(b,{className:"h-5 w-5 text-gray-600"}),e.jsx(ee,{className:zi[u.difficulty],children:u.difficulty})]}),e.jsxs("div",{className:"flex space-x-1",children:[e.jsx(q,{variant:"ghost",size:"sm",onClick:()=>d(u.id),className:N?"text-yellow-500":"text-gray-400",children:e.jsx(Tn,{className:"h-4 w-4",fill:N?"currentColor":"none"})}),e.jsx(q,{variant:"ghost",size:"sm",onClick:()=>g(u.id),className:S?"text-green-600":"text-gray-400",children:e.jsx(ie,{className:"h-4 w-4",fill:S?"currentColor":"none"})})]})]}),e.jsx(_,{className:"text-lg",children:u.title})]}),e.jsxs(k,{children:[e.jsx("p",{className:"text-sm text-gray-600 mb-3",children:u.description}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between text-xs",children:[e.jsx("span",{className:"font-medium",children:"Économies:"}),e.jsx("span",{className:"text-green-600 font-bold",children:u.potentialSavings})]}),e.jsxs("div",{className:"flex justify-between text-xs",children:[e.jsx("span",{className:"font-medium",children:"Temps:"}),e.jsx("span",{className:"text-blue-600",children:u.timeToImplement})]})]}),e.jsx("div",{className:"flex flex-wrap gap-1 mt-3",children:u.tags.map((j,h)=>e.jsx(ee,{variant:"outline",className:"text-xs",children:j},h))})]})]},u.id)})}),v.length===0&&e.jsx(M,{children:e.jsxs(k,{className:"text-center py-8",children:[e.jsx("p",{className:"text-gray-500",children:"Aucun truc ne correspond à vos critères de recherche."}),e.jsx(q,{variant:"outline",onClick:()=>{t(""),r("all"),i("all")},className:"mt-4",children:"Réinitialiser les filtres"})]})}),e.jsxs(M,{className:"border-yellow-200 bg-yellow-50",children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center text-yellow-900",children:[e.jsx(Os,{className:"h-5 w-5 mr-2"}),"Conseils d'utilisation"]})}),e.jsx(k,{children:e.jsxs("ul",{className:"space-y-2 text-sm text-yellow-800",children:[e.jsx("li",{children:`• Commencez par les trucs "faciles" pour créer de l'élan`}),e.jsx("li",{children:"• Implémentez 2-3 trucs par mois pour éviter la surcharge"}),e.jsx("li",{children:"• Utilisez les favoris pour planifier vos prochaines actions"}),e.jsx("li",{children:'• Marquez comme "implémenté" pour suivre vos progrès'}),e.jsx("li",{children:"• Concentrez-vous sur vos 3 postes de dépenses les plus importants"}),e.jsx("li",{children:"• Révisez régulièrement pour maintenir vos nouvelles habitudes"})]})})]})]})},Ze=n=>new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD",minimumFractionDigits:0,maximumFractionDigits:0}).format(n);function Pl({data:n,onUpdate:t,language:s="fr"}){const[r,a]=m.useState("identification"),[i,l]=m.useState({certificatCompetence:"",dateEntreeIndustrie:"",secteursActivite:[],saisieManuelle:!0,heuresTravaileesAvant2005:"",heuresAjusteesAvant2005:"",heuresTravaileesDepuis2005:"",valeurCompteGeneral:"",valeurCompteComplementaire:"",continuerTravaillerConstruction:!0,heuresAnnuellesEstimees:"",ageRetraiteSouhaite:"",typeRetraitePreferee:"normale",optionRentePreferee:"majoree-reduite"}),[c,o]=m.useState(null),[x,v]=m.useState([]),[p,d]=m.useState(!1),[g,w]=m.useState([]),u={fr:{title:"Régime de retraite CCQ",subtitle:"Commission de la Construction du Québec",identification:"Identification",historique:"Données historiques",projections:"Projections",resultats:"Résultats",scenarios:"Scénarios",certificat:"Certificat de compétence CCQ",dateEntree:"Date d'entrée dans l'industrie",secteurs:"Secteurs d'activité",secteurResidentiel:"Résidentiel",secteurInstitutionnel:"Institutionnel-commercial",secteurIndustriel:"Industriel",secteurGenieCivil:"Génie civil et voirie",heuresAvant2005:"Heures travaillées avant 2005",heuresAjustees:"Heures ajustées avant 2005",heuresDepuis2005:"Heures travaillées depuis 2005",valeurGeneral:"Valeur compte général",valeurComplementaire:"Valeur compte complémentaire",continuerTravail:"Continuer à travailler dans la construction",heuresAnnuelles:"Heures annuelles estimées",ageRetraite:"Âge de retraite souhaité",typeRetraite:"Type de retraite préféré",optionRente:"Option de rente préférée",retraiteNormale:"Retraite normale (65 ans)",retraiteAnticipee:"Retraite anticipée (55 ans)",retraiteInvalidite:"Retraite pour invalidité",retraitePartielle:"Retraite partielle",renteNivelee:"Rente nivelée",renteMajoreeReduite:"Rente majorée-réduite",calculer:"Calculer ma pension CCQ",compteGeneral:"Compte Général (pré-2005)",compteComplementaire:"Compte Complémentaire (post-2005)",renteAnnuelle:"Rente annuelle totale",renteMensuelle:"Rente mensuelle totale",calculEnCours:"Calcul en cours...",erreurCalcul:"Erreur lors du calcul",avertissementLegal:"Les calculs présentés sont des estimations basées sur les informations fournies et la réglementation en vigueur. Pour obtenir des montants officiels et définitifs, communiquez directement avec la CCQ au 1-888-842-8282. Ce calculateur ne constitue pas un conseil financier."},en:{title:"CCQ Retirement Plan",subtitle:"Quebec Construction Commission",identification:"Identification",historique:"Historical Data",projections:"Projections",resultats:"Results",scenarios:"Scenarios",certificat:"CCQ Competency Certificate",dateEntree:"Industry entry date",secteurs:"Activity sectors",secteurResidentiel:"Residential",secteurInstitutionnel:"Institutional-commercial",secteurIndustriel:"Industrial",secteurGenieCivil:"Civil engineering and roadwork",heuresAvant2005:"Hours worked before 2005",heuresAjustees:"Adjusted hours before 2005",heuresDepuis2005:"Hours worked since 2005",valeurGeneral:"General account value",valeurComplementaire:"Complementary account value",continuerTravail:"Continue working in construction",heuresAnnuelles:"Estimated annual hours",ageRetraite:"Desired retirement age",typeRetraite:"Preferred retirement type",optionRente:"Preferred pension option",retraiteNormale:"Normal retirement (65 years)",retraiteAnticipee:"Early retirement (55 years)",retraiteInvalidite:"Disability retirement",retraitePartielle:"Partial retirement",renteNivelee:"Level pension",renteMajoreeReduite:"Enhanced-reduced pension",calculer:"Calculate my CCQ pension",compteGeneral:"General Account (pre-2005)",compteComplementaire:"Complementary Account (post-2005)",renteAnnuelle:"Total annual pension",renteMensuelle:"Total monthly pension",calculEnCours:"Calculating...",erreurCalcul:"Calculation error",avertissementLegal:"The calculations presented are estimates based on the information provided and current regulations. For official and definitive amounts, contact CCQ directly at 1-888-842-8282. This calculator does not constitute financial advice."}}[s],b=(h,E)=>{l(f=>({...f,[h]:E}))},N=h=>{l(E=>({...E,secteursActivite:E.secteursActivite.includes(h)?E.secteursActivite.filter(f=>f!==h):[...E.secteursActivite,h]}))},S=()=>({certificatCompetence:i.certificatCompetence,dateEntreeIndustrie:new Date(i.dateEntreeIndustrie),statutTravailleur:"actif",secteursActivite:i.secteursActivite,secteurPrincipal:i.secteursActivite[0]||"residentiel",heuresTravaileesAvant2005:parseFloat(i.heuresTravaileesAvant2005)||0,heuresAjusteesAvant2005:parseFloat(i.heuresAjusteesAvant2005)||0,heuresTravaileesDepuis2005:parseFloat(i.heuresTravaileesDepuis2005)||0,heuresTotales:(parseFloat(i.heuresTravaileesAvant2005)||0)+(parseFloat(i.heuresTravaileesDepuis2005)||0),valeurCompteGeneral:parseFloat(i.valeurCompteGeneral)||0,valeurCompteComplementaire:parseFloat(i.valeurCompteComplementaire)||0,cotisationsPatronales:0,cotisationsSalariales:0,rendements:0,heuresAnnuellesEstimees:parseFloat(i.heuresAnnuellesEstimees)||1800,ageRetraiteSouhaite:parseInt(i.ageRetraiteSouhaite)||65,continuerTravaillerConstruction:i.continuerTravaillerConstruction,typeRetraite:i.typeRetraitePreferee,optionRente:i.optionRentePreferee,prestationsDecesActuelles:0}),j=async()=>{d(!0),w([]);try{const h=S(),E=Ws.validateCCQData(h);if(!E.isValid){w(E.errors);return}const f=Ws.calculateCCQPension(h);o(f);const A=Ws.generateProjectionScenarios(h);v(A),t({ccqData:h,ccqResult:f,ccqScenarios:A}),a("resultats")}catch(h){w([h.message||u.erreurCalcul])}finally{d(!1)}};return m.useEffect(()=>{if(n?.ccqData){const h=n.ccqData;l({certificatCompetence:h.certificatCompetence||"",dateEntreeIndustrie:h.dateEntreeIndustrie?.toISOString().split("T")[0]||"",secteursActivite:h.secteursActivite||[],saisieManuelle:!0,heuresTravaileesAvant2005:h.heuresTravaileesAvant2005?.toString()||"",heuresAjusteesAvant2005:h.heuresAjusteesAvant2005?.toString()||"",heuresTravaileesDepuis2005:h.heuresTravaileesDepuis2005?.toString()||"",valeurCompteGeneral:h.valeurCompteGeneral?.toString()||"",valeurCompteComplementaire:h.valeurCompteComplementaire?.toString()||"",continuerTravaillerConstruction:h.continuerTravaillerConstruction??!0,heuresAnnuellesEstimees:h.heuresAnnuellesEstimees?.toString()||"",ageRetraiteSouhaite:h.ageRetraiteSouhaite?.toString()||"",typeRetraitePreferee:h.typeRetraite||"normale",optionRentePreferee:h.optionRente||"majoree-reduite"})}n?.ccqResult&&o(n.ccqResult),n?.ccqScenarios&&v(n.ccqScenarios)},[n]),e.jsxs("div",{className:"w-full max-w-6xl mx-auto p-6 space-y-6",children:[e.jsx(M,{className:"bg-gradient-to-r from-orange-50 to-yellow-50 border-orange-200",children:e.jsxs($,{className:"text-center",children:[e.jsxs("div",{className:"flex items-center justify-center gap-3 mb-4",children:[e.jsx(kn,{className:"w-8 h-8 text-orange-600"}),e.jsxs("div",{children:[e.jsx(_,{className:"text-2xl font-bold text-orange-800",children:u.title}),e.jsx(xe,{className:"text-orange-600 font-medium",children:u.subtitle})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-6",children:[e.jsxs("div",{className:"bg-white/70 rounded-lg p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-orange-700",children:"202 000"}),e.jsx("div",{className:"text-sm text-orange-600",children:"Participants actifs"})]}),e.jsxs("div",{className:"bg-white/70 rounded-lg p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-orange-700",children:"176 000"}),e.jsx("div",{className:"text-sm text-orange-600",children:"Participants inactifs"})]}),e.jsxs("div",{className:"bg-white/70 rounded-lg p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-orange-700",children:"104 000"}),e.jsx("div",{className:"text-sm text-orange-600",children:"Retraités"})]})]})]})}),g.length>0&&e.jsxs(pe,{className:"border-red-200 bg-red-50",children:[e.jsx(Ae,{className:"w-4 h-4 text-red-600"}),e.jsx(he,{className:"text-red-800",children:e.jsx("ul",{className:"list-disc list-inside space-y-1",children:g.map((h,E)=>e.jsx("li",{children:h},E))})})]}),e.jsxs(Bs,{value:r,onValueChange:a,className:"w-full",children:[e.jsxs(ws,{className:"grid w-full grid-cols-5",children:[e.jsxs(be,{value:"identification",className:"flex items-center gap-2",children:[e.jsx(zs,{className:"w-4 h-4"}),u.identification]}),e.jsxs(be,{value:"historique",className:"flex items-center gap-2",children:[e.jsx(vs,{className:"w-4 h-4"}),u.historique]}),e.jsxs(be,{value:"projections",className:"flex items-center gap-2",children:[e.jsx(Re,{className:"w-4 h-4"}),u.projections]}),e.jsxs(be,{value:"resultats",className:"flex items-center gap-2",children:[e.jsx(je,{className:"w-4 h-4"}),u.resultats]}),e.jsxs(be,{value:"scenarios",className:"flex items-center gap-2",children:[e.jsx(_e,{className:"w-4 h-4"}),u.scenarios]})]}),e.jsx(ye,{value:"identification",className:"space-y-6",children:e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(zs,{className:"w-5 h-5"}),u.identification]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"certificat",children:u.certificat}),e.jsx(Y,{id:"certificat",value:i.certificatCompetence,onChange:h=>b("certificatCompetence",h.target.value),placeholder:"Ex: 123456789"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"dateEntree",children:u.dateEntree}),e.jsx(Y,{id:"dateEntree",type:"date",value:i.dateEntreeIndustrie,onChange:h=>b("dateEntreeIndustrie",h.target.value)})]})]}),e.jsxs("div",{children:[e.jsx(D,{children:u.secteurs}),e.jsx("div",{className:"grid grid-cols-2 gap-2 mt-2",children:[{key:"residentiel",label:u.secteurResidentiel},{key:"institutionnel-commercial",label:u.secteurInstitutionnel},{key:"industriel",label:u.secteurIndustriel},{key:"genie-civil-voirie",label:u.secteurGenieCivil}].map(h=>e.jsx(q,{variant:i.secteursActivite.includes(h.key)?"default":"outline",onClick:()=>N(h.key),className:"justify-start",children:h.label},h.key))})]})]})]})}),e.jsx(ye,{value:"historique",className:"space-y-6",children:e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(vs,{className:"w-5 h-5"}),u.historique]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"heuresAvant2005",children:u.heuresAvant2005}),e.jsx(Y,{id:"heuresAvant2005",type:"number",value:i.heuresTravaileesAvant2005,onChange:h=>b("heuresTravaileesAvant2005",h.target.value),placeholder:"Ex: 15000"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"heuresAjustees",children:u.heuresAjustees}),e.jsx(Y,{id:"heuresAjustees",type:"number",value:i.heuresAjusteesAvant2005,onChange:h=>b("heuresAjusteesAvant2005",h.target.value),placeholder:"Ex: 14500"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"heuresDepuis2005",children:u.heuresDepuis2005}),e.jsx(Y,{id:"heuresDepuis2005",type:"number",value:i.heuresTravaileesDepuis2005,onChange:h=>b("heuresTravaileesDepuis2005",h.target.value),placeholder:"Ex: 25000"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsxs(D,{htmlFor:"valeurGeneral",children:[u.valeurGeneral," ($)"]}),e.jsx(Y,{id:"valeurGeneral",type:"number",value:i.valeurCompteGeneral,onChange:h=>b("valeurCompteGeneral",h.target.value),placeholder:"Ex: 125000"})]}),e.jsxs("div",{children:[e.jsxs(D,{htmlFor:"valeurComplementaire",children:[u.valeurComplementaire," ($)"]}),e.jsx(Y,{id:"valeurComplementaire",type:"number",value:i.valeurCompteComplementaire,onChange:h=>b("valeurCompteComplementaire",h.target.value),placeholder:"Ex: 85000"})]})]})]})]})}),e.jsx(ye,{value:"projections",className:"space-y-6",children:e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(Re,{className:"w-5 h-5"}),u.projections]})}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"heuresAnnuelles",children:u.heuresAnnuelles}),e.jsx(Y,{id:"heuresAnnuelles",type:"number",value:i.heuresAnnuellesEstimees,onChange:h=>b("heuresAnnuellesEstimees",h.target.value),placeholder:"Ex: 1800"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"ageRetraite",children:u.ageRetraite}),e.jsx(Y,{id:"ageRetraite",type:"number",min:"50",max:"71",value:i.ageRetraiteSouhaite,onChange:h=>b("ageRetraiteSouhaite",h.target.value),placeholder:"Ex: 65"})]}),e.jsxs("div",{children:[e.jsx(D,{children:u.continuerTravail}),e.jsxs("div",{className:"flex gap-2 mt-2",children:[e.jsx(q,{variant:i.continuerTravaillerConstruction?"default":"outline",onClick:()=>b("continuerTravaillerConstruction",!0),children:"Oui"}),e.jsx(q,{variant:i.continuerTravaillerConstruction?"outline":"default",onClick:()=>b("continuerTravaillerConstruction",!1),children:"Non"})]})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:u.typeRetraite}),e.jsx("div",{className:"space-y-2 mt-2",children:[{key:"normale",label:u.retraiteNormale},{key:"anticipee-avec-reduction",label:u.retraiteAnticipee},{key:"invalidite",label:u.retraiteInvalidite},{key:"partielle",label:u.retraitePartielle}].map(h=>e.jsx(q,{variant:i.typeRetraitePreferee===h.key?"default":"outline",onClick:()=>b("typeRetraitePreferee",h.key),className:"w-full justify-start",children:h.label},h.key))})]}),e.jsxs("div",{children:[e.jsx(D,{children:u.optionRente}),e.jsx("div",{className:"space-y-2 mt-2",children:[{key:"nivelee",label:u.renteNivelee},{key:"majoree-reduite",label:u.renteMajoreeReduite}].map(h=>e.jsx(q,{variant:i.optionRentePreferee===h.key?"default":"outline",onClick:()=>b("optionRentePreferee",h.key),className:"w-full justify-start",children:h.label},h.key))})]})]}),e.jsx("div",{className:"pt-4",children:e.jsx(q,{onClick:j,disabled:p,className:"w-full bg-orange-600 hover:bg-orange-700",size:"lg",children:p?e.jsxs(e.Fragment,{children:[e.jsx(ss,{className:"w-4 h-4 mr-2 animate-spin"}),u.calculEnCours]}):e.jsxs(e.Fragment,{children:[e.jsx(je,{className:"w-4 h-4 mr-2"}),u.calculer]})})})]})]})}),e.jsx(ye,{value:"resultats",className:"space-y-6",children:c?e.jsxs(e.Fragment,{children:[e.jsxs(M,{className:"bg-gradient-to-r from-green-50 to-blue-50 border-green-200",children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2 text-green-800",children:[e.jsx(Te,{className:"w-5 h-5"}),"Vue d'ensemble de votre pension CCQ"]})}),e.jsx(k,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-green-700",children:Ze(c.renteAnnuelleTotale)}),e.jsx("div",{className:"text-sm text-green-600",children:u.renteAnnuelle})]}),e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-3xl font-bold text-blue-700",children:Ze(c.renteMensuelleTotale)}),e.jsx("div",{className:"text-sm text-blue-600",children:u.renteMensuelle})]}),e.jsxs("div",{className:"text-center",children:[e.jsxs("div",{className:"text-3xl font-bold text-purple-700",children:[c.ageOptimalRetraite," ans"]}),e.jsx("div",{className:"text-sm text-purple-600",children:"Âge optimal"})]})]})})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs(M,{children:[e.jsx($,{children:e.jsx(_,{className:"text-orange-700",children:u.compteGeneral})}),e.jsx(k,{children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{children:"Heures ajustées:"}),e.jsx("span",{className:"font-semibold",children:c.compteGeneral.heuresAjustees.toLocaleString()})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{children:"Rente annuelle:"}),e.jsx("span",{className:"font-semibold text-orange-700",children:Ze(c.compteGeneral.renteAnnuelle)})]})]})})]}),e.jsxs(M,{children:[e.jsx($,{children:e.jsx(_,{className:"text-blue-700",children:u.compteComplementaire})}),e.jsx(k,{children:e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{children:"Valeur accumulée:"}),e.jsx("span",{className:"font-semibold",children:Ze(c.compteComplementaire.valeurAccumulee)})]}),e.jsxs("div",{className:"flex justify-between",children:[e.jsx("span",{children:"Rente annuelle:"}),e.jsx("span",{className:"font-semibold text-blue-700",children:Ze(c.compteComplementaire.renteAnnuelle)})]})]})})]})]}),e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(ie,{className:"w-5 h-5 text-green-600"}),"Admissibilité"]})}),e.jsx(k,{children:e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{variant:c.admissibilite.retraiteNormale.eligible?"default":"secondary",children:c.admissibilite.retraiteNormale.eligible?"✓":"✗"}),e.jsx("span",{children:"Retraite normale (65 ans)"})]}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(ee,{variant:c.admissibilite.retraiteAnticipeeAvecReduction.eligible?"default":"secondary",children:c.admissibilite.retraiteAnticipeeAvecReduction.eligible?"✓":"✗"}),e.jsx("span",{children:"Retraite anticipée (55 ans)"})]})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{children:[e.jsx("span",{className:"font-semibold",children:"Statut actuel:"}),e.jsx("p",{className:"text-sm text-gray-600",children:c.admissibilite.statutActuel})]}),e.jsxs("div",{children:[e.jsx("span",{className:"font-semibold",children:"Prochaine étape:"}),e.jsx("p",{className:"text-sm text-gray-600",children:c.admissibilite.prochaineMilestone})]})]})]})})]}),c.optimisationSuggestions.length>0&&e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(Os,{className:"w-5 h-5 text-yellow-600"}),"Recommandations"]})}),e.jsx(k,{children:e.jsx("div",{className:"space-y-4",children:c.optimisationSuggestions.map((h,E)=>e.jsxs("div",{className:"border rounded-lg p-4",children:[e.jsxs("div",{className:"flex items-center gap-2 mb-2",children:[e.jsx(ee,{variant:h.priorite==="haute"?"destructive":h.priorite==="moyenne"?"default":"secondary",children:h.priorite}),e.jsx("h4",{className:"font-semibold",children:h.strategie})]}),e.jsx("p",{className:"text-sm text-gray-600 mb-2",children:h.description}),e.jsx("div",{className:"text-sm",children:e.jsxs("span",{className:"font-semibold text-green-600",children:["Impact potentiel: ",Ze(h.impact)]})})]},E))})})]})]}):e.jsx(M,{children:e.jsxs(k,{className:"text-center py-8",children:[e.jsx(je,{className:"w-12 h-12 text-gray-400 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600",children:'Complétez les informations et cliquez sur "Calculer" pour voir vos résultats.'})]})})}),e.jsx(ye,{value:"scenarios",className:"space-y-6",children:x.length>0?e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-6",children:x.map((h,E)=>e.jsxs(M,{className:"border-2",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg",children:h.nom})}),e.jsx(k,{children:e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"text-center",children:[e.jsx("div",{className:"text-2xl font-bold text-blue-600",children:Ze(h.resultat.renteMensuelleTotale)}),e.jsx("div",{className:"text-sm text-gray-600",children:"par mois"})]}),e.jsxs("div",{className:"space-y-2",children:[e.jsxs("div",{className:"text-sm",children:[e.jsx("span",{className:"font-semibold",children:"Âge:"})," ",h.ageRetraite," ans"]}),e.jsxs("div",{className:"text-sm",children:[e.jsx("span",{className:"font-semibold",children:"Type:"})," ",h.typeRetraite]})]}),e.jsxs("div",{children:[e.jsx("h5",{className:"font-semibold text-green-600 text-sm mb-1",children:"Avantages:"}),e.jsx("ul",{className:"text-xs text-gray-600 space-y-1",children:h.avantages.map((f,A)=>e.jsxs("li",{children:["• ",f]},A))})]}),e.jsxs("div",{children:[e.jsx("h5",{className:"font-semibold text-red-600 text-sm mb-1",children:"Risques:"}),e.jsx("ul",{className:"text-xs text-gray-600 space-y-1",children:h.risques.map((f,A)=>e.jsxs("li",{children:["• ",f]},A))})]})]})})]},E))}):e.jsx(M,{children:e.jsxs(k,{className:"text-center py-8",children:[e.jsx(_e,{className:"w-12 h-12 text-gray-400 mx-auto mb-4"}),e.jsx("p",{className:"text-gray-600",children:"Les scénarios apparaîtront après le calcul de votre pension."})]})})})]}),e.jsxs(pe,{className:"border-yellow-200 bg-yellow-50",children:[e.jsx(Ae,{className:"w-4 h-4 text-yellow-600"}),e.jsx(he,{className:"text-yellow-800 text-sm",children:u.avertissementLegal})]})]})}let Bt={};try{const n=require("@/services/SRGService").default;Bt.analyzeGIS=s=>n?.calculateSRGAnalysis?.(s);const t=require("@/services/RREGOPService").default;Bt.analyzeRRQ=s=>t?.analyzeRRQ?.(s)}catch{}const Ue={suggestWithdrawalOrder(n,t){return Mt.suggestWithdrawalOrder(n,t)},buildMonthlySchedule(n,t,s){return Mt.buildMonthlySchedule(n,t,s)},async generateTaxOptimizationSummary(n){return Yn?.generateSummary?.(n)},greedyOptimize(n){return Un.optimize(n)},simulateYears(n,t,s,r){return Gn(n,t,s,r)},computeTaxYear(n){return Bn(n)},evaluateRobustness(n,t){return _n?.(n,t)}},Oi=1,Vi=1e6;let st=0;function $i(){return st=(st+1)%Number.MAX_SAFE_INTEGER,st.toString()}const tt=new Map,Gt=n=>{if(tt.has(n))return;const t=setTimeout(()=>{tt.delete(n),hs({type:"REMOVE_TOAST",toastId:n})},Vi);tt.set(n,t)},_i=(n,t)=>{switch(t.type){case"ADD_TOAST":return{...n,toasts:[t.toast,...n.toasts].slice(0,Oi)};case"UPDATE_TOAST":return{...n,toasts:n.toasts.map(s=>s.id===t.toast.id?{...s,...t.toast}:s)};case"DISMISS_TOAST":{const{toastId:s}=t;return s?Gt(s):n.toasts.forEach(r=>{Gt(r.id)}),{...n,toasts:n.toasts.map(r=>r.id===s||s===void 0?{...r,open:!1}:r)}}case"REMOVE_TOAST":return t.toastId===void 0?{...n,toasts:[]}:{...n,toasts:n.toasts.filter(s=>s.id!==t.toastId)}}},qs=[];let Ls={toasts:[]};function hs(n){Ls=_i(Ls,n),qs.forEach(t=>{t(Ls)})}function Bi({...n}){const t=$i(),s=a=>hs({type:"UPDATE_TOAST",toast:{...a,id:t}}),r=()=>hs({type:"DISMISS_TOAST",toastId:t});return hs({type:"ADD_TOAST",toast:{...n,id:t,open:!0,onOpenChange:a=>{a||r()}}}),{id:t,dismiss:r,update:s}}function Gi(){const[n,t]=m.useState(Ls);return m.useEffect(()=>(qs.push(t),()=>{const s=qs.indexOf(t);s>-1&&qs.splice(s,1)}),[n]),{...n,toast:Bi,dismiss:s=>hs({type:"DISMISS_TOAST",toastId:s})}}const Ml=({onTransferComplete:n})=>{const{toast:t}=Gi(),[s,r]=m.useState(!1),[a,i]=m.useState(!1),[l,c]=m.useState(""),[o,x]=m.useState(""),[v,p]=m.useState(null),[d,g]=m.useState(null);m.useEffect(()=>{if(s){const u=Fs.previewTransferData(),b=Fs.getLastSaveInfo();if(p(u),g(b),!o){const N=new Date,S=N.toLocaleDateString("fr-CA"),j=N.toLocaleTimeString("fr-CA",{hour:"2-digit",minute:"2-digit"});x(`Sauvegarde complète du ${S} à ${j}`)}}},[s]);const w=async()=>{if(!v?.hasData){t({title:"Aucune donnée à sauvegarder",description:"Il n'y a aucune donnée dans le localStorage à transférer.",variant:"destructive"});return}i(!0);try{const u=await Fs.transferToLocalFile({suggestedFilename:l||void 0,description:o||void 0,preserveLastSaveInfo:!0});u.success?(t({title:"✅ Transfert réussi !",description:`Données sauvegardées dans ${u.filename} (${u.dataSize})`,variant:"default"}),r(!1),n?.(),c(""),x("")):u.cancelled?t({title:"Transfert annulé",description:"La sauvegarde a été annulée par l'utilisateur.",variant:"default"}):t({title:"Erreur de transfert",description:u.error||"Une erreur inconnue s'est produite",variant:"destructive"})}catch(u){t({title:"Erreur de transfert",description:`Erreur : ${u instanceof Error?u.message:"Erreur inconnue"}`,variant:"destructive"})}finally{i(!1)}},R=u=>{try{return new Date(u).toLocaleString("fr-CA")}catch{return u}};return e.jsxs(_s,{open:s,onOpenChange:r,children:[e.jsx(ht,{asChild:!0,children:e.jsxs(q,{variant:"outline",className:"senior-btn",children:[e.jsx(ta,{className:"mr-2 h-4 w-4"}),"Sauvegarder les données locales"]})}),e.jsxs(bs,{className:"sm:max-w-2xl max-h-[80vh] overflow-y-auto",children:[e.jsx(ys,{children:e.jsxs(Ns,{className:"flex items-center gap-2 text-xl",children:[e.jsx(it,{className:"h-6 w-6 text-blue-600"}),"Transfert vers fichier local"]})}),e.jsxs("div",{className:"space-y-6",children:[d&&e.jsxs(M,{className:"border-green-200 bg-green-50",children:[e.jsx($,{className:"pb-3",children:e.jsxs(_,{className:"flex items-center gap-2 text-sm text-green-800",children:[e.jsx(ss,{className:"h-4 w-4"}),"Dernière sauvegarde"]})}),e.jsx(k,{className:"pt-0",children:e.jsxs("div",{className:"space-y-1 text-sm text-green-700",children:[e.jsxs("div",{children:[e.jsx("strong",{children:"Fichier :"})," ",d.filename]}),e.jsxs("div",{children:[e.jsx("strong",{children:"Emplacement :"})," ",d.location]}),e.jsxs("div",{children:[e.jsx("strong",{children:"Date :"})," ",R(d.timestamp)]})]})})]}),v&&e.jsxs(M,{children:[e.jsx($,{children:e.jsxs(_,{className:"flex items-center justify-between",children:[e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Oe,{className:"h-5 w-5 text-blue-600"}),"Données à transférer"]}),e.jsx(ee,{variant:v.hasData?"default":"secondary",children:v.estimatedSize})]})}),e.jsx(k,{children:v.hasData?e.jsxs("div",{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-2 gap-4 text-sm",children:[e.jsxs("div",{children:[e.jsxs("div",{className:"font-medium text-blue-700 mb-1",children:["Données sécurisées (",v.secureKeys.length,")"]}),e.jsxs("div",{className:"space-y-1",children:[v.secureKeys.slice(0,5).map((u,b)=>e.jsxs("div",{className:"text-gray-600 text-xs",children:["🔐 ",u]},b)),v.secureKeys.length>5&&e.jsxs("div",{className:"text-gray-500 text-xs",children:["... et ",v.secureKeys.length-5," autres"]})]})]}),e.jsxs("div",{children:[e.jsxs("div",{className:"font-medium text-green-700 mb-1",children:["Données régulières (",v.regularKeys.length,")"]}),e.jsxs("div",{className:"space-y-1",children:[v.regularKeys.slice(0,5).map((u,b)=>e.jsxs("div",{className:"text-gray-600 text-xs",children:["📄 ",u]},b)),v.regularKeys.length>5&&e.jsxs("div",{className:"text-gray-500 text-xs",children:["... et ",v.regularKeys.length-5," autres"]})]})]})]}),e.jsx("div",{className:"bg-yellow-50 border border-yellow-200 rounded-lg p-3",children:e.jsxs("div",{className:"flex items-start gap-2",children:[e.jsx(Ae,{className:"h-4 w-4 text-yellow-600 mt-0.5"}),e.jsxs("div",{className:"text-sm text-yellow-800",children:[e.jsx("strong",{children:"Important :"})," Après la sauvegarde, toutes ces données seront supprimées du navigateur. Assurez-vous que la sauvegarde est réussie avant de continuer."]})]})})]}):e.jsxs("div",{className:"text-center py-6 text-gray-500",children:[e.jsx(it,{className:"h-12 w-12 mx-auto mb-2 opacity-50"}),e.jsx("p",{children:"Aucune donnée trouvée dans le localStorage"})]})})]}),v?.hasData&&e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"custom-filename",className:"text-base font-medium",children:"Nom du fichier (optionnel)"}),e.jsx(Y,{id:"custom-filename",type:"text",value:l,onChange:u=>c(u.target.value),placeholder:"plan-retraite-2025-01-27-14h30.json",className:"mt-1"}),e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:"Laissez vide pour utiliser un nom généré automatiquement"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"description",className:"text-base font-medium",children:"Description de la sauvegarde"}),e.jsx(Us,{id:"description",value:o,onChange:u=>x(u.target.value),placeholder:"Description de cette sauvegarde...",rows:2,className:"mt-1"})]})]}),e.jsxs("div",{className:"flex gap-3 pt-4 border-t",children:[v?.hasData?e.jsx(q,{onClick:w,disabled:a,className:"flex-1 senior-btn senior-btn-primary",children:a?e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("div",{className:"w-4 h-4 border-2 border-white border-t-transparent rounded-full animate-spin"}),"Sauvegarde en cours..."]}):e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx(Dn,{className:"h-4 w-4"}),"Transférer vers fichier"]})}):e.jsx("div",{className:"flex-1 text-center text-gray-500 py-2",children:"Aucune donnée à sauvegarder"}),e.jsx(q,{variant:"outline",onClick:()=>r(!1),className:"senior-btn",children:"Annuler"})]})]})]})]})},Ui=()=>{const[n,t]=m.useState("bucket-strategy"),[s,r]=m.useState("emergency-buffer"),[a,i]=m.useState({portfolioValue:1e6,annualExpenses:6e4,safeWithdrawalRate:4,inflationRate:2.5,expectedReturn:6,cashBufferMonths:24}),l=[{id:"bucket-strategy",name:'Stratégie des "Buckets" (Seaux)',description:`Division du portefeuille en plusieurs "seaux" selon l'horizon temporel des besoins`,riskLevel:"Modéré",complexity:"Intermédiaire",marketDependency:"Modérée",pros:["Sécurité psychologique avec liquidités visibles","Protection contre la volatilité à court terme","Flexibilité d'ajustement selon les marchés","Approche intuitive et facile à comprendre"],cons:["Peut être sous-optimal fiscalement","Nécessite rééquilibrage régulier","Complexité de gestion de multiples comptes","Risque de sur-allocation en liquidités"],bestFor:["Retraités récents (65-70 ans)","Personnes anxieuses face à la volatilité","Portefeuilles de taille moyenne à élevée","Ceux qui préfèrent une approche structurée"],implementation:["Seau 1: 1-2 ans de dépenses en liquidités","Seau 2: 3-10 ans en obligations et revenus fixes","Seau 3: 10+ ans en actions pour croissance","Révision annuelle et rééquilibrage"]},{id:"dynamic-withdrawal",name:"Retrait dynamique basé sur les marchés",description:"Ajustement des retraits selon la performance des marchés et la valorisation",riskLevel:"Agressif",complexity:"Avancé",marketDependency:"Élevée",pros:["Optimisation selon les conditions de marché","Potentiel de préservation du capital","Adaptation aux cycles économiques","Maximisation des rendements à long terme"],cons:["Revenus imprévisibles et variables","Complexité de calcul et de suivi","Stress psychologique des ajustements","Nécessite expertise financière"],bestFor:["Investisseurs expérimentés","Portefeuilles importants avec marge","Personnes flexibles sur les dépenses","Ceux qui comprennent les cycles de marché"],implementation:["Établir taux de base (ex: 4%)","Ajuster selon valorisation (P/E, CAPE)","Réduire en marchés surévalués","Augmenter en marchés sous-évalués"]},{id:"floor-ceiling",name:"Stratégie plancher-plafond",description:"Définition d'un revenu minimum garanti avec potentiel de hausse",riskLevel:"Conservateur",complexity:"Intermédiaire",marketDependency:"Faible",pros:["Sécurité du revenu minimum garanti","Potentiel d'amélioration en bons marchés","Réduction de l'anxiété financière","Planification budgétaire facilitée"],cons:["Coût des garanties (assurances, rentes)","Rendements potentiellement limités","Complexité des produits d'assurance","Moins de flexibilité"],bestFor:["Retraités conservateurs","Ceux avec peu d'autres revenus garantis","Personnes âgées (75+ ans)","Situations de santé précaire"],implementation:["Plancher: Rentes ou obligations garanties","Plafond: Portion en actions pour croissance","Révision périodique des allocations","Ajustement selon l'âge et les besoins"]},{id:"total-return",name:"Approche rendement total",description:"Focus sur le rendement total du portefeuille plutôt que sur les dividendes",riskLevel:"Modéré",complexity:"Simple",marketDependency:"Modérée",pros:["Optimisation fiscale des gains en capital","Flexibilité dans le choix des ventes","Diversification maximale possible","Simplicité de mise en œuvre"],cons:["Nécessite discipline pour les ventes","Peut créer de l'anxiété (vendre du capital)","Timing des ventes peut être sous-optimal","Moins prévisible que les dividendes"],bestFor:["Investisseurs disciplinés","Ceux qui comprennent l'efficacité fiscale","Portefeuilles diversifiés","Personnes à l'aise avec la volatilité"],implementation:["Construire portefeuille diversifié","Vendre périodiquement pour besoins","Prioriser gains en capital vs dividendes","Rééquilibrer lors des ventes"]}],c=[{id:"emergency-buffer",name:"Tampon d'urgence (12 mois)",duration:"12 mois",amount:a.annualExpenses,purpose:"Couvrir les dépenses essentielles en cas de crise majeure",replenishment:"Reconstituer dès que possible après utilisation",advantages:["Sécurité psychologique maximale","Protection contre tous types de crises","Évite les ventes forcées en mauvais marchés"]},{id:"market-buffer",name:"Tampon de marché (24 mois)",duration:"24 mois",amount:a.annualExpenses*2,purpose:"Éviter les retraits pendant les corrections de marché",replenishment:"Reconstituer pendant les marchés haussiers",advantages:["Protection contre la séquence des rendements","Permet d'attendre la récupération des marchés","Réduit l'impact des corrections sur le portefeuille"]},{id:"opportunity-buffer",name:"Tampon d'opportunité (6 mois)",duration:"6 mois",amount:a.annualExpenses*.5,purpose:"Financer les opportunités spéciales sans affecter les investissements",replenishment:"Reconstituer selon les priorités",advantages:["Flexibilité pour les dépenses imprévues positives","Évite de perturber la stratégie d'investissement","Permet de saisir les opportunités de vie"]}],x=(()=>{const{portfolioValue:d,safeWithdrawalRate:g,cashBufferMonths:w,annualExpenses:R}=a,u=d*g/100,b=u/12,N=R*w/12,S=d-N,j=u/d*100;return{annualWithdrawal:u,monthlyWithdrawal:b,cashBuffer:N,investedAmount:S,withdrawalRate:j}})(),v=d=>{switch(d){case"Conservateur":return"bg-green-100 text-green-800";case"Modéré":return"bg-yellow-100 text-yellow-800";case"Agressif":return"bg-red-100 text-red-800";default:return"bg-gray-100 text-gray-800"}},p=d=>{switch(d){case"Simple":return"bg-blue-100 text-blue-800";case"Intermédiaire":return"bg-purple-100 text-purple-800";case"Avancé":return"bg-orange-100 text-orange-800";default:return"bg-gray-100 text-gray-800"}};return e.jsx("div",{className:"space-y-6",children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(Kt,{className:"h-6 w-6"}),"Planification dynamique des retraits"]}),e.jsx(xe,{children:"Stratégies avancées pour optimiser les retraits de retraite selon les conditions de marché et les besoins personnels"})]}),e.jsxs(k,{children:[e.jsxs(pe,{className:"mb-6",children:[e.jsx(Oe,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Approche moderne :"})," La planification dynamique des retraits va au-delà de la règle des 4% traditionnelle en s'adaptant aux conditions de marché, à l'inflation et aux besoins changeants pour optimiser la durabilité du portefeuille."]})]}),e.jsxs(Bs,{defaultValue:"strategies",className:"w-full",children:[e.jsxs(ws,{className:"grid w-full grid-cols-4",children:[e.jsx(be,{value:"strategies",children:"Stratégies"}),e.jsx(be,{value:"buffers",children:"Tampons de liquidité"}),e.jsx(be,{value:"calculator",children:"Calculateur"}),e.jsx(be,{value:"implementation",children:"Mise en œuvre"})]}),e.jsxs(ye,{value:"strategies",className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:l.map(d=>e.jsxs(M,{className:`cursor-pointer transition-all hover:shadow-lg ${n===d.id?"ring-2 ring-blue-500":""}`,onClick:()=>t(d.id),children:[e.jsxs($,{children:[e.jsx(_,{className:"text-lg",children:d.name}),e.jsx(xe,{children:d.description}),e.jsxs("div",{className:"flex gap-2 flex-wrap",children:[e.jsx(ee,{className:v(d.riskLevel),children:d.riskLevel}),e.jsx(ee,{className:p(d.complexity),children:d.complexity}),e.jsxs(ee,{variant:"outline",children:["Marché: ",d.marketDependency]})]})]}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2 text-green-700",children:"Avantages :"}),e.jsx("ul",{className:"text-sm space-y-1",children:d.pros.slice(0,2).map((g,w)=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-3 w-3 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:g})]},w))})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2 text-red-700",children:"Inconvénients :"}),e.jsx("ul",{className:"text-sm space-y-1",children:d.cons.slice(0,2).map((g,w)=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Ae,{className:"h-3 w-3 text-red-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:g})]},w))})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2",children:"Idéal pour :"}),e.jsx("div",{className:"flex flex-wrap gap-1",children:d.bestFor.slice(0,2).map((g,w)=>e.jsx(ee,{variant:"outline",className:"text-xs",children:g},w))})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2",children:"Mise en œuvre :"}),e.jsx("ul",{className:"text-sm space-y-1",children:d.implementation.slice(0,2).map((g,w)=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Re,{className:"h-3 w-3 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:g})]},w))})]})]})]},d.id))}),e.jsxs(M,{className:"bg-gradient-to-r from-green-50 to-blue-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg",children:"Comparaison des approches de retrait"})}),e.jsx(k,{children:e.jsx("div",{className:"overflow-x-auto",children:e.jsxs("table",{className:"w-full text-sm",children:[e.jsx("thead",{children:e.jsxs("tr",{className:"border-b",children:[e.jsx("th",{className:"text-left p-2",children:"Stratégie"}),e.jsx("th",{className:"text-left p-2",children:"Prévisibilité"}),e.jsx("th",{className:"text-left p-2",children:"Potentiel rendement"}),e.jsx("th",{className:"text-left p-2",children:"Complexité"})]})}),e.jsxs("tbody",{children:[e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"p-2",children:"Buckets"}),e.jsx("td",{className:"p-2",children:"Élevée"}),e.jsx("td",{className:"p-2",children:"Modéré"}),e.jsx("td",{className:"p-2",children:"Moyenne"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"p-2",children:"Dynamique"}),e.jsx("td",{className:"p-2",children:"Variable"}),e.jsx("td",{className:"p-2",children:"Élevé"}),e.jsx("td",{className:"p-2",children:"Élevée"})]}),e.jsxs("tr",{className:"border-b",children:[e.jsx("td",{className:"p-2",children:"Plancher-Plafond"}),e.jsx("td",{className:"p-2",children:"Très élevée"}),e.jsx("td",{className:"p-2",children:"Limité"}),e.jsx("td",{className:"p-2",children:"Moyenne"})]}),e.jsxs("tr",{children:[e.jsx("td",{className:"p-2",children:"Rendement total"}),e.jsx("td",{className:"p-2",children:"Modérée"}),e.jsx("td",{className:"p-2",children:"Élevé"}),e.jsx("td",{className:"p-2",children:"Faible"})]})]})]})})})]})]}),e.jsxs(ye,{value:"buffers",className:"space-y-4",children:[e.jsx("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:c.map(d=>e.jsxs(M,{className:`cursor-pointer transition-all hover:shadow-lg ${s===d.id?"ring-2 ring-blue-500":""}`,onClick:()=>r(d.id),children:[e.jsxs($,{children:[e.jsx(_,{className:"text-lg",children:d.name}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(ee,{variant:"outline",children:d.duration}),e.jsx(ee,{className:"bg-blue-100 text-blue-800",children:d.amount.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})})]})]}),e.jsxs(k,{className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2",children:"Objectif :"}),e.jsx("p",{className:"text-sm text-gray-600",children:d.purpose})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2",children:"Reconstitution :"}),e.jsx("p",{className:"text-sm text-gray-600",children:d.replenishment})]}),e.jsxs("div",{children:[e.jsx("h4",{className:"font-semibold text-sm mb-2",children:"Avantages :"}),e.jsx("ul",{className:"text-sm space-y-1",children:d.advantages.map((g,w)=>e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-3 w-3 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:g})]},w))})]})]})]},d.id))}),e.jsxs(M,{className:"bg-yellow-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg text-yellow-800",children:"Stratégie de tampon recommandée"})}),e.jsx(k,{children:e.jsxs("div",{className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{className:"text-center p-4 bg-white rounded",children:[e.jsx("div",{className:"text-2xl font-bold text-blue-600",children:"12-24"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Mois de dépenses"}),e.jsx("div",{className:"text-xs",children:"en liquidités"})]}),e.jsxs("div",{className:"text-center p-4 bg-white rounded",children:[e.jsx("div",{className:"text-2xl font-bold text-green-600",children:"2-3%"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Du portefeuille"}),e.jsx("div",{className:"text-xs",children:"en compte épargne"})]}),e.jsxs("div",{className:"text-center p-4 bg-white rounded",children:[e.jsx("div",{className:"text-2xl font-bold text-purple-600",children:"Flexible"}),e.jsx("div",{className:"text-sm text-gray-600",children:"Reconstitution"}),e.jsx("div",{className:"text-xs",children:"selon les marchés"})]})]}),e.jsxs(pe,{children:[e.jsx(Te,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Règle d'or :"})," Maintenez toujours 12-24 mois de dépenses en liquidités. Cela vous permet d'éviter de vendre des investissements pendant les corrections de marché et réduit significativement le risque de séquence des rendements."]})]})]})})]})]}),e.jsx(ye,{value:"calculator",className:"space-y-4",children:e.jsxs(M,{children:[e.jsxs($,{children:[e.jsxs(_,{className:"flex items-center gap-2",children:[e.jsx(je,{className:"h-5 w-5"}),"Calculateur de retrait dynamique"]}),e.jsx(xe,{children:"Personnalisez vos paramètres pour optimiser votre stratégie de retrait"})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Valeur du portefeuille ($)"}),e.jsx("input",{type:"number",value:a.portfolioValue,onChange:d=>i({...a,portfolioValue:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"0",step:"50000"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Dépenses annuelles ($)"}),e.jsx("input",{type:"number",value:a.annualExpenses,onChange:d=>i({...a,annualExpenses:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"0",step:"5000"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Taux de retrait sécuritaire (%)"}),e.jsx("input",{type:"number",value:a.safeWithdrawalRate,onChange:d=>i({...a,safeWithdrawalRate:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"0",max:"10",step:"0.1"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Tampon de liquidité (mois)"}),e.jsx("input",{type:"number",value:a.cashBufferMonths,onChange:d=>i({...a,cashBufferMonths:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"6",max:"36"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Rendement attendu (%)"}),e.jsx("input",{type:"number",value:a.expectedReturn,onChange:d=>i({...a,expectedReturn:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"0",max:"15",step:"0.1"})]}),e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-2",children:"Taux d'inflation (%)"}),e.jsx("input",{type:"number",value:a.inflationRate,onChange:d=>i({...a,inflationRate:Number(d.target.value)}),className:"w-full p-2 border rounded-md",min:"0",max:"10",step:"0.1"})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-4 mt-6",children:[e.jsx(M,{children:e.jsxs(k,{className:"p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-blue-600",children:x.annualWithdrawal.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})}),e.jsx("div",{className:"text-sm text-gray-600",children:"Retrait annuel"})]})}),e.jsx(M,{children:e.jsxs(k,{className:"p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-green-600",children:x.monthlyWithdrawal.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})}),e.jsx("div",{className:"text-sm text-gray-600",children:"Retrait mensuel"})]})}),e.jsx(M,{children:e.jsxs(k,{className:"p-4",children:[e.jsx("div",{className:"text-2xl font-bold text-purple-600",children:x.cashBuffer.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})}),e.jsx("div",{className:"text-sm text-gray-600",children:"Tampon de liquidité"})]})}),e.jsx(M,{children:e.jsxs(k,{className:"p-4",children:[e.jsxs("div",{className:"text-2xl font-bold text-orange-600",children:[x.withdrawalRate.toFixed(1),"%"]}),e.jsx("div",{className:"text-sm text-gray-600",children:"Taux de retrait effectif"})]})})]}),e.jsxs(pe,{children:[e.jsx(ls,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Analyse :"})," Votre stratégie génère"," ",e.jsx("strong",{children:x.monthlyWithdrawal.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})})," par mois avec un tampon de sécurité de"," ",e.jsx("strong",{children:x.cashBuffer.toLocaleString("fr-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0})}),". Le taux de retrait effectif est de"," ",e.jsxs("strong",{children:[x.withdrawalRate.toFixed(1),"%"]}),"."]})]})]})]})}),e.jsxs(ye,{value:"implementation",className:"space-y-4",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-6",children:[e.jsxs(M,{className:"bg-blue-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg text-blue-800",children:"Phase 1 : Préparation (6 mois avant)"})}),e.jsx(k,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Analyser le portefeuille actuel et les besoins"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Choisir la stratégie de retrait appropriée"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Établir les tampons de liquidité nécessaires"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-blue-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Consulter un conseiller financier si nécessaire"})]})]})})]}),e.jsxs(M,{className:"bg-green-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg text-green-800",children:"Phase 2 : Mise en place (3 mois)"})}),e.jsx(k,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Restructurer le portefeuille selon la stratégie"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Mettre en place les comptes et allocations"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Automatiser les transferts et rééquilibrages"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-green-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Tester le système avec de petits montants"})]})]})})]}),e.jsxs(M,{className:"bg-yellow-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg text-yellow-800",children:"Phase 3 : Suivi continu"})}),e.jsx(k,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-yellow-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Révision trimestrielle des performances"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-yellow-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Ajustement selon les conditions de marché"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-yellow-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Rééquilibrage annuel des allocations"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(ie,{className:"h-4 w-4 text-yellow-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Adaptation aux changements de besoins"})]})]})})]}),e.jsxs(M,{className:"bg-purple-50",children:[e.jsx($,{children:e.jsx(_,{className:"text-lg text-purple-800",children:"Outils de suivi recommandés"})}),e.jsx(k,{children:e.jsxs("ul",{className:"space-y-2 text-sm",children:[e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Re,{className:"h-4 w-4 text-purple-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Tableau de bord de performance mensuel"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Re,{className:"h-4 w-4 text-purple-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Alertes de rééquilibrage automatiques"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Re,{className:"h-4 w-4 text-purple-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Calculateur de taux de retrait dynamique"})]}),e.jsxs("li",{className:"flex items-start gap-2",children:[e.jsx(Re,{className:"h-4 w-4 text-purple-600 mt-0.5 flex-shrink-0"}),e.jsx("span",{children:"Projections de durabilité du portefeuille"})]})]})})]})]}),e.jsxs(pe,{children:[e.jsx(Le,{className:"h-4 w-4"}),e.jsxs(he,{children:[e.jsx("strong",{children:"Conseil de mise en œuvre :"})," Commencez par une approche simple comme la stratégie des buckets, puis évoluez vers des méthodes plus sophistiquées à mesure que vous gagnez en expérience et en confiance avec votre système de retrait."]})]})]})]})]})]})})},Tl=Object.freeze(Object.defineProperty({__proto__:null,default:Ui},Symbol.toStringTag,{value:"Module"})),Yi=m.forwardRef(({className:n,...t},s)=>e.jsxs(Aa,{ref:s,className:se("relative flex w-full touch-none select-none items-center",n),...t,children:[e.jsx(fr,{className:"relative h-2 w-full grow overflow-hidden rounded-full bg-secondary",children:e.jsx(vr,{className:"absolute h-full bg-primary"})}),e.jsx(jr,{className:"block h-5 w-5 rounded-full border-2 border-primary bg-background ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50"})]}));Yi.displayName=Aa.displayName;function ps({label:n,value:t="",onChange:s,help:r,helpText:a,example:i,required:l=!1,type:c="text",id:o,name:x,placeholder:v,min:p,max:d,step:g,className:w="",disabled:R,readOnly:u}){const b=o||`input-${Math.random().toString(36).substr(2,9)}`,N=r||a,S=E=>{s&&s(E)},j=c==="number"||c==="currency"?"decimal":"text",h=N?`${b}-help`:void 0;return e.jsxs("div",{className:`seniors-input-group my-4 ${w}`,children:[n&&e.jsxs("label",{className:"seniors-label block mb-2 font-semibold",htmlFor:b,children:[e.jsx("span",{className:"button-text",children:n}),l&&e.jsx("span",{className:"required text-red-600 ml-1","aria-hidden":"true",children:"*"})]}),e.jsx("input",{id:b,name:x||b,className:`seniors-input w-full border rounded-lg px-4 py-3 min-h-[48px] ${w}`,type:c==="currency"?"text":c,value:String(t??""),onChange:S,inputMode:j,"aria-describedby":h,placeholder:v||i,min:p,max:d,step:g,disabled:!!R,readOnly:!!u,"aria-disabled":R?"true":void 0}),N&&e.jsx("div",{id:`${b}-help`,className:"seniors-help text-gray-700 mt-2 text-sm",children:N}),i&&!v&&e.jsxs("div",{className:"text-sm text-gray-600 mt-1",children:["Exemple: ",i]})]})}const Qi=[{id:"auto-oil-change",category:"automobile",name:"Changement d'huile",description:"Entretien saisonnier du véhicule (2-3 fois par an)",isActive:!1,estimatedAmount:80,frequency:"biannually",isPlanned:!1},{id:"auto-winter-tires",category:"automobile",name:"Pneus d'hiver",description:"Changement et entreposage (remplacement aux 4-5 ans)",isActive:!1,estimatedAmount:800,frequency:"every5years",isPlanned:!1},{id:"auto-summer-tires",category:"automobile",name:"Pneus d'été",description:"Changement et entreposage (remplacement aux 4-5 ans)",isActive:!1,estimatedAmount:800,frequency:"every5years",isPlanned:!1},{id:"auto-inspection",category:"automobile",name:"Inspection annuelle",description:"Inspection obligatoire du véhicule",isActive:!1,estimatedAmount:45,frequency:"annually",isPlanned:!1},{id:"home-tree-trimming",category:"maison",name:"Émondage des arbres",description:"Taille et élagage (propriétaires avec arbres matures)",isActive:!1,estimatedAmount:500,frequency:"every3years",isPlanned:!1},{id:"home-pool-opening",category:"maison",name:"Ouverture de piscine",description:"Produits chimiques et équipements (propriétaires de piscine)",isActive:!1,estimatedAmount:400,frequency:"annually",isPlanned:!1},{id:"home-pool-closing",category:"maison",name:"Fermeture de piscine",description:"Hivernage et protection (propriétaires de piscine)",isActive:!1,estimatedAmount:200,frequency:"annually",isPlanned:!1},{id:"home-snow-removal",category:"maison",name:"Déneigement commercial",description:"Service de déneigement hivernal",isActive:!1,estimatedAmount:600,frequency:"annually",isPlanned:!1},{id:"home-major-repairs",category:"maison",name:"Réparations majeures",description:"Toiture, plomberie, électricité (selon nécessité)",isActive:!1,estimatedAmount:2e3,frequency:"asNeeded",isPlanned:!1},{id:"home-appliances",category:"maison",name:"Remplacement électroménagers",description:"Réfrigérateur, laveuse, sécheuse (durée de vie 8-12 ans)",isActive:!1,estimatedAmount:1500,frequency:"asNeeded",isPlanned:!1},{id:"health-dental-major",category:"sante",name:"Soins dentaires majeurs",description:"Couronnes, implants, prothèses (non couverts)",isActive:!1,estimatedAmount:3e3,frequency:"asNeeded",isPlanned:!1},{id:"health-glasses",category:"sante",name:"Lunettes/lentilles",description:"Examen de la vue et nouvelle prescription",isActive:!1,estimatedAmount:400,frequency:"every2years",isPlanned:!1},{id:"health-medical-equipment",category:"sante",name:"Équipements médicaux",description:"Fauteuil roulant, déambulateur, oxygène (selon besoin)",isActive:!1,estimatedAmount:1e3,frequency:"asNeeded",isPlanned:!1},{id:"tax-municipal",category:"taxes",name:"Taxes municipales",description:"Paiement annuel ou semestriel (propriétaires)",isActive:!1,estimatedAmount:3600,frequency:"annually",isPlanned:!1},{id:"tax-school",category:"taxes",name:"Taxes scolaires",description:"Paiement annuel ou semestriel (propriétaires)",isActive:!1,estimatedAmount:800,frequency:"annually",isPlanned:!1},{id:"personal-vacation",category:"personnel",name:"Vacances annuelles",description:"Budget voyage ou activités de loisir",isActive:!1,estimatedAmount:2e3,frequency:"annually",isPlanned:!1},{id:"personal-gifts",category:"personnel",name:"Cadeaux (Noël, anniversaires)",description:"Budget pour les fêtes et événements familiaux",isActive:!1,estimatedAmount:800,frequency:"annually",isPlanned:!1}],Wi=[{id:"automobile",name:"Automobile",icon:"🚗"},{id:"maison",name:"Maison",icon:"🏠"},{id:"sante",name:"Santé",icon:"🏥"},{id:"taxes",name:"Taxes",icon:"📋"},{id:"personnel",name:"Personnel",icon:"🎯"}],Fi={annually:"Annuel",biannually:"Deux fois/an",every2years:"Aux 2 ans",every3years:"Aux 3 ans",every5years:"Aux 5 ans",asNeeded:"Selon besoin"},Hi={annually:1,biannually:2,every2years:.5,every3years:.33,every5years:.2,asNeeded:0},kl=({data:n,onUpdate:t,language:s})=>{const[r,a]=m.useState("automobile"),i=n.seasonalExpenses?.expenses||[],[l,c]=m.useState(()=>i.length>0?i:Qi),o=(p,d)=>{const g=l.map(w=>w.id===p?{...w,...d}:w);c(g),t({expenses:g,lastUpdated:new Date().toISOString()})},x=()=>l.filter(p=>p.isActive&&p.isPlanned).reduce((p,d)=>p+d.estimatedAmount,0),v=()=>l.filter(p=>p.isActive).reduce((p,d)=>p+d.estimatedAmount*(Hi[d.frequency]||0),0);return e.jsxs("div",{className:"bg-white rounded-xl p-6 border-2 border-gray-300",children:[e.jsx("h2",{className:"text-2xl font-bold mb-6 text-center",children:"📅 Planificateur de dépenses saisonnières et occasionnelles"}),e.jsx("div",{className:"flex mb-6 border-b",children:Wi.map(p=>e.jsxs("button",{onClick:()=>a(p.id),className:`px-4 py-2 mr-2 rounded-t-lg font-medium ${r===p.id?"bg-blue-500 text-white border-b-2 border-blue-500":"bg-gray-100 text-gray-700 hover:bg-gray-200"}`,children:[p.icon," ",p.name]},p.id))}),e.jsx("div",{className:"space-y-4",children:l.filter(p=>p.category===r).map(p=>e.jsx("div",{className:"border rounded-lg p-4 hover:bg-gray-50",children:e.jsxs("div",{className:"flex items-start justify-between",children:[e.jsxs("div",{className:"flex items-start space-x-3",children:[e.jsx("input",{type:"checkbox",checked:p.isActive,onChange:d=>o(p.id,{isActive:d.target.checked}),className:"mt-1 h-5 w-5 text-blue-600"}),e.jsxs("div",{className:"flex-1",children:[e.jsx("h3",{className:"font-semibold text-lg",children:p.name}),e.jsx("p",{className:"text-gray-600 text-sm mb-2",children:p.description}),p.isActive&&e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4 mt-3",children:[e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-1",children:"Montant estimé ($)"}),e.jsx("input",{type:"number",value:p.estimatedAmount,onChange:d=>o(p.id,{estimatedAmount:Number(d.target.value)}),className:"w-full px-3 py-2 border border-gray-300 rounded-md"})]}),e.jsx("div",{children:e.jsxs("label",{className:"flex items-center space-x-2",children:[e.jsx("input",{type:"checkbox",checked:p.isPlanned,onChange:d=>o(p.id,{isPlanned:d.target.checked}),className:"h-4 w-4 text-blue-600"}),e.jsx("span",{className:"text-sm font-medium",children:"Planifié pour cette année"})]})}),p.isPlanned&&e.jsxs("div",{children:[e.jsx("label",{className:"block text-sm font-medium mb-1",children:"Date prévue"}),e.jsx("input",{type:"date",value:p.plannedDate||"",onChange:d=>o(p.id,{plannedDate:d.target.value}),className:"w-full px-3 py-2 border border-gray-300 rounded-md"})]})]})]})]}),e.jsx("div",{className:"text-right",children:e.jsx("span",{className:"text-sm text-gray-500",children:Fi[p.frequency]})})]})},p.id))}),e.jsxs("div",{className:"mt-6 bg-blue-50 rounded-lg p-4",children:[e.jsx("h3",{className:"font-bold text-lg mb-2",children:"📊 Impact budgétaire annuel"}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-2 gap-4",children:[e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-600",children:"Dépenses planifiées cette année"}),e.jsx("p",{className:"text-2xl font-bold text-blue-600",children:new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD"}).format(x())})]}),e.jsxs("div",{children:[e.jsx("p",{className:"text-sm text-gray-600",children:"Provision annuelle recommandée"}),e.jsx("p",{className:"text-2xl font-bold text-green-600",children:new Intl.NumberFormat("fr-CA",{style:"currency",currency:"CAD"}).format(v())})]})]}),e.jsx("p",{className:"text-xs text-gray-500 mt-2",children:"* La provision inclut une moyenne des dépenses récurrentes selon leur fréquence"})]})]})},Dl=({data:n,onUpdate:t,language:s})=>{const[r,a]=m.useState("dueDates"),[i,l]=m.useState(()=>{const j=new Date;return`${j.getFullYear()}-${String(j.getMonth()+1).padStart(2,"0")}`}),[c,o]=m.useState(!1),[x,v]=m.useState(null),[p,d]=m.useState("logement"),g=s==="fr",w={title:g?"Planification budgétaire mensuelle":"Monthly Budget Planning",subtitle:g?"Gérez les dates d'échéance et planifiez votre budget mensuel":"Manage due dates and plan your monthly budget",dueDatesTab:g?"Dates d'échéance":"Due Dates",budgetPlanTab:g?"Plan budgétaire":"Budget Plan",addDueDate:g?"Ajouter une échéance":"Add Due Date",expenseName:g?"Nom de la dépense":"Expense Name",category:g?"Catégorie":"Category",amount:g?"Montant":"Amount",frequency:g?"Fréquence":"Frequency",dueDay:g?"Jour d'échéance":"Due Day",specificDates:g?"Dates spécifiques":"Specific Dates",notes:"Notes",save:g?"Sauvegarder":"Save",cancel:g?"Annuler":"Cancel",nextDue:g?"Prochaine échéance":"Next Due",frequencies:{monthly:g?"Mensuel":"Monthly",bimonthly:g?"Bimensuel":"Bimonthly",quarterly:g?"Trimestriel":"Quarterly",biannual:g?"Semestriel":"Biannual",annual:g?"Annuel":"Annual",irregular:g?"Irrégulier":"Irregular"},categories:{logement:g?"Logement":"Housing",servicesPublics:g?"Services publics":"Utilities",assurances:g?"Assurances":"Insurance",telecom:g?"Télécommunications":"Telecommunications",alimentation:g?"Alimentation":"Food",transport:g?"Transport":"Transportation",sante:g?"Santé":"Health",loisirs:g?"Loisirs":"Leisure"}},R=n.cashflow?.dueDates||{},u=j=>{const h=new Date,E=h.getFullYear(),f=h.getMonth();if(j.frequency==="monthly"&&j.dueDay){const A=new Date(E,f,j.dueDay);return A<=h&&A.setMonth(A.getMonth()+1),A.toISOString().split("T")[0]}if(j.frequency==="irregular"&&j.dueDates){for(const A of j.dueDates){const[L,I]=A.split("-").map(Number),F=new Date(E,L-1,I);if(F>h)return F.toISOString().split("T")[0]}if(j.dueDates.length>0){const[A,L]=j.dueDates[0].split("-").map(Number);return new Date(E+1,A-1,L).toISOString().split("T")[0]}}return""},b=j=>{const h={...R};h[p]||(h[p]=[]);const E=h[p]||[],f=E.findIndex(L=>L.id===j.id),A={...j,nextDueDate:u(j)};f>=0?E[f]=A:E.push(A),t({dueDates:h}),o(!1),v(null)},N=(j,h)=>{const E={...R},f=E[j]||[];E[j]=f.filter(A=>A.id!==h),t({dueDates:E})},S=({dueDate:j,onSave:h,onCancel:E})=>{const[f,A]=m.useState(j||{id:Date.now().toString(),name:"",amount:0,frequency:"monthly",dueDay:1,dueDates:[],isActive:!0,notes:""}),L=I=>{I.preventDefault(),f.name&&f.amount>0&&p&&h(f)};return e.jsxs("form",{onSubmit:L,className:"space-y-4",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"expenseName",children:w.expenseName}),e.jsx(ps,{id:"expenseName",value:f.name,onChange:I=>A({...f,name:I.target.value}),placeholder:g?"ex: Hydro-Québec":"ex: Hydro-Quebec",required:!0})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"amount",children:w.amount}),e.jsx(ps,{id:"amount",type:"number",value:f.amount||"",onChange:I=>A({...f,amount:parseFloat((I.target.value||"0").replace(",","."))||0}),placeholder:"0",required:!0})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"frequency",children:w.frequency}),e.jsxs(me,{value:f.frequency,onValueChange:I=>A({...f,frequency:I}),children:[e.jsx(oe,{children:e.jsx(ue,{})}),e.jsxs(ce,{children:[e.jsx(B,{value:"monthly",children:w.frequencies.monthly}),e.jsx(B,{value:"bimonthly",children:w.frequencies.bimonthly}),e.jsx(B,{value:"quarterly",children:w.frequencies.quarterly}),e.jsx(B,{value:"biannual",children:w.frequencies.biannual}),e.jsx(B,{value:"annual",children:w.frequencies.annual}),e.jsx(B,{value:"irregular",children:w.frequencies.irregular})]})]})]}),f.frequency==="monthly"&&e.jsxs("div",{children:[e.jsx(D,{htmlFor:"dueDay",children:w.dueDay}),e.jsx(ps,{id:"dueDay",type:"number",min:1,max:31,value:f.dueDay||"",onChange:I=>A({...f,dueDay:parseInt(I.target.value)||1}),placeholder:"6"})]}),f.frequency==="irregular"&&e.jsxs("div",{children:[e.jsx(D,{htmlFor:"specificDates",children:w.specificDates}),e.jsx(ps,{id:"specificDates",type:"text",value:f.dueDates?.join(", ")||"",onChange:I=>A({...f,dueDates:I.target.value.split(",").map(F=>F.trim()).filter(F=>F)}),placeholder:"09-07, 11-08, 01-04"}),e.jsx("p",{className:"text-xs text-gray-500 mt-1",children:g?"Format: MM-JJ, séparés par des virgules":"Format: MM-DD, separated by commas"})]}),e.jsxs("div",{children:[e.jsx(D,{htmlFor:"notes",children:w.notes}),e.jsx(ps,{id:"notes",type:"text",value:f.notes||"",onChange:I=>A({...f,notes:I.target.value}),placeholder:g?"Notes optionnelles":"Optional notes"})]}),e.jsxs("div",{className:"flex justify-end gap-2",children:[e.jsx(q,{type:"button",variant:"outline",onClick:E,children:w.cancel}),e.jsx(q,{type:"submit",children:w.save})]})]})};return e.jsxs("div",{className:"space-y-6",children:[e.jsxs("div",{className:"text-center bg-white border-2 border-gray-300 rounded-xl p-6",children:[e.jsxs("h2",{className:"text-3xl font-bold text-black mb-2 flex items-center justify-center gap-3",children:[e.jsx(Le,{className:"w-8 h-8 text-blue-300"}),w.title]}),e.jsx("p",{className:"text-lg text-black",children:w.subtitle})]}),e.jsxs(Bs,{value:r,onValueChange:a,children:[e.jsxs(ws,{className:"grid w-full grid-cols-2 bg-white border-2 border-gray-300 rounded-xl",children:[e.jsxs(be,{value:"dueDates",className:"data-[state=active]:bg-blue-600 data-[state=active]:text-white data-[state=inactive]:bg-gray-100 data-[state=inactive]:text-gray-700",children:[e.jsx(ss,{className:"w-4 h-4 mr-2"}),w.dueDatesTab]}),e.jsxs(be,{value:"budgetPlan",className:"data-[state=active]:bg-green-600 data-[state=active]:text-white data-[state=inactive]:bg-gray-100 data-[state=inactive]:text-gray-700",children:[e.jsx(Re,{className:"w-4 h-4 mr-2"}),w.budgetPlanTab]})]}),e.jsx(ye,{value:"dueDates",className:"space-y-4",children:e.jsxs(M,{className:"bg-white border-2 border-gray-300",children:[e.jsx($,{children:e.jsxs("div",{className:"flex justify-between items-center",children:[e.jsxs("div",{children:[e.jsx(_,{className:"text-xl text-gray-800",children:w.dueDatesTab}),e.jsx(xe,{children:g?"Configurez les dates d'échéance pour vos dépenses régulières":"Configure due dates for your regular expenses"})]}),e.jsxs(_s,{open:c,onOpenChange:o,children:[e.jsx(ht,{asChild:!0,children:e.jsxs(q,{onClick:()=>{d("logement"),v(null)},className:"bg-blue-600 hover:bg-blue-700",children:[e.jsx(os,{className:"w-4 h-4 mr-2"}),w.addDueDate]})}),e.jsxs(bs,{className:"max-w-md bg-white border-2 border-gray-300",children:[e.jsx(ys,{children:e.jsx(Ns,{children:w.addDueDate})}),e.jsxs("div",{className:"mb-4",children:[e.jsx(D,{children:w.category}),e.jsxs(me,{value:p,onValueChange:d,children:[e.jsx(oe,{children:e.jsx(ue,{})}),e.jsx(ce,{children:Object.entries(w.categories).map(([j,h])=>e.jsx(B,{value:j,children:h},j))})]})]}),e.jsx(S,{dueDate:x||void 0,onSave:b,onCancel:()=>{o(!1),v(null)}})]})]})]})}),e.jsx(k,{children:e.jsx("div",{className:"space-y-6",children:Object.entries(w.categories).map(([j,h])=>{const E=R[j]||[];return e.jsxs("div",{className:"border rounded-lg p-4",children:[e.jsxs("h3",{className:"text-lg font-semibold text-gray-800 mb-3 flex items-center gap-2",children:[e.jsx(ea,{className:"w-5 h-5 text-blue-600"}),h]}),E.length===0?e.jsx("p",{className:"text-gray-500 italic",children:g?"Aucune échéance configurée":"No due dates configured"}):e.jsx("div",{className:"space-y-2",children:E.map(f=>e.jsxs("div",{className:"flex items-center justify-between p-3 bg-gray-50 rounded-lg",children:[e.jsxs("div",{className:"flex-1",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("h4",{className:"font-medium text-gray-800",children:f.name}),e.jsx(ee,{variant:"outline",children:w.frequencies[f.frequency]}),f.nextDueDate&&e.jsxs(ee,{variant:"secondary",children:[w.nextDue,": ",new Date(f.nextDueDate).toLocaleDateString(g?"fr-CA":"en-CA")]})]}),e.jsxs("div",{className:"flex items-center gap-4 mt-1",children:[e.jsx("span",{className:"text-lg font-semibold text-green-600",children:K(f.amount)}),f.frequency==="monthly"&&f.dueDay&&e.jsx("span",{className:"text-sm text-gray-600",children:g?`Le ${f.dueDay} de chaque mois`:`${f.dueDay}th of each month`}),f.frequency==="irregular"&&f.dueDates&&e.jsx("span",{className:"text-sm text-gray-600",children:f.dueDates.join(", ")})]})]}),e.jsxs("div",{className:"flex gap-2",children:[e.jsx(q,{size:"sm",variant:"outline",onClick:()=>{d(j),v(f),o(!0)},children:e.jsx(Zt,{className:"w-4 h-4"})}),e.jsx(q,{size:"sm",variant:"destructive",onClick:()=>N(j,f.id),children:e.jsx(js,{className:"w-4 h-4"})})]})]},f.id))})]},j)})})})]})}),e.jsx(ye,{value:"budgetPlan",className:"space-y-4",children:e.jsxs(M,{className:"bg-white border-2 border-gray-300",children:[e.jsxs($,{children:[e.jsx(_,{className:"text-xl text-gray-800",children:w.budgetPlanTab}),e.jsx(xe,{children:g?"Visualisez votre plan budgétaire mensuel":"Visualize your monthly budget plan"})]}),e.jsx(k,{children:e.jsx("div",{className:"text-center py-8",children:e.jsx("p",{className:"text-gray-600",children:g?"Fonctionnalité en développement - Configurez d'abord vos dates d'échéance":"Feature in development - Configure your due dates first"})})})]})})]})]})};function Is(n){const t=Number(n);return Number.isFinite(t)?t:0}const ql=()=>{const{language:n}=Ke(),t=n==="fr",[s,r]=m.useState(5),[a,i]=m.useState({label:"Neuf",financing:{price:32e3,downPayment:4e3,annualRate:.069,termMonths:72,salesTaxRate:.15,warrantyCost:1200,registrationFees:300},ownership:{maintenancePerYear:350,insurancePerYear:1400,fuelOrEnergyPerYear:1800,expectedResaleValue:13e3,otherRecurringPerYear:0}}),[l,c]=m.useState({label:"Usagé",financing:{price:18e3,downPayment:2e3,annualRate:.069,termMonths:60,salesTaxRate:.15,warrantyCost:600,registrationFees:300},ownership:{maintenancePerYear:650,insurancePerYear:1200,fuelOrEnergyPerYear:1900,expectedResaleValue:7e3,otherRecurringPerYear:0}}),[o,x]=m.useState({label:"Financement",financing:{price:3e4,downPayment:0,annualRate:.089,termMonths:84,salesTaxRate:.15,warrantyCost:0,registrationFees:300},ownership:{maintenancePerYear:450,insurancePerYear:1350,fuelOrEnergyPerYear:1800,expectedResaleValue:12e3,otherRecurringPerYear:0}}),v=m.useMemo(()=>({horizonYears:Math.max(1,Math.floor(s)),options:[a,l,o]}),[s,a,l,o]),p=m.useMemo(()=>{try{return Qn.compare(v)}catch{return null}},[v]),d={title:t?"Comparateur d’options d’achat":"Purchase options comparator",subtitle:t?"Comparez Neuf vs Usagé vs Financement (coût total et coût mensuel)":"Compare New vs Used vs Financing (total and monthly cost)",horizon:t?"Horizon (années)":"Horizon (years)",price:t?"Prix":"Price",down:t?"Mise de fonds":"Down payment",rate:t?"Taux annuel":"Annual rate",term:t?"Terme (mois)":"Term (months)",tax:t?"Taxes (%)":"Sales tax (%)",warranty:t?"Garantie":"Warranty",fees:t?"Frais":"Fees",maint:t?"Entretien/an":"Maintenance/yr",ins:t?"Assurance/an":"Insurance/yr",energy:t?"Énergie/an":"Energy/yr",other:t?"Autres/an":"Other/yr",resale:t?"Revente (fin horizon)":"Resale (end of horizon)",compare:t?"Comparer":"Compare",results:t?"Résultats":"Results",monthlyPayment:t?"Paiement mensuel":"Monthly payment",upfrontCost:t?"Coût initial":"Upfront cost",totalCost:t?"Coût total (TCO)":"Total cost (TCO)",monthlyTCO:t?"TCO mensuel":"Monthly TCO",recommendation:t?"Recommandation":"Recommendation"},g=b=>new Intl.NumberFormat(t?"fr-CA":"en-CA",{style:"currency",currency:"CAD"}).format(b),w=(b,N,S,j)=>{b({...N,financing:{...N.financing,[S]:Is(j)}})},R=(b,N,S,j)=>{b({...N,ownership:{...N.ownership,[S]:Is(j)}})},u=(b,N,S)=>e.jsxs(M,{className:"border-2",children:[e.jsx($,{children:e.jsx(_,{children:b})}),e.jsxs(k,{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:d.price}),e.jsx(Y,{type:"number",value:N.financing.price,onChange:j=>w(S,N,"price",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.down}),e.jsx(Y,{type:"number",value:N.financing.downPayment??0,onChange:j=>w(S,N,"downPayment",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.rate}),e.jsx(Y,{type:"number",step:"0.001",value:N.financing.annualRate??0,onChange:j=>w(S,N,"annualRate",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.term}),e.jsx(Y,{type:"number",value:N.financing.termMonths??0,onChange:j=>w(S,N,"termMonths",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.tax}),e.jsx(Y,{type:"number",step:"0.001",value:N.financing.salesTaxRate??.15,onChange:j=>w(S,N,"salesTaxRate",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.warranty}),e.jsx(Y,{type:"number",value:N.financing.warrantyCost??0,onChange:j=>w(S,N,"warrantyCost",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.fees}),e.jsx(Y,{type:"number",value:N.financing.registrationFees??0,onChange:j=>w(S,N,"registrationFees",j.target.value)})]})]}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:d.maint}),e.jsx(Y,{type:"number",value:N.ownership.maintenancePerYear??0,onChange:j=>R(S,N,"maintenancePerYear",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.ins}),e.jsx(Y,{type:"number",value:N.ownership.insurancePerYear??0,onChange:j=>R(S,N,"insurancePerYear",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.energy}),e.jsx(Y,{type:"number",value:N.ownership.fuelOrEnergyPerYear??0,onChange:j=>R(S,N,"fuelOrEnergyPerYear",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.other}),e.jsx(Y,{type:"number",value:N.ownership.otherRecurringPerYear??0,onChange:j=>R(S,N,"otherRecurringPerYear",j.target.value)})]}),e.jsxs("div",{children:[e.jsx(D,{children:d.resale}),e.jsx(Y,{type:"number",value:N.ownership.expectedResaleValue??0,onChange:j=>R(S,N,"expectedResaleValue",j.target.value)})]})]})]})]});return e.jsx("div",{className:"space-y-6",children:e.jsxs(M,{className:"border-2",children:[e.jsx($,{children:e.jsx(_,{children:d.title})}),e.jsxs(k,{className:"space-y-4",children:[e.jsx("p",{className:"text-sm text-gray-600",children:d.subtitle}),e.jsxs("div",{className:"max-w-xs",children:[e.jsx(D,{children:d.horizon}),e.jsx(Y,{type:"number",value:s,onChange:b=>r(Is(b.target.value)),min:1})]}),e.jsxs("div",{className:"grid grid-cols-1 xl:grid-cols-3 gap-4",children:[u("Neuf",a,i),u("Usagé",l,c),u("Financement",o,x)]}),e.jsx("div",{className:"pt-2",children:e.jsx(q,{type:"button",onClick:()=>{},children:d.compare})}),p&&e.jsxs("div",{className:"mt-4 space-y-3",children:[e.jsx("h3",{className:"text-lg font-semibold",children:d.results}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:p.results.map(b=>e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:b.label})}),e.jsxs(k,{className:"text-sm space-y-1",children:[e.jsxs("div",{children:[e.jsxs("strong",{children:[d.monthlyPayment,":"]})," ",g(b.monthlyPayment)]}),e.jsxs("div",{children:[e.jsxs("strong",{children:[d.upfrontCost,":"]})," ",g(b.upfrontCost)]}),e.jsxs("div",{children:[e.jsxs("strong",{children:[d.totalCost,":"]})," ",g(b.totalCost)]}),e.jsxs("div",{children:[e.jsxs("strong",{children:[d.monthlyTCO,":"]})," ",g(b.monthlyTCO)]})]})]},b.label))}),e.jsxs("div",{className:"text-sm text-gray-800",children:[e.jsxs("strong",{children:[d.recommendation,":"]})," ",p.recommendation]})]})]})]})})};function Ji(n,t){return n==="free"?!1:n==="professional"?t==="free":t!=="expert"}function Ll({tool:n}){const{isEnglish:t}=Ci(),{ENABLE_ALL_TOOLS:s}=pi(),{currentPlan:r}=Ba(),a=r,i=s?!1:Ji(n.plan,a),l=t?n.titleEn:n.titleFr,c=t?n.descEn:n.descFr,o=t?n.routeEn:n.routeFr,x=n.plan==="free"?"plan-free":n.plan==="professional"?"plan-pro":"plan-expert",v=n.plan==="free"?t?"Free":"Gratuit":n.plan==="professional"?t?"Professional":"Pro":"Expert";return e.jsxs("div",{className:`mpr-result-card ${x}`,role:"region","aria-label":l,tabIndex:0,children:[e.jsxs("div",{className:"flex items-center justify-between mb-2",children:[e.jsx("h3",{className:"h3 m-0",children:l}),e.jsx("span",{className:"badge",children:v})]}),e.jsx("p",{className:"text-[16px] leading-6 text-[color:var(--mpr-text)]",children:c}),e.jsx("div",{className:"mt-3",children:i?e.jsx("a",{className:"senior-btn senior-btn-primary",href:t?"/my-budget#plans":"/mon-budget#plans",children:t?"Upgrade":"Mettre à niveau"}):e.jsx("a",{className:"senior-btn senior-btn-secondary",href:o,children:t?"Open tool":"Ouvrir l’outil"})})]})}function as(n){const t=Number(n);return Number.isFinite(t)?t:0}const Be=n=>`${(n*100).toFixed(1)} %`,zl=()=>{const{language:n}=Ke(),t=n==="fr",s={title:t?"Optimiseur de portefeuille":"Portfolio optimizer",description:t?"Allouez 60–75 % en actions selon votre âge, 12–24 mois de liquidités, et rééquilibrez à ±5 %.":"Allocate 60–75% equities by age, keep 12–24 months of cash, and rebalance at ±5%.",inputs:{age:t?"Âge":"Age",portfolioValue:t?"Valeur du portefeuille (CAD)":"Portfolio value (CAD)",monthlyEssential:t?"Dépenses essentielles mensuelles (CAD)":"Monthly essential spending (CAD)",current:t?"Allocation actuelle (%)":"Current allocation (%)",equities:t?"Actions":"Equities",bonds:t?"Obligations":"Bonds",cash:t?"Liquidités":"Cash"},target:t?"Allocation cible":"Target allocation",band:t?"Bande actions recommandée":"Recommended equity band",geo:t?"Répartition géographique (dans les actions)":"Geographic breakdown (within equities)",rebalance:t?"Plan de rééquilibrage (règle ±5 %)":"Rebalancing plan (±5% rule)",notes:"Notes"},[r,a]=m.useState(70),[i,l]=m.useState(5e5),[c,o]=m.useState(3e3),[x,v]=m.useState(65),[p,d]=m.useState(30),[g,w]=m.useState(5);m.useEffect(()=>{try{const S=localStorage.getItem("retirement_data");if(!S)return;const j=JSON.parse(S),h=j?.personal?.naissance1;let E;if(h){const y=new Date(h);Number.isNaN(y.getTime())||(E=new Date().getFullYear()-y.getFullYear(),E>0&&E<110&&a(E))}const f=j?.cashflow||{},A=["logement","servicesPublics","assurances","alimentation","transport","sante"].reduce((y,U)=>y+(Number(f[U])||0),0);A>0&&o(A);const L=j?.savings||{},I=(Number(L.reer1)||0)+(Number(L.reer2)||0)+(Number(L.celi1)||0)+(Number(L.celi2)||0)+(Number(L.placements1)||0)+(Number(L.placements2)||0)+(Number(L.epargne1)||0)+(Number(L.epargne2)||0)+(Number(L.cri1)||0)+(Number(L.cri2)||0);I>0&&l(I);const W=Tt(typeof E=="number"?E:r,A||c,I||i);v(Math.round(W.targetAllocation.equities*100)),d(Math.round(W.targetAllocation.bonds*100)),w(Math.round(W.targetAllocation.cash*100))}catch{}},[]);const R=m.useMemo(()=>{const S=Math.max(1,x+p+g);return{equities:Math.max(0,x/S),bonds:Math.max(0,p/S),cash:Math.max(0,g/S)}},[x,p,g]),u=m.useMemo(()=>Tt(r,c,i),[r,c,i]),b=m.useMemo(()=>xt(r),[r]),N=m.useMemo(()=>Wn(R,u.targetAllocation),[R,u]);return e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:s.title}),e.jsx(xe,{children:s.description})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.age}),e.jsx(Y,{type:"number",value:r,onChange:S=>a(as(S.target.value)),min:50,max:99})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.portfolioValue}),e.jsx(Y,{type:"number",value:i,onChange:S=>l(as(S.target.value)),min:1e4,step:1e3})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.monthlyEssential}),e.jsx(Y,{type:"number",value:c,onChange:S=>o(as(S.target.value)),min:500,step:50})]})]}),e.jsx(Ye,{}),e.jsxs("div",{className:"space-y-2",children:[e.jsx("div",{className:"font-semibold",children:s.inputs.current}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.equities}),e.jsx(Y,{type:"number",value:x,onChange:S=>v(as(S.target.value)),min:0,max:100})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.bonds}),e.jsx(Y,{type:"number",value:p,onChange:S=>d(as(S.target.value)),min:0,max:100})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.cash}),e.jsx(Y,{type:"number",value:g,onChange:S=>w(as(S.target.value)),min:0,max:100})]})]})]}),e.jsx(Ye,{}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.target})}),e.jsxs(k,{className:"space-y-1 text-sm",children:[e.jsxs("div",{children:[e.jsx(ee,{variant:"secondary",children:s.inputs.equities})," ",Be(u.targetAllocation.equities)]}),e.jsxs("div",{children:[e.jsx(ee,{variant:"secondary",children:s.inputs.bonds})," ",Be(u.targetAllocation.bonds)]}),e.jsxs("div",{children:[e.jsx(ee,{variant:"secondary",children:s.inputs.cash})," ",Be(u.targetAllocation.cash)]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.band})}),e.jsxs(k,{className:"text-sm",children:[Be(b.min)," – ",Be(b.max)]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.geo})}),e.jsxs(k,{className:"text-sm",children:[e.jsxs("div",{children:["Canada: ",Be(u.equityGeoBreakdown.canada)]}),e.jsxs("div",{children:["US: ",Be(u.equityGeoBreakdown.unitedStates)]}),e.jsxs("div",{children:["International: ",Be(u.equityGeoBreakdown.international)]})]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.rebalance})}),e.jsxs(k,{className:"text-sm space-y-1",children:[N.deltas.map(S=>e.jsxs("div",{children:[e.jsx(ee,{variant:Math.abs(S.delta)>=.05?"default":"secondary",children:S.asset.toUpperCase()})," ",S.delta>=0?t?"augmenter de":"increase by":t?"réduire de":"reduce by"," ",Be(Math.abs(S.delta))]},S.asset)),e.jsx("div",{className:"text-gray-600 mt-2",children:N.rule})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.notes})}),e.jsx(k,{className:"text-sm text-gray-700 space-y-1",children:u.notes.map((S,j)=>e.jsxs("div",{children:["• ",S]},j))})]})]})]})};function Ps(n){const t=Number(n);return Number.isFinite(t)?t:0}const Ut=n=>{switch(n){case"pass":return{badge:"bg-emerald-600",card:"border-emerald-300 bg-emerald-50",title:"text-emerald-800",text:"text-emerald-900"};case"warn":return{badge:"bg-amber-600",card:"border-amber-300 bg-amber-50",title:"text-amber-800",text:"text-amber-900"};case"fail":return{badge:"bg-red-600",card:"border-red-300 bg-red-50",title:"text-red-800",text:"text-red-900"}}},Ol=()=>{const{language:n}=Ke(),t=n==="fr",s={title:t?"Stress-test de retraite (aligné 60–75 % actions)":"Retirement Stress-test (aligned 60–75% equities)",description:t?"Trois chocs: séquence de -30 % / -15 %, pic d’inflation, longévité +5 ans. Basé sur la stratégie moderne prônée dans notre article.":"Three shocks: sequence -30%/-15%, inflation spike, longevity +5 years. Based on our modern allocation guidance.",inputs:{age:t?"Âge":"Age",portfolioValue:t?"Valeur du portefeuille (CAD)":"Portfolio value (CAD)",monthlyEssential:t?"Dépenses essentielles mensuelles (CAD)":"Monthly essential spending (CAD)",currentEq:t?"Actions actuelles (%)":"Current equities (%)"},overall:t?"Conclusion globale":"Overall conclusion"},[r,a]=m.useState(70),[i,l]=m.useState(5e5),[c,o]=m.useState(3e3),[x,v]=m.useState(65);m.useEffect(()=>{try{const g=localStorage.getItem("retirement_data");if(!g)return;const w=JSON.parse(g),R=w?.personal?.naissance1;let u;if(R){const A=new Date(R);Number.isNaN(A.getTime())||(u=new Date().getFullYear()-A.getFullYear(),u>0&&u<110&&a(u))}const b=w?.savings||{},N=(Number(b.reer1)||0)+(Number(b.reer2)||0)+(Number(b.celi1)||0)+(Number(b.celi2)||0)+(Number(b.placements1)||0)+(Number(b.placements2)||0)+(Number(b.epargne1)||0)+(Number(b.epargne2)||0)+(Number(b.cri1)||0)+(Number(b.cri2)||0);N>0&&l(N);const S=w?.cashflow||{},j=["logement","servicesPublics","assurances","alimentation","transport","sante"].reduce((A,L)=>A+(Number(S[L])||0),0);j>0&&o(j);const E=xt(typeof u=="number"?u:r),f=(E.min+E.max)/2*100;v(Math.round(f))}catch{}},[]);const p=m.useMemo(()=>Fn.run({},{age:r,portfolioValue:i,monthlyEssentialSpending:c,currentEquityAllocation:Math.max(0,Math.min(1,x/100))}),[r,i,c,x]),d=Ut(p.overall);return e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:s.title}),e.jsx(xe,{children:s.description})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.age}),e.jsx(Y,{type:"number",value:r,onChange:g=>a(Ps(g.target.value)),min:50,max:99})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.portfolioValue}),e.jsx(Y,{type:"number",value:i,onChange:g=>l(Ps(g.target.value)),min:1e4,step:1e3})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.monthlyEssential}),e.jsx(Y,{type:"number",value:c,onChange:g=>o(Ps(g.target.value)),min:500,step:50})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.currentEq}),e.jsx(Y,{type:"number",value:x,onChange:g=>v(Ps(g.target.value)),min:0,max:100})]})]}),e.jsx(Ye,{}),e.jsxs("div",{className:`border rounded-lg p-4 ${d.card}`,children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsx("span",{className:`text-xs px-2 py-1 rounded ${d.badge} text-white`,children:p.overall.toUpperCase()}),e.jsx("div",{className:`font-semibold ${d.title}`,children:s.overall})]}),e.jsx("ul",{className:`mt-2 list-disc pl-5 ${d.text}`,children:p.notes.map((g,w)=>e.jsx("li",{children:g},w))})]}),e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:p.scenarios.map(g=>{const w=Ut(g.level);return e.jsxs("div",{className:`border rounded-lg p-4 ${w.card}`,children:[e.jsxs("div",{className:"flex items-center gap-2 mb-1",children:[e.jsx("span",{className:`text-xs px-2 py-1 rounded ${w.badge} text-white`,children:g.level.toUpperCase()}),e.jsx("div",{className:`font-semibold ${w.title}`,children:g.title})]}),e.jsx("div",{className:`${w.text} text-sm`,children:g.summary}),e.jsx("div",{className:"mt-2 text-xs text-gray-700",children:Object.entries(g.metrics).map(([R,u])=>e.jsxs("div",{children:[e.jsxs("strong",{children:[R,":"]})," ",String(u)]},R))}),e.jsx("div",{className:"mt-2 text-xs text-gray-800",children:e.jsx("ul",{className:"list-disc pl-5",children:g.suggestions.map((R,u)=>e.jsx("li",{children:R},u))})})]},g.id)})})]})]})};function Pe(n){const t=Number(n);return Number.isFinite(t)?t:0}const Ms=(n,t)=>new Intl.NumberFormat(t,{style:"currency",currency:"CAD",maximumFractionDigits:0}).format(n),at=n=>`${(n*100).toFixed(1)} %`,Ki=n=>{switch(n){case"low":return{badge:"bg-emerald-600",title:"text-emerald-800",text:"text-emerald-900",card:"border-emerald-300 bg-emerald-50"};case"medium":return{badge:"bg-amber-600",title:"text-amber-800",text:"text-amber-900",card:"border-amber-300 bg-amber-50"};case"high":return{badge:"bg-red-600",title:"text-red-800",text:"text-red-900",card:"border-red-300 bg-red-50"}}},Vl=()=>{const{language:n}=Ke(),t=n==="fr",s=t?"fr-CA":"en-CA",r={title:t?"Analyses prédictives (IA locale)":"Predictive Analytics (local AI)",description:t?"Score de succès, risques et prévision 12 mois basés sur votre taux d’épargne, coussin, allocation et volatilité des dépenses.":"Success score, risks and 12-month forecast based on savings rate, cash cushion, allocation and expense volatility.",inputs:{age:t?"Âge":"Age",netMonthly:t?"Revenu net mensuel (CAD)":"Net monthly income (CAD)",portfolio:t?"Valeur du portefeuille (CAD)":"Portfolio value (CAD)",eqPct:t?"Actions actuelles (%)":"Current equities (%)",essentials:t?"Dépenses essentielles (CAD/mois)":"Essential expenses (CAD/mo)",logement:t?"Logement":"Housing",services:t?"Services publics":"Utilities",assurances:t?"Assurances":"Insurance",alimentation:t?"Alimentation":"Food",transport:"Transport",sante:t?"Santé":"Health",discretionary:t?"Dépenses discrétionnaires (CAD/mois)":"Discretionary (CAD/mo)",telecom:t?"Télécom":"Telecom",loisirs:t?"Loisirs":"Leisure",seasonal:t?"Dépenses saisonnières (CAD/mois moy.)":"Seasonal expenses (avg CAD/mo)"},results:{overall:t?"Probabilité de succès":"Success probability",recs:t?"Recommandations":"Recommendations",forecast:t?"Prévision du flux de trésorerie (12 mois)":"Cash flow forecast (12 months)",savingsRate:t?"Taux d'épargne":"Savings rate",cashCushion:t?"Coussin (mois)":"Cushion (months)",monthlyCf:t?"Flux mensuel":"Monthly cashflow",eqMisalign:t?"Écart d'actions vs cible":"Equity misalignment",expVol:t?"Volatilité dépenses (proxy)":"Expense volatility (proxy)"}},[a,i]=m.useState(70),[l,c]=m.useState(3e3),[o,x]=m.useState(5e5),[v,p]=m.useState(65),[d,g]=m.useState(1200),[w,R]=m.useState(200),[u,b]=m.useState(150),[N,S]=m.useState(600),[j,h]=m.useState(400),[E,f]=m.useState(200),[A,L]=m.useState(100),[I,F]=m.useState(300),[W,y]=m.useState(200);m.useEffect(()=>{try{const C=localStorage.getItem("retirement_data");if(!C)return;const P=JSON.parse(C),T=P?.personal?.naissance1;if(T){const ne=new Date(T);if(!Number.isNaN(ne.getTime())){const ae=new Date().getFullYear()-ne.getFullYear();ae>0&&ae<110&&i(ae);const re=xt(ae),ge=(re.min+re.max)/2*100;p(Math.round(ge))}}const G=P?.personal||{},H=Number(G.netMensuel);if(Number.isFinite(H)&&H>0)c(H);else{const ne=Number(G.salaire1)||0,ae=Number(G.salaire2)||0,re=(ne+ae)/12;re>0&&c(re)}const X=P?.savings||{},Z=(Number(X.reer1)||0)+(Number(X.reer2)||0)+(Number(X.celi1)||0)+(Number(X.celi2)||0)+(Number(X.placements1)||0)+(Number(X.placements2)||0)+(Number(X.epargne1)||0)+(Number(X.epargne2)||0)+(Number(X.cri1)||0)+(Number(X.cri2)||0);Z>0&&x(Z);const J=P?.cashflow||{};J&&(Number.isFinite(Number(J.logement))&&g(Number(J.logement)),Number.isFinite(Number(J.servicesPublics))&&R(Number(J.servicesPublics)),Number.isFinite(Number(J.assurances))&&b(Number(J.assurances)),Number.isFinite(Number(J.telecom))&&L(Number(J.telecom)),Number.isFinite(Number(J.alimentation))&&S(Number(J.alimentation)),Number.isFinite(Number(J.transport))&&h(Number(J.transport)),Number.isFinite(Number(J.sante))&&f(Number(J.sante)),Number.isFinite(Number(J.loisirs))&&F(Number(J.loisirs)),Number.isFinite(Number(J.depensesSaisonnieres))&&y(Number(J.depensesSaisonnieres)))}catch{}},[]);const U=m.useMemo(()=>({personal:{naissance1:`${new Date().getFullYear()-Math.round(a)}-01-01`,netMensuel:l},savings:{placements1:o},cashflow:{logement:d,servicesPublics:w,assurances:u,telecom:A,alimentation:N,transport:j,sante:E,loisirs:I,depensesSaisonnieres:W}}),[a,l,o,d,w,u,A,N,j,E,I,W]),V=m.useMemo(()=>{try{return Hn.analyze(U,{currentEquityAllocation:Math.max(0,Math.min(1,v/100))})}catch{return{summary:{savingsRate:0,monthlyCashflow:0,cashCushionMonths:0,equityMisalignment:0,expenseVolatilityProxy:0},successProbability:0,riskLevel:"high",recommendations:["Veuillez compléter les champs pour générer des analyses."],forecast12m:[]}}},[U,v]),O=Ki(V.riskLevel);return e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:r.title}),e.jsx(xe,{children:r.description})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.age}),e.jsx(Y,{type:"number",value:a,onChange:C=>i(Pe(C.target.value)),min:50,max:99})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.netMonthly}),e.jsx(Y,{type:"number",value:l,onChange:C=>c(Pe(C.target.value)),min:0,step:50})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.portfolio}),e.jsx(Y,{type:"number",value:o,onChange:C=>x(Pe(C.target.value)),min:0,step:1e3})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.eqPct}),e.jsx(Y,{type:"number",value:v,onChange:C=>p(Pe(C.target.value)),min:0,max:100})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.inputs.essentials})}),e.jsxs(k,{className:"grid grid-cols-1 md:grid-cols-3 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.logement}),e.jsx(Y,{type:"number",value:d,onChange:C=>g(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.services}),e.jsx(Y,{type:"number",value:w,onChange:C=>R(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.assurances}),e.jsx(Y,{type:"number",value:u,onChange:C=>b(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.alimentation}),e.jsx(Y,{type:"number",value:N,onChange:C=>S(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.transport}),e.jsx(Y,{type:"number",value:j,onChange:C=>h(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.sante}),e.jsx(Y,{type:"number",value:E,onChange:C=>f(Pe(C.target.value))})]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.inputs.discretionary})}),e.jsxs(k,{className:"grid grid-cols-1 md:grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.telecom}),e.jsx(Y,{type:"number",value:A,onChange:C=>L(Pe(C.target.value))})]}),e.jsxs("div",{children:[e.jsx(D,{children:r.inputs.loisirs}),e.jsx(Y,{type:"number",value:I,onChange:C=>F(Pe(C.target.value))})]}),e.jsxs("div",{className:"md:col-span-2",children:[e.jsx(D,{children:r.inputs.seasonal}),e.jsx(Y,{type:"number",value:W,onChange:C=>y(Pe(C.target.value))})]})]})]}),e.jsxs(M,{className:`border ${O.card}`,children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.overall})}),e.jsxs(k,{className:"text-sm",children:[e.jsxs("div",{className:"flex items-center gap-3",children:[e.jsxs("span",{className:`text-xs px-2 py-1 rounded ${O.badge} text-white`,children:[Math.round((V.successProbability||0)*100),"%"]}),e.jsx("div",{className:`font-semibold ${O.title}`,children:V.riskLevel.toUpperCase()})]}),e.jsx("div",{className:`${O.text} mt-2`,children:t?"Probabilité que votre plan se maintienne selon vos paramètres actuels.":"Probability that your plan holds given current parameters."})]})]})]}),e.jsx(Ye,{}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-5 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.savingsRate})}),e.jsx(k,{className:"text-2xl font-bold text-blue-700",children:at(V.summary.savingsRate)})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.cashCushion})}),e.jsx(k,{className:"text-2xl font-bold text-indigo-700",children:V.summary.cashCushionMonths})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.monthlyCf})}),e.jsx(k,{className:"text-2xl font-bold text-emerald-700",children:Ms(V.summary.monthlyCashflow,s)})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.eqMisalign})}),e.jsx(k,{className:"text-2xl font-bold text-orange-700",children:at(V.summary.equityMisalignment)})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.expVol})}),e.jsx(k,{className:"text-2xl font-bold text-red-700",children:at(V.summary.expenseVolatilityProxy)})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.recs})}),e.jsx(k,{className:"text-sm text-gray-800 space-y-1",children:V.recommendations.length===0?e.jsx("div",{children:t?"Aucune recommandation spécifique.":"No specific recommendations."}):V.recommendations.map((C,P)=>e.jsxs("div",{children:["• ",C]},P))})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:r.results.forecast})}),e.jsx(k,{children:e.jsx("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-2 text-sm",children:V.forecast12m.map(C=>e.jsxs("div",{className:"p-3 rounded-lg border",children:[e.jsx("div",{className:"font-semibold",children:t?`Mois ${C.monthIndex}`:`Month ${C.monthIndex}`}),e.jsxs("div",{className:"text-gray-700",children:[t?"Attendu":"Expected",": ",Ms(C.expected,s)]}),e.jsxs("div",{className:"text-gray-500",children:[t?"Intervalle":"Range",": ",Ms(C.lower,s)," — ",Ms(C.upper,s)]})]},C.monthIndex))})})]})]})]})};function qe(n){const t=Number(n);return Number.isFinite(t)?t:0}function Se(n,t){return new Intl.NumberFormat(t?"fr-CA":"en-CA",{style:"currency",currency:"CAD",maximumFractionDigits:0}).format(n)}function Xi(n){return n?["logement","servicesPublics","assurances","telecom","alimentation","transport","sante","loisirs","depensesSaisonnieres"].reduce((r,a)=>r+(Number(n[a])||0),0)*12:0}function Zi(n){if(!n)return;const t=new Date(n);if(!Number.isNaN(t.getTime()))return new Date().getFullYear()-t.getFullYear()}function nt(n){return n>=.55?"bg-red-600 text-white":n>=.45?"bg-red-400 text-white":n>=.35?"bg-amber-500 text-white":n>=.25?"bg-amber-300 text-black":"bg-emerald-200 text-black"}function rt(n){return n>0?"bg-red-500 text-white":"bg-emerald-200 text-black"}function el(n,t,s,r){const a=t.province??"QC",i=[],l=70,c=70;let o={...n};for(let x=0;x=l&&!o.cppAnnual,d=(t.includeOAS??!0)&&v>=c&&!o.oasAnnual,g=Ue.computeTaxYear({ordinaryIncome:0,eligiblePensionIncome:0,cpp:o.cppAnnual||0,oas:o.oasAnnual||0,eligibleDividends:0,nonEligibleDividends:0,capitalGains:0,age:v,province:a}).netIncome,w=Math.max(0,r-g);let R=0,u=Math.max(1e3,o.rrsp),b=0;for(let S=0;S<24;S++){const j=(R+u)/2,E=Ue.computeTaxYear({ordinaryIncome:j,eligiblePensionIncome:0,cpp:o.cppAnnual||0,oas:o.oasAnnual||0,eligibleDividends:0,nonEligibleDividends:0,capitalGains:0,age:v,province:a}).netIncome-g;if(Math.abs(E-w)<=1){b=j;break}E{const{language:n}=Ke(),t=n==="fr",s={title:t?"Laboratoire d’optimisation fiscale (v1)":"Tax Optimization Lab (v1)",desc:t?"Optimiseur baseline (Greedy): Non-enregistré → REER → CELI, avec démarrage CPP/SV configurable. Comparez au plan RRSP-seulement.":"Baseline optimizer (Greedy): Non-registered → RRSP → TFSA, with configurable CPP/OAS start. Compare against RRSP-only plan.",inputs:{startAge:t?"Âge de départ":"Start age",horizon:t?"Horizon (années)":"Horizon (years)",targetNet:t?"Revenu net cible (annuel, CAD)":"Target net income (annual, CAD)",balances:t?"Soldes initiaux":"Opening balances",tfsa:"TFSA / CELI",non:t?"Non-enregistré":"Non-registered",rrsp:"RRSP / REER",rrif:"RRIF / FERR",startCPP:t?"Début RPC/QPP à (âge)":"Start CPP/QPP at (age)",startOAS:t?"Début SV/OAS à (âge)":"Start OAS at (age)",optimize:t?"Optimiser":"Optimize",compare:t?"Comparer (avant / après)":"Compare (before / after)"},results:{summary:t?"Résultats":"Results",optimizer:t?"Optimiseur (Greedy)":"Optimizer (Greedy)",baseline:t?"RRSP uniquement (référence)":"RRSP only (reference)",totalTax:t?"Impôt total (30 ans)":"Total tax (30y)",metTarget:t?"Objectif net atteint":"Target met",heatmaps:t?"Heatmaps (MTR / Récup. SV / SRG)":"Heatmaps (MTR / OAS clawback / GIS)",year:t?"Année":"Year",age:t?"Âge":"Age",tax:t?"Impôt":"Tax",net:"Net",wTFSA:"TFSA",wNon:t?"Non-ENR":"Non-Reg",wRRSP:"RRSP",wRRIF:"RRIF"}},[r,a]=m.useState(65),[i,l]=m.useState(30),[c,o]=m.useState(42e3),[x,v]=m.useState({tfsa:3e4,nonRegistered:6e4,rrsp:25e4,rrif:0,cppAnnual:0,oasAnnual:0}),[p,d]=m.useState(70),[g,w]=m.useState(70);m.useEffect(()=>{try{const z=localStorage.getItem("retirement_data");if(!z)return;const le=JSON.parse(z),Ne=Zi(le?.personal?.naissance1);Ne&&Ne>0&&Ne<110&&a(Ne);const fe=Xi(le?.cashflow);fe>0&&o(Math.round(fe));const we=le?.savings||{},$e=(Number(we.celi1)||0)+(Number(we.celi2)||0),He=(Number(we.placements1)||0)+(Number(we.placements2)||0)+(Number(we.epargne1)||0)+(Number(we.epargne2)||0),Ss=(Number(we.reer1)||0)+(Number(we.reer2)||0),At=0;v(Ha=>({...Ha,tfsa:$e,nonRegistered:He,rrsp:Ss,rrif:At}))}catch{}},[]);const[R,u]=m.useState(null),[b,N]=m.useState(null),[S,j]=m.useState(null),[h,E]=m.useState(!1),[f,A]=m.useState(null),[L,I]=m.useState(!1),[F,W]=m.useState(null),[y,U]=m.useState(null),[V,O]=m.useState(null),[C,P]=m.useState(null),[T,G]=m.useState(null),[H,X]=m.useState(null),[Z,J]=m.useState(120),[ne,ae]=m.useState(5e3),[re,ge]=m.useState(1),[Ee,Q]=m.useState(.25),[Ie,Ve]=m.useState(0),[ds,jt]=m.useState(0),[Ua,bt]=m.useState(0),[yt,As]=m.useState(null),Fe=m.useMemo(()=>({province:"QC",startAge:r,grossReturnTFSA:.04,grossReturnNonReg:.04,grossReturnRRSP:.04,grossReturnRRIF:.04,inflation:.03,includeCPP:!0,includeOAS:!0,nonRegCapitalGainsRatio:Ee}),[r,Ee]),Nt=()=>{const z={opening:x,assumptions:Fe,horizonYears:i,targetNetAnnual:c,startCPPAt:p,startOASAt:g},le=Ue.greedyOptimize(z),Ne=Ue.simulateYears(x,Fe,le,i);if(u(Ne),W(le),L)try{const fe=Ue.evaluateRobustness({opening:x,assumptions:Fe,decisions:le,horizonYears:i,targetNetAnnual:c},t?"fr":"en");P(fe)}catch{}},Ya=()=>{Nt();const z=el(x,Fe,i,c),le=Ue.simulateYears(x,Fe,z,i);if(N(le),U(z),L)try{const Ne=Ue.evaluateRobustness({opening:x,assumptions:Fe,decisions:z,horizonYears:i,targetNetAnnual:c},t?"fr":"en");X(Ne)}catch{}},Qa=()=>{E(!0),j(null),A(null),Ve(0),jt(0),bt(0);try{const z={opening:x,assumptions:Fe,horizonYears:i,targetNetAnnual:c,startCPPAt:p,startOASAt:g,beamWidth:Z,stepSize:ne,weightTargetMiss:re},le=new Worker(new URL("/assets/dpBeamWorker-C9F8g5AI.js",import.meta.url),{type:"module"});As(le),le.onmessage=Ne=>{const fe=Ne.data;if(fe?.type==="PROGRESS"&&(Ve(fe.payload.year),jt(fe.payload.bestScore),bt(fe.payload.beamCount)),fe?.type==="RESULT"){j(fe.payload.results),A(fe.payload.score),E(!1);try{if(O(fe.payload.decisions||null),L&&(fe.payload.decisions?.length||0)>0){const we=Ue.evaluateRobustness({opening:x,assumptions:Fe,decisions:fe.payload.decisions,horizonYears:i,targetNetAnnual:c},t?"fr":"en");G(we)}}catch{}le.terminate(),As(null)}fe?.type==="ERROR"&&(E(!1),le.terminate(),As(null))},le.postMessage({type:"RUN",params:z})}catch{E(!1);try{yt?.terminate()}catch{}As(null)}},Wa=()=>{try{yt?.postMessage({type:"CANCEL"})}catch{}},Fa=async()=>{try{const z=t?"fr":"en";let le;try{const $e=localStorage.getItem("retirement_data");if($e){const Ss=JSON.parse($e)?.personal||{};le=[Ss.prenom1,Ss.nom1].filter(Boolean).join(" ")||void 0}}catch{}const Ne=await Ue.generateTaxOptimizationSummary({language:z,clientName:le,horizonYears:i,targetNetAnnual:c,greedy:R?{totalTax:Math.round(R.reduce(($e,He)=>$e+(He.tax.totalTax||0),0)),robust:C||void 0}:void 0,dp:S?{totalTax:Math.round(S.reduce(($e,He)=>$e+(He.tax.totalTax||0),0)),robust:T||void 0,score:f??void 0}:void 0,baseline:b?{totalTax:Math.round(b.reduce(($e,He)=>$e+(He.tax.totalTax||0),0)),robust:H||void 0}:void 0}),fe=URL.createObjectURL(Ne),we=document.createElement("a");we.href=fe,we.download=t?"Optimisation_fiscale_resume.pdf":"Tax_Optimization_Summary.pdf",we.click(),URL.revokeObjectURL(fe)}catch{}},Ys=z=>z?Math.round(z.reduce((le,Ne)=>le+(Ne.tax.totalTax||0),0)):0,wt=z=>z?z.filter(le=>le.tax.netIncome>=c-50).length:0;return e.jsxs(M,{children:[e.jsxs($,{children:[e.jsx(_,{children:s.title}),e.jsx(xe,{children:s.desc})]}),e.jsxs(k,{className:"space-y-6",children:[e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.startAge}),e.jsx(Y,{type:"number",value:r,onChange:z=>a(qe(z.target.value)),min:50,max:100})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.horizon}),e.jsx(Y,{type:"number",value:i,onChange:z=>l(qe(z.target.value)),min:5,max:40})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.targetNet}),e.jsx(Y,{type:"number",value:c,onChange:z=>o(qe(z.target.value)),min:12e3,step:1e3})]})]}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-4 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.inputs.balances})}),e.jsxs(k,{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.tfsa}),e.jsx(Y,{type:"number",value:x.tfsa,onChange:z=>v({...x,tfsa:qe(z.target.value)})})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.non}),e.jsx(Y,{type:"number",value:x.nonRegistered,onChange:z=>v({...x,nonRegistered:qe(z.target.value)})})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.rrsp}),e.jsx(Y,{type:"number",value:x.rrsp,onChange:z=>v({...x,rrsp:qe(z.target.value)})})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.rrif}),e.jsx(Y,{type:"number",value:x.rrif,onChange:z=>v({...x,rrif:qe(z.target.value)})})]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:"CPP/OAS"})}),e.jsxs(k,{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.startCPP}),e.jsx(Y,{type:"number",value:p,onChange:z=>d(qe(z.target.value)),min:60,max:70})]}),e.jsxs("div",{children:[e.jsx(D,{children:s.inputs.startOAS}),e.jsx(Y,{type:"number",value:g,onChange:z=>w(qe(z.target.value)),min:65,max:70})]}),e.jsxs("div",{className:"col-span-2 flex gap-2 pt-2",children:[e.jsx(q,{onClick:Nt,children:s.inputs.optimize}),e.jsx(q,{variant:"outline",onClick:Ya,children:s.inputs.compare}),e.jsx(q,{variant:"secondary",onClick:Qa,disabled:h,children:t?"Optimiser v2 (DP/Beam)":"Optimize v2 (DP/Beam)"})]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:t?"Réglages avancés":"Advanced settings"})}),e.jsxs(k,{className:"grid grid-cols-2 gap-3",children:[e.jsxs("div",{children:[e.jsx(D,{children:"Beam width"}),e.jsx(Y,{type:"number",value:Z,onChange:z=>J(qe(z.target.value)),min:20,max:500})]}),e.jsxs("div",{children:[e.jsx(D,{children:t?"Taille du pas ($)":"Step size ($)"}),e.jsx(Y,{type:"number",value:ne,onChange:z=>ae(qe(z.target.value)),min:500,step:500})]}),e.jsxs("div",{children:[e.jsx(D,{children:t?"Poids écart objectif":"Target miss weight"}),e.jsx(Y,{type:"number",value:re,onChange:z=>ge(Number(z.target.value)||0),min:0,step:.1})]}),e.jsxs("div",{children:[e.jsx(D,{children:t?"Ratio gains en capital (Non-enr.)":"Capital gains ratio (Non-reg)"}),e.jsx(Y,{type:"number",value:Ee,onChange:z=>Q(Number(z.target.value)||0),min:0,max:1,step:.05})]}),e.jsxs("div",{className:"col-span-2 flex items-end gap-2",children:[e.jsxs("div",{children:[e.jsx(D,{htmlFor:"robust-mode-toggle",children:t?"Mode robuste":"Robust mode"}),e.jsxs("div",{className:"flex items-center gap-2",children:[e.jsx("input",{id:"robust-mode-toggle",type:"checkbox",checked:L,onChange:z=>I(z.target.checked),"aria-label":t?"Activer le mode robuste":"Enable robust mode"}),e.jsx("span",{className:"text-xs text-gray-600",children:t?"Évalue des scénarios de chocs et calcule un score robuste":"Evaluate shock scenarios and compute a robust score"})]})]}),h&&e.jsxs("div",{className:"text-xs text-gray-600",children:[t?"Progression":"Progress"," — ",t?"Année":"Year"," ",Ie," • ","Score"," ",Math.round(ds)," • ",t?"Faisceau":"Beam"," ",Ua]}),e.jsx(q,{variant:"destructive",onClick:Wa,disabled:!h,children:t?"Arrêter":"Stop"})]})]})]})]}),L&&e.jsxs(e.Fragment,{children:[e.jsx(Ye,{}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:t?"Robustesse — Greedy":"Robustness — Greedy"})}),e.jsx(k,{className:"text-sm",children:C?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:["Score: ",e.jsx("strong",{children:C.robustScore})]}),e.jsx("div",{className:"mt-2 text-xs text-gray-700",children:C.explanations.map((z,le)=>e.jsxs("div",{children:["• ",z]},le))})]}):e.jsx("div",{className:"text-gray-500",children:t?"Aucune donnée":"No data"})})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:"DP/Beam"})}),e.jsx(k,{className:"text-sm",children:T?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:["Score: ",e.jsx("strong",{children:T.robustScore})]}),e.jsx("div",{className:"mt-2 text-xs text-gray-700",children:T.explanations.map((z,le)=>e.jsxs("div",{children:["• ",z]},le))})]}):e.jsx("div",{className:"text-gray-500",children:t?"Aucune donnée":"No data"})})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:t?"RRSP seulement":"RRSP only"})}),e.jsx(k,{className:"text-sm",children:H?e.jsxs(e.Fragment,{children:[e.jsxs("div",{children:["Score: ",e.jsx("strong",{children:H.robustScore})]}),e.jsx("div",{className:"mt-2 text-xs text-gray-700",children:H.explanations.map((z,le)=>e.jsxs("div",{children:["• ",z]},le))})]}):e.jsx("div",{className:"text-gray-500",children:t?"Aucune donnée":"No data"})})]})]}),e.jsx("div",{className:"flex gap-2",children:e.jsx(q,{onClick:Fa,children:t?"Exporter PDF (résumé robuste)":"Export PDF (robust summary)"})})]}),e.jsx(Ye,{}),e.jsxs("div",{children:[e.jsx("div",{className:"text-lg font-semibold mb-2",children:s.results.summary}),e.jsxs("div",{className:"grid grid-cols-1 md:grid-cols-3 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.results.optimizer})}),e.jsxs(k,{className:"text-sm",children:[e.jsxs("div",{children:[s.results.totalTax,": ",e.jsx("strong",{children:Se(Ys(R),t)})]}),e.jsxs("div",{children:[s.results.metTarget,": ",e.jsx("strong",{children:R?`${wt(R)}/${R.length}`:"-"})]})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:"DP/Beam (v2)"})}),e.jsxs(k,{className:"text-sm",children:[e.jsxs("div",{children:[s.results.totalTax,": ",e.jsx("strong",{children:Se(Ys(S),t)})]}),e.jsxs("div",{children:[s.results.metTarget,": ",e.jsx("strong",{children:S?`${S.filter(z=>z.tax.netIncome>=c-50).length}/${S.length}`:"-"})]}),f!=null&&e.jsxs("div",{children:["Score: ",e.jsx("strong",{children:Math.round(f)})]}),h&&e.jsx("div",{className:"text-gray-500 mt-1",children:t?"Calcul en cours…":"Computing…"})]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.results.baseline})}),e.jsxs(k,{className:"text-sm",children:[e.jsxs("div",{children:[s.results.totalTax,": ",e.jsx("strong",{children:Se(Ys(b),t)})]}),e.jsxs("div",{children:[s.results.metTarget,": ",e.jsx("strong",{children:b?`${wt(b)}/${b.length}`:"-"})]})]})]})]})]}),(R||b)&&e.jsxs(e.Fragment,{children:[e.jsx(Ye,{}),e.jsx("div",{className:"text-lg font-semibold",children:s.results.heatmaps}),e.jsxs("div",{className:"grid grid-cols-1 lg:grid-cols-3 gap-4",children:[e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.results.optimizer})}),e.jsxs(k,{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs",children:[e.jsx("div",{className:"font-semibold",children:s.results.year}),e.jsx("div",{className:"font-semibold",children:s.results.age}),e.jsx("div",{className:"font-semibold",children:"MTR"}),e.jsx("div",{className:"font-semibold",children:"OAS"}),e.jsx("div",{className:"font-semibold",children:"GIS"}),e.jsx("div",{className:"font-semibold",children:s.results.tax})]}),R?.map(z=>e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs items-center",children:[e.jsx("div",{children:z.yearIndex+1}),e.jsx("div",{children:z.age}),e.jsx("div",{children:e.jsxs("span",{className:`px-2 py-1 rounded ${nt(z.mtrApprox||0)}`,children:[((z.mtrApprox||0)*100).toFixed(0),"%"]})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${rt(z.tax.oasClawback)}`,children:z.tax.oasClawback>0?"Claw":"OK"})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${z.tax.gisBenefit>0?"bg-emerald-300 text-black":"bg-gray-200 text-black"}`,children:z.tax.gisBenefit>0?"GIS+":"—"})}),e.jsx("div",{children:Se(z.tax.totalTax,t)})]},z.yearIndex))]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:"DP/Beam (v2)"})}),e.jsxs(k,{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs",children:[e.jsx("div",{className:"font-semibold",children:s.results.year}),e.jsx("div",{className:"font-semibold",children:s.results.age}),e.jsx("div",{className:"font-semibold",children:"MTR"}),e.jsx("div",{className:"font-semibold",children:"OAS"}),e.jsx("div",{className:"font-semibold",children:"GIS"}),e.jsx("div",{className:"font-semibold",children:s.results.tax})]}),S?.map(z=>e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs items-center",children:[e.jsx("div",{children:z.yearIndex+1}),e.jsx("div",{children:z.age}),e.jsx("div",{children:e.jsxs("span",{className:`px-2 py-1 rounded ${nt(z.mtrApprox||0)}`,children:[((z.mtrApprox||0)*100).toFixed(0),"%"]})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${rt(z.tax.oasClawback)}`,children:z.tax.oasClawback>0?"Claw":"OK"})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${z.tax.gisBenefit>0?"bg-emerald-300 text-black":"bg-gray-200 text-black"}`,children:z.tax.gisBenefit>0?"GIS+":"—"})}),e.jsx("div",{children:Se(z.tax.totalTax,t)})]},z.yearIndex))]})]}),e.jsxs(M,{className:"border",children:[e.jsx($,{children:e.jsx(_,{className:"text-base",children:s.results.baseline})}),e.jsxs(k,{className:"space-y-3",children:[e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs",children:[e.jsx("div",{className:"font-semibold",children:s.results.year}),e.jsx("div",{className:"font-semibold",children:s.results.age}),e.jsx("div",{className:"font-semibold",children:"MTR"}),e.jsx("div",{className:"font-semibold",children:"OAS"}),e.jsx("div",{className:"font-semibold",children:"GIS"}),e.jsx("div",{className:"font-semibold",children:s.results.tax})]}),b?.map(z=>e.jsxs("div",{className:"grid grid-cols-6 gap-2 text-xs items-center",children:[e.jsx("div",{children:z.yearIndex+1}),e.jsx("div",{children:z.age}),e.jsx("div",{children:e.jsxs("span",{className:`px-2 py-1 rounded ${nt(z.mtrApprox||0)}`,children:[((z.mtrApprox||0)*100).toFixed(0),"%"]})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${rt(z.tax.oasClawback)}`,children:z.tax.oasClawback>0?"Claw":"OK"})}),e.jsx("div",{children:e.jsx("span",{className:`px-2 py-1 rounded ${z.tax.gisBenefit>0?"bg-emerald-300 text-black":"bg-gray-200 text-black"}`,children:z.tax.gisBenefit>0?"GIS+":"—"})}),e.jsx("div",{children:Se(z.tax.totalTax,t)})]},z.yearIndex))]})]})]})]}),R&&e.jsxs(e.Fragment,{children:[e.jsx(Ye,{}),e.jsx("div",{className:"text-lg font-semibold",children:s.results.optimizer}),e.jsxs("div",{className:"overflow-auto",children:[e.jsxs("div",{className:"min-w-[900px] grid grid-cols-12 gap-2 text-xs font-semibold",children:[e.jsx("div",{children:s.results.year}),e.jsx("div",{children:s.results.age}),e.jsx("div",{children:s.results.wTFSA}),e.jsx("div",{children:s.results.wNon}),e.jsx("div",{children:s.results.wRRSP}),e.jsx("div",{children:s.results.wRRIF}),e.jsx("div",{children:"CPP"}),e.jsx("div",{children:"OAS"}),e.jsx("div",{children:s.results.tax}),e.jsx("div",{children:s.results.net}),e.jsx("div",{children:"MTR"}),e.jsx("div",{children:"OAS"})]}),R.map(z=>e.jsxs("div",{className:"grid grid-cols-12 gap-2 text-xs items-center",children:[e.jsx("div",{children:z.yearIndex+1}),e.jsx("div",{children:z.age}),e.jsx("div",{children:Se(z.decisions.withdrawTFSA,t)}),e.jsx("div",{children:Se(z.decisions.withdrawNonReg,t)}),e.jsx("div",{children:Se(z.decisions.withdrawRRSP,t)}),e.jsx("div",{children:Se(z.decisions.withdrawRRIF,t)}),e.jsx("div",{children:Se(z.incomeBreakdown.cpp,t)}),e.jsx("div",{children:Se(z.incomeBreakdown.oas,t)}),e.jsx("div",{children:Se(z.tax.totalTax,t)}),e.jsx("div",{children:Se(z.tax.netIncome,t)}),e.jsxs("div",{children:[((z.mtrApprox||0)*100).toFixed(0),"%"]}),e.jsx("div",{children:z.tax.oasClawback>0?"Claw":"—"})]},z.yearIndex))]})]})]})]})};export{Ue as $,pe as A,q as B,M as C,_s as D,jl as E,Rl as F,La as G,vl as H,Y as I,Yi as J,Gs as K,D as L,Me as M,bl as N,Va as O,ul as P,$a as Q,ft as R,fl as S,Bs as T,Ge as U,ns as V,kl as W,Dl as X,ql as Y,Pl as Z,Ml as _,bs as a,Ll as a0,ps as a1,ht as a2,Ba as a3,Sl as a4,Cl as a5,Nl as a6,wl as a7,Al as a8,yl as a9,dt as aa,Ye as ab,Us as ac,_a as ad,si as ae,Gi as af,gl as ag,se as ah,zl as ai,Ol as aj,Vl as ak,$l as al,dl as am,xl as an,oi as ao,ci as ap,di as aq,ml as ar,pi as as,pl as at,hl as au,Tl as av,ys as b,Ns as c,gt as d,ee as e,$ as f,_ as g,xe as h,k as i,ws as j,be as k,ye as l,We as m,he as n,Qe as o,Ci as p,K as q,me as r,oe as s,ue as t,wi as u,ce as v,B as w,ka as x,El as y,Il as z};