// ============================================================ // Monarch — Simulateurs avancés (moteur fiscal 2026) // AdvancedSecuritiesSimulator — dichotomie cession de titres (CEHR, abattements) // RealEstateDichotomySimulator — particulier (sablier) vs SCI à l'IS (amortissement) // SoleProprietorshipSaleSimulator — cession de fonds en nom propre (EI : PVCT/PVLT) // PersonalRealEstateOBOSimulator — hémorragie foncière vs OBO immobilier // Toujours : NET APRÈS IMPÔT mis en avant. PFU 31,4 %. PS 18,6 %. // Requiert window.MSC (simcore.jsx) + window.__mscShared (simulators2.jsx). // ============================================================ (function () { const { useState, useEffect } = React; const M = window.MSC; const { C, SERIF, BODY, IS, fmt, pct, CountEuro, injectCore, useReveal, Eyebrow, Label, MoneyInput, Toggle, Shell, InputsCard, Doctrine, Alert, CTAEmail, Gauge, ProsCons } = M; function shared() { return window.__mscShared; } // ---- constantes 2026 ---- const PFU = 0.314, PS_FIN = 0.186, PS_IMMO = 0.186; function cehr(base, couple) { const s1 = couple ? 500000 : 250000, s2 = couple ? 1000000 : 500000; let t = 0; t += Math.max(0, Math.min(base, s2) - s1) * 0.03; t += Math.max(0, base - s2) * 0.04; return t; } // TMI choisie const TMIs = [{ id: "11", v: 0.11, label: "11 %" }, { id: "30", v: 0.30, label: "30 %" }, { id: "41", v: 0.41, label: "41 %" }, { id: "45", v: 0.45, label: "45 %" }]; function TMIToggle({ value, onChange }) { return ({ id: t.id, label: t.label }))} value={value} onChange={onChange} />; } // Grand bloc "net après impôt" function NetHero({ label, value, base, run, dark }) { return (
{label}
{base > 0 &&
{pct(value, base)} % du montant cédé conservés
}
); } // ===================================================== // 1. CESSION DE TITRES — La dichotomie fiscale // ===================================================== function AdvancedSecuritiesSimulator() { useEffect(injectCore, []); const { ParamRecap, Synth } = shared(); const [valo, setValo] = useState(2000000); const [acq, setAcq] = useState(10000); const [date, setDate] = useState("pre"); const [abat, setAbat] = useState("pme"); const [tmi, setTmi] = useState("41"); const [done, setDone] = useState(false); const [busy, setBusy] = useState(false); const reveal = useReveal(done, 250); const V = Math.max(0, Number(valo) || 0); const A = Math.max(0, Number(acq) || 0); const pv = Math.max(0, V - A); const couple = true; const tmiV = TMIs.find((t) => t.id === tmi).v; const ceh = cehr(pv, couple); // PFU const taxPFU = pv * PFU + ceh; // Barème (seulement si pré-2018) : abattement IR uniquement const abPct = date === "pre" ? (abat === "pme" ? 0.85 : 0.65) : 0; const irBareme = pv * (1 - abPct) * tmiV; const psBareme = pv * PS_FIN; const taxBareme = date === "pre" ? (irBareme + psBareme + ceh) : Infinity; const usesBareme = taxBareme < taxPFU; const taxPropre = Math.min(taxPFU, taxBareme); const netPropre = V - taxPropre; const tauxEffPropre = pv > 0 ? (taxPropre / pv) * 100 : 0; // Holding — titres de participation const taxHolding = pv * 0.03; const netHolding = V - taxHolding; const gain = netHolding - netPropre; const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); }; return ( {!done &&
{date === "pre" &&
}
} {done &&
setDone(false)} />
{/* Colonne A */}
Colonne A · le mirage de l'abattement

Cession en nom propre

{usesBareme ? `Malgré votre abattement de ${Math.round(abPct * 100)} %, ` : "Au PFU, "}les prélèvements sociaux (18,6 %) et la CEHR détruisent {fmt(taxPropre)}. Taux effectif réel : {tauxEffPropre.toFixed(1).replace(".", ",")} %.

