Prendre rendez-vous

Actualités comptables & fiscales

BSPCE et fiscalité en 2026 : le guide complet pour dirigeants, fondateurs et investisseurs

Date
8.5.2026
Durée
10 minutes
Tout comprendre sur les BSPCE en 2026 : régime fiscal, conditions d’attribution, taxation des gains et stratégies d’optimisation pour dirigeants, fondateurs et investisseurs.

Les BSPCE (Bons de Souscription de Parts de Créateur d’Entreprise) sont devenus l’un des dispositifs phares de l’actionnariat salarié dans les start-up et PME innovantes françaises. Ils permettent d’attirer, de fidéliser et de motiver les talents stratégiques en les associant directement à la création de valeur de l’entreprise.

Mais le régime juridique et fiscal des BSPCE a connu deux réformes successives majeures : la loi de finances pour 2025 (loi n° 2025-127 du 14 février 2025) et la loi de finances pour 2026 (loi n° 2026-103 du 19 février 2026). Ces textes modifient à la fois les conditions d’éligibilité des sociétés émettrices et le traitement fiscal des gains réalisés par les bénéficiaires.

Le cabinet DIGIFEC, cabinet d’avocats d’affaires basé à Paris, accompagne les dirigeants, fondateurs et investisseurs dans la structuration juridique et fiscale de leurs plans d’intéressement. Cet article fait le point sur les règles applicables en 2026, illustrées d’exemples concrets et conformes aux textes en vigueur consultés sur Légifrance et le BOFiP.

Qu’est-ce qu’un BSPCE et pourquoi en parler en 2026 ?

Les BSPCE sont des valeurs mobilières donnant accès au capital, prévues par l’article 163 bis G du Code général des impôts (CGI). Ils confèrent à leurs titulaires le droit de souscrire des actions de la société émettrice à un prix fixé définitivement le jour de l’attribution par l’assemblée générale extraordinaire.

L’intérêt est double :

  • pour la société, fidéliser les talents sans verser de rémunération immédiate ni supporter de charges sociales au moment de l’attribution ;
  • pour le bénéficiaire, profiter de la plus-value future entre la valeur des titres au moment de la cession et le prix d’exercice fixé à l’origine, le tout dans un cadre fiscal avantageux.

Comment fonctionne concrètement un BSPCE ?

Le cycle de vie d’un BSPCE comprend généralement cinq étapes :

  1. L’attribution gratuite des bons par décision de l’assemblée générale extraordinaire ;
  2. La période de vesting (acquisition progressive), souvent assortie d’un cliff d’un an ;
  3. L’exercice des bons, qui transforme le droit en actions par paiement du prix de souscription ;
  4. La détention des actions souscrites ;
  5. La cession des titres lors d’un événement de liquidité (levée de fonds, rachat, introduction en bourse).

Chaque étape soulève des problématiques juridiques, comptables et fiscales distinctes que les dirigeants doivent anticiper dès la rédaction du plan d’attribution.

En quoi les BSPCE diffèrent-ils des stock-options et actions gratuites ?

À la différence des stock-options classiques ou des attributions gratuites d’actions (AGA), les BSPCE bénéficient d’un régime fiscal spécifique et plus favorable dans la plupart des cas. La société émettrice n’est en principe redevable d’aucune contribution patronale spécifique au titre de l’attribution, ce qui constitue un atout décisif par rapport aux actions gratuites soumises à la contribution patronale prévue à l’article L. 137-13 du Code de la sécurité sociale.

En revanche, les BSPCE sont strictement réservés à certaines sociétés, contrairement aux stock-options qui peuvent être attribuées par des sociétés cotées de toute taille.

Quelles entreprises peuvent émettre des BSPCE en 2026 ?

L’article 163 bis G du CGI fixe des conditions cumulatives strictes que la société émettrice doit respecter de manière continue.

Quelles conditions juridiques la société doit-elle remplir ?

Pour émettre des BSPCE en 2026, la société doit notamment :

  • être une société par actions : SA, SAS, SCA ou société européenne ;
  • être non cotée, ou cotée avec une capitalisation boursière inférieure à 150 millions d’euros (avec une tolérance de trois ans après dépassement) ;
  • être immatriculée au RCS depuis moins de 15 ans ;
  • être passible de l’impôt sur les sociétés en France ;
  • avoir son siège social dans un État de l’Union européenne ou dans un État ayant conclu avec la France une convention contenant une clause d’assistance administrative en vue de lutter contre la fraude et l’évasion fiscales ;
  • ne pas être issue d’une fusion, scission ou reprise d’activités préexistantes (sauf exceptions limitées) ;
  • respecter une condition tenant à la structure de son capital.

C’est précisément sur ce dernier point que la loi de finances pour 2026 a apporté un assouplissement notable. Pour les BSPCE attribués à compter du 1er janvier 2026, le seuil minimal de détention du capital par des personnes physiques est abaissé de 25 % à 15 % (article 25 de la loi n° 2026-103 du 19 février 2026). Cette détention peut être directe ou indirecte via une holding détenue à au moins 75 % par des personnes physiques.

L’enjeu pratique est considérable : avec l’ancien seuil, une start-up dont le capital était détenu à 80 % par des fonds d’investissement perdait son éligibilité aux BSPCE. Désormais, les sociétés détenues jusqu’à 85 % par des investisseurs institutionnels restent éligibles, ce qui sécurise les scale-up ayant réalisé plusieurs tours de table.

Qui peut bénéficier de BSPCE après la réforme 2026 ?

Les BSPCE peuvent être attribués :

  • aux salariés de la société émettrice ;
  • aux dirigeants soumis au régime fiscal des salariés (président de SAS, directeur général, etc.) ;
  • aux membres du conseil d’administration ou de surveillance d’une SA ou d’un organe statutaire équivalent dans une SAS ;
  • aux salariés et dirigeants des filiales détenues à au moins 75 % ;
  • depuis le 1er janvier 2026, aux salariés et dirigeants des sous-filiales, à condition que le produit des pourcentages de détention successifs atteigne au moins 75 %.

