1"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[78853],{9406:(e,r,t)=>{t.d(r,{Bl:()=>i,HU:()=>a,YG:()=>o,cH:()=>s,r6:()=>n});let i=["prudent","central","ambitieux"],n=["solde_bancaire","cumul_encaissements"],a=["avance_associe","obligation_fiscale","creance","autre"],s=["constante","trajectoire"],o=["payroll","overhead","ia","revenue","frais_transaction"]},11430:(e,r,t)=>{t.d(r,{D:()=>i});function i(e){return!!e&&"object"==typeof e&&!!e.data&&"object"==typeof e.data&&null!==e.data&&"roles"in e.data&&void 0!==e.params&&null!==e.params}},13850:(e,r,t)=>{t.d(r,{Ep:()=>o,IT:()=>a,Tx:()=>s,dj:()=>n,yy:()=>u});var i=t(17744);function n(e,r){let t=e.map(e=>r.find(r=>r.id===e)).filter(e=>!!e);return 1===t.length?{kind:"personne",id:t[0].id,nom:t[0].nom}:t.length>1?{kind:"a_repartir",motif:`plusieurs satur\xe9s : ${t.map(e=>e.nom).join(", ")}`}:{kind:"a_repartir",motif:"personne satur\xe9e non r\xe9solue dans le document"}}function a(e){return(0,i.iD)(e.assignee_id)?{kind:"a_repartir",motif:`t\xe2che critique non attribu\xe9e${e.nom?` (\xab ${e.nom} \xbb)`:""}`}:{kind:"a_repartir",motif:"t\xe2che d\xe9j\xe0 assign\xe9e â revoir lâaction"}}function s(e,r){let t=[...new Set(e.map(e=>(e||"").trim()).filter(e=>e.length>0))].map(e=>r.find(r=>r.id===e)).filter(e=>!!e);return 1===t.length?{kind:"personne",id:t[0].id,nom:t[0].nom}:t.length>1?{kind:"personnes",personnes:t.map(e=>({id:e.id,nom:e.nom}))}:{kind:"a_repartir",motif:"bus factor sans titulaire r\xe9solu dans le document"}}function o(e){for(let r of e.decisions){let t=(r.responsable||"").trim();if(!t)continue;let i=e.people.find(e=>e.id===t||e.nom.toLowerCase()===t.toLowerCase());if(i)return{kind:"personne",id:i.id,nom:i.nom}}for(let r of e.preferIds??[])e.people.find(e=>e.id===r);return{kind:"a_repartir",motif:"aucun decisions.responsable Finance/Direction dans le document"}}function u(e){return"personne"===e.kind?e.nom:"personnes"===e.kind?e.personnes.map(e=>e.nom).join(", "):`\xe0 r\xe9partir (${e.motif})`}},17744:(e,r,t)=>{function i(e){if(null==e)return!0;let r=String(e).trim();return""===r||"non-attribue"===r}function n(e){return i(e)?"":String(e).trim()}function a(e,r){return r?e?i(e.assignee_id)?{ok:!0,assignee_id:r}:{ok:!1,reason:"not_free"}:{ok:!1,reason:"missing_task"}:{ok:!1,reason:"no_binding"}}function s(e,r){if(!r)return{ok:!1,reason:"no_binding"};if(!e)return{ok:!1,reason:"missing_task"};let t=n(e.assignee_id);return i(t)?{ok:!1,reason:"not_free"}:t!==r?{ok:!1,reason:"not_mine"}:{ok:!0,assignee_id:""}}function o(e,r,t){return r?e?i(e.assignee_id)?a(e,r):n(e.assignee_id)===r||t?{ok:!0,assignee_id:r}:{ok:!1,reason:"not_free"}:{ok:!1,reason:"missing_task"}:{ok:!1,reason:"no_binding"}}function u(e,r,t){return e.map(e=>e.id===r?{...e,assignee_id:n(t)}:e)}t.d(r,{Fp:()=>s,QK:()=>a,hO:()=>n,iD:()=>i,po:()=>u,s9:()=>o})},18442:(e,r,t)=>{t.d(r,{Lt:()=>s,X_:()=>o,du:()=>c,jS:()=>l,zd:()=>u});var i=t(43228),n=t(49705),a=t(42262);function s(e){var r,t;let n=e.now??new Date,s=e.monthKey?(r=e.payments,t=e.monthKey,r.filter(e=>{let r=(0,a.xG)(String(e.received_at).slice(0,10));return null!=r&&r<=t})):e.payments,o={tps_pct:e.taxes.tps_pct??void 0,tvq_pct:e.taxes.tvq_pct??void 0},u=function(e,r=new Date,t){if("date"===e.reserve_depuis&&e.reserve_depuis_date){let r=e.reserve_depuis_date.slice(0,10);if(!/^\d{4}-\d{2}-\d{2}$/.test(r))return null;let i=t?`depuis le ${r}, arr\xeat\xe9 \xe0 ${t}`:`depuis le ${r}`;return{sinceIso:`${r}T00:00:00.000`,label:i}}return"debut_trimestre"===e.reserve_depuis||null==e.reserve_depuis?t?{sinceIso:function(e){let[r,t]=e.split("-").map(Number);return`${r}-${String(t<=3?1:t<=6?4:t<=9?7:10).padStart(2,"0")}-01T00:00:00.000`}(t),label:function(e){let[r,t]=e.split("-").map(Number),i=t<=3?1:t<=6?2:t<=9?3:4;return`T${i} ${r} (${1===i?"janvierâmars":2===i?"avrilâjuin":3===i?"juilletâseptembre":"octobreâd\xe9cembre"}), arr\xeat\xe9 \xe0 ${e}`}(t)}:{sinceIso:function(e=new Date){let r,t,{y:i,m:n}=(r=new Intl.DateTimeFormat("en-CA",{timeZone:"America/Toronto",year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),{y:(t=e=>Number(r.find(r=>r.type===e)?.value))("year"),m:t("month"),day:t("day")}),a=String(n<=3?1:n<=6?4:n<=9?7:10).padStart(2,"0");return`${i}-${a}
1-01T00:00:00.000`}(r),label:"depuis le d\xe9but du trimestre courant"}:null}(e.taxes,n,e.monthKey);if(!(0,i.ww)(o)||!u)return{status:"non_parametre",reserve_cad:null,encaissement_brut_cad:u?(0,i.tr)(s,u.sinceIso):0,ca_ht_cad:null,period_start_iso:u?.sinceIso??null,period_label:u?.label??"p\xe9riode non configur\xe9e",mention:i.vz,badge:"non param\xe9tr\xe9"};let l=(0,i.tr)(s,u.sinceIso),c=(0,i.Eg)(l,o);return"ok"!==c.status?{status:"non_parametre",reserve_cad:null,encaissement_brut_cad:l,ca_ht_cad:null,period_start_iso:u.sinceIso,period_label:u.label,mention:i.vz,badge:"non param\xe9tr\xe9"}:{status:"ok",reserve_cad:c.taxes_estimees_cad,encaissement_brut_cad:c.encaissement_brut_cad,ca_ht_cad:c.ca_ht_cad,period_start_iso:u.sinceIso,period_label:u.label,mention:`${i.Jz}.`,badge:"calcul\xe9 â non saisi"}}function o(e){return null!=e&&(null!=e.pct&&Number.isFinite(e.pct)||null!=e.fixe_par_transaction_cad&&Number.isFinite(e.fixe_par_transaction_cad))}function u(e){if(!o(e.frais))return{status:"non_parametre",montant_cad:null,note:i.vz};let r=e.frais.pct??0,t=e.frais.fixe_par_transaction_cad??0,n=e.encaissementBrutCad,s=Math.max(0,Math.floor(e.transactionCount)),u=(0,a.nF)(r*n),l=(0,a.nF)(t*s);return{status:"ok",montant_cad:(0,a.nF)(u+l),pct_part_cad:u,fixe_part_cad:l,encaissement_brut_cad:n,transaction_count:s,note:"Part fixe : nombre r\xe9el de partner_payments sur la p\xe9riode + nombre de payants (abonnements) â approximation document\xe9e ; pas une r\xe9conciliation Stripe."}}function l(e,r){if(!o(r))return null;let t=(e??[]).find(e=>"c-stripe"===e.id);if(!t)return null;let i=Number(t.pct)||0;return i>0?(t.type&&t.type,{message:"frais de transaction compt\xe9s deux fois : la ligne c-stripe de vos co\xfbts g\xe9n\xe9raux fait doublon avec le mod\xe8le de frais â mettez-la \xe0 0",href:"/pilotage/finances",cStripePct:i}):null}function c(e,r){if(null==r||!Number.isFinite(r))return null;let t=(0,n.eN)((0,n.xJ)(e));return t>0?r/t*100:null}},23112:(e,r,t)=>{t.d(r,{d2:()=>a,wn:()=>s});var i=t(45214);function n(e){return Math.round(e).toLocaleString("fr-CA")}function a(e){var r;let t=e.bascule_etp??i.s1,a=e.runway_critique_mois??i.R$,s=e.besoin;if(null!=s.autoPotentielMax&&s.autoPotentielMax>=.3)return{action:"automatiser",raison:`potentiel d'automatisation renseign\xe9 (${Math.round(100*s.autoPotentielMax)} %) â r\xe9f\xe9rentiel ${i.KH}`,condition:null};let o=(0,i.u7)(s.domaine),u=s.besoinETP<t;if((s.intermittente||!o&&u||!o&&s.besoinETP>0&&u)&&(!o||s.intermittente))return{action:"externaliser",raison:s.intermittente?`charge intermittente hors embauche continue (domaine ${s.domaine})`:`hors cÅur Dilimo et besoin ${s.besoinETP.toFixed(2)} ETP < seuil de bascule ${t} ETP (r\xe9f. ${i.KH})`,condition:null};if(!o&&u)return{action:"externaliser",raison:`besoin ${s.besoinETP.toFixed(2)} ETP < bascule ${t} ETP \xb7 domaine non-cÅur`,condition:null};let l=(r=s.domaine,i.KS.find(e=>e.domaines.includes(r))??null);if(u&&o)return{action:"embaucher_bloque",financable:!1,motif_blocage:"sous_bascule",poste:l,raison:`besoin ${s.besoinETP.toFixed(2)} ETP sous le seuil de bascule ${t} ETP â embauche non justifi\xe9e`,condition:`reprendre quand le besoin continu d\xe9passe ${t} ETP (r\xe9f. ${i.KH})`};if(l){let r=function(e,r){let t=(0,i.s8)(e);switch(e.kind){case"usagers":{let i=r.usagers;return{ok:null!=i&&i>=e.seuil,actuel:null==i?"non mesur\xe9":String(i),requis:t}}case"clients_payants":{let i=r.clients_payants;return{ok:null!=i&&i>=e.seuil,actuel:null==i?"non mesur\xe9":String(i),requis:t}}case"demos_mois":{let i=r.demos_mois;return{ok:null!=i&&i>=e.seuil,actuel:null==i?"non mesur\xe9":String(i),requis:t}}case"opportunites_actives":{let i=r.opportunites_actives;return{ok:null!=i&&i>=e.seuil,actuel:null==i?"non mesur\xe9":String(i),requis:t}}case"arr_cad":{let i=r.arr_cad;return{ok:null!=i&&i>=e.seuil,actuel:null==i?"non mesur\xe9":`${i} $`,requis:t}}case"serie_a":return{ok:r.serie_a_levee,actuel:r.serie_a_levee?"lev\xe9e":"non lev\xe9e",requis:t};default:return{ok:!1,actuel:"?",requis:t}}}(l.jalon,e.activite);if(!r.ok)return{action:"embaucher_bloque",financable:!1,motif_blocage:"jalon",poste:l,raison:`jalon non atteint â ${l.label} \xe0 partir de ${r.requis}, ${r.actuel} aujourd'hui`,condition:`attendre le jalon ${r.requis} (r\xe9f. ${i.KH})`}}let c=function(e){var r;let t=e.runway_critique_mois??i.R$,a=e.capacite??null,s=a?.horizon_mois??i.tT,o=(r=a?.courbe,r?.length?r.slice(0,Math.max(0,s)).reduce((e,r)=>e+(Number.isFinite(r.entrees)?r.entrees:0),0):0),u=a?.tresorerie_cad??null,l=a?.cout_mensuel_cad??null,c=(null!=u&&Number.isFinite(u)?u:0)+o,d=null!=l&&Number.isFinite(l)?l*s:null,p=null!=d&&c<d-1e-6,m=null!=e.runway_mois&&Number.isFinite(e.runway_mois)&&e.runway_mois<t;if(!m&&!p)return{ok:!0,motif:null,raison:null,condition:null};let _=function(e){let r=e.horizon_mois,t=e.seuil_solde_cad??0,a=function(e,r){if(!e?.length)return null;let t=!1;for(let i of e){if(i.solde_cumule<r){t=!0;continue}if(t)return i.label}return null}(e.courbe,t);if(null==e.cout_mensuel_cad||!Number.isFinite(e.cout_mensuel_cad)){let e=`chiffrer le co\xfbt mensuel du poste, puis disposer de la tr\xe9sorerie ou d'une entr\xe9e r\xe9currente suffisante pour le couvrir sur ${r} mois (r\xe9f. ${i.KH})`;return a?`${e}. La courbe repasse au-dessus du seuil \xe0 partir de ${a}`:e}let s=e.cout_mensuel_cad,o=s*r,u=Math.max(0,Math.round(o-((null!=e.tresorerie_cad&&Number.isFinite(e.tresorerie_cad)?e.tresorerie_cad:0)+e.entrees_prevues_horizon_cad))),l=u>0?u:Math.round(o),c=Math.round(s),d=`disposer d'environ ${n(l)} $ de tr\xe9sorerie suppl\xe9mentaire, ou d'une entr\xe9e r\xe9currente de ${n(c)} $/mois, pour couvrir ce poste sur ${r} mois`;return a&&(d+=`. La courbe repasse au-dessus du seuil \xe0 partir de ${a}`),d}
1({cout_mensuel_cad:l,tresorerie_cad:u,entrees_prevues_horizon_cad:o,horizon_mois:s,courbe:a?.courbe,seuil_solde_cad:a?.seuil_solde_cad??0});return m?{ok:!1,motif:"runway",raison:`Embauche non finan\xe7able â runway ${e.runway_mois} mois (seuil critique ${t} mois, r\xe9f. ${i.KH})`,condition:_}:{ok:!1,motif:"capacite",raison:`Embauche non finan\xe7able â capacit\xe9 ${n(c)} $ < couverture ${n(d)} $ sur ${s} mois (r\xe9f. ${i.KH})`,condition:_}}({runway_mois:e.runway_mois,runway_critique_mois:a,capacite:e.capacite});return c.ok?s.besoinETP>=t?{action:"embaucher",financable:!0,poste:l,raison:`charge continue ${s.besoinETP.toFixed(2)} ETP ⥠bascule ${t} \xb7 jalon OK \xb7 finan\xe7able`,condition:null}:{action:"externaliser",raison:`par d\xe9faut sous bascule ou hors conditions d'embauche (domaine ${s.domaine})`,condition:null}:{action:"embaucher_bloque",financable:!1,motif_blocage:"capacite"===c.motif?"capacite":"runway",poste:l,raison:c.raison,condition:c.condition}}function s(e,r=i.Ml){for(let t of i.iO){let n=e.filter(e=>t.domaines.includes(e.domaine));if(n.length<2)continue;let a=n.reduce((e,r)=>e+r.demande,0);if(a>0&&a<=r)return{action:"polyvalent",label:t.label,domaines:n.map(e=>e.domaine),raison:`domaines ${n.map(e=>e.domaine).join(" + ")} : ${a.toFixed(1)} h/sem ⤠1 ETP (${r} h) â un poste polyvalent plut\xf4t que deux (r\xe9f. ${i.KH})`,condition:null}}return null}},32852:(e,r,t)=>{t.d(r,{G:()=>i});function i(){let e={money:e=>Math.round(e).toLocaleString("fr-CA").replace(/\u202F/g," ")+" $",moneyK:e=>Math.abs(e)>=1e3?(e/1e3).toLocaleString("fr-CA",{maximumFractionDigits:1})+" k$":Math.round(e)+" $",num:(e,r=1)=>Number(e).toLocaleString("fr-CA",{maximumFractionDigits:r,minimumFractionDigits:0}),pct:e=>Math.round(e)+" %",h:r=>e.num(r,1)+" h"};return e}},37447:(e,r,t)=>{t.d(r,{Tz:()=>u,gW:()=>c,lT:()=>l});var i=t(49705),n=t(42262),a=t(18442),s=t(41668);function o(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}function u(e){let r=e.data.revenu;if(!o(r))return null;let t=r.hypotheses;if(!o(t))return null;let i=t.croissance_mensuelle;return"number"==typeof i&&Number.isFinite(i)?i:null}function l(e,r){let t,l,c=r.horizonMois;if(!Number.isFinite(c)||c<1||!Number.isInteger(c))return{ok:!1,reason:"horizon_invalide",mois:[]};let d=(0,i.Ry)(e);if(null==d.base_usagers_prevision)return{ok:!1,reason:"base_non_configuree",mois:[]};if(null==d.ia_active_prevision)return{ok:!1,reason:"ia_non_configuree",mois:[]};let p=d.base_usagers_prevision,m=d.ia_active_prevision,_=!0===d.revenus_derives;if("trajectoire"===p&&null==u(e))return{ok:!1,reason:"trajectoire_indisponible",mois:[]};let{u0:f,banner:h}=function(e,r){if(null!=r&&"number"==typeof r&&Number.isFinite(r))return{u0:r,banner:"mesure"};let t=e.data.entreprise,i=o(t)&&"number"==typeof t.usagers_actuels?t.usagers_actuels:0;return{u0:Number.isFinite(i)?i:0,banner:"document_fallback"}}(e,r.measuredUsers),v="trajectoire"===p?u(e):0,g=(null==(t=(0,s.rq)(e.data)).ia&&(t.ia=(0,s.rq)(s.GN)),l=Object.assign((0,s.rq)(s.bp),e.params??{}),(0,s.sA)(t,l,{iaActive:m})),b=r.now??new Date,y=(0,n.h4)((0,n.xz)(b),c),x=d.frais_transaction,C=null;if((0,a.X_)(x)){let e=r.fraisAssiette;if(null==e)C={id:"frais_transaction",kind:"frais_transaction",label:"Frais de transaction â non param\xe9tr\xe9 (assiette absente)",montant_cad:0,inclus:!1,badge:"D\xe9riv\xe9 du param\xe9trage",provenance:{label:"Tr\xe9sorerie â mod\xe8le frais (assiette encaissement brut)",href:"/pilotage/tresorerie"},greye:!0};else{let r=(0,a.zd)({frais:x,encaissementBrutCad:e.encaissementBrutCad,transactionCount:e.transactionCount});"ok"===r.status&&(C={id:"frais_transaction",kind:"frais_transaction",label:"Frais de transaction (mod\xe8le % + fixe)",montant_cad:r.montant_cad,inclus:!0,badge:"D\xe9riv\xe9 du param\xe9trage",provenance:{label:r.note,href:"/pilotage/tresorerie"}})}}let k=f;return{ok:!0,mois:y.map((e,r)=>{var t,i;let n,a,s,o,u,l,c,d,f,h;r>0&&"trajectoire"===p&&(k*=1+v);let{lignes:b,total:y,lignes_entree:x,total_entrees:q,hiringHint:A}=(t=k,i=C,n=Number(g.payrollCashMonthly())||0,a=Number(g.overheadMonthly(t))||0,o=(Number((s=g.aiSummary()).aiSubsMonthCAD)||0)+(Number(s.aiApiMonthCAD)||0),u=[{id:"payroll",kind:"payroll",label:"Masse salariale vers\xe9e",montant_cad:n,inclus:!0,badge:"D\xe9riv\xe9 du param\xe9trage",provenance:{label:"Organisation â personnes (co\xfbt annuel vers\xe9)",href:"/pilotage/organisation"}},{id:"overhead",kind:"overhead",label:"Frais g\xe9n\xe9raux",montant_cad:a,inclus:!0,badge:"D\xe9riv\xe9 du param\xe9trage",provenance:{label:"Finances â
1co\xfbts g\xe9n\xe9raux (% revenu = MRR de cette base)",href:"/pilotage/finances"}},{id:"ia",kind:"ia",label:m?"Co\xfbts IA":"Co\xfbts IA â exclus de la pr\xe9vision (choix)",montant_cad:m?o:0,inclus:m,badge:"D\xe9riv\xe9 du param\xe9trage",provenance:{label:"M\xe9tier IA / si\xe8ges & API (pack data.ia)",href:"/pilotage/ia"},greye:!m}],i&&u.push(i),l=u.filter(e=>e.inclus).reduce((e,r)=>e+r.montant_cad,0),c=Number(g.projectedMRR(t))||0,f=(d=_?[{id:"revenue",kind:"revenue",label:"Revenu projet\xe9 (hypoth\xe8ses)",montant_cad:c,inclus:!0,badge:"Hypoth\xe8se",provenance:{label:"Finances â hypoth\xe8ses de revenu (MRR projet\xe9)",href:"/pilotage/finances"}}]:[]).filter(e=>e.inclus).reduce((e,r)=>e+r.montant_cad,0),{lignes:u,total:l,lignes_entree:d,total_entrees:f,hiringHint:"number"==typeof(h=g.simulate(t)).annualPayroll&&h.annualPayroll>0?h.annualPayroll/12:null});return{cle:e,usagers:k,lignes:b,total_structurel:y,lignes_entree:x,total_entrees_structurelles:q,hiringHintMensuel:A}}),baseMode:p,iaActive:m,revenusDerivesActifs:_,usagersBanner:h,u0:f}}function c(e,r){let t=`${e} ${r??""}`.toLowerCase();return/salaire|paie|masse\s*sal|r[eé]mun[eé]ration|fondateur.*vers[eé]/.test(t)?"payroll":/claude|openai|token|api\s*ia|\bia\b|anthropic|si[eè]ge.*claude/.test(t)?"ia":/revenu|mrr|arr|abonnement|souscription|facture.*client|ca\b|chiffre/.test(t)?"revenue":/vercel|h[eé]berg|infra|outils?|saas|abonnement.*(cloud|host)|supabase|redis/.test(t)?"overhead":null}},41203:(e,r,t)=>{t.d(r,{F4:()=>_,IF:()=>f,XE:()=>p,Zd:()=>d,_n:()=>l,en:()=>c,sH:()=>h,wJ:()=>u});let i={lt:"<",lte:"â¤",gt:">",gte:"â¥",eq:"="},n={info:"Info",warn:"\xc0 surveiller",critique:"Critique"},a={fondateur:"fondateur",salarie:"salari\xe9",contrat:"contrat",placeholder:"Poste \xe0 pourvoir"},s={junior:"junior",intermediaire:"interm\xe9diaire",confirme:"confirm\xe9",senior:"senior"},o={mesure:"Mesure live",kpi_doc:"Indicateur du document",aucun:"Aucun",manuel:"Saisie manuelle"};function u(e){return i[e]??e}function l(e){return n[e]??e}function c(e){return a[e]??e}function d(e){return s[e]??e}function p(e){return o[e]??e}let m={avance_associe:"avance associ\xe9",obligation_fiscale:"obligation fiscale",creance:"cr\xe9ance",autre:"autre"};function _(e){return null==e||""===e?"â":m[e]??e}function f(e){let r=e.trim();return r?r.charAt(0).toUpperCase()+r.slice(1):r}function h(e){let r=[];return e.base_mensuel&&r.push(`${e.base_mensuel} fixe`),e.cout_par_usager&&r.push(`${e.cout_par_usager}/usager`),e.pct&&r.push(`${(100*e.pct).toFixed(100*e.pct%1?1:0)} % rev.`),r.length>0?r.join(" \xb7 "):"0"}},41668:(e,r,t)=>{t.d(r,{bp:()=>i.bp,GN:()=>i.GN,GU:()=>i.GU,rq:()=>i.rq,ie:()=>o,bm:()=>s,sA:()=>n.s});var i=t(91126),n=t(45344),a=t(32852);function s(e,r,t){let s=null!=e.ia?e.ia:i.GN;e.ia=s;let o=(0,n.s)(e,r,t),u=(0,a.G)(),l=o.hoursByPerson(),c=Math.max(0,...e.people.filter(e=>e.heures_dispo_semaine).map(e=>(l[e.id]?.hours||0)/e.heures_dispo_semaine*100)),d=e.tasks.filter(e=>"critique"===e.priorite),p=o.uncoveredTasks().filter(e=>"critique"===e.priorite).length,m=o.alerts(),_=m.filter(e=>"Comp\xe9tence"===e.type&&"critique"===e.niveau).length,f=m.filter(e=>"D\xe9pendance"===e.type).length,h=(e.kpis.find(e=>/runway/i.test(e.nom))||{}).valeur_actuelle||0,v=e.kpis.length?e.kpis.reduce((e,r)=>e+(/churn|cac|bug/i.test(r.nom)?r.valeur_actuelle<=r.cible?100:r.valeur_actuelle>0?r.cible/r.valeur_actuelle*100:0:r.cible?Math.min(100,r.valeur_actuelle/r.cible*100):0),0)/e.kpis.length:0,g=0,b=0,y=0;e.tasks.forEach(e=>{if("non-attribue"===(e.assignee_id||"non-attribue"))return;let r=o.weeklyHours(e);g+=r,o.competenceMismatch(e)?("critique"===e.priorite||"haute"===e.priorite)&&y++:b+=r});let x=g?b/g:1,C={faible:1,moyenne:2,elevee:3,élevée:3},k={faible:1,moyen:2,eleve:3,élevé:3},q=e.risques||[],A=0;q.forEach(e=>{let r=(C[e.probabilite]||2)*(k[e.impact]||2),t=e.mitigation&&(""+e.mitigation).trim().length>3?.7:1;A+=r*t});let S=q.length?A/(9*q.length):0,P=(e,r)=>Math.max(0,Math.min(r,Math.round(e))),M=P(20*(170-c)/100,20),$=d.length?P(12*(d.length-p)/d.length,12):12,D=13*x;_>0&&(D=Math.min(D,5)),D=P(D-1.5*y,13);let R=P(10-3*f,10),w=P(15*Math.min(h,12)/12,15),T=P(15*v/100,15),j=P(10*(1-S),10),F=5*(e.roles.length>=5&&e.tasks.length>=20&&e.kpis.length>=5),N=[{label:"Charge des fondateurs soutenable",w:20,got:M,detail:`charge max ${u.num(c,0)} %`}
1,{label:"T\xe2ches critiques attribu\xe9es",w:12,got:$,detail:`${d.length-p}/${d.length} couvertes`},{label:"Travail dans les bonnes comp\xe9tences",w:13,got:D,detail:`${u.num(100*x,0)} % des heures en r\xf4le${_?` \xb7 ${_} hors-r\xf4le critique`:""}`},{label:"Faible d\xe9pendance \xe0 une seule personne",w:10,got:R,detail:`${f} poste(s) bus factor 1`},{label:"Tr\xe9sorerie ⥠12 mois",w:15,got:w,detail:`${u.num(h,0)} mois`},{label:"KPI en progression",w:15,got:T,detail:`moyenne ${u.num(v,0)} %`},{label:"Exposition aux risques ma\xeetris\xe9e",w:10,got:j,detail:`${q.length} risques suivis`},{label:"Organisation document\xe9e",w:5,got:F,detail:""}];N.forEach(e=>{e.ok=e.got>=.6*e.w});let O=Math.round(N.reduce((e,r)=>e+r.got,0));return{score:O,label:O>=80?"Solide":O>=60?"En bonne voie":O>=40?"Fragile":"\xc0 consolider",signals:N,maxLoad:c,uncCrit:p,mismCrit:_,busf:f,runway:h,kpiAvg:v,riskExpo:S,fracInRole:x}}function o(e,r,t){let o=s(e,r,t),u=null!=e.ia?e.ia:i.GN;e.ia=u;let l=(0,n.s)(e,r,t),c=(0,a.G)(),d={active:!!t.iaActive},p=[],m=l.hoursByPerson(),_=e.people.filter(e=>e.heures_dispo_semaine&&(m[e.id]?.hours||0)/e.heures_dispo_semaine>.85).map(e=>e.nom);if(_.length&&p.push({sev:1,titre:`All\xe9ger la charge de ${_.join(" et ")}`,pourquoi:"Un fondateur satur\xe9 devient le goulot d'\xe9tranglement de toute l'entreprise : la qualit\xe9 baisse et rien n'avance en son absence.",comment:["Rep\xe8re ses t\xe2ches les plus chronophages (Personnes & charge).","Active \xab Avec IA \xbb pour voir ce qui s'automatise tout de suite.","D\xe9l\xe8gue ou recrute la premi\xe8re t\xe2che non strat\xe9gique."],route:"#/personnes",cta:"Voir la charge"}),o.mismCrit>0&&p.push({sev:1,titre:"Combler les comp\xe9tences manquantes",pourquoi:"Faire porter une t\xe2che critique par quelqu'un dont ce n'est pas le m\xe9tier, c'est un risque de qualit\xe9 et de blocage.",comment:["Rep\xe8re les t\xe2ches \xab hors r\xf4le \xbb (Personnes & charge).","Forme, sous-traite, ou planifie le recrutement du bon profil."],route:"#/personnes",cta:"Voir les comp\xe9tences"}),o.runway<12&&p.push({sev:2,titre:"S\xe9curiser la tr\xe9sorerie",pourquoi:"Sous 12 mois de runway, chaque d\xe9cision devient contrainte. On s\xe9curise le financement AVANT d'en avoir d\xe9sesp\xe9r\xe9ment besoin.",comment:["Soigne le reporting aux investisseurs (pr\xe9-seed).","Diversifie les revenus (paliers d'abonnement + annuaire partenaires).","Surveille le co\xfbt total r\xe9el (Co\xfbts & infrastru
1cture)."],route:"#/couts",cta:"Voir les co\xfbts"}),o.uncCrit>0&&p.push({sev:2,titre:"Attribuer les t\xe2ches critiques orphelines",pourquoi:"Une t\xe2che critique que personne ne porte finit toujours par tomber au pire moment.",comment:["Ouvre la liste \xab Non attribu\xe9 \xbb.","Assigne-la ou ajoute-la au plan d'embauche."],route:"#/personnes",cta:"Voir les t\xe2ches"}),o.busf>1&&p.push({sev:3,titre:"Documenter les postes qui ne tiennent qu'\xe0 une personne",pourquoi:"Si la seule personne qui sait faire part en vacances ou d\xe9missionne, l'entreprise s'arr\xeate. On \xe9crit les proc\xe9dures (SOP) tant que tout va bien.",comment:["Liste les postes \xab bus factor 1 \xbb (Risques).","R\xe9dige une SOP par t\xe2che critique.","Forme une doublure."],route:"#/risques",cta:"Voir les risques"}),!d.active){let e=l.aiSummary();e.etpFreed>=.5&&p.push({sev:2,titre:"Activer l'IA pour gagner du temps maintenant",pourquoi:`L'IA peut absorber ~${c.num(e.etpFreed,1)} ETP de travail aujourd'hui pour un co\xfbt d\xe9risoire (ROI \xd7${c.num(e.roi,0)}). C'est le levier le plus rapide avant de recruter.`,comment:["Ouvre \xab M\xe9tier augment\xe9 par l'IA \xbb.","Rep\xe8re les t\xe2ches \xe0 fort % automatisable.","Mets en place 1 ou 2 automatisations cette semaine."],route:"#/ia",cta:"Voir le levier IA"})}let f=e.kpis.find(e=>/matching|activation|adoption|conversion/i.test(e.nom)&&e.cible&&e.valeur_actuelle/e.cible<.6);f&&p.push({sev:3,titre:"Am\xe9liorer l'adoption du produit",pourquoi:`\xab ${f.nom} \xbb est loin de sa cible. Sans adoption, la croissance ne suit pas, quelle que soit la qualit\xe9 de l'\xe9quipe.`,comment:["Analyse les retours usagers.","Priorise le backlog produit sur ce point.","Mesure l'effet le mois suivant."],route:"#/kpi",cta:"Voir les KPI"});let h=t.carnet??null;h&&h.fort_potentiel_jamais_contactes>=5&&p.push({sev:2,titre:"Contacter les relations \xe0 fort potentiel encore intactes",pourquoi:`${h.fort_potentiel_jamais_contactes} contact(s) de niveau A+ ou A nâont jamais de date de relance. Ce sont les meilleures relations du r\xe9seau, encore non travaill\xe9es dans lâoutil.`,comment:["Ouvre le carnet filtr\xe9 sur A+/A sans relance.","Pose une premi\xe8re prise de contact et une prochaine relance.","Priorise les A+ avant les A si le temps manque."],route:"#/carnet",cta:"Voir les contacts prioritaires"}),h&&h.relances_echues>=15&&p.push({sev:2,titre:"Rattraper les relances \xe9chues du carnet",pourquoi:`${h.relances_echues} contact(s) ont une prochaine relance d\xe9j\xe0 d\xe9pass\xe9e. Deux retards ne justifient pas une alerte ; \xe0 ce volume, le suivi devient une dette op\xe9rationnelle.`,comment:["Ouvre le carnet filtr\xe9 sur les relances \xe9chues.","Relance ou reporte avec une nouvelle date (30 / 60 / 90 j).","Traite dâabord les niveaux A+ et A."],route:"#/carnet",cta:"Voir les relances \xe9chues"}),h&&h.acquereurs_a_sans_compte>=5&&p.push({sev:3,titre:"Convertir les acqu\xe9reurs A+/A encore hors plateforme",pourquoi:`${h.acquereurs_a_sans_compte} acqu\xe9reur(s) potentiel(s) de niveau A+ ou A nâont pas de compte Dilimo. Câest du r\xe9seau \xe0 fort potentiel qui ne sâest jamais converti.`,comment:["Ouvre le carnet filtr\xe9 sur acqu\xe9reurs A+/A sans compte.","V\xe9rifie le consentement avant toute invitation.","Propose le bon moment dâonboarding, pas un envoi de masse."],route:"#/carnet",cta:"Voir les acqu\xe9reurs sans compte"});let v=t.supportUnanswered??null;if(v&&v.count>=1){let e=Math.max(0,Math.floor(v.oldest_days)),r=v.measured_at?function(e){let r=new Date(e);if(Number.isNaN(r.getTime()))return"";let t=new Intl.DateTimeFormat("fr-CA",{day:"numeric",month:"long",year:"numeric",hour:"numeric",minute:"2-digit",hour12:!1,timeZone:"America/Toronto"}).formatToParts(r),i=e=>t.find(r=>r.type===e)?.value??"";return`${i("day")} ${i("month")} ${i("year")} \xe0 ${i("hour")}\u202Fh\u202F${i("minute")}`}(v.measured_at):"",t=r?` Calcul en direct (mesur\xe9 le ${r}).`:" Calcul en direct.";p.push({sev:2,titre:"R\xe9pondre aux personnes qui attendent un retour",pourquoi:`${v.count} fil(s) de r\xe9ception attendent une r\xe9ponse depuis plus de 7 jours. Le plus ancien remonte \xe0 ${e} jour(s) â câest une relation dâaffaires en attente, pas une m\xe9trique.${t}`,comment:["Ouvre lâonglet \xab Sans r\xe9ponse \xbb de la bo\xeete support.","Traite dâabord le plus ancien ; une courte r\xe9ponse vaut mieux quâun silence.","Session administrateur Dilimo requise pour ouvrir /admin (un grant pilotage seul ne suffit pas)."],route:"#/support-noreply",cta:"Ouvrir le courrier sans r\xe9ponse"})}return p.length||p.push({sev:3,titre:"Maintenir le cap et pr\xe9parer l'\xe9chelle",pourquoi:"Les fondamentaux sont sains. Pr\xe9pare la prochaine phase de croissance.",comment:["Simule la mont\xe9e en charge.","Anticipe le prochain recrutement."],route:"#/simulateur",cta:"Simuler la croissance"}),p.sort((e,r)=>e.sev-r.sev).slice(0,5)}},42262:(e,r,t)=>{t.d(r,{D$:()=>d,GK:()=>p,HN:()=>n,NV:()=>c,_t:()=>o,g0:()=>s,h4:()=>u,nF:()=>m,xG:()=>l,xz:()=>a});let i="America/Toronto";function n(e=new Date){let r=new Intl.DateTimeFormat("en-CA",{timeZone:i,year:"numeric",month:"2-digit",day:"2-digit"}).formatToParts(e),t=r.find(e=>"year"===e.type)?.value??"1970",a=r.find(e=>"month"===e.type)?.value??"01",s=r.find(e=>"day"===e.type)?.value??"01";return`${t}-${a}-${s}`}function a(e=new Date){let r=new Intl.DateTimeFormat("en-CA",{timeZone:i,year:"numeric",month:"2-digit"}).formatToParts(e),t=r.find(e=>"year"===e.type)?.value??"1970",n=r.find(e=>"month"===e.type)?.value??"01";return`${t}-${n}`}function s(e){let[r,t]=e.split("-").map(Number);if(!r||!t)return e;let n=new Date(Date.UTC(r,t-1,15,16,0,0));return new Intl.DateTimeFormat("fr-CA",{timeZone:i,month:"long",year:"numeric"}).format(n)}function o(e,r){let[t,i]=e.split("-").map(Number),n=12*t+(i-1)+r,a=Math.floor(n/12);return`${a}-${String(n%12+1).padStart(2,"0")}`}function u(e,r){let t=[];for(let i=0;i<r;i++)t.push(o(e,i));return t}function l(e){return/^\d{4}-\d{2}-\d{2}$/.test(e)?e.slice(0,7):null}function c(e){return n(new Date(e))}function d(e){return a(new Date(e))}function p(e,r){if(!/^\d{4}-\d{2}-\d{2}$/.test(e)||!/^\d{4}-\d{2}-\d{2}$/.test(r))return NaN;let t=Date.parse(`${e}T00:00:00Z`);return Math.round((Date.parse(`${r}T00:00:00Z`)-t)/864e5)}function m(e){return Math.round(e)}},43210:(e,r,t)=>{t.d(r,{Ek:()=>o,Rx:()=>u,aF:()=>c,sY:()=>l});var i=t(43228),n=t(42262),a=t(18442);let s="dette-obligation-fiscale-partenaires";function o(e,r){let t=new Map;for(let r of e){if(!(0,i.L)(r))continue;let e=(0,n.xG)(String(r.received_at).slice(0,10));if(!e)continue;let a=Number(r.amount_cad);if(!Number.isFinite(a)||0===a)continue;let s=t.get(e)??{brut:0,count:0,stripeBrut:0,stripeCount:0};s.brut+=a,s.count+=1,(0,i.w5)(r)&&(s.stripeBrut+=a,s.stripeCount+=1),t.set(e,s)}let a=new Map;for(let[e,n]of t){let t=Math.round(100*n.stripeBrut)/100;if((0,i.ww)(r)){let s=(0,i.uc)(n.brut,r);a.set(e,{cle:e,encaissement_brut_cad:Math.round(100*n.brut)/100,transaction_count:n.count,stripe_brut_cad:t,stripe_count:n.stripeCount,ca_ht_cad:s.ca_ht_cad,taxes_cad:s.taxes_estimees_cad,tps_cad:s.tps_cad,tvq_cad:s.tvq_cad})}else a.set(e,{cle:e,encaissement_brut_cad:Math.round(100*n.brut)/100,transaction_count:n.count,stripe_brut_cad:t,stripe_count:n.stripeCount,ca_ht_cad:0,taxes_cad:0,tps_cad:0,tvq_cad:0})}return a}function u(e,r){return e&&0!==e.stripe_count?(0,a.zd)({frais:r,encaissementBrutCad:e.stripe_brut_cad,transactionCount:e.stripe_count}):{status:"non_parametre",montant_cad:null,note:"non param\xe9tr\xe9"}}function l(e,r,t=new Date){var n;let a,u,c,d,p,m,_={tps_pct:r.tps_pct??void 0,tvq_pct:r.tvq_pct??void 0};if(!(0,i.ww)(_))return null;let f=o(e,_),h=0;for(let e of f.values())h+=e.taxes_cad;
1return(h=Math.round(100*h)/100)>0?{id:s,nom:"Taxes partenaires (TPS/TVQ estim\xe9es)",solde_cad:h,type:"obligation_fiscale",taux_annuel:null,echeance:(n=t,a=new Intl.DateTimeFormat("en-CA",{timeZone:"America/Toronto",year:"numeric",month:"2-digit"}).formatToParts(n),u=Number(a.find(e=>"year"===e.type)?.value),c=Number(a.find(e=>"month"===e.type)?.value),d=u,(p=(c<=3?3:c<=6?6:c<=9?9:12)+1)>12&&(p=1,d+=1),m=new Date(Date.UTC(d,p,0)).getUTCDate(),`${d}-${String(p).padStart(2,"0")}-${String(m).padStart(2,"0")}`),paiement_mensuel_cad:null}:null}function c(e,r){let t=e.filter(e=>e.id!==s);return r?[...t,r]:[...t]}},43228:(e,r,t)=>{function i(e){return null==e.annule_le||""===String(e.annule_le).trim()}function n(e){return i(e)&&"stripe"===e.payment_method}t.d(r,{Eg:()=>m,Jz:()=>a,L:()=>i,tr:()=>c,uc:()=>d,vz:()=>o,w5:()=>n,ww:()=>p,xI:()=>s});let a="taxes estim\xe9es \xe0 partir des taux param\xe9tr\xe9s â la source de v\xe9rit\xe9 reste votre comptabilit\xe9",s="d\xe9composition valable si le montant saisi est TTC",o="non param\xe9tr\xe9";function u(e){return Math.round(e)}function l(e){return Math.round(100*e)/100}function c(e,r){let t=Date.parse(r);if(!Number.isFinite(t))return 0;let n=0;for(let r of e){if(!i(r))continue;let e=Date.parse(r.received_at);if(!Number.isFinite(e)||e<t)continue;let a=Number(r.amount_cad);Number.isFinite(a)&&(n+=a)}return u(n)}function d(e,r){let t=1+r.tps_pct+r.tvq_pct;if(!(t>0)||!Number.isFinite(e))return{ca_ht_cad:0,tps_cad:0,tvq_cad:0,taxes_estimees_cad:0};let i=l(e/t),n=l(i*r.tps_pct),a=l(e-i),s=l(a-n);return{ca_ht_cad:i,tps_cad:n,tvq_cad:s,taxes_estimees_cad:a}}function p(e){return null!=e&&"number"==typeof e.tps_pct&&Number.isFinite(e.tps_pct)&&"number"==typeof e.tvq_pct&&Number.isFinite(e.tvq_pct)}function m(e,r){let t=u(e);if(!p(r))return{status:"non_parametre",encaissement_brut_cad:t,ca_ht_cad:null,taxes_estimees_cad:null,tps_cad:null,tvq_cad:null,mention:o};let i=d(e,r);return{status:"ok",encaissement_brut_cad:t,ca_ht_cad:u(i.ca_ht_cad),taxes_estimees_cad:l(i.taxes_estimees_cad),tps_cad:i.tps_cad,tvq_cad:i.tvq_cad,mention:`${a}. ${s}.`}}},43310:(e,r,t)=>{t.d(r,{O5:()=>s,ny:()=>a});var i=t(45214);function n(e){return Number.isFinite(e)?Math.max(1,Math.min(5,Math.round(e))):1}function a(e,r){let t=e.map(e=>{var t,a,s;let o,u,l,c,d,p,m,_;return{...e,composantes:(o=r.runway_critique_mois??i.R$,u=r.echeance_plancher_jours??i.hj,t=e.urgence,a=e.impact,s=e.effort,p=d=(l=n(t))*(c=n(a))/n(s),m=[],null!=r.runway_mois&&Number.isFinite(r.runway_mois)&&r.runway_mois<o&&(e.agit_sur_cash?(p+=100,m.push(`runway ${r.runway_mois} mois < seuil critique ${o} mois â priorit\xe9 cash`)):("qualite"===e.kind||"structure"===e.kind)&&(p-=20,m.push(`runway sous seuil critique ${o} mois â qualit\xe9/structure recul\xe9e`))),null!=e.jours_avant_echeance&&e.jours_avant_echeance>=0&&e.jours_avant_echeance<=u&&(p<50?(p=50,m.push(`\xe9ch\xe9ance dans ${e.jours_avant_echeance} j ⤠plancher ${u} j â plancher de priorit\xe9`)):m.push(`\xe9ch\xe9ance dans ${e.jours_avant_echeance} j ⤠plancher ${u} j`)),_=new Set(r.personnes_saturees),e.retire_heures_a.some(e=>_.has(e))&&(p*=1.5,m.push(`multiplicateur \xd71,5 â retire des heures \xe0 une personne satur\xe9e (⥠${r.saturation_pct??i.LI} %)`)),e.bloquante&&(p+=15,m.push("action bloquante (critique non attribu\xe9e / bus factor) â remonte")),{urgence:n(e.urgence),impact:n(e.impact),effort:n(e.effort),score_brut:Math.round(100*d)/100,score_final:Math.round(100*p)/100,dominations:m}),rang:0}});return t.sort((e,r)=>r.composantes.score_final!==e.composantes.score_final?r.composantes.score_final-e.composantes.score_final:e.bloquante!==r.bloquante?e.bloquante?-1:1:e.titre.localeCompare(r.titre,"fr")),t.forEach((e,r)=>{e.rang=r+1}),t}function s(e){let r=e.composantes,t=`Score ${r.score_final} = urgence ${r.urgence} \xd7 impact ${r.impact} \xf7 effort ${r.effort}`;return r.dominations.length?`${t} \xb7 ${r.dominations.join(" \xb7 ")}`:t}},45214:(e,r,t)=>{t.d(r,{KH:()=>i,KS:()=>l,LI:()=>s,Ml:()=>u,OH:()=>h,R$:()=>n,hj:()=>a,iO:()=>d,qK:()=>m,qx:()=>_,s1:()=>o,s8:()=>f,tT:()=>p,u7:()=>v});let i="2026-08-02",n=6,a=14,s=85,o=.6,u=37.5,l=[{id:"lead_developer",label:"Lead Developer",famille:"technique",jalon:{kind:"usager
1s",seuil:100},domaines:["Tech","Produit"]},{id:"devops",label:"DevOps",famille:"technique",jalon:{kind:"usagers",seuil:500},domaines:["Tech","Op\xe9rations"]},{id:"qa",label:"QA",famille:"technique",jalon:{kind:"usagers",seuil:1e3},domaines:["Tech","Produit"]},{id:"security_engineer",label:"Security Engineer",famille:"technique",jalon:{kind:"usagers",seuil:2e3},domaines:["S\xe9curit\xe9","Tech"]},{id:"support_n1",label:"Support N1",famille:"support",jalon:{kind:"usagers",seuil:200},domaines:["Support"]},{id:"customer_success",label:"Customer Success",famille:"support",jalon:{kind:"usagers",seuil:400},domaines:["Support","Ventes"]},{id:"sdr",label:"SDR",famille:"commercial",jalon:{kind:"demos_mois",seuil:15},domaines:["Ventes","Marketing"]},{id:"account_executive",label:"Account Executive",famille:"commercial",jalon:{kind:"opportunites_actives",seuil:50},domaines:["Ventes"]},{id:"coo",label:"COO",famille:"direction",jalon:{kind:"clients_payants",seuil:200},domaines:["Direction","Op\xe9rations"]},{id:"cfo",label:"CFO",famille:"direction",jalon:{kind:"arr_cad",seuil:5e5},domaines:["Finance","Direction"]}],c=["Produit","Tech","Direction"],d=[{id:"ops_support",label:"Op\xe9rations & support",domaines:["Support","Op\xe9rations"]},{id:"growth",label:"Croissance (ventes + marketing)",domaines:["Ventes","Marketing"]},{id:"tech_produit",label:"Tech & produit",domaines:["Tech","Produit"]}],p=12,m=[{id:"horizon_financement",label:"Horizon de financement vis\xe9",date_iso:"2026-10-31",avant:!0,note:"Horizon de financement vis\xe9 (nature non pr\xe9cis\xe9e â champ \xe9ditable)"},{id:"bascule_partenaires",label:"Bascule partenaires",date_iso:"2026-09-15",avant:!1,note:"Bascule au 15 septembre 2026 â premi\xe8re \xe9ch\xe9ance au 31 d\xe9cembre 2027 pour tout payant avant cette date"},{id:"tls_cert",label:"Expiration certificat TLS",date_iso:"2026-09-06",avant:!1,note:"Certificat TLS expire le 6 septembre 2026"},{id:"promo_30_sept",label:"Promotion \xab avant le 30 septembre \xbb",date_iso:"2026-09-30",avant:!0,note:"Promotion cod\xe9e dans les pages marketing â avant le 30 septembre"},{id:"essais_debut_septembre",label:"Essais actifs â vague d\xe9but septembre",date_iso:"2026-09-07",avant:!1,note:"Essais actifs expirant d\xe9but septembre 2026 (fen\xeatre indicative)"}],_={nicolas:"nicolas",david:"david"};function f(e){switch(e.kind){case"usagers":return`${e.seuil} usagers`;case"clients_payants":return`${e.seuil} clients payants`;case"demos_mois":return`${e.seuil} d\xe9monstrations / mois`;case"opportunites_actives":return`${e.seuil} opportunit\xe9s actives`;case"arr_cad":return`${e.seuil.toLocaleString("fr-CA")} $ ARR`;case"serie_a":return e.label;default:return"?"}}function h(e,r=new Date){return Math.ceil((new Date(`${e.date_iso}T12:00:00`).getTime()-r.getTime())/864e5)}function v(e){return c.includes(e)}},45344:(e,r,t)=>{t.d(r,{s:()=>a});var i=t(32852),n=t(91126);function a(e,r,t){let a=null!=e.ia?e.ia:n.GN;e.ia=a;let s={DB:e,PARAMS:r,IA:a,IAState:{active:!!t.iaActive},fmt:(0,i.G)(),measuredMrrCad:t.measuredMrrCad??null,measuredPartnerArrCad:t.measuredPartnerArrCad??null,measuredPartnerMonthHtCad:t.measuredPartnerMonthHtCad??null,measuredAdsMonthHtCad:t.measuredAdsMonthHtCad??null},o={};return!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{weeklyHours(e){let r=Number(e.duree_heures)||0;switch(e.recurrence){case"quotidien":return r*i.jours_ouvres_semaine;case"hebdomadaire":return r;case"mensuel":return 12*r/52;case"trimestriel":return 4*r/52;case"semestriel":return 2*r/52;case"annuel":return r/52;default:return 0}},role:e=>t.roles.find(r=>r.id===e),person:e=>t.people.find(r=>r.id===e),roleTitle(e){let r=this.role(e);return r?r.titre:e},personName(e){let r=this.person(e);return r?r.nom:e},loadedAnnualCost:e=>Math.round((e.salaire_annuel_cad||0)*(1+i.charges_sociales_employeur)),hourlyCost(e){return this.loadedAnnualCost(e)/(i.semaines_travaillees_an*i.heures_par_etp_semaine)},hoursByPerson(){let e={};return t.people.forEach(r=>e[r.id]={hours:0,critical:0,tasks:0}),t.tasks.forEach(r=>{let t=r.assignee_id||"non-attribue";e[t]||(e[t]={hours:0,critical:0,tasks:0}),e[t].hours+=this.effHours(r),e[t].tasks+=1,"critique"===r.priorite&&(e[t].critical+=1)}),e},hoursByDomain(){let e={};return t.tasks.forEach(r=>{e[r.domaine]=(e[r.domaine]||0)+this.effHours(r)}),e},hoursByRole(){let e={};return t.tasks.forEach(r=>{e[r.role_id]=(e[r.role_id]||0)+this.effHours(r)}),e},totalWeeklyHours(){return t.tasks.reduce((e,r)=>e+this.effHours(r),0)},uncoveredTasks:()=>t.tasks.filter(e=>"non-attribue"===(e.assignee_id||"non-attribue")),personTasks(e){return t.tasks.filter(r=>(r.assignee_id||"non-attribue")===e).map(e=>({t:e,h:this.effHours(e),hraw:this.weeklyHours(e),mismatch:this.competenceMismatch(e)})).sort((e,r)=>r.h-e.h)},competenceMismatch(e){let r=e.assignee_id||"non-attribue";if("non-attribue"===r)return!1;let t=this.person(r);return!!(t&&"placeholder"!==t.statut&&!t.roles_actuels.includes(e.role_id))},roleCoverage:e=>t.people.filter(r=>"placeholder"!==r.statut&&r.roles_actuels.includes(e)).map(e=>e.id)})}
1(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{alerts(){let e=[],r=this.hoursByPerson();t.people.filter(e=>"fondateur"===e.statut||"salarie"===e.statut).forEach(t=>{let i=r[t.id];if(!i||!t.heures_dispo_semaine)return;let n=i.hours/t.heures_dispo_semaine*100;n>100?e.push({niveau:"critique",type:"Temps",personne:t.nom,titre:`${t.nom} est en surcharge`,detail:`${Math.round(n)} % de charge (${s.h(i.hours)} pour ${t.heures_dispo_semaine} h dispo). Capacit\xe9 d\xe9pass\xe9e de ${s.h(i.hours-t.heures_dispo_semaine)}/sem â d\xe9l\xe9guer, automatiser (IA) ou recruter.`}):n>85&&e.push({niveau:"attention",type:"Temps",personne:t.nom,titre:`${t.nom} proche de la saturation`,detail:`${Math.round(n)} % de charge â marge restante ${s.h(t.heures_dispo_semaine-i.hours)}/sem.`})}),t.people.filter(e=>"placeholder"!==e.statut).forEach(r=>{let i=t.tasks.filter(e=>e.assignee_id===r.id&&this.competenceMismatch(e));if(i.length){let t=[...new Set(i.map(e=>this.roleTitle(e.role_id)))];e.push({niveau:i.some(e=>"critique"===e.priorite)?"critique":"attention",type:"Comp\xe9tence",personne:r.nom,titre:`${r.n
1om} agit hors de ses r\xf4les d\xe9clar\xe9s`,detail:`${i.length} t\xe2che(s) relevant de : ${t.join(", ")}. Risque de comp\xe9tence/qualit\xe9 â \xe0 former, d\xe9l\xe9guer ou recruter.`})}}),[...new Set(t.tasks.map(e=>e.role_id))].forEach(r=>{let i=this.roleCoverage(r),n=t.tasks.filter(e=>e.role_id===r&&"critique"===e.priorite);1===i.length&&n.length&&e.push({niveau:"attention",type:"D\xe9pendance",personne:this.personName(i[0]),titre:`Point de d\xe9pendance : ${this.roleTitle(r)}`,detail:`Ce poste ne repose que sur ${this.personName(i[0])}, avec ${n.length} t\xe2che(s) critique(s). Bus factor = 1 â documenter les SOP et pr\xe9voir une rel\xe8ve.`})});let i=this.uncoveredTasks(),n=i.filter(e=>"critique"===e.priorite||"haute"===e.priorite);i.length&&e.push({niveau:n.length?"attention":"info",type:"Couverture",titre:`${i.length} t\xe2che(s) non attribu\xe9e(s)`,detail:`Dont ${n.length} prioritaire(s). Personne ne les porte aujourd'hui â d\xe9l\xe9guer ou recruter (voir plan d'embauche).`});let a={critique:0,attention:1,info:2};return e.sort((e,r)=>a[e.niveau]-a[r.niveau])}})}(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{foundersCapacity:()=>t.people.filter(e=>"fondateur"===e.statut||"salarie"===e.statut).reduce((e,r)=>e+(r.heures_dispo_semaine||0),0),requiredETP(){return this.totalWeeklyHours()/i.heures_par_etp_semaine},simulate(e){let r=e/(t.entreprise.usagers_actuels||1),n=this.hoursByDomain(),a=0,s={};Object.keys(n).forEach(e=>{let t=i.elasticites[e]??.5,o=n[e]*Math.pow(Math.max(r,1),t);s[e]=o,a+=o});let o=a/i.heures_par_etp_semaine,u=Math.max(0,o-1.2*(this.foundersCapacity()/i.heures_par_etp_semaine)),l=Math.round(u*this.avgLoadedCost());return{users:e,totalHours:a,etp:o,recruitsETP:u,annualPayroll:l,domains:s}},avgLoadedCost(){let e=t.roles.filter(e=>!["ceo","coo","cfo"].includes(e.id));return e.length?e.reduce((e,r)=>e+this.loadedAnnualCost(r),0)/e.length:0}})}(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{aiAuto(e){if(e.ia&&"number"==typeof e.ia.auto)return e.ia.auto;let r=n.auto_domaine[e.domaine]??.4,t=(e.nom||"").toLowerCase();return["r\xe9daction","contenu","newsletter","faq","user stories","reporting","veille","audit","spec","seo","analyse","synth\xe8se","backlog","roadmap","note","documentation"].some(e=>t.includes(e))&&(r=Math.min(.85,r+.2)),["n\xe9goci","relation","d\xe9monstration","recrut","prospection","notaire","comit\xe9","stand-up","d\xe9ploiement","migration"].some(e=>t.includes(e))&&(r=Math.max(.05,r-.25)),Math.round(100*r)/100},aiModel(e){if(e.ia&&e.ia.model)return e.ia.model;let r=(e.nom||"").toLowerCase();return/(veille|audit|loi 25|stratég|okr|architecture|pricing)/.test(r)?"opus-4.8":"Support"===e.domaine||/(faq|newsletter|ticket|signalement)/.test(r)?"haiku-4.5":"sonnet-4.6"},aiLevier(e){if("Tech"===e.domaine)return"Claude Code";let r=this.aiAuto(e);return r>=.55?"Agent Claude (API)":r>=.25?"Claude + revue humaine":"Appui ponctuel"},monthlyOccurrences(e){switch(e.recurrence){case"quotidien":return 52*i.jours_ouvres_semaine/12;case"hebdomadaire":return 52/12;case"mensuel":return 1;case"trimestriel":return 4/12;case"semestriel":return 2/12;case"annuel":return 1/12;default:return 0}},aiApiCostMonthlyUSD(e){if(.5>this.aiAuto(e))return 0;let r=n.modeles[this.aiModel(e)]||n.modeles["sonnet-4.6"],t=n.tokens_in/1e6*r.in+n.tokens_out/1e6*r.out;return this.monthlyOccurrences(e)*t},aiSubsMonthlyUSD:()=>(n.sieges||[]).reduce((e,r)=>{let t=n.abonnements[r.plan];return e+(t?t.prix*(r.personnes||1):0)},0),aiSavedHours(e){return this.weeklyHours(e)*this.aiAuto(e)},effHours(e){return a.active?this.weeklyHours(e)*(1-this.aiAuto(e)):this.weeklyHours(e)},aiSummary(){let e=0,r=0,a=0;t.tasks.forEach(t=>{let n=this.aiSavedHours(t);e+=n;let s=this.role(t.role_id),o=s?this.loadedAnnualCost(s):this.avgLoadedCost();r+=n/i.heures_par_etp_semaine*o,a+=this.aiApiCostMonthlyUSD(t)});let s=this.aiSubsMonthlyUSD(),o=(s+a)*12*n.usd_cad,u=e/i.heures_par_etp_semaine;return{savedHours:e,etpFreed:u,valueYear:r,aiSubsMonthCAD:s*n.usd_cad,aiApiMonthCAD:a*n.usd_cad,aiCostYear:o,netYear:r-o,roi:o>0?r/o:0}},aiByRole(){let e={};return t.tasks.forEach(r=>{let t=r.role_id;e[t]||(e[t]={hours:0,saved:0,humanCost:0,savedCost:0});let n=this.weeklyHours(r),a=this.aiSavedHours(r),s=this.role(t),o=s?this.loadedAnnualCost(s):this.avgLoadedCost();e[t].hours+=n,e[t].saved+=a,e[t].humanCost+=n/i.heures_par_etp_semaine*o,e[t].savedCost+=a/i.heures_par_etp_semaine*o}),e}})}
1(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{revenue(e){let r=t.revenu&&t.revenu.hypotheses||{};e=null==e?t.entreprise.usagers_actuels||0:e;let i=r.taux_conversion_payant||0,n=e*i,a=n*(r.mix_pro||0),s=n*(r.mix_crm||0),o=n*(r.mix_chantier||0),u=a*(r.prix_pro||49),l=s*(r.prix_crm||99),c=o*(r.prix_chantier||179),d=u+l+c,p=n>0?d/n:(r.mix_pro||0)*(r.prix_pro||49)+(r.mix_crm||0)*(r.prix_crm||99)+(r.mix_chantier||0)*(r.prix_chantier||179),m=n*(r.part_payants_apporteurs||0),_=m*(r.partenaires_or_par_apporteur||0),f=m*(r.partenaires_standard_par_apporteur||0),h=_*(r.prix_or_annuel||1500)/12,v=f*(r.prix_standard_annuel||500)*(r.standard_metiers_moy||1)/12,g=h+v,b=n*(r.attach_vitrine||0),y=n*(r.attach_annonces||0),x=b*(r.prix_vitrine||800)+y*(r.prix_annonces||399);return{mau:e,inscrits:e,modele:"abonnement_segment",payants:n,blended:p,nPro:a,nCrm:s,nChantier:o,mrrPro:u,mrrCrm:l,mrrChantier:c,mrrAbo:d,partenairesOr:_,partenairesStd:f,mrrOr:h,mrrStd:v,mrrAnnuaire:g,vitrines:b,modules:y,ponctuelAn:x,revenuMensuel:d+g}},arr(e){return 12*this.revenue(e).revenuMensuel},projectedMRR(e){return this.revenue(e).revenuMensuel},arpuMensuel(){let e=this.revenue();return e.mau?e.revenuMensuel/e.mau:0},arpuPayant(){return this.revenue().blended||t.revenu.hypotheses.arpu_mensuel||0},mrrConstate(){let e=r.measuredMrrCad;if(null!=e&&"number"==typeof e&&Number.isFinite(e))return e;let i=t.kpis||[],n=i.find(e=>"kpi-mrr"===e.id)||i.find(e=>/^mrr\b|^mrr$|\bmrr\b/i.test(e.nom));return n&&n.valeur_actuelle||0},partnerMonthHtConstate(){let e=r.measuredPartnerMonthHtCad;return null!=e&&"number"==typeof e&&Number.isFinite(e)?e:null},adsMonthHtConstate(){let e=r.measuredAdsMonthHtCad;return null!=e&&"number"==typeof e&&Number.isFinite(e)?e:null},ltvCac(){let e=this.arpuPayant(),r=t.kpis||[],i=(r.find(e=>"kpi-churn"===e.id)||r.find(e=>/churn/i.test(e.nom))||{}).valeur_actuelle,n=(r.find(e=>"kpi-cac"===e.id)||r.find(e=>/cac/i.test(e.nom))||{}).valeur_actuelle,a=i&&i>0?e/(i/100):0;return{arpu:e,ltv:a,cac:n,ratio:n&&n>0?a/n:0}}})}(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{foundersReplacementCost(){let e=0;return t.people.filter(e=>"fondateur"===e.statut||"salarie"===e.statut).forEach(r=>{t.tasks.filter(e=>(e.assignee_id||"")===r.id).forEach(r=>{let t=this.role(r.role_id);t&&(e+=this.weeklyHours(r)*this.hourlyCost(t)*i.semaines_travaillees_an)})}),Math.round(e)},valuation(){let e=t.valeur.valorisation,i=null!=r.measuredPartnerArrCad&&"number"==typeof r.measuredPartnerArrCad&&Number.isFinite(r.measuredPartnerArrCad)?r.measuredPartnerArrCad:0,n=12*this.mrrConstate()+i,a=this.arr(),s=e.scorecard_base_cad*(1+e.scorecard_criteres.reduce((e,r)=>e+(r.note||0),0)),o=this.foundersReplacementCost()*(e.annees_travail||1),u=this.arr(e.vc.usagers_sortie),l=u*e.vc.multiple_sortie/(e.vc.roi_attendu||1),c=u*(e.comparables.reduce((e,r)=>e+r.multiple,0)/(e.comparables.length||1))/(e.vc.roi_attendu||1),d={prudent:n*e.arr_multiple.prudent,central:n*e.arr_multiple.central,ambitieux:n*e.arr_multiple.ambitieux};return{arrNow:n,arrProjete:a,arrSortie:u,scorecard:s,replacement:o,vc:l,comparables:c,arrMult:d,plancher:s*e.scenarios.plancher,central:s*e.scenarios.central,ambitieux:s*e.scenarios.ambitieux}},capTable(){let e,r,i,n=t.valeur.capital,a=n.tour,s=a.premoney+a.montant,o=s>0?a.montant/s:0,u=(a.pool_cible_pct||0)/100;"avant"===a.pool_timing?(r=o,i=u,e=1-o-u):(i=u,r=o*(1-u),e=(1-o)*(1-u));let l=n.actionnaires.map(r=>({nom:r.nom,type:r.type,avant:r.parts_pct,apres:r.parts_pct*e}));return{premoney:a.premoney,montant:a.montant,post:s,investorPct:100*r,poolPct:100*i,founderRemainPct:100*e,after:l,tour:a}},concentrationMax:()=>(t.valeur&&t.valeur.concentration||[]).reduce((e,r)=>Math.max(e,r.pct),0),dataRoomScore(){let e=t.valeur&&t.valeur.data_room||[];return e.length?Math.round(e.filter(e=>e.pret).length/e.length*100):0},roleDomains(){let e={};return t.tasks.forEach(r=>{(e[r.role_id]=e[r.role_id]||new Set).add(r.domaine)}),e},personDomains(e){let r=this.roleDomains(),t=this.person(e),i=new Set;
1return t&&t.roles_actuels.forEach(e=>{(r[e]||new Set).forEach(e=>i.add(e))}),i},capacityByDomain(){let e=this.hoursByDomain(),r=this.hoursByPerson(),n={};return Object.keys(e).forEach(a=>{let s=t.people.filter(e=>("fondateur"===e.statut||"salarie"===e.statut)&&this.personDomains(e.id).has(a)),o=s.reduce((e,t)=>e+Math.max(0,(t.heures_dispo_semaine||0)-(r[t.id]?.hours||0)),0);n[a]={demande:e[a],qualifies:s.map(e=>e.nom),capaciteRestante:o,besoinETP:Math.max(0,(e[a]-o)/i.heures_par_etp_semaine)}}),n},hiringNeeds(){let e=this.capacityByDomain(),r={};t.tasks.forEach(e=>{let t=e.domaine+"|"+e.role_id;r[t]=(r[t]||0)+this.weeklyHours(e)});let i=["Ventes","Support","Marketing","Produit"],n=[];return Object.entries(e).forEach(([e,t])=>{if(t.besoinETP<.15)return;let a=null,s=0;Object.entries(r).forEach(([r,t])=>{let[i,n]=r.split("|");i===e&&t>s&&(s=t,a=n)});let o=a?this.role(a):null;o&&n.push({role:o,domaine:e,besoinETP:t.besoinETP,cout:this.loadedAnnualCost(o),qualifies:t.qualifies,demande:t.demande,capaciteRestante:t.capaciteRestante,unblocksRevenue:i.includes(e),score:t.besoinETP*(i.includes(e)?1.3:1)+.5*(t.capaciteRestante<2)})}),n.sort((e,r)=>r.score-e.score)},overheadItemMonthly(e,r){let t=this.projectedMRR(r);return(e.base_mensuel||0)+(e.cout_par_usager||0)*r+(e.pct||0)*t},overheadMonthly(e){return(t.couts_generaux||[]).reduce((r,t)=>r+this.overheadItemMonthly(t,e),0)},overheadByCategory(e){let r={};return(t.couts_generaux||[]).forEach(t=>{r[t.categorie]=(r[t.categorie]||0)+this.overheadItemMonthly(t,e)}),r},payrollCashMonthly:()=>t.people.reduce((e,r)=>e+(r.cout_annuel_cad||0),0)/12,totalCostMonthly(e){let r=this.overheadMonthly(e),t=this.aiSummary().aiSubsMonthCAD+this.aiSummary().aiApiMonthCAD,i=this.simulate(e),n=this.payrollCashMonthly()+i.annualPayroll/12;return{infra:r,ia:t,payroll:n,total:r+t+n,perUser:e>0?(r+t+n)/e:0}}})}(o,s),!function(e,r){let{DB:t,PARAMS:i,IA:n,IAState:a,fmt:s}=r;Object.assign(e,{scheduleFor(e){let r=["Lundi","Mardi","Mercredi","Jeudi","Vendredi"],i=this.person(e),n=i?i.heures_dispo_semaine:37.5,s=n/r.length,o=t.tasks.filter(r=>(r.assignee_id||"non-attribue")===e),u=e=>a.active?e.duree_heures*(1-this.aiAuto(e)):e.duree_heures,l={};r.forEach(e=>l[e]=[]);let c=[];return o.filter(e=>"quotidien"===e.recurrence).forEach(e=>{r.forEach(r=>l[r].push({nom:e.nom,duree:u(e),prio:e.priorite,dom:e.domaine,ia:a.active&&this.aiAuto(e)>=.3}))}),o.filter(e=>"hebdomadaire"===e.recurrence).sort((e,r)=>r.duree_heures-e.duree_heures).forEach(e=>{let t,i=(t={},r.forEach(e=>t[e]=l[e].reduce((e,r)=>e+r.duree,0)),t);l[r.reduce((e,r)=>i[r]<i[e]?r:e,r[0])].push({nom:e.nom,duree:u(e),prio:e.priorite,dom:e.domaine,ia:a.active&&this.aiAuto(e)>=.3})}),o.filter(e=>!["quotidien","hebdomadaire"].includes(e.recurrence)).forEach(e=>c.push({nom:e.nom,rec:e.recurrence,duree:u(e),prio:e.priorite,dom:e.domaine})),r.forEach(e=>{l[e].sort((e,r)=>("Direction"===e.dom?-1:0)-("Direction"===r.dom?-1:0)||e.duree-r.duree);let r=8.5;l[e].forEach(e=>{r<12.5&&r+e.duree>12.5&&(r=13.5),e.start=r,e.end=r+e.duree,.001>Math.abs((r=e.end)-12.5)&&(r=13.5)})}),{jours:r,days:l,periodiques:c,dayCap:s,cap:n}},hiringPlan(){let e=new Set;return t.people.filter(e=>"fondateur"===e.statut||"salarie"===e.statut).forEach(r=>r.roles_actuels.forEach(r=>e.add(r))),t.roles.filter(e=>e.phase_apparition>=2).sort((e,r)=>e.phase_apparition-r.phase_apparition||r.salaire_annuel_cad-e.salaire_annuel_cad).map(r=>({role:r,phase:r.phase_apparition,cout:this.loadedAnnualCost(r),couvertFondateur:e.has(r.id)}))}})}(o,s),o}},49705:(e,r,t)=>{t.d(r,{CB:()=>h,KO:()=>p,Lc:()=>x,Ry:()=>g,SF:()=>_,XZ:()=>b,Ze:()=>m,eN:()=>y,lX:()=>v,qj:()=>f,xJ:()=>d});var i=t(61963),n=t(88473),a=t(9406);function s(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}function o(e,r=0){let t="number"==typeof e?e:Number(e);return Number.isFinite(t)?t:r}function u(e,r=""){return"string"==typeof e?e:r}function l(e){return null==e?null:"string"==typeof e?e:null}function c(e){if(null==e||""===e)return null;let r="number"==typeof e?e:Number(e);return Number.isFinite(r)?r:null}function d(e){let r=e.data.tresorerie;if(!s(r))return{...i.D$,comptes:[],dettes:[]};let t=Array.isArray(r.comptes)?r.comptes:[],d=Array.isArray(r.dettes)?r.dettes:[];return{comptes:t.filter(s).map((e,r)=>{let t=(0,n.dx)(e),i=u(e.saisi_le),a=(0,n.o4)({arrete_le:u(e.arrete_le),saisi_le:i});return{id:u(e.id,`c-${r}`),nom:u(e.nom),solde_cad:o(e.solde_cad),saisi_le:i,type:t,teneur:"string"==typeof e.teneur&&e.teneur.trim()?e.teneur:void 0,arrete_le:a,notes:"string"==typeof e.notes?e.notes:void 0,role:"reserve"===e.role?"reserve":"courant",historique:function(e){if(!Array.isArray(e)||0===e.length)return;let r=[];for(let t of e){if(!s(t))continue;let e=u(t.arrete_le)||u(t.saisi_le);e&&r.push({solde_cad:o(t.solde_cad),arrete_le:e,saisi_le:u(t.saisi_le)||e,notes:"string"==typeof t.notes?t.notes:void 0})}return r.length>0?r:void 0}(e.historique)}}),dettes:d.filter(s).map((e,r)=>{var t;return{id:u(e.id,`d-${r}`),nom:u(e.nom),solde_cad:o(e.solde_cad),type:"string"==typeof(t=e.type)&&t.trim()?a.HU.includes(t)?t:"autre":null,taux_annuel:c(e.taux_annuel),echeance:l(e.echeance),paiement_mensuel_cad:c(e.paiement_mensuel_cad),notes:"string"==typeof e.notes?e.notes:void 0,ignoree_par_courbe:!0===e.ignoree_par_courbe}})}}function p(e,r=new Date){let t=(0,n.vR)(e,r);return t.ok||"perime"===t.reason?t.arrete_le:null}function m(e){let r={avance_associe:0,obligation_fiscale:0,creance:0,autre:0};for(let t of e){if(t.ignoree_par_courbe)continue;let e=t.type??"autre";r[e]=(r[e]??0)+t.solde_cad}return r}function _(e){let r=e.data.flux;return Array.isArray(r)?r.filter(s).map((e,r)=>{let t,i=e.scenario,n="string"==typeof i&&a.Bl.includes(i)?i:null,
1s="sortie"===e.sens?"sortie":"entree",d="trimestriel"===e.recurrence||"semestriel"===e.recurrence||"annuel"===e.recurrence||"ponctuel"===e.recurrence?e.recurrence:"mensuel";return{id:u(e.id,`f-${r}`),sens:s,categorie:u(e.categorie),montant_cad:o(e.montant_cad),mois_debut:l(e.mois_debut),mois_fin:l(e.mois_fin),date:l(e.date),recurrence:d,scenario:n,confiance:"haute"===e.confiance||"moyenne"===e.confiance||"basse"===e.confiance?e.confiance:null,evenement_id:l(e.evenement_id),source:"mesure"===e.source?"mesure":"manuel",measure_id:l(e.measure_id),notes:"string"==typeof e.notes?e.notes:void 0,remplace_par_derive:"string"==typeof(t=e.remplace_par_derive)&&a.YG.includes(t)?t:null,statut:"prevu"===e.statut||"engage"===e.statut||"paye"===e.statut?e.statut:null,financer_par:"compte_immoplait"===e.financer_par||"avance_david"===e.financer_par||"avance_nicolas"===e.financer_par?e.financer_par:null,entite:"immoplait"===e.entite||"dilimo_inc"===e.entite?e.entite:null,devise_origine:"string"==typeof e.devise_origine?e.devise_origine:null,montant_origine:c(e.montant_origine),taux:c(e.taux),date_taux:l(e.date_taux),reference_piece:"string"==typeof e.reference_piece?e.reference_piece:void 0,contrepartie:"string"==typeof e.contrepartie?e.contrepartie:void 0,dette_id:l(e.dette_id)}}):[...i.i_]}function f(e){let r=e.data.calendrier;return Array.isArray(r)?r.filter(s).map((e,r)=>({id:u(e.id,`e-${r}`),titre:u(e.titre),date:u(e.date),type:"string"==typeof e.type?e.type:void 0,flux_id:l(e.flux_id),notes:"string"==typeof e.notes?e.notes:void 0})):[...i.A1]}function h(e){let r=e.data.objectifs;return Array.isArray(r)?r.filter(s).map((e,r)=>{let t=s(e.rattachement)?e.rattachement:{},i="manuel"===t.type||"kpi_doc"===t.type||"mesure"===t.type?t.type:"manuel";return{id:u(e.id,`o-${r}`),titre:u(e.titre),horizon:u(e.horizon),cible:o(e.cible),unite:u(e.unite),rattachement:{type:i,measure_id:l(t.measure_id),kpi_id:l(t.kpi_id),valeur_manuelle:c(t.valeur_manuelle)},notes:"string"==typeof e.notes?e.notes:void 0}}):[...i.UL]}function v(e){let r=e.data.regles_alertes;return Array.isArray(r)?r.filter(s).map((e,r)=>{let t="lte"===e.comparateur||"gt"===e.comparateur||"gte"===e.comparateur||"eq"===e.comparateur?e.comparateur:"lt",i="warn"===e.severite||"critique"===e.severite?e.severite:"info";return{id:u(e.id,`a-${r}`),label:u(e.label),metrique:u(e.metrique),comparateur:t,seuil:o(e.seuil),severite:i,active:!1!==e.active}}):[...i.sz]}function g(e){let r,t,i=s(e.params.decision)?e.params.decision:{},n=i.base_usagers_prevision,o="string"==typeof n&&a.cH.includes(n)?n:null,u=i.ia_active_prevision,d=i.revenus_derives,p=s(i.taxes)?i.taxes:{},m=p.reserve_depuis,_=s(i.frais_transaction)?i.frais_transaction:{};return{devise:"CAD",horizon_prevision_mois:c(i.horizon_prevision_mois),seuil_securite_tresorerie_cad:c(i.seuil_securite_tresorerie_cad),seuil_excedent_cad:c(i.seuil_excedent_cad),base_usagers_prevision:o,ia_active_prevision:!0===u||!1!==u&&null,revenus_derives:!0===d||!1!==d&&null,taxes:{tps_pct:c(p.tps_pct),tvq_pct:c(p.tvq_pct),reserve_depuis:"debut_trimestre"===m||"date"===m?m:null,reserve_depuis_date:l(p.reserve_depuis_date)},frais_transaction:{pct:c(_.pct),fixe_par_transaction_cad:c(_.fixe_par_transaction_cad)},fonds_reserve_pct:null!=(r=c(i.fonds_reserve_pct))?r:"fonds_reserve_pct"in i?null:.1,remuneration_nicolas_pct:null!=(t=c(i.remuneration_nicolas_pct))?t:"remuneration_nicolas_pct"in i?null:.25}}function b(e,r=new Date){return(0,n.vR)(e,r).ok}function y(e,r=new Date){let t=(0,n.vR)(e,r);return t.ok?t.solde_cad:0}let x={tresorerie:i.D$,flux:i.i_,calendrier:i.A1,objectifs:i.UL,regles_alertes:i.sz}},60611:(e,r,t)=>{t.d(r,{cH:()=>i.cH,nq:()=>s.nq,GF:()=>s.GF,Lc:()=>a.Lc,Bl:()=>i.Bl,HU:()=>i.HU,ol:()=>n.ol,md:()=>s.md,Ze:()=>a.Ze,TZ:()=>s.TZ,cK:()=>S,vp:()=>o.vp,Lt:()=>u.Lt,zd:()=>u.zd,Cj:()=>f,lT:()=>q.lT,jS:()=>u.jS,rg:()=>k,E5:()=>y,G6:()=>o.G6,g0:()=>A.g0,XZ:()=>a.XZ,FC:()=>x,Rl:()=>s.Rl,vR:()=>s.vR,Tj:()=>h,Oc:()=>_,qj:()=>a.qj,Tz:()=>q.Tz,Ry:()=>a.Ry,SF:()=>a.SF,CB:()=>a.CB,lX:()=>a.lX,xJ:()=>a.xJ,fL:()=>c,KO:()=>a.KO,eN:()=>a.eN,gW:()=>q.gW});var i=t(9406),n=t(61963),a=t(49705),s=t(88473),o=t(82969),u=t(18442);function l(e){let r=e.mois.findIndex(e=>e.solde_cumule<0);return r<0?{mois:e.horizonMois,unbounded:!0}:{mois:r,unbounded:!1}}function c(e,r){let t=(0,a.Ry)(e),i=null!=r.horizonMois?r.horizonMois:t.horizon_prevision_mois;if(null==i||!Number.isFinite(i)||i<1)return{mois:null,mois_brut:null,mois_net:null,reserve_fiscale_cad:null,reason:"horizon_non_configure"};let n=r.now??new Date,s=(0,o.vp)(e,{scenario:r.scenario,horizonMois:Math.floor(i),measures:r.measures,measuredUsers:r.measuredUsers,now:n,partnerPayments:r.partnerPayments});if(!s.ok)return{mois:null,mois_brut:null,mois_net:null,reserve_fiscale_cad:null,reason:"tresorerie_non_saisie"===s.reason?"tresorerie_non_saisie":"horizon_non_configure"};let c=l(s),d=(0,u.Lt)({payments:r.partnerPayments??[],taxes:t.taxes,now:n}),p=null,m=null,_=null;if("ok"===d.status){_=d.reserve_cad;let t=(0,a.eN)((0,a.xJ)(e))-d.reserve_cad,s=(0,o.vp)(e,{scenario:r.scenario,horizonMois:Math.floor(i),measures:r.measures,measuredUsers:r.measuredUsers,now:n,soldeInitialOverride:t,partnerPayments:r.partnerPayments});if(s.ok){let e=l(s);p=e.mois,m=e.unbounded}}let f=null!=p?p:c.mois,h=null!=p?!!m:c.unbounded;return{mois:f,mois_brut:c.mois,mois_net:p,reserve_fiscale_cad:_,unbounded:h,unbounded_brut:c.unbounded,unbounded_net:m,scenario:r.scenario,horizonMois:s.horizonMois,structurels_configures:s.structurels_configures}}var d=t(41203),p=t(45214),m=t(13850);function _(e){let r=[];return e.uncCrit>0&&r.push({id:"pred-unc-crit",label:"T\xe2che critique non attribu\xe9e",severite:"critique",metrique:"predicat_tache_
1critique_non_attribuee",message:`${e.uncCrit} t\xe2che(s) critique(s) non attribu\xe9e(s)`,destinataire:{kind:"a_repartir",motif:"critique non attribu\xe9e"},href:"/pilotage/organisation",valeur_courante:e.uncCrit}),e.busf>0&&r.push({id:"pred-busf",label:"Bus factor 1",severite:"warn",metrique:"predicat_bus_factor_1",message:`${e.busf} poste(s) \xe0 d\xe9pendance unique`,destinataire:{kind:"a_repartir",motif:"d\xe9signer une doublure"},href:"/pilotage/risques",valeur_courante:e.busf}),e.maxLoadPct>p.LI&&r.push({id:"pred-sat",label:"Personne au-dessus du seuil de charge",severite:"critique",metrique:"predicat_saturation_charge",message:`${e.maxLoadPersonNom??"quelqu'un"} \xe0 ${Math.round(e.maxLoadPct)} % (seuil ${p.LI} %, r\xe9f. ${p.KH})`,destinataire:e.maxLoadPersonNom?{kind:"a_repartir",motif:e.maxLoadPersonNom}:{kind:"a_repartir",motif:"personne satur\xe9e"},href:"/pilotage/organisation",valeur_courante:e.maxLoadPct}),null!=e.trialsExpiring7d&&e.trialsExpiring7d>0&&r.push({id:"pred-trials",label:"Essais expirant sans conversion suivie",severite:"warn",metrique:"predicat_essais_expirant",message:`${e.trialsExpiring7d} essai(s) expirant ⤠7 j â plancher \xe9ch\xe9ance ${p.hj} j`,destinataire:{kind:"a_repartir",motif:"conversion essais"},href:"/pilotage",valeur_courante:e.trialsExpiring7d}),e.decisionDepassee&&r.push({id:"pred-decision",label:"D\xe9cision \xe0 r\xe9viser d\xe9pass\xe9e",severite:"warn",metrique:"predicat_decision_a_reviser",message:"Au moins une d\xe9cision \xe0 r\xe9viser est \xe9chue",destinataire:{kind:"a_repartir",motif:"responsable d\xe9cision"},href:"/pilotage/decisions",valeur_courante:1}),e.objectifEnRetard&&r.push({id:"pred-obj",label:"Objectif en retard",severite:"warn",metrique:"predicat_objectif_retard",message:"Au moins un objectif d\xe9passe son horizon sans cible atteinte",destinataire:{kind:"a_repartir",motif:"porteur objectif"},href:"/pilotage/objectifs",valeur_courante:1}),r}function f(e,r=new Date){let t=r.getFullYear(),i=r.getMonth()+1,n=r.getDate();for(let r of e){let e=(r.revision||"").trim();if(!e)continue;let a=/^(\d{4})-(\d{2})$/.exec(e);if(a){let e=Number(a[1]),r=Number(a[2]);if(e<t||e===t&&r<i)return!0;continue}let s=/^(\d{4})-(\d{2})-(\d{2})$/.exec(e);if(s){let e=Number(s[1]),r=Number(s[2]),a=Number(s[3]);if(e<t||e===t&&(r<i||r===i&&a<n))return!0}}return!1}function h(e,r=new Date){return f(e.map(e=>({revision:e.horizon})),r)}let v=new Set(["runway","solde","solde_fin_mois","reserve_fiscale_pct_tresorerie"]),g="prudent",b={critique:0,warn:1,info:2};function y(e,r={}){let t=(0,a.lX)(e).filter(e=>e.active),i=(0,a.Ry)(e),n=[];for(let a of t){if(!Number.isFinite(a.seuil))continue;let t=v.has(a.metrique),s=null,l=null,p=!1;if(t&&"runway"===a.metrique){let t=c(e,{scenario:l=g,horizonMois:i.horizon_prevision_mois,measures:r.measures,measuredUsers:r.measuredUsers,now:r.now,partnerPayments:r.partnerPayments});null==t.mois?p=!0:s=t.mois}else if(t&&"reserve_fiscale_pct_tresorerie"===a.metrique){let t=(0,u.Lt)({payments:r.partnerPayments??[],taxes:i.taxes,now:r.now});if("ok"!==t.status)p=!0;else{let r=(0,u.du)(e,t.reserve_cad);null==r?p=!0:s=r}}else if(t&&("solde"===a.metrique||"solde_fin_mois"===a.metrique)){l=g;let t=i.horizon_prevision_mois;if(null==t)p=!0;else{let i=(0,o.vp)(e,{scenario:l,horizonMois:Math.floor(t),measures:r.measures,measuredUsers:r.measuredUsers,now:r.now,partnerPayments:r.partnerPayments});i.ok&&0!==i.mois.length?s=i.mois[i.mois.length-1].solde_cumule:p=!0}}else{let e=(r.measures??[]).find(e=>e.id===a.metrique);e&&"unavailable"!==e.status&&"number"==typeof e.value&&Number.isFinite(e.value)?s=e.value:p=!0}if(p||null==s||!function(e,r,t){switch(r){case"lt":return e<t;case"lte":return e<=t;case"gt":return e>t;case"gte":return e>=t;case"eq":return e===t;default:return!1}}(s,a.comparateur,a.seuil))continue;let m=l?` \xb7 sc\xe9nario ${l}`:"",_=`${a.label} : ${s} ${(0,d.wJ)(a.comparateur)} ${a.seuil}${m}`;n.push({regle_id:a.id,label:a.label,severite:a.severite,metrique:a.metrique,message:_,valeur_courante:s,seuil:a.seuil,scenario_evalue:l})}return r.predicats?.length&&n.push(...[...r.predicats].map(e=>({regle_id:e.id,label:e.label,severite:e.severite,metrique:e.metrique,message:`${e.message} \xb7 QUI ${(0,m.yy)(e.destinataire)} \xb7 ${e.href}`,valeur_courante:e.valeur_courante,seuil:0,scenario_evalue:null}))),n.sort((e,r)=>{let t=(b[e.severite]??9)-(b[r.severite]??9);return 0!==t?t:e.label.localeCompare(r.label,"fr")}),n}function x(e){return(0,a.lX)(e).some(e=>e.active&&Number.isFinite(e.seuil))}function C(e){return"measured"===e?"Mesur\xe9":"stale"===e?"Obsol\xe8te":"Indisponible"}function k(e,r){let t=r.measures??[],i=(0,a.CB)(e),n=[],s=t.find(e=>"subscription_mrr_cad"===e.id);if(null!=r.prevuMrr&&Number.isFinite(r.prevuMrr)){let e=s&&"unavailable"!==s.status&&"number"==typeof s.value?s.value:null;n.push({indicateur:"mrr",label:"MRR",prevu:r.prevuMrr,realise:e,badge_prevu:"Hypoth\xe8se",badge_realise:C(s?.status),delta:null!=e?e-r.prevuMrr:null,unite:"CAD HT"})}for(let e of i){if("mesure"!==e.rattachement.type||!e.rattachement.measure_id)continue;let r=e.rattachement.measure_id,i=t.find(e=>e.id===r),a=i&&"unavailable"!==i.status&&"number"==typeof i.value?i.value:null;n.push({indicateur:r,label:e.titre||r,prevu:e.cible,realise:a,badge_prevu:"Hypoth\xe8se",badge_realise:C(i?.status),delta:null!=a?a-e.cible:null,unite:e.unite||void 0})}return n}var q=t(37447),A=t(42262);function S(e,r){let t=(0,a.Ry)({data:e.data,params:e.params}),i={...e.data};return r&&"fluxPreview"in r&&(i.flux=r.fluxPreview),{data:i,params:{...e.params,decision:{...t}}}}t(43310),t(23112)},61963:(e,r,t)=>{t.d(r,{A1:()=>a,D$:()=>i,UL:()=>s,i_:()=>n,ol:()=>u,sz:()=>o});let i={comptes:[],dettes:[]},n=[],a=[],s=[],o=[],u={devise:"CAD",horizon_prevision_mois:null,seuil_securite_tresorerie_cad:null,
1seuil_excedent_cad:null,base_usagers_prevision:null,ia_active_prevision:null,revenus_derives:null,taxes:{tps_pct:null,tvq_pct:null,reserve_depuis:null,reserve_depuis_date:null},frais_transaction:{pct:null,fixe_par_transaction_cad:null},fonds_reserve_pct:.1,remuneration_nicolas_pct:.25}},64437:(e,r,t)=>{t.d(r,{$I:()=>u,D7:()=>o,Gn:()=>n,VI:()=>a,zC:()=>s});let i="America/Toronto";function n(e,r){let t=r?.fractionDigits!=null&&Number.isFinite(r.fractionDigits)?Math.max(0,Math.floor(r.fractionDigits)):2;if(!Number.isFinite(e))return"â $ CAD";let i=Number(e).toLocaleString("fr-CA",{minimumFractionDigits:t,maximumFractionDigits:t}).replace(/\u00A0/g,"â¯").replace(/(\d) (?=\d)/g,"$1â¯");return`${i} $ CAD`}function a(e){if("string"!=typeof e)return null;let r=e.trim();if(""===r||""===(r=r.replace(/[\u202F\u00A0\s]/g,""))||"-"===r||"+"===r||"."===r||","===r)return null;let t=r.includes(","),i=r.includes(".");if(t&&i?r=r.lastIndexOf(",")>r.lastIndexOf(".")?r.replace(/\./g,"").replace(",","."):r.replace(/,/g,""):t&&(r=r.replace(",",".")),!/^[+-]?\d+(\.\d+)?$/.test(r))return null;let n=Number(r);return Number.isFinite(n)?n:null}function s(e,r=0){return Number(e).toLocaleString("fr-CA",{maximumFractionDigits:r,minimumFractionDigits:0}).replace(/\u202F/g," ").replace(/\u00A0/g," ")}function o(e){return`${s(100*e,1)} %`}function u(e){if(!e)return"â";let r=function(e){if(e.length<=10){var r;let t,n,[a,s,o]=e.split("-").map(Number);if(!a||!s||!o)return null;let u=(r=Date.UTC(a,s-1,o,17,0,0),t=new Intl.DateTimeFormat("en-US",{timeZone:i,timeZoneName:"shortOffset"}).formatToParts(new Date(r)).find(e=>"timeZoneName"===e.type)?.value??"GMT",(n=/GMT([+-])(\d{1,2})(?::?(\d{2}))?/.exec(t))?("-"===n[1]?-1:1)*(60*parseInt(n[2],10)+(n[3]?parseInt(n[3],10):0)):0);return new Date(Date.UTC(a,s-1,o,12,0,0)-6e4*u)}let t=new Date(e);return Number.isNaN(t.getTime())?null:t}(e);return r?new Intl.DateTimeFormat("fr-CA",{timeZone:i,year:"numeric",month:"short",day:"numeric",hour:e.length>10?"2-digit":void 0,minute:e.length>10?"2-digit":void 0}).format(r):e}},73321:(e,r,t)=>{var i=t(74645);t.o(i,"useParams")&&t.d(r,{useParams:function(){return i.useParams}}),t.o(i,"usePathname")&&t.d(r,{usePathname:function(){return i.usePathname}}),t.o(i,"useRouter")&&t.d(r,{useRouter:function(){return i.useRouter}}),t.o(i,"useSearchParams")&&t.d(r,{useSearchParams:function(){return i.useSearchParams}})},78853:(e,r,t)=>{t.d(r,{P:()=>M,n:()=>$});var i=t(95155),n=t(12115),a=t(73321),s=t(41668),o=t(60611),u=t(88473);function l(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}function c(e){return"string"==typeof e?e:""}function d(e){let r=e.doc_migrations;if(!Array.isArray(r))return[];let t=[];for(let e of r){if("string"==typeof e&&e.trim()){t.push(e);continue}l(e)&&"string"==typeof e.id&&e.id.trim()&&t.push(e.id)}return t}function p(e,r,t){if(new Set(d(e)).has(r))return;let i=Array.isArray(e.doc_migrations)?[...e.doc_migrations]:[];i.push({id:r,appliquee_le:t}),e.doc_migrations=i}let m=["couts_generaux","revenu","hypotheses","valeur","decisions"],_=["people","roles","tasks","kpis","risques","phases","raci"];function f(e){return null!=e&&"object"==typeof e&&!Array.isArray(e)}function h(e,r){for(let[t,i]of Object.entries(r))null==e[t]?e[t]=(0,s.rq)(i):f(e[t])&&f(i)&&h(e[t],i)}let v=null,g=new Set;function b(){return v}function y(e){v=e,g.forEach(e=>e())}function x(e){return g.add(e),()=>{g.delete(e)}}var C=t(11430);let k="company-os-dilimo:v2:ia",q=new Set;function A(){try{return"1"===window.localStorage.getItem(k)}catch{return!1}}function S(e){return q.add(e),()=>{q.delete(e)}}let P=(0,n.createContext)(null);function M({initial:e,children:r}){let t=(0,a.useRouter)(),[v,g]=(0,n.useState)(e.doc?(0,s.rq)(e.doc):null),[$,D]=(0,n.useState)(e.version),[R,w]=(0,n.useState)(e.updatedBy),[T,j]=(0,n.useState)(e.updatedAt),F=(0,n.use
1SyncExternalStore)(x,b,()=>null),N=(0,n.useSyncExternalStore)(S,A,()=>!1),O=(0,n.useCallback)(e=>{try{window.localStorage.setItem(k,e?"1":"0")}catch{}q.forEach(e=>e())},[]),I=(0,n.useCallback)(e=>{g(e.doc?(0,s.rq)(e.doc):null),D(e.version),w(e.updatedBy),j(e.updatedAt)},[]);e.version>$&&(g(e.doc?(0,s.rq)(e.doc):null),D(e.version),w(e.updatedBy),j(e.updatedAt));let E=(0,n.useCallback)(async()=>{let e=await fetch("/api/pilotage/state",{cache:"no-store"});if(!e.ok)throw Error(`GET state ${e.status}`);let r=await e.json();return{doc:r.doc&&(0,C.D)(r.doc)?{data:r.doc.data,params:r.doc.params}:null,version:r.version,updatedBy:r.updated_by,updatedAt:r.updated_at}},[]),L=(0,n.useCallback)(async()=>{I(await E())},[I,E]),H=(0,n.useCallback)(()=>{y(null),window.location.reload()},[]),G=(0,n.useCallback)(e=>{g((0,s.rq)(e))},[]),B=(0,n.useCallback)(async e=>{if(b())return{ok:!1,conflict:!0};if(!(0,C.D)(e))return{ok:!1,conflict:!1,error:"Document invalide (data.roles et params requis)."};let r=await fetch("/api/pilotage/state",{method:"PUT",headers:{"content-type":"application/json"},body:JSON.stringify({doc:e,expected_version:$}),cache:"no-store"});if(409===r.status){try{let e=await E();y({version:e.version,updatedBy:e.updatedBy,updatedAt:e.updatedAt})}catch{let e=await r.json().catch(()=>({}));y({version:"number"==typeof e.version?e.version:$,updatedBy:null,updatedAt:null})}return{ok:!1,conflict:!0}}if(!r.ok)return{ok:!1,conflict:!1,error:`\xc9chec enregistrement (${r.status}).`};let i=await r.json();return g((0,s.rq)(e)),D(i.version),t.refresh(),{ok:!0,version:i.version}},[E,$,t]),U=(0,n.useMemo)(()=>v?function(e){var r;let t,i,n,a,v,g,b,y,x,C=(0,s.rq)(e),k=C.data,q=(0,s.rq)(s.GU);for(let e of m)null==k[e]&&(k[e]=(0,s.rq)(q[e]));let A=Array.isArray(k.people)?k.people:[],S=(f(k.entreprise)&&"string"==typeof k.entreprise.nom?k.entreprise.nom:null)||"Cette entreprise";for(let e of A)f(e)&&("fondateur"!==e.statut&&"salarie"!==e.statut||e.ventures||(e.ventures=[{nom:S,heures:"number"==typeof e.heures_dispo_semaine?e.heures_dispo_semaine:0}]));for(let e of(null==k.entreprise?k.entreprise=(0,s.rq)(q.entreprise):f(k.entreprise)&&f(q.entreprise)&&h(k.entreprise,q.entreprise),_))null==k[e]&&(k[e]=(0,s.rq)(q[e]??[]));if(f(k.revenu)){let e=k.revenu,r=q.revenu??{};null==e.hypotheses&&null!=r.hypotheses?e.hypotheses=(0,s.rq)(r.hypotheses):f(e.hypotheses)&&f(r.hypotheses)&&h(e.hypotheses,r.hypotheses)}f(k.valeur)&&f(q.valeur)&&function(e,r){if(null==e.capital)e.capital=(0,s.rq)(r.capital??{});else{var t,i;f(e.capital)&&f(r.capital)&&(t=e.capital,i=r.capital,null==t.actionnaires&&(t.actionnaires=(0,s.rq)(i.actionnaires??[])),null==t.tour?null!=t.round?t.tour=(0,s.rq)(t.round):t.tour=(0,s.rq)(i.tour??{}):f(t.tour)&&f(i.tour)&&h(t.tour,i.tour))}for(let t of(null==e.valorisation?e.valorisation=(0,s.rq)(r.valorisation??{}):f(e.valorisation)&&f(r.valorisation)&&h(e.valorisation,r.valorisation),["actifs","concentration","data_room"]))null==e[t]&&null!=r[t]&&(e[t]=(0,s.rq)(r[t]))}(k.valeur,q.valeur),C.params=Object.assign((0,s.rq)(s.bp),C.params??{}),function(e){if(null==e.tresorerie)e.tresorerie=(0,s.rq)(o.Lc.tresorerie);else if(f(e.tresorerie)){let r=e.tresorerie;null==r.comptes&&(r.comptes=[]),null==r.dettes&&(r.dettes=[])}null==e.flux&&(e.flux=(0,s.rq)(o.Lc.flux)),null==e.calendrier&&(e.calendrier=(0,s.rq)(o.Lc.calendrier)),null==e.objectifs&&(e.objectifs=(0,s.rq)(o.Lc.objectifs)),null==e.regles_alertes&&(e.regles_alertes=(0,s.rq)(o.Lc.regles_alertes))}(k),function(e){if(null==e.decision||!f(e.decision)){e.decision=(0,s.rq)(o.ol);return}let r=e.decision,t=o.ol;for(let[e,i]of Object.entries(t))void 0===r[e]&&(r[e]=(0,s.rq)(i));if(null==r.devise&&(r.devise="CAD"),f(r.taxes)){let e=r.taxes;for(let[r,i]of Object.entries(t.taxes))void 0===e[r]&&(e[r]=(0,s.rq)(i))}else r.taxes=(0,s.rq)(t.taxes);if(f(r.frais_transaction)){let e=r.frais_transaction;for(let[r,i]of Object.entries(t.frais_transaction))void 0===e[r]&&(e[r]=(0,s.rq)(i))}else r.frais_transaction=(0,s.rq)(t.frais_transaction);void 0===r.fonds_reserve_pct&&(r.fonds_reserve_pct=t.fonds_reserve_pct),void 0===r.remuneration_nicolas_pct&&(r.remuneration_nicolas_pct=t.remuneration_nicolas_pct)}(C.params);let P=(r=(t=function(e){let r=u.Wv,t=l(e.data)?{...e.data}:{roles:[]},i=l(e.params)?{...e.params}:{};if(d(i).includes(u.H6)){let n=l(t.tresorerie)?t.tresorerie:null;if((Array.isArray(n?.comptes)?n.comptes:[]).every(e=>l(e)&&(0,u.RU)(e.type)))return{doc:{...e,data:t,params:i},changed:!1,migrationId:null,historySubject:r}}let n=l(t.tresorerie)?{...t.tresorerie}:{comptes:[],dettes:[]},a=Array.isArray(n.comptes)?n.comptes:[],s=!1,o=a.map(e=>{if(!l(e))return e;let r={...e},t=(0,u.RU)(r.type),i=(0,u.dx)(r);t||(r.type=i,s=!0);let n=c(r.saisi_le),a=c(r.arrete_le);return!/^\d{4}-\d{2}-\d{2}$/.test(a)&&/^\d{4}-\d{2}-\d{2}$/.test(n)&&(r.arrete_le=n,s=!0),"cumul_encaissements"===i&&(c(r.teneur).trim()||(r.teneur=u.GF,s=!0)),r}),m=d(i).includes(u.H6);return!s&&m?{doc:{...e,data:t,params:i},changed:!1,migrationId:null,historySubject:r}:(n.comptes=o,t.tresorerie=n,m||(p(i,u.H6,new Date().toISOString().slice(0,10)),s=!0),{doc:{...e,data:t,params:i},changed:s,migrationId:s?u.H6:null,historySubject:r})}({data:k,params:C.params})).doc,i=u.L5,n=l(r.data)?{...r.data}:{roles:[]},a=l(r.params)?{...r.params}:{},b=(g=Array.isArray((v=l(n.tresorerie)?{...n.tresorerie}:{comptes:[],dettes:[]}).dettes)?v.dettes:[]).some(e=>l(e)&&c(e.id)===u.qs),y=d(a).includes(u.WB),(x=b?(v.dettes=g.filter(e=>!(l(e)&&c(e.id)===u.qs)),n.tresorerie=v,y||p(a,u.WB,new Date().toISOString().slice(0,10)),{doc:{...r,data:n,params:a},changed:!0,migrationId:u.WB,historySubject:i}):{doc:{...r,data:n,params:a},changed:!1,migrationId:null,historySubject:i}).changed?{...x,doc:x.doc}:{...t,doc:x.doc});return P.changed&&f(P.doc.data)&&(null!=P.doc.data.tresorerie&&(k.tresorerie=P.doc.data.tresorerie),C.params=P.doc.params),C}(v):null,[v]),z=(0,n.useMemo)(()=>({doc:U,version:$,updatedBy:R,updatedAt:T,conflict:F,canSave:!F,iaActive:N,setIaActive:O,setLocalDoc:G,saveDoc:B,reloadFromServer:L,clearConflictByReload:H}),[U,$,R,T,F,N,O,G,B,L,H]);return(0,i.jsx)(P.Provider,{value:z,children:r})}function $(){let e=(0,n.useContext)(P);if(!e)throw Error("usePilotageDoc hors PilotageDocProvider");return e}},82969:(e,r,t)=>{t.d(r,{G6:()=>d,L6:()=>l,vp:()=>p});var i=t(37447),n=t(88473),a=t(49705),s=t(42262),o=t(43210),u=t(64437);function l(e,r,t){if("mesure"===e.source){var i,n,a;return!(r<t)&&(i=e,n=r,a=t,(!i.mois_fin||!(n>i.mois_fin))&&("ponctuel"===i.recurrence?n===a:c(i,n,a)))}if("ponctuel"===e.recurrence)return e.date?(0,s.xG)(e.date)===r:!!e.mois_debut&&e.mois_debut===r;let o=e.mois_debut,u=e.mois_fin;if(o&&r<o||u&&r>u)return!1;if((o||u||e.date)&&e.date&&!o){let t=(0,s.xG)(e.date);if(t&&r<t)return!1}return c(e,r,o)}function c(e,r,t){let[i,n]=r.split("-").map(Number),a=(i-1)*12+n;if("trimestriel"===e.recurrence){let e=t?(()=>{let[e,r]=t.split("-").map(Number);return(e-1)*12+r})():a;return(a-e)%3==0}if("semestriel"===e.recurrence){let e=t?(()=>{let[e,r]=t.split("-").map(Number);return(e-1)*12+r})():a;return(a-e)%6==0}if("annuel"===e.recurrence){let e=t?Number(t.slice(5,7)):n;return n===e}return!0}function d(e,r){if("mesure"===e){let e=r?(0,u.$I)(r):"â";return`Mesur\xe9 \xb7 ${e}`}return"reporte"===e?"Report\xe9":null}function p(e,r){let t=r.horizonMois;if(!Number.isFinite(t)||t<1||!Number.isInteger(t))return{ok:!1,reason:"horizon_non_configure",mois:[],solde_initial:null,configured:!1};let u=(0,a.xJ)(e),c=r.now??new Date,d=(0,n.vR)(u,c);if(!d.ok)return{ok:!1,reason:"tresorerie_non_saisie",mois:[],solde_initial:null,configured:!1};let p=(0,a.Ry)(e),m=(0,s.xz)(c),_=(0,s.h4)(m,t),f=(0,a.SF)(e).filter(e=>null==e.scenario||e.scenario===r.scenario),h=r.partnerPayments??[],v=(0,o.sY)(h,p.taxes,c),g=(0,o.aF)(u.dettes,v),b=(0,n.a1)(h,d.arrete_le),y=[],x=[];for(let e of b)(0,s.D$)(String(e.received_at))<m?y.push(e):x.push(e);let C={tps_pct:p.taxes.tps_pct??void 0,tvq_pct:p.taxes.tvq_pct??void 0},k=(0,o.Ek)(y,C),q=0;for(let e of k.values()){q+=e.encaissement_brut_cad;let r=(0,o.Rx)(e,p.frais_transaction);"ok"===r.status&&null!=r.montant_cad&&(q-=r.montant_cad)}let A=(0,o.Ek)(x,C),S=(0,i.lT)(e,{horizonMois:t,measuredUsers:r.measuredUsers??null,
1now:c,fraisAssiette:null}),P=S.ok,M=S.ok&&S.revenusDerivesActifs,$=new Map(S.ok?S.mois.map(e=>[e.cle,e.total_structurel]):[]),D=new Map(S.ok?S.mois.map(e=>[e.cle,e.total_entrees_structurelles]):[]),R=d.solde_cad+q,w=null!=r.soldeInitialOverride&&Number.isFinite(r.soldeInitialOverride)?r.soldeInitialOverride+q:R;return{ok:!0,mois:_.map(e=>{let t=0,i=0,n=null,a=null,u=new Set;for(let r of f)!r.remplace_par_derive&&"paye"===r.statut&&l(r,e,m)&&r.categorie&&u.add(r.categorie);for(let s of f){if(s.remplace_par_derive||!l(s,e,m)||(null==s.statut||void 0===s.statut)&&u.has(s.categorie))continue;let o=function(e,r){if("mesure"===e.source&&e.measure_id){let t=(r??[]).find(r=>r.id===e.measure_id);if(t&&"unavailable"!==t.status&&"number"==typeof t.value&&Number.isFinite(t.value))return t.value}return e.montant_cad}(s,r.measures);if("mesure"===s.source)if(e===m){n="mesure";let e=(r.measures??[]).find(e=>e.id===s.measure_id);a=e?.measured_at&&String(e.measured_at)||c.toISOString().slice(0,10)}else"mesure"!==n&&(n="reporte");"entree"===s.sens?t+=o:i+=o}let d=0;for(let r of g)if(!r.ignoree_par_courbe&&null!=r.paiement_mensuel_cad&&0!==r.paiement_mensuel_cad){if(r.echeance&&e>((0,s.xG)(r.echeance)??r.echeance.slice(0,7)))continue;d+=r.paiement_mensuel_cad}let _=A.get(e),h=_?.encaissement_brut_cad??0,v=(0,o.Rx)(_,p.frais_transaction),b="ok"===v.status&&null!=v.montant_cad?v.montant_cad:0,y=$.get(e)??0,x=D.get(e)??0;t=(0,s.nF)(t),i=(0,s.nF)(i),d=(0,s.nF)(d);let C=(0,s.nF)(x+t+h),k=(0,s.nF)(y+i+d+b);w=(0,s.nF)(w+C-k);let q="non_configuree",S=p.seuil_securite_tresorerie_cad,P=p.seuil_excedent_cad;return(null!=S||null!=P)&&(q="ok",null!=S&&w<S?q="tension":null!=P&&w>P&&(q="excedent")),{cle:e,label:(0,s.g0)(e),entrees:C,entrees_structurelles:(0,s.nF)(x),entrees_partenaires:(0,s.nF)(h),sorties:k,sorties_structurelles:y,sorties_manuelles:i,sorties_dettes:d,sorties_frais_transaction:(0,s.nF)(b),solde_cumule:w,zone:q,mesure_marque:n,mesure_date:a}}),solde_initial:(0,s.nF)(null!=r.soldeInitialOverride&&Number.isFinite(r.soldeInitialOverride)?r.soldeInitialOverride+q:R),configured:!0,scenario:r.scenario,horizonMois:t,structurels_configures:P,entrees_structurelles_actives:M}}},88473:(e,r,t)=>{t.d(r,{GF:()=>o,H6:()=>l,L5:()=>m,RU:()=>_,Rl:()=>h,TZ:()=>y,WB:()=>p,Wv:()=>c,a1:()=>x,dx:()=>f,md:()=>u,nq:()=>s,o4:()=>g,qs:()=>d,vR:()=>b});var i=t(43228),n=t(42262),a=t(9406);let s="Compte Immoplait tenu par David",o="David (Immoplait)",u="solde du compte Immoplait jamais saisi",l="tresorerie_compte_type",c="migration:tresorerie_compte_type",d="d-1785785600439",p="dette_david_frais_hors_dilimo",m="migration:dette_david_frais_hors_dilimo";function _(e){return"string"==typeof e&&a.r6.includes(e)}function f(e){var r;return _(e.type)?e.type:(r="string"==typeof e.nom?e.nom:"",/encaissement/i.test(r.trim()))?"cumul_encaissements":"solde_bancaire"}function h(e){return"solde_bancaire"===e.type&&((e.teneur??"").trim()===o||/immoplait/i.test(e.nom))}function v(e){return e.id.startsWith("c-ouverture-caisse-")}function g(e){let r=(e.arrete_le??"").trim();if(/^\d{4}-\d{2}-\d{2}$/.test(r))return r;let t=(e.saisi_le??"").trim();return/^\d{4}-\d{2}-\d{2}$/.test(t)?t:""}function b(e,r=new Date){let t=e.comptes.filter(e=>"solde_bancaire"===f(e));if(0===t.length)return{ok:!1,reason:"jamais_saisi"};let i=t.map(g).filter(Boolean);if(0===i.length)return{ok:!1,reason:"jamais_saisi"};let a=i.slice().sort().at(-1),s=t.filter(e=>g(e)===a),o=s.reduce((e,r)=>e+r.solde_cad,0),u=s.find(e=>(e.teneur??"").trim())?.teneur?.trim()??null,l=(0,n.HN)(r),c=(0,n.GK)(a,l),d=s.length>0&&s.every(v);if(!d&&(!Number.isFinite(c)||c>45)){let e=t.filter(v);if(e.length>0){let r=e.map(g).filter(Boolean).sort().at(-1),t=e.filter(e=>g(e)===r),i=(0,n.GK)(r,l);return{ok:!0,solde_cad:t.reduce((e,r)=>e+r.solde_cad,0),arrete_le:r,jours:Number.isFinite(i)?i:0,teneur:t.find(e=>(e.teneur??"").trim())?.teneur?.trim()??null,comptes:t,vieillissant:!1,ancre:!0}}return{ok:!1,reason:"perime",arrete_le:a,jours:Number.isFinite(c)?c:46,solde_cad:o,teneur:u}}return{ok:!0,solde_cad:o,arrete_le:a,jours:c,teneur:u,comptes:s,vieillissant:!d&&c>15,ancre:d}}function y(e){return`le solde date du ${e}
1, les indicateurs qui en d\xe9pendent vieillissent avec lui`}function x(e,r){if(!/^\d{4}-\d{2}-\d{2}$/.test(r))return[];let t=[];for(let a of e)(0,i.L)(a)&&(0,n.NV)(String(a.received_at))>r&&t.push(a);return t}},91126:(e,r,t)=>{t.d(r,{bp:()=>a,GN:()=>s,GU:()=>n,rq:()=>o});let i=JSON.parse('{"GU":{"entreprise":{"nom":"Dilimo","logo":"D","secteur":"Immobilier off-market â SaaS B2B","territoire":"Qu\xe9bec","devise":"CAD","tagline":"Le off-market immobilier, structur\xe9","vision":"Consolider tout le cycle d\'une transaction immobili\xe8re off-market â du sourcing \xe0 la soumission au notaire â dans un seul syst\xe8me, en rempla\xe7ant groupes Facebook, courriels et tableurs.","modele_economique":"Abonnement SaaS par paliers pour les membres (Free / Pro 49 $ / Pro+CRM 99 $ / Pro+CRM+Chantier 179 $ /mois, HT taxes en sus ; add-ons additifs : site vitrine 800 $, module annonces 399 $) + annuaire partenaires payant (Or 1 500 $/an forfait mono-m\xe9tier, Standard 500 $/m\xe9tier/an cumulatif). Pros v\xe9rifi\xe9s uniquement, aucune commission sur les transactions. Paliers CRM/Chantier pas encore vendables en ligne au lancement (octroi manuel \xab Demander l\'acc\xe8s \xbb).","entite_legale":"9464-3947 Qu\xe9bec inc. (faisant affaire sous \xab Immopla\xeet \xbb), NEQ 1177534360, constitu\xe9e le 2022-04-04, domicili\xe9e au 13 Route 227, Mont-Saint-Gr\xe9goire (Qu\xe9bec) J0J 1K0. Pr\xe9sident et actionnaire majoritaire : David Leon.","usagers_actuels":120},"people":[{"id":"nicolas","nom":"Nicolas","roles_actuels":["coo","cto","lead-developer","full-stack-developer","devops-engineer","product-manager","security-engineer"],"heures_dispo_semaine":20,"cout_annuel_cad":0,"salaire_cible_cad":110000,"differe":true,"statut":"salarie","ventures":[{"nom":"Dilimo","heures":20},{"nom":"Cam\xe9l\xe9on","heures":35},{"nom":"Dartsmedia","heures":8}]},{"id":"david","nom":"David Leon","roles_actuels":["ceo","sales-manager","marketing-manager","finance-manager","customer-success-manager"],"heures_dispo_semaine":22,"cout_annuel_cad":0,"statut":"fondateur","ventures":[{"nom":"Dilimo","heures":22},{"nom":"Cam\xe9l\xe9on","heures":15},{"nom":"Dartsmedia","heures":8}]},{"id":"non-attribue","nom":"Non attribu\xe9","roles_actuels":[],"heures_dispo_semaine":0,"cout_annuel_cad":0,"statut":"placeholder"}],"roles":[{"id":"ceo","titre":"CEO / Directeur g\xe9n\xe9ral","mission":"D\xe9finir la vision strat\xe9gique, s\xe9curiser le financement et garantir l\'alignement produit-march\xe9-\xe9quipe.","responsabilites":["Vision produit et strat\xe9gie commerciale","Relations investisseurs et lev\xe9e pr\xe9-seed","Pilotage des KPI et arbitrage budg\xe9taire","Validation de la roadmap","Recrutement des postes cl\xe9s"],"competences":["Leadership et vision strat\xe9gique","Lev\xe9e de fonds et relations investisseurs","Pilotage financier (MRR/burn)","N\xe9gociation partenariats (notaires, pr\xeateurs)"],"kpis":["ARR (~2,8 M$ \xe0 3 ans : 5 000 MAU)","MRR abonnements + annuaire","Cash Runway (>12 mois)","Churn (<5%/mois)"],"seniorite":"direction","salaire_annuel_cad":130000,"phase_apparition":1},{"id":"coo","titre":"COO / Directeur des op\xe9rations","mission":"Piloter les op\xe9rations quotidiennes, optimiser les processus et transformer la strat\xe9gie en ex\xe9cution.","responsabilites":["Superviser les op\xe9rations quotidiennes","Suivre les KPI de chaque d\xe9partement","Arbitrer les priorit\xe9s interservices","Standardiser les processus et SOP","Piloter les projets strat\xe9giques"],"competences":["Gestion op\xe9rationnelle","Am\xe9lioration continue","Coordination multi-\xe9quipes","Pilotage par la donn\xe9e"],"kpis":["Respect des OKR (>80%)","R\xe9alisation des projets (>75%)","R\xe9solution des blocages (<48h)"],"seniorite":"direction","salaire_annuel_cad":120000,"phase_apparition":1},{"id":"cto","titre":"CTO / Directeur technique","mission":"Concevoir et s\xe9curiser la plateforme pour garantir sa scalabilit\xe9, sa qualit\xe9 et sa conformit\xe9.","responsabilites":["D\xe9finir l\'architecture technique","Prioriser la dette technique","Garantir la qualit\xe9 du code","Superviser d\xe9veloppements et d\xe9ploiement","Piloter la cybers\xe9curit\xe9 et la conformit\xe9 Loi 25"],"competences":["Architecture Next.js/Supabase/PostGIS","S\xe9curit\xe9 applicative et RLS","CI/CD et monitoring","Conformit\xe9 Loi 25"],"kpis":["Disponibilit\xe9 (>99,5%)","Bugs critiques (<2/mois)","Couverture de tests (>70%)"],"seniorite":"direction","salaire_annuel_cad":135000,"phase_apparition":1},{"id":"product-manager","titre":"Product Manager","mission":"Transformer les besoins utilisateurs et objectifs business en une roadmap claire, prioris\xe9e et mesurable.","responsabilites":["D\xe9finir la vision produit","G\xe9rer et prioriser le backlog","\xc9crire les sp\xe9cifications fonctionnelles","Valider les livraisons","Suivre les KPI produit"],"competences":["Priorisation produit","R\xe9daction de user stories","Analyse des usages","Discovery utilisateur"],"kpis":["Adoption des fonctionnalit\xe9s (>40%)","NPS (>40)","Churn produit (<3%)"],"seniorite":"senior","salaire_annuel_cad":95000,"phase_apparition":1},{"id":"lead-developer","titre":"Lead Developer","mission":"Garantir la qualit\xe9 technique des d\xe9veloppements et l\'ex\xe9cution de la roadmap.","responsabilites":["R\xe9partition des t\xe2ches techniques","Revue de code et validation des PR","Conception des solutions techniques","Estimation des d\xe9veloppements","Choix d\'architecture"],"competences":["D\xe9veloppement fullstack senior","Revue de code","Mentorat technique","Gestion de la dette"],"kpis":["Revue des PR (<1 jour)","Bugs prod (<3/mois)","Couverture de tests (>70%)"],"seniorite":"senior","salaire_annuel_cad":115000,"phase_apparition":2},{"id":"front-end-developer","titre":"Front-end Developer","mission":"Concevoir une interface moderne, rapide, accessible et intuitive.","responsabilites":["D\xe9velopper les interfaces","Int\xe9grer les maquettes Figma","Optimiser les performances","Respecter le design system"],"competences":["Next.js/React/TypeScript","Tailwind et design system","Accessibilit\xe9 WCAG","Optimisation perf"],"kpis":["Lighthouse (>90)","Bugs UI (<5/sprint)","Respect du design system"],"seniorite":"intermediaire","salaire_annuel_cad":80000,"phase_apparition":3},{"id":"back-end-developer","titre":"Back-end Developer","mission":"Concevoir et maintenir les services, API et bases de donn\xe9es fiables et s\xe9curis\xe9s.","responsabilites":["D\xe9velopper les API et RPC","Concevoir les mod\xe8les de donn\xe9es","Optimiser les requ\xeates SQL/PostGIS","Corriger les incidents"],"competences":["PostgreSQL/PostGIS","Supabase et RLS","Conception d\'API","Optimisation SQL"],"kpis":["R\xe9ponse API (<200ms)","Disponibilit\xe9 (>99,5%)","Bugs critiques (<2/mois)"],"seniorite":"intermediaire","salaire_annuel_cad":85000,"phase_apparition":3},{"id":"full-stack-developer","titre":"Full Stack Developer","mission":"D\xe9velopper les fonctionnalit\xe9s de bout en bout, de l\'UI aux services backend.","responsabilites":["D\xe9velopper des fonctionnalit\xe9s compl\xe8tes","Corriger les bugs front et back","\xc9crire les tests automatis\xe9s","Documenter les d\xe9veloppements"],"competences":["Next.js/Supabase de bout en bout","TypeScript strict","Tests Vitest/Playwright","Polyvalence"],"kpis":["Fonctionnalit\xe9s / sprint","Bugs prod (<3/mois)","Couverture de tests (>70%)"],"seniorite":"intermediaire","salaire_annuel_cad":90000,"phase_apparition":2},{"id":"devops-engineer","titre":"DevOps Engineer","mission":"Garantir une infrastru
1cture fiable, s\xe9curis\xe9e et automatis\xe9e.","responsabilites":["Maintenir les pipelines CI/CD","Administrer les environnements cloud","Superviser monitoring et alertes","Optimiser les co\xfbts cloud"],"competences":["CI/CD (Vercel/GitHub Actions)","Infrastructure as Code","Monitoring","Gestion des secrets"],"kpis":["Disponibilit\xe9 SLA (>99,5%)","MTTR (<1h)","D\xe9ploiements r\xe9ussis (>95%)"],"seniorite":"senior","salaire_annuel_cad":105000,"phase_apparition":3},{"id":"qa-engineer","titre":"QA Engineer","mission":"Garantir la qualit\xe9 fonctionnelle et technique via des tests d\xe9finis, ex\xe9cut\xe9s et automatis\xe9s.","responsabilites":["\xc9laborer les plans de tests","Automatiser les sc\xe9narios critiques","Valider les versions avant prod","Suivre la r\xe9solution des anomalies"],"competences":["Tests E2E Playwright","Tests unitaires Vitest","Automatisation QA","Analyse de r\xe9gression"],"kpis":["Bugs d\xe9tect\xe9s avant prod (>90%)","R\xe9gressions (<2/release)","Couverture (>75%)"],"seniorite":"intermediaire","salaire_annuel_cad":75000,"phase_apparition":3},{"id":"customer-success-manager","titre":"Customer Success Manager","mission":"Accompagner les pros abonn\xe9s et les partenaires de l\'annuaire pour maximiser adoption, satisfaction et fid\xe9lit\xe9.","responsabilites":["Piloter l\'onboarding des nouveaux abonn\xe9s","Organiser les suivis partenaires (notaires, pr\xeateurs)","Former les utilisateurs","Identifier les risques de d\xe9part"],"competences":["Relation client et partenaires publics","Onboarding et formation","Analyse de churn","Communication"],"kpis":["NPS (>50)","Activation (>60%)","R\xe9tention (>85%)"],"seniorite":"intermediaire","salaire_annuel_cad":70000,"phase_apparition":2},{"id":"support-client","titre":"Support Client","mission":"Assurer un support rapide et document\xe9 et remonter les informations aux \xe9quipes.","responsabilites":["Traiter les tickets entrants","Qualifier et escalader les incidents","Alimenter la base de connaissances","Identifier les tendances r\xe9currentes"],"competences":["Gestion de tickets","Communication client","Qualification d\'incidents","R\xe9daction FAQ"],"kpis":["Premi\xe8re r\xe9ponse (<2h)","SLA (>90%)","CSAT (>4/5)"],"seniorite":"junior","salaire_annuel_cad":50000,"phase_apparition":2},{"id":"marketing-manager","titre":"Marketing Manager","mission":"D\xe9finir et ex\xe9cuter la strat\xe9gie marketing pour d\xe9velopper notori\xe9t\xe9 et inscriptions qualifi\xe9es.","responsabilites":["\xc9laborer le plan marketing","Piloter les campagnes d\'acquisition","G\xe9rer le calendrier \xe9ditorial","Suivre les performances marketing"],"competences":["Marketing d\'acquisition local","Campagnes et A/B testing","Analytics privacy-friendly","Positionnement"],"kpis":["Inscriptions g\xe9n\xe9r\xe9es","CAC (<25 $)","Conversion (>10%)"],"seniorite":"senior","salaire_annuel_cad":80000,"phase_apparition":2},{"id":"seo-geo-manager","titre":"SEO / GEO Manager","mission":"D\xe9velopper la visibilit\xe9 organique sur les moteurs de recherche et de r\xe9ponse IA.","responsabilites":["Audits SEO techniques","Strat\xe9gie \xe9ditoriale SEO","Optimiser les contenus","D\xe9velopper le netlinking"],"competences":["SEO technique","GEO/AEO et moteurs IA","Recherche de mots-cl\xe9s","Netlinking"],"kpis":["Trafic organique","Mots-cl\xe9s positionn\xe9s","Leads SEO"],"seniorite":"intermediaire","salaire_annuel_cad":70000,"phase_apparition":3},{"id":"sales-manager","titre":"Sales Manager / Responsable commercial","mission":"D\xe9velopper le chiffre d\'affaires en structurant le processus commercial et les partenariats territoriaux.","responsabilites":["Qualifier les prospects (courtiers, investisseurs, gens de m\xe9tier)","Organiser les d\xe9monstrations","Recruter et signer les partenaires de l\'annuaire","G\xe9rer le CRM commercial"],"competences":["Vente B2B SaaS immobilier","Recrutement de partenaires (annuaire)","Gestion de pipeline","Pr\xe9visions"],"kpis":["Partenaires (Or/Standard) sign\xe9s / mois","Conversion des d\xe9mos (>30%)","Cycle de vente (<90j)"],"seniorite":"senior","salaire_annuel_cad":85000,"phase_apparition":2},{"id":"finance-manager","titre":"Finance Manager","mission":"Piloter tr\xe9sorerie, budgets, pr\xe9visions et indicateurs financiers.","responsabilites":["\xc9laborer le budget annuel","Suivre d\xe9penses et revenus","Pr\xe9visions de tr\xe9sorerie","Superviser la comptabilit\xe9 QC"],"competences":["Comptabilit\xe9 et fiscalit\xe9 QC","Pr\xe9visions de tr\xe9sorerie","Reporting financier","Contr\xf4le des co\xfbts"],"kpis":["MRR abonnements + annuaire","Marge brute","Burn Rate","Runway (>12 mois)"],"seniorite":"senior","salaire_annuel_cad":95000,"phase_apparition":3},{"id":"responsable-administratif","titre":"Responsable Administratif","mission":"Structurer et piloter les activit\xe9s administratives pour un fonctionnement fluide et conforme.","responsabilites":["Gestion des contrats et documents","Suivi des fournisseurs","Coordination avec le cabinet comptable","Suivi des \xe9ch\xe9ances"],"competences":["Gestion documentaire","Conformit\xe9 administrative QC","Co
1ordination fournisseurs","Rigueur"],"kpis":["Respect des \xe9ch\xe9ances (>95%)","Conformit\xe9 documentaire","Co\xfbt administratif ma\xeetris\xe9"],"seniorite":"intermediaire","salaire_annuel_cad":60000,"phase_apparition":3},{"id":"ux-ui-designer","titre":"UX/UI Designer","mission":"Concevoir une exp\xe9rience simple, coh\xe9rente et accessible.","responsabilites":["Recherches utilisateurs","Wireframes et prototypes","Maintenir le design system","Tester les parcours"],"competences":["Design system et Figma","Recherche utilisateur","Accessibilit\xe9 WCAG","Mobile-first"],"kpis":["R\xe9ussite des parcours (>85%)","Satisfaction utilisateur","Adoption des fonctionnalit\xe9s"],"seniorite":"intermediaire","salaire_annuel_cad":82000,"phase_apparition":2},{"id":"content-manager","titre":"Content Manager","mission":"Concevoir et piloter les contenus pour renforcer la notori\xe9t\xe9 et soutenir le SEO/GEO.","responsabilites":["Calendrier \xe9ditorial","R\xe9diger ou coordonner les contenus","Optimiser pour SEO et IA","Mesurer les performances"],"competences":["R\xe9daction et ligne \xe9ditoriale","Optimisation SEO/GEO","Gestion de CMS","Storytelling"],"kpis":["Contenus publi\xe9s (>2/sem)","Trafic g\xe9n\xe9r\xe9","Positions SEO"],"seniorite":"junior","salaire_annuel_cad":62000,"phase_apparition":3},{"id":"security-engineer","titre":"Security Engineer","mission":"Garantir la s\xe9curit\xe9 des syst\xe8mes et donn\xe9es en conformit\xe9 avec la Loi 25.","responsabilites":["D\xe9finir la politique de s\xe9curit\xe9","Audits et analyses de risques","Superviser acc\xe8s et RLS","G\xe9rer les vuln\xe9rabilit\xe9s"],"competences":["Cybers\xe9curit\xe9 applicative","Conformit\xe9 Loi 25/RGPD","IAM et moindre privil\xe8ge","R\xe9ponse \xe0 incident"],"kpis":["Vuln\xe9rabilit\xe9s critiques (0)","Correction (<7j)","Couverture MFA (100%)"],"seniorite":"senior","salaire_annuel_cad":110000,"phase_apparition":4},{"id":"talent-acquisition-rh","titre":"Talent Acquisition / RH","mission":"Attirer, recruter, int\xe9grer et fid\xe9liser les talents.","responsabilites":["D\xe9finir les besoins de recrutement","Sourcer et pr\xe9s\xe9lectionner","Piloter l\'onboarding","D\xe9velopper la marque employeur"],"competences":["Recrutement tech et non-tech","Onboarding structur\xe9","Marque employeur","Gestion RH QC"],"kpis":["D\xe9lai de recrutement (<45j)","Acceptation des offres (>80%)","R\xe9tention (>90%)"],"seniorite":"intermediaire","salaire_annuel_cad":72000,"phase_apparition":4},{"id":"cfo","titre":"CFO / Directeur financier","mission":"D\xe9finir et piloter la strat\xe9gie financi\xe8re pour une croissance rentable et s\xe9curiser les lev\xe9es.","responsabilites":["Strat\xe9gie financi\xe8re","Superviser budget et pr\xe9visions","Piloter tr\xe9sorerie et financement","Reportings investisseurs"],"competences":["Strat\xe9gie financi\xe8re et lev\xe9es","Relations investisseurs","Contr\xf4le de gestion","Fiscalit\xe9 QC"],"kpis":["ARR","EBITDA","LTV/CAC (>3)","Free Cash Flow"],"seniorite":"direction","salaire_annuel_cad":150000,"phase_apparition":5}],"tasks":[{"id":"t-dev","nom":"D\xe9veloppement de fonctionnalit\xe9s (Next.js 16 / Supabase)","role_id":"lead-developer","assignee_id":"nicolas","domaine":"Tech","recurrence":"quotidien","duree_heures":4,"priorite":"critique","livrable":"Code merg\xe9 + tests","sop_ref":"SEC/ERR"},{"id":"t-pr","nom":"Revue de code et validation des PR","role_id":"lead-developer","assignee_id":"nicolas","domaine":"Tech","recurrence":"quotidien","duree_heures":0.75,"priorite":"haute","livrable":"PR valid\xe9es","sop_ref":""},{"id":"t-deploy","nom":"D\xe9ploiement en production (Vercel)","role_id":"cto","assignee_id":"nicolas","domaine":"Tech","recurrence":"hebdomadaire","duree_heures":1.5,"priorite":"haute","livrable":"Version d\xe9ploy\xe9e","sop_ref":""},{"id":"t-migr","nom":"Migrations Supabase + v\xe9rification de d\xe9rive SQL","role_id":"back-end-developer","assignee_id":"nicolas","domaine":"Tech","recurrence":"hebdomadaire","duree_heures":2,"priorite":"haute","livrable":"Migration Local=Remote","sop_ref":"verify-sql"},{"id":"t-mon","nom":"Monitoring Sentry + incidents","role_id":"cto","assignee_id":"nicolas","domaine":"Tech","recurrence":"quotidien","duree_heures":0.5,"priorite":"haute","livrable":"Incidents trait\xe9s","sop_ref":""},{"id":"t-workers","nom":"Maintenance workers Cloudflare (matching, import IA, help chat)","role_id":"back-end-developer","assignee_id":"nicolas","domaine":"Tech","recurrence":"mensuel","duree_heures":3,"priorite":"moyenne","livrable":"Workers \xe0 jour","sop_ref":""},{"id":"t-clipper","nom":"Maintenance extension Chrome (dilimo-clipper)","role_id":"front-end-developer","assignee_id":"non-attribue","domaine":"Tech","recurrence":"mensuel","duree_heures":2,"priorite":"basse","livrable":"Extension \xe0 jour","sop_ref":""},{"id":"t-tests","nom":"Tests E2E Playwright + Vitest","role_id":"qa-engineer","assignee_id":"nicolas","domaine":"Tech","recurrence":"hebdomadaire","duree_heures":2,"priorite":"moyenne","livrable":"Campagne de tests","sop_ref":""},{"id":"t-bkp","nom":"Sauvegardes / restauration Supabase","role_id":"devops-engineer","assignee_id":"nicolas","domaine":"Tech","recurrence":"hebdomadaire","duree_heures":1,"priorite":"haute","livrable":"Rapport de sauvegarde","sop_ref":""},{"id":"t-backlog","nom":"Priorisation du backlog produit","role_id":"product-manager","assignee_id":"nicolas","domaine":"Produit","recurrence":"hebdomadaire","duree_heures":1.5,"priorite":"haute","livrable":"Backlog prioris\xe9","sop_ref":""},{"id":"t-stories","nom":"R\xe9daction des user stories / specs","role_id":"product-manager","assignee_id":"nicolas","domaine":"Produit","recurrence":"hebdomadaire","duree_heures":2,"priorite":"moyenne","livrable":"User stories pr\xeates","sop_ref":""},{"id":"t-nda","nom":"Flux NDA + signature \xe9lectronique (eZsign) â \xe9volutions","role_id":"product-manager","assignee_id":"nicolas","domaine":"Produit","recurrence":"trimestriel","duree_heures":3,"priorite":"haute","livrable":"Flux signature valid\xe9","sop_ref":""},{"id":"t-notaire","nom":"Int\xe9gration notaire (soumission s\xe9curis\xe9e des documents)","role_id":"product-manager","assignee_id":"nicolas","domaine":"Produit","recurrence":"trimestriel","duree_heures":2,"priorite":"haute","livrable":"Transmission notaire OK","sop_ref":""},{"id":"t-dataroom","nom":"Datarooms : contr\xf4le d\'acc\xe8s & journaux","role_id":"product-manager","assignee_id":"nicolas","domaine":"Produit","recurrence":"mensuel","duree_heures":1.5,"priorite":"haute","livrable":"Acc\xe8s journalis\xe9s","sop_ref":""},{"id":"t-design","nom":"Maquettes & design system","role_id":"ux-ui-designer","assignee_id":"non-attribue","domaine":"Produit","recurrence":"hebdomadaire","duree_heures":4,"priorite":"moyenne","livrable":"Maquettes valid\xe9es","sop_ref":""},{"id":"t-ux","nom":"Tests utilisateurs (courtiers, investisseurs)","role_id":"ux-ui-designer","assignee_id":"non-attribue","domaine":"Produit","recurrence":"mensuel","duree_heures":2,"priorite":"moyenne","livrable":"Rapport UX","sop_ref":""},{"id":"t-loi25","nom":"Audit conformit\xe9 Loi 25 (PII, RLS, datarooms)","role_id":"security-engineer","assignee_id":"nicolas","domaine":"S\xe9curit\xe9","recurrence":"trimestriel","duree_heures":6,"priorite":"critique","livrable":"Rapport de conformit\xe9","sop_ref":""},{"id":"t-acces","nom":"Revue des acc\xe8s & rotation des secrets","role_id":"security-engineer","assignee_id":"nicolas","domaine":"S\xe9curit\xe9","recurrence":"mensuel","duree_heures":1.5,"priorite":"haute","livrable":"Journal des acc\xe8s","sop_ref":""},{"id":"t-sec","nom":"Traitement des findings s\xe9curit\xe9 (SEC)","role_id":"security-engineer","assignee_id":"nicolas","domaine":"S\xe9curit\xe9","recurrence":"mensuel","duree_heures":1,"priorite":"haute","livrable":"Findings corrig\xe9s","sop_ref":"SEC"},{"id":"t-billing","nom":"Facturation abonnements (Stripe) + webhooks","role_id":"finance-manager","assignee_id":"david","domaine":"Finance","recurrence":"mensuel","duree_heures":2,"priorite":"critique","livrable":"Cycle facturation clos","sop_ref":""},{"id":"t-mrr","nom":"Suivi MRR / churn / tr\xe9sorerie","role_id":"finance-manager","assignee_id":"david","domaine":"Finance","recurrence":"hebdomadaire","duree_heures":1,"priorite":"haute","livrable":"Tableau MRR","sop_ref":""}
1,{"id":"t-compta","nom":"Cl\xf4ture comptable mensuelle + cabinet QC","role_id":"finance-manager","assignee_id":"david","domaine":"Finance","recurrence":"mensuel","duree_heures":2.5,"priorite":"haute","livrable":"Cl\xf4ture valid\xe9e","sop_ref":""},{"id":"t-prosp","nom":"Prospection courtiers / notaires / pr\xeateurs","role_id":"sales-manager","assignee_id":"david","domaine":"Ventes","recurrence":"hebdomadaire","duree_heures":3,"priorite":"critique","livrable":"Pipeline \xe0 jour","sop_ref":""},{"id":"t-demo","nom":"D\xe9monstrations produit","role_id":"sales-manager","assignee_id":"david","domaine":"Ventes","recurrence":"hebdomadaire","duree_heures":2,"priorite":"haute","livrable":"CR de d\xe9mo","sop_ref":""},{"id":"t-partenaires","nom":"Programme partenaires (annuaire notaires/pr\xeateurs)","role_id":"sales-manager","assignee_id":"david","domaine":"Ventes","recurrence":"hebdomadaire","duree_heures":2,"priorite":"haute","livrable":"Partenaires activ\xe9s","sop_ref":""},{"id":"t-onbo","nom":"Onboarding des nouveaux abonn\xe9s","role_id":"customer-success-manager","assignee_id":"david","domaine":"Support","recurrence":"hebdomadaire","duree_heures":1.5,"priorite":"haute","livrable":"Abonn\xe9s activ\xe9s","sop_ref":""},{"id":"t-tickets","nom":"Traitement des tickets support pros","role_id":"support-client","assignee_id":"non-attribue","domaine":"Support","recurrence":"quotidien","duree_heures":1,"priorite":"haute","livrable":"Tickets r\xe9solus","sop_ref":""},{"id":"t-helpchat","nom":"Supervision du help chat (worker IA)","role_id":"support-client","assignee_id":"nicolas","domaine":"Support","recurrence":"quotidien","duree_heures":0.5,"priorite":"moyenne","livrable":"Chat supervis\xe9","sop_ref":""},{"id":"t-faq","nom":"Base de connaissances / FAQ","role_id":"support-client","assignee_id":"non-attribue","domaine":"Support","recurrence":"hebdomadaire","duree_heures":1,"priorite":"basse","livrable":"Articles publi\xe9s","sop_ref":""},{"id":"t-churn","nom":"Analyse du churn & comptes \xe0 risque","role_id":"customer-success-manager","assignee_id":"non-attribue","domaine":"Support","recurrence":"mensuel","duree_heures":2,"priorite":"moyenne","livrable":"Plan r\xe9tention","sop_ref":""},{"id":"t-mkt","nom":"Plan marketing & acquisition","role_id":"marketing-manager","assignee_id":"david","domaine":"Marketing","recurrence":"hebdomadaire","duree_heures":2,"priorite":"haute","livrable":"Campagnes actives","sop_ref":""},{"id":"t-seo","nom":"SEO (audit + optimisation dilimo.ca)","role_id":"seo-geo-manager","assignee_id":"non-attribue","domaine":"Marketing","recurrence":"mensuel","duree_heures":3,"priorite":"moyenne","livrable":"Rapport SEO","sop_ref":""},{"id":"t-contenu","nom":"Contenu (guides off-market, blog)","role_id":"content-manager","assignee_id":"non-attribue","domaine":"Marketing","recurrence":"hebdomadaire","duree_heures":3,"priorite":"basse","livrable":"Articles publi\xe9s","sop_ref":""},{"id":"t-ambass","nom":"Programme ambassadeurs / parrainage","role_id":"marketing-manager","assignee_id":"non-attribue","domaine":"Marketing","recurrence":"mensuel","duree_heures":2,"priorite":"basse","livrable":"Ambassadeurs actifs","sop_ref":""},{"id":"t-social","nom":"R\xe9seaux sociaux / newsletter","role_id":"content-manager","assignee_id":"non-attribue","domaine":"Marketing","recurrence":"hebdomadaire","duree_heures":2,"priorite":"basse","livrable":"Publications","sop_ref":""},{"id":"t-comite","nom":"Comit\xe9 de direction hebdomadaire","role_id":"coo","assignee_id":"nicolas","domaine":"Direction","recurrence":"hebdomadaire","duree_heures":1.5,"priorite":"haute","livrable":"CR + d\xe9cisions","sop_ref":""},{"id":"t-veille","nom":"Veille l\xe9gale immobilier QC (courtage OACIQ, off-market)","role_id":"ceo","assignee_id":"david","domaine":"Direction","recurrence":"trimestriel","duree_heures":2,"priorite":"critique","livrable":"Note de veille","sop_ref":""},{"id":"t-okr","nom":"OKR trimestriels","role_id":"ceo","assignee_id":"david","domaine":"Direction","recurrence":"trimestriel","duree_heures":4,"priorite":"haute","livrable":"OKR valid\xe9s","sop_ref":""},{"id":"t-report","nom":"Reporting & relations partenaires strat\xe9giques","role_id":"ceo","assignee_id":"david","domaine":"Direction","recurrence":"mensuel","duree_heures":2,"priorite":"moyenne","livrable":"Rapport","sop_ref":""},{"id":"t-kpi","nom":"Revue des KPI (PostHog)","role_id":"coo","assignee_id":"nicolas","domaine":"Data","recurrence":"mensuel","duree_heures":2,"priorite":"haute","livrable":"Tableau KPI","sop_ref":""},{"id":"t-fourn","nom":"Suivi fournisseurs (eZsign, Stripe, Supabase, Cloudflare, Resend)","role_id":"responsable-administratif","assignee_id":"nicolas","domaine":"Op\xe9rations","recurrence":"mensuel","duree_heures":1,"priorite":"basse","livrable":"Abonnements suivis","sop_ref":""},{"id":"t-contrats","nom":"Gestion des contrats & abonnements","role_id":"responsable-administratif","assignee_id":"david","domaine":"Op\xe9rations","recurrence":"mensuel","duree_heures":2,"priorite":"moyenne","livrable":"Registre \xe0 j
1our","sop_ref":""},{"id":"t-recrut","nom":"Pr\xe9paration du plan de recrutement","role_id":"talent-acquisition-rh","assignee_id":"david","domaine":"RH","recurrence":"trimestriel","duree_heures":3,"priorite":"moyenne","livrable":"Plan de recrutement","sop_ref":""}],"raci":[{"activite":"Roadmap produit","R":"product-manager","A":"product-manager","C":["cto","ux-ui-designer"],"I":["ceo"]},{"activite":"D\xe9ploiement en production","R":"lead-developer","A":"cto","C":["devops-engineer","qa-engineer"],"I":["product-manager"]},{"activite":"Conformit\xe9 Loi 25 & datarooms","R":"security-engineer","A":"cto","C":["product-manager"],"I":["ceo"]},{"activite":"Facturation des abonnements (Stripe)","R":"finance-manager","A":"finance-manager","C":["cto"],"I":["ceo"]},{"activite":"Signature d\'un partenaire (annuaire)","R":"sales-manager","A":"ceo","C":["finance-manager"],"I":["product-manager"]},{"activite":"Veille l\xe9gale courtage (OACIQ)","R":"ceo","A":"ceo","C":["product-manager"],"I":["sales-manager"]},{"activite":"Flux notaire / signature (eZsign)","R":"product-manager","A":"cto","C":["security-engineer"],"I":["ceo"]},{"activite":"Acquisition marketing","R":"marketing-manager","A":"ceo","C":["content-manager","seo-geo-manager"],"I":["sales-manager"]},{"activite":"Support & acc\xe8s datarooms","R":"support-client","A":"coo","C":["security-engineer"],"I":["product-manager"]},{"activite":"Budget annuel & pr\xe9visions","R":"finance-manager","A":"ceo","C":["coo"],"I":["sales-manager"]}],"kpis":[{"nom":"Usagers actifs mensuels (MAU)","valeur_actuelle":120,"cible":5000,"unite":"MAU","domaine":"Produit","tendance":"hausse"},{"nom":"Taux de conversion payant","valeur_actuelle":0,"cible":20,"unite":"%","domaine":"Ventes","tend
1ance":"hausse"},{"nom":"MRR","valeur_actuelle":0,"cible":233500,"unite":"$","domaine":"Finance","tendance":"hausse"},{"nom":"Churn mensuel","valeur_actuelle":5,"cible":3,"unite":"%","domaine":"Customer Success","tendance":"baisse"},{"nom":"ARPU","valeur_actuelle":85,"cible":100,"unite":"$","domaine":"Finance","tendance":"hausse"},{"nom":"CAC","valeur_actuelle":60,"cible":40,"unite":"$","domaine":"Marketing","tendance":"baisse"},{"nom":"NPS","valeur_actuelle":41,"cible":60,"unite":"pts","domaine":"Customer Success","tendance":"hausse"},{"nom":"Transactions facilit\xe9es / mois","valeur_actuelle":0,"cible":50,"unite":"tx","domaine":"Produit","tendance":"hausse"},{"nom":"NDA sign\xe9s / mois","valeur_actuelle":25,"cible":200,"unite":"NDA","domaine":"Produit","tendance":"hausse"},{"nom":"Disponibilit\xe9 plateforme","valeur_actuelle":99.7,"cible":99.9,"unite":"%","domaine":"Technique","tendance":"stable"},{"nom":"Partenaires Or (annuaire)","valeur_actuelle":0,"cible":1200,"unite":"part.","domaine":"Commercial","tendance":"hausse"},{"nom":"Cash runway","valeur_actuelle":8,"cible":18,"unite":"mois","domaine":"Finance","tendance":"stable"}],"risques":[{"nom":"Bus factor Nicolas (dev + ops + s\xe9curit\xe9 concentr\xe9s)","categorie":"D\xe9pendance","probabilite":"elevee","impact":"eleve","mitigation":"Documenter les SOP, recruter un full-stack, externaliser la s\xe9curit\xe9 ponctuellement, doublure.","cle":"nicolas"},{"nom":"Cadre du courtage immobilier QC (OACIQ) â rester facilitateur, pas courtier","categorie":"L\xe9gal","probabilite":"moyenne","impact":"eleve","mitigation":"CGU claires (facilitation, pas de courtage), v\xe9rification d\'identit\xe9 des pros, veille OACIQ, avis juridique.","cle":"david"},{"nom":"Loi 25 â donn\xe9es sensibles (transactions, PII, datarooms)","categorie":"L\xe9gal","probabilite":"faible","impact":"eleve","mitigation":"RLS strictes, datarooms \xe0 acc\xe8s journalis\xe9, chiffrement, minimisation, RPRP d\xe9sign\xe9, h\xe9bergement conforme.","cle":"nicolas"}
1,{"nom":"D\xe9pendance \xe0 eZsign (signature notaire) et Stripe","categorie":"Technique","probabilite":"moyenne","impact":"moyen","mitigation":"Fail-soft, alternatives identifi\xe9es, contrats fournisseurs, surveillance des co\xfbts.","cle":"nicolas"},{"nom":"Adoption d\'un march\xe9 de niche (courtiers off-market)","categorie":"March\xe9","probabilite":"elevee","impact":"eleve","mitigation":"Programme partenaires/ambassadeurs, contenu SEO, d\xe9monstrations, essais 15 j, parrainage.","cle":"david"},{"nom":"Concentration du revenu (gros comptes / paliers)","categorie":"Financier","probabilite":"moyenne","impact":"moyen","mitigation":"Diversifier la base d\'abonn\xe9s, upsell Pro+CRM / Chantier, revenus annuaire partenaires.","cle":"david"},{"nom":"Dette technique (grosse codebase, ~80 variables d\'env)","categorie":"Technique","probabilite":"moyenne","impact":"moyen","mitigation":"V\xe9rif d\xe9rive SQL, tests (Vitest + Playwright), audits ERR/SEC/VOC, revue mensuelle.","cle":"nicolas"},{"nom":"Churn SaaS si la valeur n\'est pas per\xe7ue rapidement","categorie":"Op\xe9rationnel","probabilite":"moyenne","impact":"moyen","mitigation":"Onboarding guid\xe9, CSM, datarooms utiles, flux NDA/notaire fluide, activation rapide.","cle":null}],"phases":[{"phase":1,"effectif":"2","description":"Fondateurs seuls, polyvalence maximale, d\xe9cisions courtes. Nicolas couvre la tech/ops, David la direction/ventes/finance.","postes_actifs":["ceo","coo","cto","product-manager","lead-developer","full-stack-developer","devops-engineer","sales-manager","marketing-manager","finance-manager","customer-success-manager","security-engineer"]},{"phase":2,"effectif":"~5","description":"Premi\xe8res embauches : un full-stack, un support/CSM, un profil marketing. Les fondateurs d\xe9l\xe8guent l\'ex\xe9cution.","postes_actifs":["ceo","coo","cto","product-manager","full-stack-developer","lead-developer","customer-success-manager","support-client","marketing-manager","sales-manager","ux-ui-designer","finance-manager"]},{"phase":3,"effectif":"~10","description":"\xc9quipes tech sp\xe9cialis\xe9es (front/back, devops, QA), finance structur\xe9e, contenu/SEO et administration d\xe9di\xe9s.","postes_actifs":["ceo","coo","cto","product-manager","lead-developer","front-end-developer","back-end-developer","devops-engineer","qa-engineer","ux-ui-designer","customer-success-manager","support-client","marketing-manager","seo-geo-manager","content-manager","sales-manager","finance-manager","responsable-administratif"]}
1,{"phase":4,"effectif":"~20","description":"Managers interm\xe9diaires, RH d\xe9di\xe9, Security Engineer \xe0 plein temps, gouvernance renforc\xe9e. Multi-territoires.","postes_actifs":["ceo","coo","cto","product-manager","lead-developer","front-end-developer","back-end-developer","devops-engineer","qa-engineer","security-engineer","ux-ui-designer","customer-success-manager","support-client","marketing-manager","seo-geo-manager","content-manager","sales-manager","finance-manager","responsable-administratif","talent-acquisition-rh"]},{"phase":5,"effectif":"50+","description":"Direction compl\xe8te avec CFO, \xe9quipes autonomes par domaine, PMO et contr\xf4le de gestion. \xc9chelle nationale.","postes_actifs":["ceo","coo","cto","cfo","product-manager","lead-developer","front-end-developer","back-end-developer","devops-engineer","qa-engineer","security-engineer","ux-ui-designer","customer-success-manager","support-client","marketing-manager","seo-geo-manager","content-manager","sales-manager","finance-manager","responsable-administratif","talent-acquisition-rh"]}],"couts_generaux":[{"id":"c-vercel","nom":"H\xe9bergement application (Vercel Pro)","categorie":"Infrastructure","type":"par_usager","base_mensuel":28,"cout_par_usager":0.003,"pct":0},{"id":"c-supabase","nom":"Base de donn\xe9es SQL (Supabase Pro)","categorie":"Infrastructure","type":"par_usager","base_mensuel":34,"cout_par_usager":0.006,"pct":0},{"id":"c-ezsign","nom":"Signature \xe9lectronique notaire (eZsign)","categorie":"Services","type":"par_usager","base_mensuel":20,"cout_par_usager":0.05,"pct":0},{"id":"c-cf","nom":"Workers & edge (Cloudflare)","categorie":"Infrastructure","type":"fixe","base_mensuel":25,"cout_par_usager":0,"pct":0},{"id":"c-redis","nom":"Cache & files (Upstash Redis)","categorie":"Infrastructure","type":"fixe","base_mensuel":12,"cout_par_usager":0,"pct":0},{"id":"c-resend","nom":"Emails transactionnels (Resend)","categorie":"Services","type":"par_usager","base_mensuel":14,"cout_par_usager":0.002,"pct":0},{"id":"c-sentry","nom":"Monitoring & logs (Sentry)","categorie":"Infrastructure","type":"fixe","base_mensuel":36,"cout_par_usager":0,"pct":0}
1,{"id":"c-posthog","nom":"Analytics produit (PostHog)","categorie":"Services","type":"par_usager","base_mensuel":0,"cout_par_usager":0.004,"pct":0},{"id":"c-stripe","nom":"Frais de transaction (Stripe)","categorie":"Services","type":"pct_revenu","base_mensuel":0,"cout_par_usager":0,"pct":0.03},{"id":"c-dns","nom":"Nom de domaine & DNS (dilimo.ca)","categorie":"Infrastructure","type":"fixe","base_mensuel":3,"cout_par_usager":0,"pct":0},{"id":"c-compta","nom":"Cabinet comptable (Qu\xe9bec)","categorie":"Frais fixes","type":"fixe","base_mensuel":300,"cout_par_usager":0,"pct":0},{"id":"c-assur","nom":"Assurance responsabilit\xe9 civile pro (QC)","categorie":"Frais fixes","type":"fixe","base_mensuel":125,"cout_par_usager":0,"pct":0},{"id":"c-workspace","nom":"Google Workspace","categorie":"Outils","type":"fixe","base_mensuel":28,"cout_par_usager":0,"pct":0},{"id":"c-outils","nom":"Outils divers (Figma, GitHub, etc.)","categorie":"Outils","type":"fixe","base_mensuel":60,"cout_par_usager":0,"pct":0},{"id":"c-divers","nom":"Impr\xe9vus / marge","categorie":"Frais fixes","type":"fixe","base_mensuel":100,"cout_par_usager":0,"pct":0}],"revenu":{"modele":"abonnement_segment","_note":"Pr\xe9vision Nicolas 2026-08 : 20 % de payants ; 20 % des payants sont apporteurs ; 1,54 Or et 3,7 Standard par apporteur (6 Or / 14,5 Std \xe0 98 usagers). Ancien or_par_payant=1,2 (0,20\xd76) remplac\xe9 â 6 Or au TOTAL du groupe, pas 6 par apporteur.","hypotheses":{"taux_conversion_payant":0.2,"mix_pro":0.55,"mix_crm":0.3,"mix_chantier":0.15,"prix_pro":49,"prix_crm":99,"prix_chantier":179,"part_payants_apporteurs":0.2,"partenaires_or_par_apporteur":1.54,"partenaires_standard_par_apporteur":3.7,"prix_or_annuel":1500,"prix_standard_annuel":500,"standard_metiers_moy":1,"attach_vitrine":0,"prix_vitrine":800,"attach_annonces":0,"prix_annonces":399,"churn_mensuel":0.05,"croissance_mensuelle":0.11,"arpu_mensuel":84}},"hypotheses":[{"cle":"taux_conversion_payant","libelle":"Taux de conversion payant (cible 20 % \xe0 3 ans)","responsable":"david","confiance":"faible","revision":"2026-12"},{"cle":"part_payants_apporteurs","libelle":"Part des payants qui sont apporteurs (valeur initiale, \xe0 recalibrer)","responsable":"david","confiance":"faible","revision":"2026-12"},{"cle":"partenaires_or_par_apporteur","libelle":"Partenaires Or par apporteur (valeur initiale, \xe0 recalibrer)","responsable":"david","confiance":"faible","revision":"2026-12"},{"cle":"partenaires_standard_par_apporteur","libelle":"Partenaires Standard par apporteur (valeur initiale, \xe0 recalibrer)","responsable":"david","confiance":"faible","revision":"2026-12"},{"cle":"churn_mensuel","libelle":"Churn mensuel des abonn\xe9s","responsable":"nicolas","confiance":"moyenne","revision":"2026-11"},{"cle":"croissance_mensuelle","libelle":"Croissance mensuelle des MAU (â11 %/mois â 5 000 \xe0 3 ans)","responsable":"david","confiance":"faible","revision":"2026-10"}],"valeur":{"actifs":[{"nom":"Produit SaaS complet en production","categorie":"Produit","niveau":5,"note":"Next.js 16/Supabase, NDA/e-sign, notaire, datarooms, CRM, extension Chrome, PWA."},{"nom":"Fonctionnalit\xe9s critiques livr\xe9es","categorie":"Produit","niveau":5,"note":"Visibilit\xe9 par paliers, NDA/eZsign, soumission notaire, datarooms journalis\xe9es, programme partenaires."},{"nom":"Propri\xe9t\xe9 intellectuelle (code, algos)","categorie":"Propri\xe9t\xe9 intellectuelle","niveau":3,"note":"Code propri\xe9taire ; PI \xe0 c\xe9der formellement \xe0 la soci\xe9t\xe9."},{"nom":"Architecture & scalabilit\xe9","categorie":"Architecture","niveau":5,"note":"Next.js/Supabase/RLS, workers Cloudflare, Redis, tests, ~80 variables d\'env ma\xeetris\xe9es."},{"nom":"Processus & audits (SEC/ERR/VOC)","categorie":"Processus","niveau":3,"note":"Audits s\xe9curit\xe9, erreurs, vocabulaire ; v\xe9rif d\xe9rive SQL."},{"nom":"Donn\xe9es de transactions off-market","categorie":"Donn\xe9es","niveau":3,"note":"Donn\xe9es rares et \xe0 forte valeur ; historique en construction."},{"nom":"Partenariats (notaires, pr\xeateurs)","categorie":"Partenariats","niveau":2,"note":"Annuaire partenaires en amor\xe7age."},{"nom":"Base de pros v\xe9rifi\xe9s","categorie":"Communaut\xe9","niveau":2,"note":"120 pros inscrits en b\xeata, v\xe9rification d\'identit\xe9."},{"nom":"Ind\xe9pendance vis-\xe0-vis des fondateurs","categorie":"D\xe9pendance","niveau":1,"note":"Forte d\xe9pendance \xe0 Nicolas (tech/ops/s\xe9curit\xe9)."},{"nom":"Maturit\xe9 r\xe9glementaire (Loi 25 + cadrage courtage)","categorie":"Conformit\xe9","niveau":3,"note":"RLS, datarooms journalis\xe9es ; cadrage OACIQ \xe0 formaliser."},{"nom":"R\xe9plicabilit\xe9 (autres provinces/march\xe9s)","categorie":"R\xe9plicabilit\xe9","niveau":3,"note":"Architecture multi-march\xe9 possible."}],"valorisation":{"annees_travail":2,"scorecard_base_cad":2200000,"scorecard_criteres":[{"nom":"\xc9quipe fondatrice","note":0.1},{"nom":"Taille du march\xe9 (immobilier QC)","note":0.15},{"nom":"Produit & technologie","note":0.25},{"nom":"Traction / adoption","note":-0.05},{"nom":"Avantage concurrentiel (off-market structur\xe9)","note":0.15},{"nom":"R\xe9currence (SaaS)","note":0.1},{"nom":"Besoin de financement / runway","note":-0.1}
1],"scenarios":{"plancher":0.5,"central":1,"ambitieux":1.6},"arr_multiple":{"prudent":5,"central":9,"ambitieux":15},"vc":{"usagers_sortie":25000,"annee_sortie":5,"multiple_sortie":7,"roi_attendu":10,"_note":"5 000 MAU = objectif Qu\xe9bec \xe0 3 ans ; sortie \xe0 5 ans apr\xe8s ouverture canadienne (~25 000 MAU, \xe9ditable)."},"comparables":[{"nom":"SaaS proptech","multiple":10},{"nom":"Marketplace B2B","multiple":7}]},"capital":{"actionnaires":[{"nom":"David Leon","parts_pct":100,"type":"fondateur","vesting_mois":48}],"tour":{"nom":"Pr\xe9-seed","montant":750000,"premoney":3000000,"pool_cible_pct":10,"pool_timing":"avant"}},"concentration":[{"source":"Abonn\xe9s Pro / Pro+CRM","pct":50},{"source":"Grands comptes / Pro+CRM+Chantier","pct":30},{"source":"Annuaire partenaires (notaires/pr\xeateurs)","pct":20}],"data_room":[{"item":"Cap table \xe0 jour","pret":true},{"item":"Contrats partenaires sign\xe9s","pret":false},{"item":"PI c\xe9d\xe9e \xe0 la soci\xe9t\xe9","pret":false},{"item":"Pr\xe9visions financi\xe8res","pret":true},{"item":"KPI historis\xe9s (PostHog)","pret":true},{"item":"Documentation technique","pret":true},{"item":"Politique de confidentialit\xe9 (Loi 25)","pret":true},{"item":"Conformit\xe9 / cadrage OACIQ","pret":false},{"item":"Roadmap produit","pret":true},{"item":"Lettres d\'intention (LOI)","pret":false},{"item":"Preuves de traction (MRR, NDA, transactions)","pret":false}]},"decisions":[{"id":"d-notaires","titre":"Ouvrir l\'annuaire aux notaires/pr\xeateurs avant d\'\xe9largir aux inspecteurs","date":"2026-06","responsable":"david","contexte":"S\xe9quencer le programme partenaires : m\xe9tiers \xe0 forte valeur (Or) d\'abord.","options":"Notaires/pr\xeateurs d\'abord \xb7 Tous les m\xe9tiers d\'embl\xe9e \xb7 Uniquement membres","hypothese":"Les partenaires Or (1 500 $/an) financent l\'acquisition et cr\xe9dibilisent la plateforme","cout":0,"risque":"Complexit\xe9 du parcours partenaire, revue manuelle des candidatures","kpi":"10 partenaires Or sign\xe9s en 6 mois","revision":"2026-12","resultat":""}]},"bp":{"heures_par_etp_semaine":37.5,"semaines_travaillees_an":48,"charges_sociales_employeur":0.14,"jours_ouvres_semaine":5,"elasticites":{"Support":0.35,"Op\xe9rations":0.3,"Tech":0.08,"Produit":0.1,"Ventes":0.2,"Marketing":0.25,"Finance":0.1,"RH":0.15,"Direction":0.05,"S\xe9curit\xe9":0.08,"Data":0.15}},"GN":{"maj":"juillet 2026","source":"platform.claude.com/docs (pricing) + claude.com/pricing","usd_cad":1.37,"modeles":{"opus-4.8":{"nom":"Claude Opus 4.8","in":5,"out":25},"sonnet-4.6":{"nom":"Claude Sonnet 4.6","in":3,"out":15},"haiku-4.5":{"nom":"Claude Haiku 4.5","in":1,"out":5}},"abonnements":{"pro":{"nom":"Claude Pro","prix":20},"max":{"nom":"Claude Max (5\xd7)","prix":100},"team":{"nom":"Claude Team / si\xe8ge","prix":25},"team_premium":{"nom":"Team Premium / si\xe8ge","prix":125}},"sieges":[{"plan":"max","personnes":2,"note":"2 fondateurs sur Claude Max"}],"auto_domaine":{"Direction":0.2,"Produit":0.45,"Tech":0.45,"Data":0.6,"Ventes":0.15,"Marketing":0.65,"Finance":0.4,"RH":0.4,"Op\xe9rations":0.45,"Support":0.6,"S\xe9curit\xe9":0.4},"tokens_in":40000,"tokens_out":8000}}'),n=i.GU,a=i.bp,s=i.GN;function o(e){return JSON.parse(JSON.stringify(e))}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.