dont CEHR {fmt(ceh)} · PS {fmt(pv * PS_FIN)} (jamais abattus)
{/* Colonne B */}
Colonne B · la sanctuarisation

La holding Monarch

Frottement confiné à 3 % (QPFC 12 % × IS 25 %). Régime des titres de participation.

L'attachement aux abattements pré-2018 est une illusion mathématique. Les prélèvements sociaux et la CEHR s'appliquent sur la totalité de votre plus-value, rendant la détention en nom propre irrémédiablement inférieure à l'architecture de groupe (imposition effective de 3 %). Purger l'impôt aujourd'hui via un apport-cession (150-0 B ter) est la seule voie pour sanctuariser votre capital futur — tout en verrouillant votre gouvernance par des parts de préférence, dans le respect de la prohibition des clauses léonines.

} ); } // ===================================================== // 2. IMMOBILIER — La double impasse (particulier vs IS) // ===================================================== function abatIR(d) { if (d <= 5) return 0; if (d >= 22) return 1; return (d - 5) * 0.06; } function abatPS(d) { if (d <= 5) return 0; if (d >= 30) return 1; if (d <= 21) return (d - 5) * 0.0165; if (d === 22) return 0.28; return 0.28 + (d - 22) * 0.09; } function surtaxe(pvi) { if (pvi <= 50000) return 0; const r = pvi <= 100000 ? 0.02 : pvi <= 150000 ? 0.03 : pvi <= 200000 ? 0.04 : pvi <= 250000 ? 0.05 : 0.06; return pvi * r; } function RealEstateDichotomySimulator() { useEffect(injectCore, []); const { ParamRecap } = shared(); const [achat, setAchat] = useState(300000); const [cession, setCession] = useState(500000); const [duree, setDuree] = useState(15); const [done, setDone] = useState(false); const [busy, setBusy] = useState(false); const reveal = useReveal(done, 250); const P = Math.max(0, Number(achat) || 0); const R = Math.max(0, Number(cession) || 0); const D = Math.max(0, Math.min(30, Number(duree) || 0)); const pv = Math.max(0, R - P); // particulier const baseIR = pv * (1 - abatIR(D)), basePS = pv * (1 - abatPS(D)); const irPart = baseIR * 0.19, psPart = basePS * PS_IMMO, surPart = surtaxe(baseIR); const taxPart = irPart + psPart + surPart; const netPart = R - taxPart; // IS const vnc = P * Math.max(0, 1 - 0.03 * D); const baseISv = Math.max(0, R - vnc); const isTax = IS(baseISv); const netIS = R - isTax; const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); }; return ( {!done &&
{D} ans
setDuree(Number(e.target.value))} style={{ width: "100%", marginTop: 8, accentColor: C.sauge }} />
} {done &&
setDone(false)} />
{/* Bloc 1 : particulier */}
À votre nom (ou SCI à l'IR)

Deux impôts qui disparaîssent à des rythmes différents

Fiscalité résiduelle {fmt(taxPart)} (IR {fmt(irPart)} · PS {fmt(psPart)} · surtaxe {fmt(surPart)}). Le piège : bloquer le capital 30 ans, sans effet de levier.

{/* Bloc 2 : IS */}
En société à l'IS

Les amortissements gonflent l'impôt à la revente

VNC tombée à {fmt(vnc)} → base imposable {fmt(baseISv)}. IS dû : {fmt(isTax)}. Capitalise admirablement, désastreux à la revente.

La gestion immobilière subit deux impasses : l'attentisme stérile du nom propre, ou le mur fiscal de l'IS à la revente. L'ingénierie Monarch résout l'équation par la désimbrication ou l'OBO immobilier : racheter votre propre bien via votre holding aujourd'hui pour purger l'imposition et libérer massivement de la trésorerie personnelle.

}
); } function Timeline({ reveal, duree, abIR, abPS }) { const [on, setOn] = useState(false); useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 200); return () => clearTimeout(id); } else setOn(false); }, [reveal]); const x0 = 24, x1 = 320, W = x1 - x0, X = (yr) => x0 + W * (yr / 30), cur = X(duree); const bar = (y, end, frac, label, color) => { const full = X(end) - x0; return ( {label} ); }; return ( {[0, 10, 22, 30].map((yr) => an {yr})} {bar(36, 22, 1 - abIR, "IR (19 %)", C.ardoise)} {bar(80, 30, 1 - abPS, "PS (18,6 %)", C.saugeF)} ); } function VNCBar({ reveal, P, R, vnc, baseIS }) { const [on, setOn] = useState(false); useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 250); return () => clearTimeout(id); } else setOn(false); }, [reveal]); const max = Math.max(R, 1); return ( Prix de revente VNC (après amortissements) Zone hachurée = base imposable IS ); } // ===================================================== // 3. CESSION DE FONDS EN NOM PROPRE (EI) — La guillotine // ===================================================== function SoleProprietorshipSaleSimulator() { useEffect(injectCore, []); const { ParamRecap } = shared(); const [origine, setOrigine] = useState(0); const [prix, setPrix] = useState(400000); const [materiel, setMateriel] = useState(50000); const [exo, setExo] = useState("aucune"); const [tmi, setTmi] = useState("41"); const [done, setDone] = useState(false); const [busy, setBusy] = useState(false); const reveal = useReveal(done, 250); const O = Math.max(0, Number(origine) || 0); const P = Math.max(0, Number(prix) || 0); const mat = Math.min(Math.max(0, Number(materiel) || 0), P); const tmiV = TMIs.find((t) => t.id === tmi).v; const pvct = mat; // amortissements repris const pvlt = Math.max(0, P - mat - O); // valeur du fonds const rateCT = Math.min(0.5, tmiV + 0.09); // IR + cotisations TNS (indicatif) let exoFonds = 0, exoIRct = 0; // fractions exonérées if (exo === "art238") { const f = P <= 300000 ? 1 : (P >= 500000 ? 0 : (500000 - P) / 200000); exoFonds = f; exoIRct = f; } else if (exo === "retraite") { exoFonds = 1; exoIRct = 1; } // IR/IS exonéré ; PS/cotisations dus let taxCT, taxLT; if (exo === "retraite") { taxCT = pvct * 0.097; // cotisations résiduelles (indicatif) taxLT = pvlt * 0.172; // PS résiduels } else { taxCT = pvct * rateCT * (1 - exoIRct); taxLT = pvlt * 0.30 * (1 - exoFonds); } const totalTax = taxCT + taxLT; const net = P - totalTax; const totalExo = exoFonds >= 1 && exo !== "aucune"; const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); }; return ( {!done &&
} {done &&
setDone(false)} />
{totalExo ? "Le vide stratégique" : "La guillotine fiscale"}