Exemple concret : si la société émettrice détient 90 % d’une filiale, qui détient elle-même 85 % d’une sous-filiale, le produit est de 76,5 % (90 % × 85 %). La sous-filiale peut donc désormais bénéficier du dispositif, ce qui facilite la mise en place d’un plan d’intéressement homogène dans les groupes structurés en plusieurs niveaux.

Les consultants externes, prestataires indépendants et freelances restent en revanche exclus du dispositif.

Comment est imposé le bénéficiaire de BSPCE en 2026 ?

C’est ici que la loi de finances pour 2025 a opéré un changement fondamental. Auparavant, la totalité du gain réalisé entre le prix d’exercice et le prix de cession était imposée au régime des plus-values mobilières.

Depuis le 1er janvier 2025, l’article 163 bis G du CGI distingue clairement deux gains de nature différente, qui obéissent à des règles fiscales distinctes.

Qu’est-ce que le gain d’exercice et comment est-il taxé ?

Le gain d’exercice correspond à la différence entre la valeur réelle des titres au jour de l’exercice des bons et le prix d’exercice fixé lors de leur attribution. Il revêt désormais une nature salariale par détermination de la loi.

Toutefois, ce gain n’est pas imposé selon le barème classique des traitements et salaires. Il bénéficie d’un taux forfaitaire :

  • 12,8 % d’impôt sur le revenu si le bénéficiaire a exercé son activité dans la société pendant au moins 3 ans à la date de la cession des titres ;
  • 30 % d’impôt sur le revenu dans le cas contraire, sans possibilité d’option pour le barème progressif.

À ces taux s’ajoutent les prélèvements sociaux au taux global de 17,2 %.

L’option pour le barème progressif de l’impôt sur le revenu reste possible uniquement lorsque le taux de 12,8 % s’applique. Bonne nouvelle de la loi de finances 2026 : pour apprécier la durée d’activité de 3 ans, il est désormais possible de cumuler les périodes effectuées au sein de la société émettrice, d’une filiale ou d’une sous-filiale éligible. Cette mesure facilite la mobilité intragroupe sans pénaliser le bénéficiaire.

L’imposition du gain d’exercice intervient l’année de la disposition, cession, conversion au porteur ou mise en location des titres souscrits.

Comment est traitée la plus-value de cession ?

La plus-value de cession correspond à la différence entre le prix de cession des titres et leur valeur au jour de l’exercice des bons. Elle relève du régime de droit commun des plus-values de cession de valeurs mobilières prévu à l’article 150-0 A du CGI.

Elle est donc soumise au prélèvement forfaitaire unique (PFU) de 30 % (12,8 % d’IR + 17,2 % de prélèvements sociaux), avec option possible pour le barème progressif si cela s’avère plus favorable.

À noter qu’un nouveau régime spécifique applicable aux management packages, codifié à l’article 163 bis H du CGI par la loi de finances 2025, peut dans certaines hypothèses limiter le bénéfice du régime des plus-values pour la fraction du gain excédant un plafond calculé par référence à la performance de la société. Cette articulation reste complexe et nécessite une analyse au cas par cas.

Quel exemple concret de calcul fiscal ?

Prenons l’hypothèse d’un développeur clé d’une start-up, salarié depuis 4 ans, qui exerce ses BSPCE puis revend immédiatement les actions :

  • Prix d’exercice fixé à l’attribution : 10 € par action
  • Valeur réelle des titres au jour de l’exercice : 50 €
  • Prix de cession le même jour : 50 €
  • Nombre de bons exercés : 1 000

Gain d’exercice : (50 € − 10 €) × 1 000 = 40 000 €

ComposanteTauxMontantImpôt sur le revenu (taux réduit ≥ 3 ans)12,8 %5 120 €Prélèvements sociaux17,2 %6 880 €Total imposition30 %12 000 €

Gain net après imposition : 40 000 € − 12 000 € = 28 000 €.

Si le bénéficiaire avait moins de 3 ans d’ancienneté, le taux d’impôt sur le revenu serait porté à 30 %, soit une imposition globale de 47,2 % sur le gain d’exercice (30 % IR + 17,2 % PS), sans option pour le barème.

En cas de cession différée des titres après leur exercice, la plus-value supplémentaire éventuellement constatée sera imposée distinctement au PFU de 30 % au titre du régime des plus-values mobilières.

Quelles sont les obligations déclaratives pour la société et le bénéficiaire ?

La société émettrice doit, avant le 1er mars de l’année suivant celle de l’exercice, remettre à chaque bénéficiaire un état individuel mentionnant le nombre de bons exercés, le prix d’exercice, la date d’attribution et la valeur des titres au jour de l’exercice (article 41 V bis de l’annexe III au CGI). La société atteste également que les bons ont été émis dans les conditions prévues à l’article 163 bis G du CGI.

Une transmission à l’administration fiscale est par ailleurs requise via la déclaration sociale nominative (DSN), conformément à l’article 87 du CGI.

Côté bénéficiaire, les revenus doivent être déclarés sur la déclaration 2042 C :

  • le gain d’exercice est généralement reporté en case 1TT ;
  • la plus-value de cession est portée en case 3VG.

Vigilance : les obligations déclaratives évoluent régulièrement, notamment en cas de mobilité internationale du bénéficiaire ou d’opérations d’apport à une holding. Une analyse personnalisée est recommandée.

Comment articuler BSPCE et opérations de croissance (M&A, levée de fonds) ?

La mise en place de BSPCE doit s’inscrire dans une stratégie globale de structuration juridique et financière.

Lors d’une levée de fonds, la condition de détention par des personnes physiques (désormais 15 %) doit être surveillée à chaque tour de table pour préserver l’éligibilité du dispositif. La dilution progressive des fondateurs et la montée des fonds au capital doivent être modélisées avec précision.

