// ============================================================
// Monarch — Simulateurs de dette : rachat de société (LBO) · immobilier locatif
// CorporateBuyoutDebtSimulator — nom propre vs holding (vampirisme de la cible)
// RealEstateDebtSimulator — nom propre/SCI IR vs SCI à l'IS (autofinancement)
// Sans schéma : barres de flux + chiffres. Requiert window.MSC + window.__mscShared.
// ============================================================
(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, ProsCons, Explainer } = M;
function shared() { return window.__mscShared; }
// annuité constante (capital + intérêts)
function annuite(P, taux, annees) {
const r = taux, n = annees;
if (r <= 0) return P / n;
return P * r / (1 - Math.pow(1 + r, -n));
}
function FlowBar({ label, sub, value, max, run, color, danger, good }) {
const [on, setOn] = useState(false);
useEffect(() => { if (run) { const id = setTimeout(() => setOn(true), 80); return () => clearTimeout(id); } else setOn(false); }, [run]);
return (
);
}
// =====================================================
// 1. RACHAT DE SOCIÉTÉ — la dette d'acquisition
// =====================================================
function CorporateBuyoutDebtSimulator() {
useEffect(injectCore, []);
const { ParamRecap, Panel } = shared();
const [acq, setAcq] = useState(1500000);
const [taux, setTaux] = useState(4);
const [duree, setDuree] = useState(7);
const [done, setDone] = useState(false);
const [busy, setBusy] = useState(false);
const reveal = useReveal(done, 250);
const P = Math.max(0, Number(acq) || 0);
const r = Math.max(0, Number(taux) || 0) / 100;
const n = Math.max(1, Number(duree) || 1);
const charge = annuite(P, r, n); // annuité à payer à la banque
const coutTotal = charge * n; // total remboursé
const interetsTotal = coutTotal - P; // coût des intérêts
const mensualite = charge / 12;
const superBrutPropre = charge / (1 - 0.314); // à siphonner de la cible (Flat Tax)
const superBrutHolding = charge / (1 - 0.0125); // via mère-fille
const economie = superBrutPropre - superBrutHolding;
const max = superBrutPropre || 1;
const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); };
return (
{!done &&
Montant de l'acquisition (dette bancaire)
}
{done &&
setDone(false)} />
{/* Annuité de remboursement */}
L'annuité de remboursement
Ce que vous remboursez à la banque
par an, soit {fmt(mensualite)} par mois
Intérêts sur {n} ans
{fmt(interetsTotal)}
Coût total du crédit
{fmt(coutTotal)}
Chaque année, {fmt(superBrutPropre)} doivent sortir de la société pour qu'il vous reste {fmt(charge)} net une fois l'impôt payé. Autant d'argent en moins pour la développer.
À remonter de la société / an (presque sans impôt)
Frottement limité à 1,25 %
Trésorerie de la cible préservée chaque année grâce au logement de la dette dans la holding :
économisés par an · {fmt(economie * n)} sur la durée
Racheter une entreprise en empruntant à titre personnel coûte cher : pour rembourser 100 € à la banque, il faut sortir environ 145 € de la société (le reste part en impôt sur les dividendes). En logeant l'emprunt dans une holding, les bénéfices remontent presque sans impôt pour rembourser la banque, et les intérêts deviennent déductibles. Le cabinet met en place ce montage.
}
);
}
// =====================================================
// 2. IMMOBILIER LOCATIF — l'effort d'épargne
// =====================================================
function RealEstateDebtSimulator() {
useEffect(injectCore, []);
const { ParamRecap, Panel } = shared();
const TMIs = [{ id: "11", v: 0.11 }, { id: "30", v: 0.30 }, { id: "41", v: 0.41 }, { id: "45", v: 0.45 }];
const [projet, setProjet] = useState(500000);
const [loyer, setLoyer] = useState(35000);
const [taux, setTaux] = useState(3.5);
const [duree, setDuree] = useState(20);
const [tmiId, setTmiId] = useState("41");
const [done, setDone] = useState(false);
const [busy, setBusy] = useState(false);
const reveal = useReveal(done, 250);
const P = Math.max(0, Number(projet) || 0);
const Lo = Math.max(0, Number(loyer) || 0);
const r = Math.max(0, Number(taux) || 0) / 100;
const n = Math.max(1, Number(duree) || 1);
const tmi = (TMIs.find((t) => t.id === tmiId) || TMIs[1]).v;
const PS = 0.172;
const mens = annuite(P, r, n); // annuité annuelle
const coutTotalImmo = mens * n;
const interetsTotalImmo = coutTotalImmo - P;
const interets = P * r; // intérêts ~année 1
const amort = P * 0.85 * 0.03; // amortissement bâti (~85 % de la valeur, 3 %/an)
// A : nom propre / SCI IR
const baseIR = Math.max(0, Lo - interets);
const impotIR = baseIR * (tmi + PS);
const cashIR = Lo - mens - impotIR;
const effortIR = cashIR < 0 ? -cashIR / 12 : 0;
// B : SCI à l'IS
const baseIS = Math.max(0, Lo - interets - amort);
const impotIS = IS(baseIS);
const cashIS = Lo - mens - impotIS;
const effortIS = cashIS < 0 ? -cashIS / 12 : 0;
const tauxFoncier = Math.round((tmi + PS) * 1000) / 10;
const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); };
return (
{!done &&
Montant du projet (emprunt 100 %)
Loyer annuel brut estimé
Votre tranche marginale d'imposition (TMI)
}
{done &&
setDone(false)} />
Votre crédit immobilier
Mensualité de {fmt(mens / 12)}
Intérêts sur {n} ans
{fmt(interetsTotalImmo)}
Coût total du crédit
{fmt(coutTotalImmo)}
Effort d'épargne mensuel
à injecter chaque mois pour rembourser la banque ({fmt(Math.abs(cashIR))}/an de cash-flow négatif)
Impôt IS annuel
{baseIS <= 0 ? "Base taxable nulle — amortissement + intérêts neutralisent l'impôt" : `Base ${fmt(baseIS)} après amortissement`}
Effort d'épargne mensuel
{effortIS <= 1 ? "Les loyers couvrent l'emprunt : l'actif s'autofinance." : "quasi-équilibre de trésorerie"}
Acquérir de l'immobilier de rendement en nom propre ou en SCI à l'IR est une anomalie pour un contribuable fortement fiscalisé : le frottement de votre imposition personnelle détruit la rentabilité locative et exige des injections de trésorerie constantes. Le cabinet structure vos acquisitions (SCI à l'IS, holding ) pour créer un effet de levier total — la société amortit l'actif, neutralise l'impôt immédiat, et permet à l'immobilier de se financer seul, en circuit fermé.
Estimation indicative (intérêts et amortissement de 1re année ; la base IS remonte progressivement avec l'amortissement du capital). La revente d'un bien à l'IS génère une plus-value majorée — à anticiper.
}
);
}
window.CorporateBuyoutDebtSimulator = CorporateBuyoutDebtSimulator;
window.RealEstateDebtSimulator = RealEstateDebtSimulator;
// =====================================================
// 3. CAPITALISATION FINANCIÈRE — l'effet boule de neige
// =====================================================
function FinancialCapitalizationSimulator() {
useEffect(injectCore, []);
const { ParamRecap } = shared();
const [capital, setCapital] = useState(100000);
const [perf, setPerf] = useState(6);
const [duree, setDuree] = useState(15);
const [done, setDone] = useState(false);
const [busy, setBusy] = useState(false);
const reveal = useReveal(done, 250);
const K = Math.max(0, Number(capital) || 0);
const g = Math.max(0, Number(perf) || 0) / 100;
const n = Math.max(1, Math.min(30, Number(duree) || 1));
const gNet = g * (1 - 0.314); // gain net annuel en nom propre
const nomPropre = K * Math.pow(1 + gNet, n);
const holding = K * Math.pow(1 + g, n);
const ecart = holding - nomPropre;
const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); };
return (
{!done &&
Capital de départ à placer
}
{done &&
setDone(false)} />
En {n} ans, à effort de départ identique, la holding vous fait gagner :
de patrimoine supplémentaire
Le pire ennemi d'un capital qui grandit, ce n'est pas le rendement, c'est l'impôt prélevé chaque année. Placer vos excédents à votre nom revient à retirer près d'un tiers des gains à chaque étape. En holding, 100 % de la performance est réinvestie et l'impôt personnel n'intervient qu'à la sortie, jamais pendant la phase de croissance. Le cabinet met en place cette structure de capitalisation.
Estimation simplifiée : en holding, l'impôt sur les sociétés sur les gains réalisés reste dû ; l'avantage tient au report de l'impôt personnel (31,4 %) et au réinvestissement intégral.
}
);
}
function GrowthCurve({ reveal, K, g, gNet, n }) {
const [on, setOn] = useState(false);
useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 250); return () => clearTimeout(id); } else setOn(false); }, [reveal]);
const x0 = 46, x1 = 694, yb = 250, yt = 26;
const hi = [], lo = [];
for (let k = 0; k <= n; k++) { hi.push(K * Math.pow(1 + g, k)); lo.push(K * Math.pow(1 + gNet, k)); }
const maxV = hi[n] || 1;
const X = (k) => x0 + (x1 - x0) * (k / n);
const Y = (v) => yb - (yb - yt) * (v / maxV);
const path = (arr) => arr.map((v, i) => `${i === 0 ? "M" : "L"} ${X(i).toFixed(1)} ${Y(v).toFixed(1)}`).join(" ");
const area = [...hi.map((v, i) => `${X(i).toFixed(1)},${Y(v).toFixed(1)}`), ...lo.map((v, i) => `${X(n - i).toFixed(1)},${Y(lo[n - i]).toFixed(1)}`)].join(" ");
return (
La croissance, année après année
L'écart se creuse avec le temps
{[0, Math.round(n / 2), n].map((k) => AN {k} )}
À votre nom {fmt(lo[n])}
En holding {fmt(hi[n])}
);
}
window.FinancialCapitalizationSimulator = FinancialCapitalizationSimulator;
// =====================================================
// 4. INTÉRÊTS COMPOSÉS — le levier du temps
// =====================================================
function CompoundInterestSimulator() {
useEffect(injectCore, []);
const { ParamRecap } = shared();
const [capital, setCapital] = useState(100000);
const [mensuel, setMensuel] = useState(1000);
const [perf, setPerf] = useState(7);
const [duree, setDuree] = useState(20);
const [done, setDone] = useState(false);
const [busy, setBusy] = useState(false);
const reveal = useReveal(done, 250);
const K = Math.max(0, Number(capital) || 0);
const mAnnuel = Math.max(0, Number(mensuel) || 0) * 12;
const g = Math.max(0, Number(perf) || 0) / 100;
const n = Math.max(1, Math.min(30, Number(duree) || 1));
// série annuelle : versé cumulé vs total
const verseArr = [], totalArr = [];
let total = K;
verseArr.push(K); totalArr.push(K);
for (let k = 1; k <= n; k++) {
total = total * (1 + g) + mAnnuel;
verseArr.push(K + mAnnuel * k);
totalArr.push(total);
}
const totalVerse = K + mAnnuel * n;
const totalFinal = totalArr[n];
const gains = totalFinal - totalVerse;
const bascule = gains > (totalVerse);
const go = () => { setBusy(true); setDone(false); setTimeout(() => { setBusy(false); setDone(true); }, 700); };
return (
{!done &&
Capital de départ
Versement mensuel
}
{done &&
setDone(false)} />
La richesse créée par le temps
La capitalisation a généré
de gains, en plus de vos versements
À {n} ans, votre patrimoine atteint {fmt(totalFinal)} . Vous avez versé {fmt(totalVerse)} ; les intérêts ont ajouté {fmt(gains)} .{bascule ? " La bascule est franchie : l'argent généré a dépassé votre propre effort." : ""}
Laisser les excédents de votre entreprise sur un compte non rémunéré, c'est renoncer au levier le plus puissant : le temps. L'inflation grignote ce capital chaque année. Le cabinet structure vos excédents professionnels (contrat de capitalisation en holding, usufruit de SCPI…) pour que chaque euro de votre groupe travaille et se transforme en revenu durable.
}
);
}
function StackedArea({ reveal, verse, total, n }) {
const [on, setOn] = useState(false);
useEffect(() => { if (reveal) { const id = setTimeout(() => setOn(true), 250); return () => clearTimeout(id); } else setOn(false); }, [reveal]);
const x0 = 46, x1 = 694, yb = 250, yt = 26;
const maxV = total[n] || 1;
const X = (k) => x0 + (x1 - x0) * (k / n);
const Y = (v) => yb - (yb - yt) * (v / maxV);
const baseline = `${X(0).toFixed(1)},${yb} ` + verse.map((v, i) => `${X(i).toFixed(1)},${Y(v).toFixed(1)}`).join(" ") + ` ${X(n).toFixed(1)},${yb}`;
const interestPoly = verse.map((v, i) => `${X(i).toFixed(1)},${Y(v).toFixed(1)}`).join(" ") + " " + [...total].reverse().map((v, i) => `${X(n - i).toFixed(1)},${Y(v).toFixed(1)}`).join(" ");
return (
Vos versements vs les intérêts générés
La part des intérêts grandit avec le temps
{[0, Math.round(n / 2), n].map((k) => AN {k} )}
Vos versements {fmt(verse[n])}
Intérêts générés {fmt(total[n] - verse[n])}
);
}
window.CompoundInterestSimulator = CompoundInterestSimulator;
})();