{totalExo ? "Exonération — mais cash non structuré" : "Deux plus-values, deux impôts"}

{!totalExo &&
}

{totalExo ? <>Vous bénéficiez de l'exonération : {fmt(net)} atterrissent sur vos comptes. Le piège se referme : cette trésorerie massive, non structurée, subira l'inflation, la fiscalité foncière en direct et l'IFI. : <>L'empilement des cotisations sur le matériel et de l'impôt sur le fonds détruit {fmt(totalTax)}.}

Que vous subissiez l'impôt de plein fouet ou que vous encaissiez le fruit d'une exonération, le nom propre est une impasse. L'ingénierie Monarch intervient en amont : l'apport du fonds à une société (art. 151 octies) permet de basculer dans l'écosystème de l'IS et de la holding avant la cession. Si le fonds est déjà vendu, nous structurons immédiatement votre liquidité via une société civile patrimoniale pour sanctuariser vos réinvestissements et verrouiller votre gouvernance.

}
); } function GuillotineRow({ label, sub, base, tax, reveal }) { const [on, setOn] = useState(false); useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 120); return () => clearTimeout(id); } else setOn(false); }, [reveal]); const net = Math.max(0, base - tax); return (
{label} {sub}
net {fmt(net)} impôt {fmt(tax)}
); } // ===================================================== // 4. OBO IMMOBILIER — Hémorragie foncière vs extraction // ===================================================== function PersonalRealEstateOBOSimulator() { useEffect(injectCore, []); const { ParamRecap } = shared(); const [valeur, setValeur] = useState(500000); const [achat, setAchat] = useState(300000); const [duree, setDuree] = useState(12); const [loyer, setLoyer] = useState(25000); const [tmi, setTmi] = useState("41"); const [done, setDone] = useState(false); const [busy, setBusy] = useState(false); const reveal = useReveal(done, 250); const V = Math.max(0, Number(valeur) || 0); const P = Math.max(0, Number(achat) || 0); const D = Math.max(0, Math.min(30, Number(duree) || 0)); const L = Math.max(0, Number(loyer) || 0); const tmiV = TMIs.find((t) => t.id === tmi).v; // A : hémorragie const taxLoyer = L * (tmiV + PS_IMMO); const netLoyer = L - taxLoyer; const tauxConfisc = L > 0 ? (taxLoyer / L) * 100 : 0; const rendementNet = V > 0 ? (netLoyer / V) * 100 : 0; // B : OBO — purge PV particulier const pv = Math.max(0, V - P); const pvTax = pv * (1 - abatIR(D)) * 0.19 + pv * (1 - abatPS(D)) * PS_IMMO + surtaxe(pv * (1 - abatIR(D))); const cashExtrait = V - pvTax; const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); }; return ( {!done &&
{D} ans
setDuree(Number(e.target.value))} style={{ width: "100%", marginTop: 8, accentColor: C.sauge }} />
} {done &&
setDone(false)} />
{/* Gauche : prison fiscale */}
Si vous ne faites rien