Lors d’une opération de M&A (cession, fusion, apport à une holding), plusieurs points méritent une attention particulière :

  • l’accélération du vesting prévue par le plan en cas de changement de contrôle ;
  • le traitement fiscal des opérations d’apport ou d’échange de titres, notamment le sursis d’imposition prévu à l’article 150-0 B du CGI dont le Conseil d’État a rappelé l’applicabilité aux BSPCE par un arrêt du 5 février 2024 ;
  • l’articulation avec le pacte d’associés, qui doit prévoir le sort des bons non encore exercés et les mécanismes de drag-along et tag-along ;
  • la garantie d’actif et de passif consentie par les cédants, qui peut couvrir les éventuels redressements liés à la mise en place et au suivi du plan BSPCE.

Exemple concret : une scale-up française cible d’une acquisition par un groupe industriel européen devra anticiper, dans la documentation juridique de l’opération, le sort des BSPCE non exercés, la liquidation des plans existants et les éventuelles clauses de complément de prix (earn-out) dont le traitement fiscal a été précisé par la loi de finances 2025 dans le cadre du nouveau régime des management packages.

Comment DIGIFEC accompagne les dirigeants dans la mise en place de BSPCE ?

Le cabinet DIGIFEC intervient à toutes les étapes du cycle de vie de votre entreprise pour sécuriser et optimiser votre dispositif d’actionnariat salarié et plus largement votre structuration juridique.

Notre accompagnement porte notamment sur :

  • l’analyse d’éligibilité de la société émettrice au dispositif BSPCE et la vérification continue des conditions des articles 163 bis G du CGI et L. 228-91 du Code de commerce ;
  • la rédaction du plan d’attribution, des règlements de plan et des clauses de vesting, en cohérence avec votre pacte d’associés ;
  • la structuration juridique des opérations de levée de fonds, de cession ou de fusion, incluant la due diligence, la négociation des garanties d’actif et de passif et la documentation contractuelle ;
  • la conformité RGPD des plateformes digitales et la mise en place du registre des traitements, des AIPD et de la désignation du DPO ;
  • la protection des actifs immatériels (logiciels, bases de données, savoir-faire, propriété intellectuelle, blockchain et tokens) ;
  • la mise en place d’outils de transmission patrimoniale comme la fiducie-gestion ou la fiducie-sûreté, prévues aux articles 2011 et suivants du Code civil.

Exemple d’intervention : pour une plateforme e-commerce en phase de Série B, DIGIFEC peut combiner la mise en conformité RGPD des traitements de données clients, la mise en place d’un plan BSPCE couvrant les développeurs clés, la rédaction d’un pacte d’associés sécurisant la gouvernance après l’entrée des nouveaux investisseurs, et la structuration d’une holding patrimoniale pour les fondateurs.

Conclusion : un dispositif puissant mais exigeant

Les BSPCE restent en 2026 l’un des dispositifs les plus attractifs pour associer les talents au capital d’une PME innovante française. Les réformes récentes les ont rendus plus accessibles, notamment pour les sociétés ayant levé des fonds importants ou organisées en groupe, mais elles ont aussi complexifié l’articulation entre gain d’exercice et plus-value de cession.

Anticiper, sécuriser et documenter chaque étape est désormais essentiel pour préserver le bénéfice du régime fiscal favorable et éviter tout risque de requalification.

Pour toute question sur la mise en place d’un plan BSPCE, la structuration juridique d’une opération de croissance ou la mise en conformité de votre activité, les équipes du cabinet DIGIFEC sont à votre disposition.

Foire aux questions

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Simulateur fiscalité BSPCE 2026 | DIGIFEC</title>
<meta name="description" content="Simulateur juridique et fiscal BSPCE 2026. Calculez votre gain net après impôt, gain d'exercice et plus-value de cession selon l'article 163 bis G du CGI." />

<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,400;9..144,500;9..144,600;9..144,700&family=Manrope:wght@400;500;600;700&display=swap" rel="stylesheet">

<script src="https://cdn.jsdelivr.net/npm/chart.js@4.4.1/dist/chart.umd.min.js"></script>

