// ============================================================ // Monarch — Simulateurs : DMTG (escalier successoral) · // Plus-value immobilière des particuliers (sablier / double échelle) // Requiert window.MSC (simcore.jsx) et window.__mscShared (simulators2.jsx). // Visuels SVG « blueprint » explicitement demandés (escalier, frise). // ============================================================ (function () { const { useState, useEffect } = React; const M = window.MSC; const { C, SERIF, BODY, dmtg, fmt, pct, CountEuro, injectCore, useReveal, Eyebrow, Label, MoneyInput, IntInput, Toggle, Shell, InputsCard, Doctrine, Alert, CTAEmail, ProsCons } = M; function shared() { return window.__mscShared; } // tranches du barème DMTG en ligne directe const TR = [ [0, 8072, 0.05], [8072, 12109, 0.10], [12109, 15932, 0.15], [15932, 552324, 0.20], [552324, 902838, 0.30], [902838, 1805677, 0.40], [1805677, Infinity, 0.45] ]; function breakdown(base) { let reste = Math.max(0, base); return TR.map(([lo, hi, taux]) => { const span = hi - lo; const amount = Math.min(Math.max(0, base - lo), span); const tax = amount * taux; return { taux, amount, tax, reached: base > lo }; }); } // Liens de parenté : abattement + barème applicable const LIENS = [ { id: "enfant", label: "Enfant", abat: 100000, bareme: "direct" }, { id: "petitenfant", label: "Petit-enfant", abat: 31865, bareme: "direct" }, { id: "arriere", label: "Arrière-petit-enfant", abat: 5310, bareme: "direct" }, { id: "epoux", label: "Époux", abat: 80724, bareme: "direct", exoSucc: true }, { id: "pacs", label: "Partenaire de Pacs", abat: 80724, bareme: "direct", exoSucc: true }, { id: "ascendant", label: "Ascendant", abat: 100000, bareme: "direct" }, { id: "frere", label: "Frère ou sœur", abat: 15932, bareme: "frere" }, { id: "neveu", label: "Neveu ou nièce", abat: 7967, bareme: "flat55" }, { id: "autre", label: "Autre situation", abat: 1594, bareme: "flat60" } ]; function baremeFrere(base) { return Math.min(Math.max(0, base), 24430) * 0.35 + Math.max(0, base - 24430) * 0.45; } function taxForLien(bareme, base) { if (bareme === "frere") return baremeFrere(base); if (bareme === "flat55") return Math.max(0, base) * 0.55; if (bareme === "flat60") return Math.max(0, base) * 0.60; return dmtg(base); } // ===================================================== // 1. DMTG — Droits de mutation à titre gratuit // ===================================================== function DMTGSimulator() { useEffect(injectCore, []); const { ParamRecap } = shared(); const [valeur, setValeur] = useState(3000000); const [enfants, setEnfants] = useState(2); const [lien, setLien] = useState("enfant"); const [horizon, setHorizon] = useState("donation"); const [done, setDone] = useState(false); const [busy, setBusy] = useState(false); const reveal = useReveal(done, 250); const V = Math.max(0, Number(valeur) || 0); const n = Math.max(1, Number(enfants) || 1); const L = LIENS.find((x) => x.id === lien) || LIENS[0]; const perChild = V / n; const exonere = horizon === "succession" && L.exoSucc; // abattement légal selon le lien (1 abattement par bénéficiaire) const base = exonere ? 0 : Math.max(0, perChild - L.abat); const taxPer = exonere ? 0 : taxForLien(L.bareme, base); const activeBase = base; const activeTax = taxPer * n; const net = V - activeTax; const tauxMoyen = perChild > 0 ? (taxPer / perChild) * 100 : 0; const isDirect = L.bareme === "direct"; const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); }; return ( {!done &&

Abattement légal : {fmt(L.abat)} par bénéficiaire{L.exoSucc ? " · succession totalement exonérée" : ""}.

} {done &&
setDone(false)} /> {exonere ?
Transmission exonérée

Aucun droit de succession entre {L.label.toLowerCase()}

Depuis la loi TEPA, le conjoint survivant et le partenaire de Pacs sont totalement exonérés de droits de succession. L'enjeu se déplace alors vers la transmission à la génération suivante et la protection du conjoint (quotité disponible, démembrement croisé écarté).

: isDirect ? :
Barème applicable · {L.label}

{L.bareme === "frere" ? "35 % puis 45 % au-delà de 24 430 €" : L.bareme === "flat55" ? "Taux unique de 55 %" : "Taux unique de 60 %"}

Droits par bénéficiaire (taux moyen {tauxMoyen.toFixed(1).replace(".", ",")} %)
}
Affichage choc