Le statu quo

Votre capital de {fmt(V)} est gelé. Chaque année, l'État confisque {Math.round(tauxConfisc)} % de vos loyers ({fmt(taxLoyer)}). Rendement net réel : {rendementNet.toFixed(1).replace(".", ",")} %.

Soit votre tranche marginale d'imposition ({tmi} %) + les prélèvements sociaux (18,6 %) : les revenus fonciers s'ajoutent à vos autres revenus et sont taxés au taux marginal.

{/* Droite : extraction */}
Le mouvement · l'extraction

L'OBO immobilier

Liquidités extraites sur votre compte personnel (net après impôt sur la plus-value)
après purge de la plus-value ({fmt(pvTax)})

Loyers futurs dans la SCI à l'IS : froissement fiscal proche de 0 % grâce à la déduction des intérêts d'emprunt et de l'amortissement. L'actif s'autofinance.

Conserver un bien locatif en nom propre est une destruction mathématique de valeur. L'OBO immobilier permet de purger la plus-value latente et de monétiser votre patrimoine sans le vendre à un tiers. Vous encaissez instantanément des centaines de milliers d'euros, tandis que l'actif bascule dans un environnement de capitalisation pur (l'IS). Le cabinet structure cette mutation (statuts, pactes, gouvernance) pour que vous conserviez le contrôle absolu de l'édifice, tout en rendant sa valeur liquide aujourd'hui.

}
); } function Vault({ reveal }) { const [on, setOn] = useState(false); useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 200); return () => clearTimeout(id); } else setOn(false); }, [reveal]); return ( {[30, 60, 90].map((dy, i) => )} ); } window.AdvancedSecuritiesSimulator = AdvancedSecuritiesSimulator; window.RealEstateDichotomySimulator = RealEstateDichotomySimulator; window.SoleProprietorshipSaleSimulator = SoleProprietorshipSaleSimulator; window.PersonalRealEstateOBOSimulator = PersonalRealEstateOBOSimulator; })();