<style>
 :root {
   --color-bg: #FFFFFF;
   --color-primary: #016666;
   --color-primary-dark: #014A4A;
   --color-primary-soft: #E6F2F2;
   --color-primary-faint: #F4F9F9;
   --color-text: #0A1F1F;
   --color-text-muted: #4A6363;
   --color-text-light: #6B8585;
   --color-border: #D9E5E5;
   --color-border-light: #EAF1F1;
   --color-tax: #B85C5C;
   --color-tax-soft: #F8ECEC;
   --color-warning-bg: #FFF8E1;
   --color-warning-border: #E8D08A;
   --color-warning-text: #6B5311;

   --shadow-sm: 0 1px 2px rgba(1, 102, 102, 0.04);
   --shadow-md: 0 4px 16px rgba(1, 102, 102, 0.06);
   --shadow-lg: 0 10px 40px rgba(1, 102, 102, 0.08);

   --radius-sm: 6px;
   --radius-md: 10px;
   --radius-lg: 16px;

   --font-display: 'Fraunces', Georgia, serif;
   --font-sans: 'Manrope', -apple-system, BlinkMacSystemFont, sans-serif;
 }

 * { box-sizing: border-box; margin: 0; padding: 0; }

 html { scroll-behavior: smooth; }

 body {
   font-family: var(--font-sans);
   background: var(--color-bg);
   color: var(--color-text);
   line-height: 1.6;
   font-size: 16px;
   -webkit-font-smoothing: antialiased;
   -moz-osx-font-smoothing: grayscale;
 }

 /* HEADER */
 .header {
   border-bottom: 1px solid var(--color-border-light);
   background: var(--color-bg);
   position: sticky;
   top: 0;
   z-index: 50;
   backdrop-filter: blur(8px);
   background: rgba(255, 255, 255, 0.92);
 }
 .header-inner {
   max-width: 1280px;
   margin: 0 auto;
   padding: 18px 32px;
   display: flex;
   align-items: center;
   justify-content: space-between;
 }
 .brand {
   display: flex;
   align-items: center;
   gap: 12px;
   text-decoration: none;
   color: var(--color-text);
 }
 .brand-mark {
   width: 36px;
   height: 36px;
   border-radius: var(--radius-sm);
   background: var(--color-primary);
   display: flex;
   align-items: center;
   justify-content: center;
   color: white;
   font-family: var(--font-display);
   font-weight: 600;
   font-size: 18px;
 }
 .brand-name {
   font-family: var(--font-display);
   font-size: 20px;
   font-weight: 600;
   letter-spacing: -0.01em;
 }
 .brand-sub {
   font-size: 11px;
   color: var(--color-text-muted);
   text-transform: uppercase;
   letter-spacing: 0.12em;
   margin-top: 1px;
 }
 .header-link {
   color: var(--color-text-muted);
   text-decoration: none;
   font-size: 14px;
   font-weight: 500;
   padding: 8px 16px;
   border: 1px solid var(--color-border);
   border-radius: var(--radius-sm);
   transition: all 0.2s ease;
 }
 .header-link:hover {
   border-color: var(--color-primary);
   color: var(--color-primary);
 }

 /* HERO */
 .hero {
   max-width: 1280px;
   margin: 0 auto;
   padding: 64px 32px 32px;
 }
 .eyebrow {
   display: inline-block;
   font-size: 12px;
   font-weight: 600;
   text-transform: uppercase;
   letter-spacing: 0.16em;
   color: var(--color-primary);
   background: var(--color-primary-soft);
   padding: 6px 14px;
   border-radius: 99px;
   margin-bottom: 20px;
 }
 h1 {
   font-family: var(--font-display);
   font-size: clamp(2rem, 4.5vw, 3.25rem);
   font-weight: 500;
   line-height: 1.1;
   letter-spacing: -0.02em;
   margin-bottom: 18px;
   max-width: 800px;
 }
 h1 em {
   font-style: italic;
   color: var(--color-primary);
   font-weight: 500;
 }
 .hero-lead {
   font-size: 17px;
   color: var(--color-text-muted);
   max-width: 720px;
   line-height: 1.65;
 }
 .hero-meta {
   margin-top: 24px;
   display: flex;
   gap: 24px;
   flex-wrap: wrap;
   align-items: center;
   font-size: 13px;
   color: var(--color-text-light);
 }
 .hero-meta-item {
   display: flex;
   align-items: center;
   gap: 8px;
 }
 .hero-meta-dot {
   width: 6px;
   height: 6px;
   border-radius: 50%;
   background: var(--color-primary);
 }

 /* MAIN LAYOUT */
 .container {
   max-width: 1280px;
   margin: 0 auto;
   padding: 24px 32px 64px;
 }
 .grid {
   display: grid;
   grid-template-columns: minmax(0, 420px) minmax(0, 1fr);
   gap: 32px;
   align-items: start;
 }

 /* CARD */
 .card {
   background: var(--color-bg);
   border: 1px solid var(--color-border-light);
   border-radius: var(--radius-lg);
   padding: 32px;
   box-shadow: var(--shadow-sm);
 }
 .card-elevated {
   box-shadow: var(--shadow-md);
 }
 .card-header {
   margin-bottom: 28px;
   padding-bottom: 20px;
   border-bottom: 1px solid var(--color-border-light);
 }
 .card-title {
   font-family: var(--font-display);
   font-size: 22px;
   font-weight: 600;
   letter-spacing: -0.01em;
   margin-bottom: 6px;
 }
 .card-subtitle {
   font-size: 13px;
   color: var(--color-text-muted);
 }

 /* FORM */
 .form-group {
   margin-bottom: 22px;
 }
 .form-group:last-of-type {
   margin-bottom: 0;
 }
 label {
   display: block;
   font-size: 13px;
   font-weight: 600;
   color: var(--color-text);
   margin-bottom: 8px;
   letter-spacing: -0.005em;
 }
 .label-hint {
   font-size: 12px;
   color: var(--color-text-light);
   font-weight: 400;
   margin-top: 4px;
   line-height: 1.5;
 }
 .input-wrapper {
   position: relative;
 }
 input[type="number"] {
   width: 100%;
   padding: 12px 14px;
   padding-right: 40px;
   font-family: var(--font-sans);
   font-size: 15px;
   font-weight: 500;
   color: var(--color-text);
   background: var(--color-bg);
   border: 1.5px solid var(--color-border);
   border-radius: var(--radius-sm);
   transition: all 0.2s ease;
   -moz-appearance: textfield;
 }
 input[type="number"]::-webkit-outer-spin-button,
 input[type="number"]::-webkit-inner-spin-button {
   -webkit-appearance: none;
   margin: 0;
 }
 input[type="number"]:focus {
   outline: none;
   border-color: var(--color-primary);
   box-shadow: 0 0 0 4px rgba(1, 102, 102, 0.08);
 }
 .input-suffix {
   position: absolute;
   right: 14px;
   top: 50%;
   transform: translateY(-50%);
   font-size: 14px;
   color: var(--color-text-light);
   font-weight: 500;
   pointer-events: none;
 }

 /* TOGGLE / RADIO */
 .toggle-group {
   display: grid;
   grid-template-columns: 1fr 1fr;
   gap: 8px;
   background: var(--color-primary-faint);
   padding: 4px;
   border-radius: var(--radius-sm);
   border: 1px solid var(--color-border-light);
 }
 .toggle-option {
   position: relative;
 }
 .toggle-option input[type="radio"] {
   position: absolute;
   opacity: 0;
   pointer-events: none;
 }
 .toggle-option label {
   display: flex;
   flex-direction: column;
   align-items: center;
   justify-content: center;
   padding: 10px 12px;
   border-radius: 4px;
   cursor: pointer;
   text-align: center;
   transition: all 0.2s ease;
   margin-bottom: 0;
   font-weight: 600;
   font-size: 13px;
   color: var(--color-text-muted);
 }
 .toggle-option input[type="radio"]:checked + label {
   background: var(--color-primary);
   color: white;
   box-shadow: var(--shadow-sm);
 }
 .toggle-rate {
   font-size: 11px;
   font-weight: 500;
   margin-top: 2px;
   opacity: 0.85;
 }

 /* INFO BOX */
 .info-box {
   margin-top: 24px;
   padding: 14px 16px;
   background: var(--color-primary-faint);
   border-left: 3px solid var(--color-primary);
   border-radius: 4px;
   font-size: 13px;
   color: var(--color-text-muted);
   line-height: 1.55;
 }
 .info-box strong {
   color: var(--color-primary);
   font-weight: 600;
 }

 /* RESULTS */
 .results-stack {
   display: flex;
   flex-direction: column;
   gap: 24px;
 }

 /* STAT CARDS */
 .stats-grid {
   display: grid;
   grid-template-columns: repeat(4, 1fr);
   gap: 16px;
 }
 .stat-card {
   padding: 22px;
   border: 1px solid var(--color-border-light);
   border-radius: var(--radius-md);
   background: var(--color-bg);
   transition: all 0.25s ease;
 }
 .stat-card-primary {
   background: var(--color-primary);
   color: white;
   border-color: var(--color-primary);
 }
 .stat-label {
   font-size: 11px;
   font-weight: 600;
   text-transform: uppercase;
   letter-spacing: 0.1em;
   color: var(--color-text-light);
   margin-bottom: 10px;
 }
 .stat-card-primary .stat-label {
   color: rgba(255, 255, 255, 0.85);
 }
 .stat-value {
   font-family: var(--font-display);
   font-size: 26px;
   font-weight: 600;
   letter-spacing: -0.02em;
   line-height: 1.1;
 }
 .stat-sub {
   font-size: 12px;
   color: var(--color-text-light);
   margin-top: 6px;
 }
 .stat-card-primary .stat-sub {
   color: rgba(255, 255, 255, 0.75);
 }
 .stat-tax .stat-value { color: var(--color-tax); }

 /* CHART CARD */
 .chart-wrap {
   position: relative;
   height: 320px;
   margin-top: 8px;
 }

 /* BREAKDOWN TABLE */
 .breakdown-table {
   width: 100%;
   border-collapse: collapse;
   font-size: 14px;
 }
 .breakdown-table th,
 .breakdown-table td {
   padding: 14px 16px;
   text-align: left;
   border-bottom: 1px solid var(--color-border-light);
 }
 .breakdown-table th {
   font-size: 11px;
   font-weight: 600;
   text-transform: uppercase;
   letter-spacing: 0.08em;
   color: var(--color-text-light);
   background: var(--color-primary-faint);
 }
 .breakdown-table td:last-child,
 .breakdown-table th:last-child {
   text-align: right;
   font-variant-numeric: tabular-nums;
   font-weight: 500;
 }
 .breakdown-table tr.section-header td {
   background: var(--color-primary-faint);
   font-weight: 600;
   color: var(--color-primary);
   font-size: 13px;
   text-transform: uppercase;
   letter-spacing: 0.06em;
 }
 .breakdown-table tr.total-row td {
   border-top: 2px solid var(--color-primary);
   border-bottom: none;
   padding-top: 18px;
   padding-bottom: 18px;
   font-size: 16px;
   font-weight: 600;
   color: var(--color-text);
   background: var(--color-primary-faint);
 }
 .breakdown-table tr.total-row td:last-child {
   color: var(--color-primary);
   font-family: var(--font-display);
   font-size: 18px;
 }
 .cell-tax { color: var(--color-tax); }

 /* COMPARISON CALLOUT */
 .comparison {
   background: var(--color-primary-faint);
   border: 1px solid var(--color-border-light);
   border-radius: var(--radius-md);
   padding: 24px;
 }
 .comparison-title {
   font-family: var(--font-display);
   font-size: 18px;
   font-weight: 600;
   margin-bottom: 6px;
 }
 .comparison-sub {
   font-size: 13px;
   color: var(--color-text-muted);
   margin-bottom: 18px;
 }
 .comparison-grid {
   display: grid;
   grid-template-columns: 1fr 1fr;
   gap: 16px;
 }
 .scenario {
   background: white;
   padding: 18px;
   border-radius: var(--radius-sm);
   border: 1px solid var(--color-border-light);
 }
 .scenario-active {
   border-color: var(--color-primary);
   box-shadow: 0 0 0 3px rgba(1, 102, 102, 0.06);
 }
 .scenario-label {
   font-size: 12px;
   font-weight: 600;
   color: var(--color-text-muted);
   margin-bottom: 4px;
 }
 .scenario-active .scenario-label {
   color: var(--color-primary);
 }
 .scenario-rate {
   font-size: 11px;
   color: var(--color-text-light);
   margin-bottom: 14px;
   text-transform: uppercase;
   letter-spacing: 0.06em;
 }
 .scenario-net {
   font-family: var(--font-display);
   font-size: 22px;
   font-weight: 600;
   color: var(--color-text);
   letter-spacing: -0.01em;
 }
 .scenario-active .scenario-net {
   color: var(--color-primary);
 }
 .scenario-tax-info {
   font-size: 12px;
   color: var(--color-text-light);
   margin-top: 8px;
 }
 .delta {
   margin-top: 16px;
   padding: 12px 14px;
   background: white;
   border-radius: var(--radius-sm);
   font-size: 13px;
   color: var(--color-text-muted);
   border: 1px dashed var(--color-border);
 }
 .delta strong {
   color: var(--color-primary);
   font-weight: 600;
 }

 /* DISCLAIMER */
 .disclaimer {
   margin-top: 48px;
   padding: 24px 28px;
   border-radius: var(--radius-md);
   background: var(--color-primary-faint);
   border: 1px solid var(--color-border-light);
   font-size: 13px;
   color: var(--color-text-muted);
   line-height: 1.65;
 }
 .disclaimer-title {
   font-weight: 600;
   color: var(--color-primary);
   margin-bottom: 8px;
   font-size: 14px;
 }
 .disclaimer a {
   color: var(--color-primary);
   text-decoration: underline;
   text-underline-offset: 3px;
 }

 /* FOOTER */
 .footer {
   border-top: 1px solid var(--color-border-light);
   padding: 32px;
   text-align: center;
   font-size: 13px;
   color: var(--color-text-light);
 }
 .footer strong {
   color: var(--color-primary);
   font-weight: 600;
 }

 /* RESPONSIVE */
 @media (max-width: 1024px) {
   .grid {
     grid-template-columns: 1fr;
     gap: 24px;
   }
   .stats-grid {
     grid-template-columns: repeat(2, 1fr);
   }
 }
 @media (max-width: 640px) {
   .header-inner { padding: 14px 20px; }
   .hero { padding: 40px 20px 24px; }
   .container { padding: 16px 20px 48px; }
   .card { padding: 22px; }
   .card-header { margin-bottom: 22px; padding-bottom: 16px; }
   .card-title { font-size: 19px; }
   .stats-grid { grid-template-columns: 1fr; gap: 12px; }
   .comparison-grid { grid-template-columns: 1fr; }
   .breakdown-table th,
   .breakdown-table td { padding: 12px 10px; font-size: 13px; }
   .chart-wrap { height: 260px; }
   h1 { font-size: 2rem; }
   .hero-lead { font-size: 15px; }
   .brand-sub { display: none; }
 }