La charge fiscale imposée à vos héritiers s'élève à {fmt(activeTax)}.

Sans anticipation, c'est l'outil de travail ou le patrimoine immobilier lui-même qui devra être liquidé pour honorer cette dette envers l'État. Net transmis : {fmt(net)}.

{horizon === "donation" &&

L'anticipation par donation permet de renouveler l'abattement de {fmt(L.abat)} tous les 15 ans : fractionner la transmission réduit mécaniquement les droits.

}

Pour réduire cette pression, la pratique courante préconise le démembrement (donation avec réserve d'usufruit). Nous l'écartons quasi-systématiquement : elle vous ampute de votre qualité pleine et entière d'associé sur les titres transmis et fragilise votre pouvoir de décision. Notre architecture repose sur une holding familiale et l'émission de parts de préférence : la valeur économique glisse vers la génération suivante pour purger les DMTG, tandis que votre pouvoir de décision reste verrouillé via un droit de vote renforcé — dans le respect de la prohibition des clauses léonines (un droit minimal restant attaché à chaque catégorie de titres).

}
); } // Escalier SVG : 7 marches = tranches du barème, hauteur ∝ taux function TaxStaircase({ reveal, base, perChildTax, n }) { const [on, setOn] = useState(false); useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 250); return () => clearTimeout(id); } else setOn(false); }, [reveal]); const cells = breakdown(base); const x0 = 40, x1 = 700, yb = 250, top = 30; const W = (x1 - x0) / TR.length; const H = (rate) => (yb - top) * (rate / 0.45); return (
L'escalier du barème · part taxable par enfant

La ponction grimpe par tranches, de 5 % à 45 %

{cells.map((c, i) => { const x = x0 + i * W, h = H(c.taux), used = c.amount > 0; return ( {Math.round(c.taux * 100)} % {used && c.tax > 0 && {fmt(c.tax)}} ); })}
Droits par enfant
); } // ===================================================== // 2. PLUS-VALUE IMMOBILIÈRE DES PARTICULIERS — le sablier // ===================================================== 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 PrivateRealEstateGainSimulator() { useEffect(injectCore, []); const { ParamRecap } = shared(); const [achat, setAchat] = useState(300000); const [cession, setCession] = useState(500000); const [duree, setDuree] = useState(10); 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 acqMajore = P * 1.075 * (D > 5 ? 1.15 : 1); const pv = Math.max(0, R - acqMajore); const baseIR = pv * (1 - abatIR(D)); const basePS = pv * (1 - abatPS(D)); const ir = baseIR * 0.19; const ps = basePS * 0.172; const sur = surtaxe(baseIR); const total = ir + ps + sur; const net = R - total; 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)} />
Détail de la ponction
50000 ? "PV imposable > 50 000 €" : "non applicable"} value={sur} reveal={reveal} />
Liquidités nettes récupérées (année {D})
{pct(net, R)} % du prix de cession

L'obsession de l'exonération totale (attendre 30 ans) fige votre patrimoine : pendant des décennies, votre capital est immobilisé et ne produit aucun effet de levier. L'ingénierie Monarch s'affranchit de cette passivité : via un OBO immobilier (vente à soi-même), votre holding ou votre SCI à l'IS rachète le bien aujourd'hui. Vous purgez l'impôt, mais vous encaissez immédiatement des liquidités sur votre compte personnel — prêtes à être réinvesties ou à sécuriser votre train de vie — tout en conservant le contrôle de l'actif.

}
); } function LineItem({ label, sub, value, reveal, strong }) { return (
{label} {sub && · {sub}}
); } // Frise SVG : IR s'éteint à 22 ans, PS à 30 ans function TaxTimeline({ 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 = 40, x1 = 700, W = x1 - x0; const X = (yr) => x0 + W * (yr / 30); const cur = X(duree); const bar = (y, end, frac, label, color) => { const full = X(end) - x0; const taxable = full * frac; // largeur restant taxable (proportionnel à la fraction non abattue) return ( {label} exonéré an {end} ); }; return (
Le calendrier de l'abattement · double échelle

Deux compteurs désynchronisés

{[0, 5, 10, 15, 22, 30].map((yr) => an {yr} )} {bar(40, 22, 1 - abIR, "Impôt sur le revenu (19 %)", C.ardoise)} {bar(92, 30, 1 - abPS, "Prélèvements sociaux (17,2 %)", C.saugeF)} vente an {duree}

La part colorée représente la fraction de plus-value encore imposable à la date de vente : l'IR disparaît à 22 ans, les prélèvements sociaux ne s'effacent qu'à 30 ans.

); } window.DMTGSimulator = DMTGSimulator; window.PrivateRealEstateGainSimulator = PrivateRealEstateGainSimulator; })();