.focs-sim {
--focs-bleu: #023170;
--focs-bleu-80: #355A8D;
--focs-bleu-60: #6782AA;
--focs-bleu-40: #9AABC7;
--focs-bleu-20: #CCD4E3;
--focs-bleu-10: #E6EAF1;
--focs-blanc: #FFFFFF;
font-family: 'Montserrat', system-ui, -apple-system, sans-serif !important;
font-weight: 400 !important;
color: var(--focs-bleu) !important;
background: var(--focs-blanc) !important;
font-size: 0.875rem !important;
line-height: 1.65 !important;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-rendering: optimizeLegibility;
padding: 0 !important;
margin: 0 !important;
box-sizing: border-box !important;
}
.focs-sim > * {
margin-left: 0 !important;
margin-right: 0 !important;
padding-left: 0 !important;
padding-right: 0 !important;
}
.focs-sim strong, .focs-sim b, .focs-sim small, .focs-sim span, .focs-sim td, .focs-sim th, .focs-sim p, .focs-sim li, .focs-sim label, .focs-sim div { color: var(--focs-bleu) !important; }
.focs-sim *, .focs-sim *::before, .focs-sim *::after {
color: var(--focs-bleu) !important;
box-sizing: border-box !important;
letter-spacing: normal !important;
}
.focs-sim .focs-slbl {
font-size: 11px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
color: var(--focs-bleu) !important;
margin: 40px 0 18px !important;
padding-top: 0 !important;
border-top: none !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-r2 {
display: grid !important;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)) !important;
gap: 24px !important;
margin-bottom: 20px !important;
}
.focs-sim .focs-f {
display: flex !important;
flex-direction: column !important;
gap: 6px !important;
}
.focs-sim .focs-f label {
font-size: 10.5px !important;
font-weight: 600 !important;
color: var(--focs-bleu) !important;
text-transform: uppercase !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-f input, .focs-sim .focs-f select {
font-size: 13.5px !important;
font-family: 'Montserrat', sans-serif !important;
padding: 9px 0 !important;
border: 0 !important;
border-bottom: 1px solid var(--focs-bleu) !important;
background: transparent !important;
color: var(--focs-bleu) !important;
outline: none !important;
-webkit-appearance: none !important;
appearance: none !important;
transition: border-color 0.2s ease !important;
width: 100% !important;
}
.focs-sim .focs-f input:focus, .focs-sim .focs-f select:focus {
border-bottom-color: var(--focs-bleu) !important;
}
.focs-sim .focs-f select {
padding-right: 24px !important;
cursor: pointer !important;
}
.focs-sim .focs-ck {
display: flex !important;
align-items: flex-start !important;
gap: 12px !important;
padding: 6px 0 !important;
background: transparent !important;
border: none !important;
font-size: 13px !important;
color: var(--focs-bleu) !important;
margin-bottom: 4px !important;
cursor: pointer !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-ck:hover {
background: transparent !important;
}
.focs-sim .focs-ck input[type="checkbox"] {
appearance: none !important;
-webkit-appearance: none !important;
width: 16px !important;
height: 16px !important;
border: 1px solid var(--focs-bleu) !important;
background: var(--focs-blanc) !important;
cursor: pointer !important;
flex-shrink: 0 !important;
margin-top: 2px !important;
transition: all 0.15s ease !important;
position: relative !important;
display: inline-flex !important;
align-items: center !important;
justify-content: center !important;
}
.focs-sim .focs-ck input[type="checkbox"]:checked {
background: var(--focs-bleu) !important;
border-color: var(--focs-bleu) !important;
}
.focs-sim .focs-ck input[type="checkbox"]:checked::after {
content: "\eb7b";
font-family: 'remixicon' !important;
font-style: normal !important;
font-weight: normal !important;
color: var(--focs-blanc) !important;
font-size: 14px !important;
line-height: 1 !important;
position: absolute !important;
top: 50% !important;
left: 50% !important;
transform: translate(-50%, -50%) !important;
}
.focs-sim .focs-ck-d {
font-size: 11px !important;
color: var(--focs-bleu) !important;
margin-top: 5px !important;
line-height: 1.5 !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-f-d {
font-size: 11px !important;
color: var(--focs-bleu) !important;
line-height: 1.5 !important;
font-family: 'Montserrat', sans-serif !important;
margin-top: -2px !important;
margin-bottom: 4px !important;
font-weight: 400 !important;
}
.focs-sim .focs-btn {
width: 100% !important;
padding: 16px 20px !important;
font-size: 11.5px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
background: var(--focs-bleu) !important;
color: var(--focs-blanc) !important;
border: none !important;
border-radius: 0 !important;
cursor: pointer !important;
margin-top: 36px !important;
transition: opacity 0.2s ease !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-btn:hover {
opacity: 0.85 !important;
}
.focs-sim .focs-res {
margin-top: 56px !important;
}
.focs-sim .focs-kg {
display: grid !important;
grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)) !important;
gap: 32px !important;
margin-bottom: 48px !important;
}
.focs-sim .focs-kc {
background: var(--focs-blanc) !important;
border: none !important;
padding: 4px 0 8px !important;
}
.focs-sim .focs-kl {
font-size: 10.5px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
color: var(--focs-bleu) !important;
margin-bottom: 10px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-kv {
font-family: 'Abhaya Libre', serif !important;
font-size: 26px !important;
font-weight: 400 !important;
color: var(--focs-bleu) !important;
line-height: 1.1 !important;
}
.focs-sim .focs-ks {
font-size: 11px !important;
color: var(--focs-bleu) !important;
margin-top: 6px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-cd {
background: var(--focs-blanc) !important;
border: none !important;
padding: 8px 0 8px !important;
margin-bottom: 40px !important;
}
.focs-sim .focs-ct {
font-size: 12px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
color: var(--focs-bleu) !important;
margin-bottom: 18px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-ri {
display: flex !important;
justify-content: space-between !important;
align-items: baseline !important;
padding: 9px 0 !important;
border-bottom: 1px solid var(--focs-bleu) !important;
font-size: 13px !important;
gap: 12px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-ri:last-child {
border-bottom: none !important;
}
.focs-sim .focs-rl {
color: var(--focs-bleu) !important;
flex: 1 !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-rv {
font-weight: 500 !important;
color: var(--focs-bleu) !important;
white-space: nowrap !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-al {
border: none !important;
padding: 6px 0 !important;
font-size: 12px !important;
line-height: 1.65 !important;
margin: 12px 0 16px !important;
background: var(--focs-blanc) !important;
color: var(--focs-bleu) !important;
font-family: 'Montserrat', sans-serif !important;
font-style: italic !important;
}
.focs-sim .focs-ot {
width: 100% !important;
border-collapse: collapse !important;
font-size: 12.5px !important;
margin-top: 16px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-ot th {
font-size: 10.5px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
color: var(--focs-bleu) !important;
padding: 12px 12px !important;
background: var(--focs-blanc) !important;
text-align: left !important;
border-bottom: 1px solid var(--focs-bleu) !important;
}
.focs-sim .focs-ot td {
padding: 11px 12px !important;
border-bottom: 1px solid var(--focs-bleu) !important;
vertical-align: middle !important;
}
.focs-sim .focs-ot tr:last-child td {
border-bottom: none !important;
}
.focs-sim .focs-ot .focs-best td {
background: var(--focs-blanc) !important;
font-weight: 600 !important;
color: var(--focs-bleu) !important;
border-bottom: 1px solid var(--focs-bleu) !important;
}
.focs-sim .focs-lbo2 {
display: grid !important;
grid-template-columns: 1fr 1fr !important;
gap: 20px !important;
margin: 20px 0 !important;
}
.focs-sim .focs-lbc {
background: var(--focs-blanc) !important;
border: none !important;
padding: 4px 0 8px !important;
}
.focs-sim .focs-lbh {
font-size: 11.5px !important;
font-weight: 600 !important;
text-transform: uppercase !important;
color: var(--focs-bleu) !important;
margin-bottom: 14px !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-tpsch {
display: flex !important;
flex-direction: column !important;
align-items: center !important;
gap: 10px !important;
padding: 16px 0 8px !important;
}
.focs-sim .focs-tpsn {
border: 1px solid var(--focs-bleu) !important;
padding: 14px 22px !important;
min-width: 260px !important;
text-align: left !important;
background: var(--focs-blanc) !important;
font-family: 'Montserrat', sans-serif !important;
}
.focs-sim .focs-tpsn-main {
background: var(--focs-bleu) !important;
border-color: var(--focs-bleu) !important;
}
.focs-sim .focs-tpsn-main .focs-tpsnl,
.focs-sim .focs-tpsn-main .focs-tpsnn,
.focs-sim .focs-tpsn-main .focs-tpsnd {
color: var(--focs-blanc) !important;
}
.focs-sim .focs-tpsnl {
font-size: 10px !important;
text-transform: uppercase !important;
color: var(--focs-bleu-60) !important;
margin-bottom: 6px !important;
font-weight: 600 !important;
}
.focs-sim .focs-tpsnn {
font-family: 'Abhaya Libre', serif !important;
font-size: 19px !important;
color: var(--focs-bleu) !important;
line-height: 1.1 !important;
margin-bottom: 4px !important;
}
.focs-sim .focs-tpsnd {
font-size: 11.5px !important;
color: var(--focs-bleu-80) !important;
line-height: 1.5 !important;
}
@media (max-width: 1024px) {
.focs-sim .focs-r2 {
grid-template-columns: 1fr !important;
}
.focs-sim .focs-kg {
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)) !important;
}
}
@media (max-width: 768px) {
.focs-sim .focs-kg {
grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)) !important;
}
.focs-sim .focs-lbo2 {
grid-template-columns: 1fr !important;
}
}
Résultat de la société et statut du dirigeant
Résultat avant rémunération (€) Résultat de l'exercice avant versement de la rémunération du dirigeant et avant IS
Statut du dirigeant Détermine l'assiette et le niveau des cotisations sociales sur la rémunération
Gérant majoritaire SARL (TNS)Président SAS (assimilé salarié)Gérant minoritaire (assimilé salarié)
Part affectée en salaire (€) Rémunération brute de gérance / présidence prélevée sur le résultat
Part affectée en dividende (€) Montant distribué en dividende, plafonné au résultat net après IS
Paramètres fiscaux
Taux marginal d'imposition (TMI) Tranche marginale du barème de l'IR applicable au foyer fiscal
30 %41 %45 %
Taux d'impôt sur les sociétés 15 % sur les 42 500 € premiers de bénéfice PME · 25 % en droit commun
25 % - droit commun15 % - taux réduit PME
Option d'imposition du dividende PFU 30 % (12,8 % IR + 17,2 % PS) ou barème progressif avec abattement 40 %
PFU 30 %Barème IR (abattement 40 %)
Simuler l'arbitrage salaire / dividende
L'affichage du calendrier nécessite votre consentement préalable pour l'activation des cookies liés à Calendly.
Modifier ce paramètre (function(){
const root = document.querySelector('.focs-sad');
const $ = id => root.querySelector('#'+id);
const v = id => parseFloat($(id).value.replace(/[^0-9,-]/g,'').replace(',','.'))||0;
const vb = id => $(id).checked;
const vs = id => $(id).value;
const fmt = n => Math.round(n).toLocaleString('fr-FR')+' €';
const pct2 = n => (n*100).toFixed(2).replace('.',',')+' %';
const pct1 = n => (n*100).toFixed(1).replace('.',',')+' %';
const pct0 = n => Math.round(n*100)+' %';
const CAL_SLUG = '/d/ctrz-9cg-sfd/rendez-vous-decouverte';function formatFrenchNumber(el){
const raw = String(el.value).replace(/[^0-9,.-]/g,'').replace(',','.');
const n = parseFloat(raw);
if(isNaN(n)||raw===''){el.value='';return;}
el.value = Math.round(n).toLocaleString('fr-FR');
}
function unformatFrenchNumber(el){
el.value = String(el.value).replace(/\s/g,'').replace(/[^\d,.-]/g,'').replace(',','.');
}
root.querySelectorAll('.focs-num').forEach(el => {
formatFrenchNumber(el);
el.addEventListener('focus', function(){ unformatFrenchNumber(this); });
el.addEventListener('blur', function(){ formatFrenchNumber(this); });
});
function buildHtml(id,html){
const el=$(id);
el.style.display='block';
el.innerHTML=html;
}function calc(){
const rar=v('sad_rar'), ps=v('sad_ps'), pd=v('sad_pd');
const st=vs('sad_st'), tmi=v('sad_tmi')/100, tIS=v('sad_is')/100, od=vs('sad_od');let patr, sal, statLbl, retraiteLbl;
if(st==='tns'){ patr=0.45; sal=0; statLbl='Gérant majoritaire SARL (TNS)'; retraiteLbl='Régime TNS - cotisations vieillesse plus faibles, à compléter par retraite Madelin / PER'; }
else if(st==='sas'){ patr=0.54; sal=0.28; statLbl='Président SAS (assimilé salarié)'; retraiteLbl='Régime général + Agirc-Arrco - meilleure couverture retraite mais coût social élevé'; }
else { patr=0.54; sal=0.28; statLbl='Gérant minoritaire (assimilé salarié)'; retraiteLbl='Régime général + Agirc-Arrco - meilleure couverture retraite mais coût social élevé'; }const salaire = Math.max(0, ps);
const chargesPatr = salaire*patr;
const chargesSal = salaire*sal;
const chargesSociales = chargesPatr + chargesSal;
const coutTotalSalaire = salaire + chargesPatr;
const resApresSalaire = Math.max(0, rar - coutTotalSalaire);
const isRestant = resApresSalaire * tIS;
const netSalaireAvantIR = Math.max(0, salaire - chargesSal);
const irSalaire = netSalaireAvantIR * 0.9 * tmi;
const netDispoSalaire = netSalaireAvantIR - irSalaire;const isSurResultat = rar * tIS;
const resNetApresIS = Math.max(0, rar - isSurResultat);
const divBrut = Math.min(Math.max(0,pd), resNetApresIS);
const taxesPFU = divBrut * 0.30;
const psBareme = divBrut * 0.172;
const assietteIR = divBrut * 0.60;
const irBareme = assietteIR * tmi;
const taxesBareme = psBareme + irBareme;
const taxesDiv = od==='pfu' ? taxesPFU : taxesBareme;
const netDispoDiv = divBrut - taxesDiv;
const netPFU = divBrut - taxesPFU;
const netBareme = divBrut - taxesBareme;
const bestDivOpt = taxesPFU 0 ? coutGlobalSalaire/rar : 0;
const tauxEffDiv = rar>0 ? coutGlobalDiv/rar : 0;const salaireMieux = netDispoSalaire >= netDispoDiv;
const meilleureOpt = salaireMieux ? 'Salaire' : 'Dividende';
const economie = Math.abs(netDispoSalaire - netDispoDiv);const grossPerEuro = 1/(1+patr);
const netDivRate = (1-tIS)*0.70;
let tmiSeuil = (1 - netDivRate/(grossPerEuro*(1-sal)))/0.9;
let seuilTxt;
if(!isFinite(tmiSeuil) || tmiSeuil=1){ seuilTxt='À tout niveau de TMI, le salaire reste plus efficient dans cette configuration.'; }
else { seuilTxt='Seuil d\'indifférence indicatif : au-delà d\'un TMI de '+pct1(tmiSeuil)+', l\'euro de résultat est mieux valorisé en dividende (PFU) qu\'en salaire.'; }let h=`
Net disponible salaire
${fmt(netDispoSalaire)}
Après charges et IR sur ${fmt(salaire)}
Net disponible dividende
${fmt(netDispoDiv)}
Option ${od==='pfu'?'PFU 30 %':'barème IR'} sur ${fmt(divBrut)}
Meilleure option
${meilleureOpt}
Net perçu le plus élevé
Économie
${fmt(economie)}
Écart de net entre les deux voies
`;h+=`
Scénario salaire - ${statLbl}
Net disponible ${fmt(netDispoSalaire)}
Coût pour la société ${fmt(coutTotalSalaire)}
Taux effectif de friction ${pct1(tauxEffSalaire)}
Scénario dividende - ${od==='pfu'?'PFU 30 %':'Barème IR'}
Net disponible ${fmt(netDispoDiv)}
Coût pour la société (IS) ${fmt(isSurResultat)}
Taux effectif de friction ${pct1(tauxEffDiv)}
`;h+=`
Décomposition - voie salaire
Salaire brut affecté ${fmt(salaire)}
Charges patronales (${pct0(patr)}) ${fmt(chargesPatr)}
Charges salariales (${pct0(sal)}) ${fmt(chargesSal)}
Coût total pour la société ${fmt(coutTotalSalaire)}
Résultat restant après salaire ${fmt(resApresSalaire)}
IS sur le résultat restant (${pct0(tIS)}) ${fmt(isRestant)}
Net avant IR (après charges salariales) ${fmt(netSalaireAvantIR)}
IR sur salaire (abattement 10 % × TMI ${pct0(tmi)}) ${fmt(irSalaire)}
Net disponible salaire ${fmt(netDispoSalaire)}
`;h+=`
Décomposition - voie dividende
Résultat avant rémunération ${fmt(rar)}
IS sur le résultat (${pct0(tIS)}) ${fmt(isSurResultat)}
Résultat net distribuable après IS ${fmt(resNetApresIS)}
Dividende brut distribué ${fmt(divBrut)}
Fiscalité retenue (${od==='pfu'?'PFU 30 %':'barème IR'}) ${fmt(taxesDiv)}
Net disponible dividende ${fmt(netDispoDiv)}
`;h+=`
Option d'imposition du dividende - PFU vs barème
Option Assiette IR IR Prélèvements sociaux Total prélèvements Net
<tr class="${taxesPFUPFU 30 % 12,8 % IR + 17,2 % PS ${fmt(divBrut)} ${fmt(divBrut*0.128)} ${fmt(divBrut*0.172)} ${fmt(taxesPFU)} ${fmt(netPFU)}
<tr class="${taxesBaremeBarème IR Abattement 40 % × TMI ${pct0(tmi)} + 17,2 % PS ${fmt(assietteIR)} ${fmt(irBareme)} ${fmt(psBareme)} ${fmt(taxesBareme)} ${fmt(netBareme)}
`;h+=`
Synthèse comparative de l'arbitrage
Voie de rémunération Coût société Coût global des prélèvements Taux effectif / résultat Net dirigeant Salaire ${statLbl} ${fmt(coutTotalSalaire)} ${fmt(coutGlobalSalaire)} ${pct1(tauxEffSalaire)} ${fmt(netDispoSalaire)} Dividende ${od==='pfu'?'PFU 30 %':'Barème IR'} ${fmt(isSurResultat)} ${fmt(coutGlobalDiv)} ${pct1(tauxEffDiv)} ${fmt(netDispoDiv)}
`;h+=`
Option la plus avantageuse : ${meilleureOpt}. Écart de net disponible de ${fmt(economie)} en faveur de cette voie, à structure de répartition inchangée. Pour le dividende, l'option la plus efficiente est le ${bestDivOpt} (net ${fmt(bestDivNet)}).
`;
h+=`
${seuilTxt}
`;
h+=`
Impact retraite : ${retraiteLbl}. Le dividende ne génère aucun droit à la retraite ni couverture sociale ; une part de salaire reste nécessaire pour valider des trimestres et ouvrir la prévoyance.
`;
h+=`
Hypothèses : cotisations sociales forfaitaires (TNS ≈ 45 %, assimilé salarié ≈ 82 % dont ≈ 54 % patronales et ≈ 28 % salariales), prélèvements sociaux sur dividendes de 17,2 %, abattement salarial de 10 %. En option barème, la CSG déductible de 6,8 % s'impute sur les revenus de l'année suivante (non intégrée ici). PFU : art. 200 A CGI. Simulation indicative, hors CEHR, plafonnements et particularités du foyer.
`;buildHtml('sad_r',h);
}$('sad-calc-btn').addEventListener('click', calc);
})();