</style>
</head>
<body>

<header class="header">
 <div class="header-inner">
   <a href="https://www.digifec.com" class="brand">
     <div class="brand-mark">D</div>
     <div>
       <div class="brand-name">DIGIFEC</div>
       <div class="brand-sub">Avocats &amp; Conseil</div>
     </div>
   </a>
   <a href="https://www.digifec.com" class="header-link" target="_blank" rel="noopener">Nous contacter</a>
 </div>
</header>

<section class="hero">
 <span class="eyebrow">Simulateur juridique &amp; fiscal</span>
 <h1>Calculez votre <em>gain net BSPCE</em><br>après imposition en 2026</h1>
 <p class="hero-lead">
   Estimez en temps réel le gain d'exercice, la plus-value de cession et l'imposition globale applicable à vos
   bons de souscription de parts de créateur d'entreprise, conformément à l'article 163 bis G du Code général des impôts
   et aux lois de finances pour 2025 et 2026.
 </p>
 <div class="hero-meta">
   <div class="hero-meta-item"><span class="hero-meta-dot"></span> Article 163 bis G du CGI</div>
   <div class="hero-meta-item"><span class="hero-meta-dot"></span> LF 2025 et LF 2026</div>
   <div class="hero-meta-item"><span class="hero-meta-dot"></span> Mise à jour février 2026</div>
 </div>
</section>

<main class="container">
 <div class="grid">

   <!-- INPUTS -->
   <aside class="card card-elevated">
     <div class="card-header">
       <h2 class="card-title">Vos paramètres</h2>
       <p class="card-subtitle">Renseignez les données de votre plan BSPCE</p>
     </div>

     <div class="form-group">
       <label for="nbBons">Nombre de BSPCE exercés</label>
       <div class="input-wrapper">
         <input type="number" id="nbBons" value="1000" min="1" step="1" />
         <span class="input-suffix">bons</span>
       </div>
     </div>

     <div class="form-group">
       <label for="prixExercice">Prix d'exercice par action</label>
       <div class="input-wrapper">
         <input type="number" id="prixExercice" value="10" min="0" step="0.01" />
         <span class="input-suffix">€</span>
       </div>
       <div class="label-hint">Prix fixé par l'AGE au jour de l'attribution des bons.</div>
     </div>

     <div class="form-group">
       <label for="valeurExercice">Valeur réelle au jour de l'exercice</label>
       <div class="input-wrapper">
         <input type="number" id="valeurExercice" value="50" min="0" step="0.01" />
         <span class="input-suffix">€</span>
       </div>
       <div class="label-hint">Valeur de l'action lors de la souscription effective.</div>
     </div>

     <div class="form-group">
       <label for="prixCession">Prix de cession des actions</label>
       <div class="input-wrapper">
         <input type="number" id="prixCession" value="50" min="0" step="0.01" />
         <span class="input-suffix">€</span>
       </div>
       <div class="label-hint">Prix de revente. Identique à la valeur d'exercice si cession immédiate.</div>
     </div>

     <div class="form-group">
       <label>Ancienneté du bénéficiaire à la cession</label>
       <div class="toggle-group" role="radiogroup">
         <div class="toggle-option">
           <input type="radio" name="anciennete" id="anc-oui" value="oui" checked />
           <label for="anc-oui">
             ≥ 3 ans
             <span class="toggle-rate">IR à 12,8 %</span>
           </label>
         </div>
         <div class="toggle-option">
           <input type="radio" name="anciennete" id="anc-non" value="non" />
           <label for="anc-non">
             &lt; 3 ans
             <span class="toggle-rate">IR à 30 %</span>
           </label>
         </div>
       </div>
       <div class="label-hint">Cumul possible des périodes en société émettrice, filiale et sous-filiale (LF 2026).</div>
     </div>

     <div class="info-box">
       <strong>À retenir :</strong> depuis la LF 2025, le gain d'exercice (avantage salarial) et la plus-value de cession
       sont imposés distinctement. Les prélèvements sociaux s'appliquent au taux global de 17,2 %.
     </div>
   </aside>

   <!-- RESULTS -->
   <div class="results-stack">

     <!-- STATS -->
     <section class="stats-grid">
       <div class="stat-card">
         <div class="stat-label">Gain brut total</div>
         <div class="stat-value" id="stat-brut">0 €</div>
         <div class="stat-sub">Avant imposition</div>
       </div>
       <div class="stat-card stat-tax">
         <div class="stat-label">Imposition totale</div>
         <div class="stat-value" id="stat-impot">0 €</div>
         <div class="stat-sub" id="stat-impot-sub">IR + prélèvements sociaux</div>
       </div>
       <div class="stat-card">
         <div class="stat-label">Taux effectif</div>
         <div class="stat-value" id="stat-taux">0 %</div>
         <div class="stat-sub">Sur le gain total</div>
       </div>
       <div class="stat-card stat-card-primary">
         <div class="stat-label">Gain net</div>
         <div class="stat-value" id="stat-net">0 €</div>
         <div class="stat-sub">Après imposition</div>
       </div>
     </section>

     <!-- CHART -->
     <section class="card">
       <div class="card-header">
         <h2 class="card-title">Décomposition du gain</h2>
         <p class="card-subtitle">Répartition entre gain net, impôt sur le revenu et prélèvements sociaux</p>
       </div>
       <div class="chart-wrap">
         <canvas id="chart-decomposition"></canvas>
       </div>
     </section>

     <!-- COMPARISON -->
     <section class="comparison">
       <div class="comparison-title">Impact de l'ancienneté sur l'imposition</div>
       <div class="comparison-sub">
         Comparaison du gain net selon que la condition de 3 ans d'activité dans la société est remplie ou non.
       </div>
       <div class="comparison-grid">
         <div class="scenario" id="scenario-3ans">
           <div class="scenario-label">Ancienneté ≥ 3 ans</div>
           <div class="scenario-rate">IR 12,8 % + PS 17,2 %</div>
           <div class="scenario-net" id="scenario-3ans-net">0 €</div>
           <div class="scenario-tax-info" id="scenario-3ans-tax">Imposition : 0 €</div>
         </div>
         <div class="scenario" id="scenario-moins3">
           <div class="scenario-label">Ancienneté &lt; 3 ans</div>
           <div class="scenario-rate">IR 30 % + PS 17,2 %</div>
           <div class="scenario-net" id="scenario-moins3-net">0 €</div>
           <div class="scenario-tax-info" id="scenario-moins3-tax">Imposition : 0 €</div>
         </div>
       </div>
       <div class="delta" id="delta-message">
         Différence en faveur de l'ancienneté ≥ 3 ans : <strong>0 €</strong>
       </div>
     </section>

     <!-- BREAKDOWN TABLE -->
     <section class="card">
       <div class="card-header">
         <h2 class="card-title">Détail du calcul fiscal</h2>
         <p class="card-subtitle">Décomposition ligne par ligne selon les articles 163 bis G et 150-0 A du CGI</p>
       </div>
       <div style="overflow-x: auto;">
         <table class="breakdown-table">
           <thead>
             <tr>
               <th>Composante</th>
               <th>Taux applicable</th>
               <th>Montant</th>
             </tr>
           </thead>
           <tbody>
             <tr class="section-header"><td colspan="3">Gain d'exercice (avantage salarial)</td></tr>
             <tr><td>Gain brut d'exercice</td><td>—</td><td id="row-gainEx">0 €</td></tr>
             <tr><td>Impôt sur le revenu</td><td id="row-tauxIRex">12,8 %</td><td class="cell-tax" id="row-irEx">0 €</td></tr>
             <tr><td>Prélèvements sociaux</td><td>17,2 %</td><td class="cell-tax" id="row-psEx">0 €</td></tr>

             <tr class="section-header"><td colspan="3">Plus-value de cession (régime art. 150-0 A CGI)</td></tr>
             <tr><td>Plus-value brute</td><td>—</td><td id="row-pv">0 €</td></tr>
             <tr><td>Impôt sur le revenu (PFU)</td><td>12,8 %</td><td class="cell-tax" id="row-irPv">0 €</td></tr>
             <tr><td>Prélèvements sociaux</td><td>17,2 %</td><td class="cell-tax" id="row-psPv">0 €</td></tr>

             <tr class="total-row"><td>Gain net après imposition</td><td></td><td id="row-net">0 €</td></tr>
           </tbody>
         </table>
       </div>
     </section>

   </div>
 </div>

 <div class="disclaimer">
   <div class="disclaimer-title">Avertissement juridique</div>
   Ce simulateur est fourni à titre d'information générale. Les résultats reposent sur les règles applicables aux BSPCE
   attribués à compter du 1er janvier 2018, telles qu'aménagées par la loi n° 2025-127 du 14 février 2025 et la loi
   n° 2026-103 du 19 février 2026. Il ne tient pas compte des situations particulières (option pour le barème
   progressif de l'IR, contribution exceptionnelle sur les hauts revenus, articulation avec l'article 163 bis H du CGI,
   mobilité internationale, opérations d'apport ou d'échange de titres). Pour une analyse personnalisée et fiable,
   consultez le cabinet
   <a href="https://www.digifec.com" target="_blank" rel="noopener">DIGIFEC</a>.
 </div>
</main>

<footer class="footer">
 © 2026 <strong>DIGIFEC</strong> · Cabinet d'avocats d'affaires · Paris ·
 <a href="https://www.digifec.com" style="color:var(--color-primary);text-decoration:none;font-weight:500;">www.digifec.com</a>
</footer>

<script>
 // ====== ÉLÉMENTS DOM ======
 const inputs = {
   nbBons: document.getElementById('nbBons'),
   prixExercice: document.getElementById('prixExercice'),
   valeurExercice: document.getElementById('valeurExercice'),
   prixCession: document.getElementById('prixCession'),
   ancRadios: document.querySelectorAll('input[name="anciennete"]'),
 };

 const fmtEuro = (n) => {
   if (!isFinite(n)) n = 0;
   return new Intl.NumberFormat('fr-FR', {
     style: 'currency',
     currency: 'EUR',
     maximumFractionDigits: 0,
   }).format(Math.round(n));
 };

 const fmtPct = (n) => {
   if (!isFinite(n) || isNaN(n)) n = 0;
   return new Intl.NumberFormat('fr-FR', {
     maximumFractionDigits: 1,
     minimumFractionDigits: 1,
   }).format(n) + ' %';
 };

 // ====== CALCUL ======
 function compute(anciennete3ans) {
   const nb = Math.max(0, parseFloat(inputs.nbBons.value) || 0);
   const px = Math.max(0, parseFloat(inputs.prixExercice.value) || 0);
   const vx = Math.max(0, parseFloat(inputs.valeurExercice.value) || 0);
   const pc = Math.max(0, parseFloat(inputs.prixCession.value) || 0);

   const gainEx = Math.max(0, (vx - px) * nb);
   const pv = Math.max(0, (pc - vx) * nb);

   const tauxIRex = anciennete3ans ? 0.128 : 0.30;
   const tauxPS = 0.172;
   const tauxIRpv = 0.128;

   const irEx = gainEx * tauxIRex;
   const psEx = gainEx * tauxPS;
   const irPv = pv * tauxIRpv;
   const psPv = pv * tauxPS;

   const totalImpot = irEx + psEx + irPv + psPv;
   const gainBrut = gainEx + pv;
   const gainNet = gainBrut - totalImpot;
   const tauxEffectif = gainBrut > 0 ? (totalImpot / gainBrut) * 100 : 0;

   return {
     nb, px, vx, pc, gainEx, pv,
     tauxIRex, irEx, psEx, irPv, psPv,
     totalImpot, gainBrut, gainNet, tauxEffectif,
     irTotal: irEx + irPv,
     psTotal: psEx + psPv,
   };
 }

 // ====== CHART.JS ======
 const ctx = document.getElementById('chart-decomposition').getContext('2d');
 const chart = new Chart(ctx, {
   type: 'bar',
   data: {
     labels: ['Composition du gain'],
     datasets: [
       {
         label: 'Gain net',
         data: [0],
         backgroundColor: '#016666',
         borderRadius: 4,
         stack: 's',
       },
       {
         label: 'Impôt sur le revenu',
         data: [0],
         backgroundColor: '#B85C5C',
         borderRadius: 4,
         stack: 's',
       },
       {
         label: 'Prélèvements sociaux',
         data: [0],
         backgroundColor: '#D89A9A',
         borderRadius: 4,
         stack: 's',
       },
     ],
   },
   options: {
     indexAxis: 'y',
     responsive: true,
     maintainAspectRatio: false,
     layout: { padding: { top: 10, right: 16, bottom: 10, left: 0 } },
     scales: {
       x: {
         stacked: true,
         beginAtZero: true,
         grid: { color: '#EAF1F1' },
         ticks: {
           color: '#6B8585',
           font: { family: 'Manrope', size: 12 },
           callback: function(value) {
             if (Math.abs(value) >= 1000) return (value / 1000).toFixed(0) + ' k€';
             return value + ' €';
           }
         },
       },
       y: {
         stacked: true,
         grid: { display: false },
         ticks: {
           color: '#0A1F1F',
           font: { family: 'Manrope', size: 13, weight: '600' },
         },
       },
     },
     plugins: {
       legend: {
         position: 'bottom',
         align: 'start',
         labels: {
           color: '#4A6363',
           font: { family: 'Manrope', size: 12, weight: '500' },
           usePointStyle: true,
           pointStyle: 'rectRounded',
           padding: 16,
           boxWidth: 10,
           boxHeight: 10,
         },
       },
       tooltip: {
         backgroundColor: '#0A1F1F',
         titleFont: { family: 'Manrope', size: 12, weight: '600' },
         bodyFont: { family: 'Manrope', size: 13 },
         padding: 12,
         cornerRadius: 6,
         displayColors: true,
         boxPadding: 4,
         callbacks: {
           label: function(ctx) {
             return ctx.dataset.label + ' : ' + fmtEuro(ctx.parsed.x);
           }
         }
       },
     },
   },
 });

 // ====== UPDATE UI ======
 function update() {
   const anc3ans = document.querySelector('input[name="anciennete"]:checked').value === 'oui';

   const r = compute(anc3ans);
   const r3 = compute(true);
   const rMoins3 = compute(false);

   // Stats
   document.getElementById('stat-brut').textContent = fmtEuro(r.gainBrut);
   document.getElementById('stat-impot').textContent = fmtEuro(r.totalImpot);
   document.getElementById('stat-taux').textContent = fmtPct(r.tauxEffectif);
   document.getElementById('stat-net').textContent = fmtEuro(r.gainNet);
   document.getElementById('stat-impot-sub').textContent =
     'IR ' + fmtEuro(r.irTotal) + ' + PS ' + fmtEuro(r.psTotal);

   // Breakdown table
   document.getElementById('row-gainEx').textContent = fmtEuro(r.gainEx);
   document.getElementById('row-tauxIRex').textContent = anc3ans ? '12,8 %' : '30 %';
   document.getElementById('row-irEx').textContent = fmtEuro(r.irEx);
   document.getElementById('row-psEx').textContent = fmtEuro(r.psEx);
   document.getElementById('row-pv').textContent = fmtEuro(r.pv);
   document.getElementById('row-irPv').textContent = fmtEuro(r.irPv);
   document.getElementById('row-psPv').textContent = fmtEuro(r.psPv);
   document.getElementById('row-net').textContent = fmtEuro(r.gainNet);

   // Comparison
   document.getElementById('scenario-3ans-net').textContent = fmtEuro(r3.gainNet);
   document.getElementById('scenario-3ans-tax').textContent = 'Imposition : ' + fmtEuro(r3.totalImpot);
   document.getElementById('scenario-moins3-net').textContent = fmtEuro(rMoins3.gainNet);
   document.getElementById('scenario-moins3-tax').textContent = 'Imposition : ' + fmtEuro(rMoins3.totalImpot);

   document.getElementById('scenario-3ans').classList.toggle('scenario-active', anc3ans);
   document.getElementById('scenario-moins3').classList.toggle('scenario-active', !anc3ans);

   const delta = r3.gainNet - rMoins3.gainNet;
   const deltaEl = document.getElementById('delta-message');
   if (delta > 0) {
     deltaEl.innerHTML = 'Économie d\'imposition apportée par les 3 ans d\'ancienneté : <strong>' + fmtEuro(delta) + '</strong>';
   } else {
     deltaEl.innerHTML = 'Renseignez vos paramètres pour visualiser l\'écart entre les deux scénarios.';
   }

   // Chart
   chart.data.datasets[0].data = [r.gainNet];
   chart.data.datasets[1].data = [r.irTotal];
   chart.data.datasets[2].data = [r.psTotal];
   chart.update('none');
 }

 // ====== EVENTS ======
 Object.values(inputs).forEach(input => {
   if (input instanceof NodeList) {
     input.forEach(r => r.addEventListener('change', update));
   } else {
     input.addEventListener('input', update);
   }
 });

 update();
</script>

</body>
</html>

Background Image
Chaque croissance commence par une décision.Parlez-nous de votre vision, de vos objectifs ou de vos enjeux financiers : nous vous aidons à structurer la suite.Prenons rendez-vous et accélérons votre trajectoire.
Contactez nos experts