diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md
index a957ac86c9..1573d3e35d 100644
--- a/CONTRIBUTING.md
+++ b/CONTRIBUTING.md
@@ -26,12 +26,20 @@ Nous utilisons :
- [Prettier](https://prettier.io/) pour formater le code source, l'idéal est de configurer votre éditeur de texte pour que les fichiers soit formatés automatiquement quand vous sauvegardez un fichier. Si vous utilisez [VS Code](https://code.visualstudio.com/) cette configuration est automatique.
- [Publicodes](https://publi.codes) pour la gestion des règles métiers
- [React](https://reactjs.org) pour la gestion de l'interface utilisateur
-- [Redux](https://redux.js.org) pour gérer le “state” de l'application côté client
+- [Redux](https://redux.js.org) pour gérer le "state" de l'application côté client
- [TypeScript](https://www.typescriptlang.org) pour ajouter un système de typage à notre code JavaScript. Le typage n'est pas utilisé partout et il n'est pas obligatoire de le prendre en compte pour contribuer.
-- [ViteJS](https://vitejs.dev) pour le “bundling” et le serveur de développement
+- [ViteJS](https://vitejs.dev) pour le "bundling" et le serveur de développement
- [Vitest](https://vitest.dev) et [Cypress](https://www.cypress.io) pour l'execution des tests. Plus d'informations dans la section consacrée aux tests.
- [Yarn](https://yarnpkg.com) pour la gestion des dépendances (à la place de NPM qui est souvent utilisé dans les applications JavaScript)
+### Patterns et bonnes pratiques
+
+#### Compound Components
+
+Pour créer des composants React réutilisables et composables, nous privilégions le **pattern Compound Components**. Ce pattern permet de créer des APIs de composants flexibles où les sous-composants sont exposés comme propriétés du composant principal, offrant une composition déclarative tout en gardant le contrôle sur le rendu final.
+
+Pour plus de détails sur ce pattern, consultez l'[ADR sur les Compound Components](./adr/ADR-2025-10-02-compound-components.md).
+
### Tests
#### Vérification syntaxique :
diff --git a/adr/ADR-2025-10-02-compound-components.md b/adr/ADR-2025-10-02-compound-components.md
new file mode 100644
index 0000000000..818676b041
--- /dev/null
+++ b/adr/ADR-2025-10-02-compound-components.md
@@ -0,0 +1,181 @@
+# ADR : Pattern Compound Components pour les composants React
+
+## Date
+2025-10-02
+
+## Contexte
+
+On refactorise le simulateur location-de-meublé pour passer d'une interface séquentielle à une interface de comparaison en colonnes. On veut créer des composants réutilisables qui soient flexibles tout en gardant le contrôle sur le rendu.
+
+## Problématique
+
+Actuellement, nos composants de comparaison ressemblent à ça :
+
+```tsx
+// Dans DetailsRowCards.tsx - lourd et couplé
+ name)}
+ footerContent={footer?.(statusObject.engine)}
+ isBestOption={bestOptionValue === statusObject.name}
+>
+
+
+
+
+ {label && ' '}
+ {label && label}
+
+
+
+
+ {warning?.(statusObject.engine)}
+
+
+
+ {evolutionLabel}
+
+
+
+```
+
+**Problèmes** :
+- Plein de `StyledXXX` partout qui polluent le code
+- Logique de layout mélangée avec le contenu
+- Difficile de réutiliser dans un autre contexte
+- Props `footerContent`, `isBestOption` spécifiques à un cas d'usage
+- Impossible de composer librement le contenu
+
+Comment créer des composants qui permettent de faire ça de manière plus propre et flexible ?
+
+## Solution : Compound Components
+
+On expose des sous-composants comme propriétés du composant principal :
+
+```tsx
+
+
+
+
+
+ 1 800€
+
+
+```
+
+Le composant parent peut alors organiser les enfants comme il veut :
+
+```tsx
+const CarteComparaison = ({ children, meilleureOption }) => {
+ // On récupère les sous-composants
+ const étiquettes = React.Children.toArray(children).find(
+ child => child.type === CarteComparaison.Étiquettes
+ )
+ const contenu = React.Children.toArray(children).find(
+ child => child.type === CarteComparaison.Contenu
+ )
+
+ // On contrôle complètement le layout
+ return (
+
+
+
+ {contenu}
+
+
+ )
+}
+```
+
+## Avantages
+
+✅ **API intuitive** : Ça ressemble à du HTML, facile à comprendre
+✅ **Flexibilité** : L'utilisateur met ce qu'il veut dans chaque section
+✅ **Contrôle du layout** : On garde la main sur l'organisation finale
+✅ **Pas de StyledBody partout** : Les styles restent dans le composant
+✅ **Facile à étendre** : Ajouter un nouveau sous-composant ne casse rien
+
+## Inconvénients
+
+❌ **Plus de code initial** : Un peu plus long à mettre en place
+❌ **React.Children** : Peut être moins performant avec beaucoup d'enfants
+
+## Alternatives qu'on a écartées
+
+### Option 1 : StyledBody partout (ce qu'on fait actuellement)
+
+```tsx
+
+
+ 1 800€
+ par mois
+
+
+```
+
+**Problème** : On se retrouve avec des `StyledXXX` partout, les styles sont éparpillés, et c'est dur de maintenir une cohérence visuelle.
+
+### Option 2 : Props monolithiques
+
+```tsx
+}
+ contenu="1 800€"
+ sousTitre="par mois"
+/>
+```
+
+**Problème** : Moins flexible, on doit prévoir toutes les props possibles à l'avance, et l'API devient vite énorme.
+
+### Option 3 : Configuration par objet
+
+```tsx
+
+```
+
+**Problème** : Trop rigide, on perd la composabilité React, et on ne peut pas mettre de composants custom.
+
+## Quand utiliser ce pattern ?
+
+👍 **À utiliser pour** :
+- Composants complexes (cartes de comparaison, formulaires multi-sections)
+- Quand on veut offrir de la flexibilité tout en gardant le contrôle
+- Pour éviter la multiplication des `StyledXXX`
+
+👎 **À éviter pour** :
+- Composants simples (un bouton, un input basique)
+- Quand une simple prop suffit
+
+## Exemple concret avec layout contrôlé
+
+```tsx
+const CarteComparaison = ({ children, variant = 'vertical' }) => {
+ const étiquettes = // ... extraction
+ const contenu = // ... extraction
+
+ // Layout horizontal avec Grid
+ if (variant === 'horizontal') {
+ return (
+
+ {étiquettes}
+ {contenu}
+
+ )
+ }
+
+ // Layout vertical avec Flexbox
+ return (
+
+ {étiquettes}
+ {contenu}
+
+ )
+}
+```
+
+On garde le contrôle total sur le layout tout en laissant l'utilisateur composer le contenu librement. C'est le meilleur des deux mondes.
diff --git a/modele-social/CHANGELOG.md b/modele-social/CHANGELOG.md
index 3942d86abf..57b8b38d06 100644
--- a/modele-social/CHANGELOG.md
+++ b/modele-social/CHANGELOG.md
@@ -2,6 +2,25 @@
## next
+## 9.0.0
+
+### Breaking changes
+- Renomme la règle `entreprise . imposition . IS . capital détenu au moins à 75 pourcents par des personnes physiques` en `entreprise . capital social . détenu au moins à 75 pourcents par des personnes physiques`
+
+### Nouveautés
+- Ajoute la règle `entreprise . imposition . IS . total` qui inclue la contribution
+sociale sur l'IS
+- Ajoute les règles `salarié . contrat . apprentissage . assiette réduite apprentissage . taxe sur les salaires` et `salarié . contrat . apprentissage . exonération taxe sur les salaires`
+
+### Mises à jour
+- Change `entreprise . exercice . date trop ancienne` de 2018 à 2022
+- Reformulation de la question de `entreprise . date de cessation`
+
+### Corrections
+- Corrige le calcul de `entreprise . exercice . durée`
+- Corrige le taux de cotisation maladie sur les revenus non conventionnés pour les médecins conventionnés secteur 2
+- Corrige la règle `salarié . contrat . apprentissage . assiette réduite apprentissage . CSG-CRDS` qui ne s'appliquait pas correctement
+
## 8.0.0
### Breaking changes
diff --git a/modele-social/package.json b/modele-social/package.json
index 6f237ad7fc..bd034cfaec 100644
--- a/modele-social/package.json
+++ b/modele-social/package.json
@@ -1,6 +1,6 @@
{
"name": "modele-social",
- "version": "8.0.0",
+ "version": "9.0.0",
"description": "Les règles publicodes du système social français",
"type": "module",
"main": "./dist/index.js",
diff --git "a/modele-social/r\303\250gles/artiste-auteur.publicodes" "b/modele-social/r\303\250gles/artiste-auteur.publicodes"
index 2b4d3b61ce..7a2181bfa4 100644
--- "a/modele-social/r\303\250gles/artiste-auteur.publicodes"
+++ "b/modele-social/r\303\250gles/artiste-auteur.publicodes"
@@ -248,12 +248,9 @@ artiste-auteur . cotisations . IRCEC . profession:
l’IRCEC : dans tous les cas et si vous atteignez le seuil
d’affiliation, au RAAP, puis selon votre activité artistique au RACD
et/ou au RACL.
- formule:
- une possibilité:
- choix obligatoire: non
- possibilités:
- - RACD
- - RACL
+ une possibilité:
+ - RACD
+ - RACL
par défaut: "''"
artiste-auteur . cotisations . IRCEC . profession . RACD:
diff --git "a/modele-social/r\303\250gles/declaration-pam/d\303\251claration-revenus-pamc-formulaire.publicodes" "b/modele-social/r\303\250gles/declaration-pam/d\303\251claration-revenus-pamc-formulaire.publicodes"
index 2854aa95f3..d91c073c81 100644
--- "a/modele-social/r\303\250gles/declaration-pam/d\303\251claration-revenus-pamc-formulaire.publicodes"
+++ "b/modele-social/r\303\250gles/declaration-pam/d\303\251claration-revenus-pamc-formulaire.publicodes"
@@ -5,18 +5,16 @@ déclaration revenus PAMC:
déclaration revenus PAMC . profession:
question: Quelle est votre profession ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - dentiste
- - infirmier
- - kinésithérapeute
- - médecin secteur 1 généraliste
- - médecin secteur 1 spécialiste
- - médecin secteur 2
- - orthophoniste
- - orthoptiste
- - pédicure podologue
- - sage-femme
+ - dentiste
+ - infirmier
+ - kinésithérapeute
+ - médecin secteur 1 généraliste
+ - médecin secteur 1 spécialiste
+ - médecin secteur 2
+ - orthophoniste
+ - orthoptiste
+ - pédicure podologue
+ - sage-femme
meta:
requis: oui
avec:
@@ -70,10 +68,8 @@ déclaration revenus PAMC . statut:
remplaçant/remplaçante et que vous vous êtes installé/installée au 1er juillet,
sélectionnez « Remplaçant / remplaçante ».
une possibilité:
- choix obligatoire: oui
- possibilités:
- - titulaire
- - remplaçant
+ - titulaire
+ - remplaçant
meta:
requis: oui
avec:
@@ -86,11 +82,9 @@ déclaration revenus PAMC . statut:
déclaration revenus PAMC . régime fiscal:
question: Quel est votre régime fiscal ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - IR micro-fiscal
- - IR non micro-fiscal
- - IS
+ - IR micro-fiscal
+ - IR non micro-fiscal
+ - IS
meta:
requis: oui
diff --git "a/modele-social/r\303\250gles/declarations-ind\303\251pendant/charges-sociales-formulaire.publicodes" "b/modele-social/r\303\250gles/declarations-ind\303\251pendant/charges-sociales-formulaire.publicodes"
index cd1034d922..05f006c7d1 100644
--- "a/modele-social/r\303\250gles/declarations-ind\303\251pendant/charges-sociales-formulaire.publicodes"
+++ "b/modele-social/r\303\250gles/declarations-ind\303\251pendant/charges-sociales-formulaire.publicodes"
@@ -18,10 +18,8 @@ déclaration charge sociales . comptabilité:
non applicable si: entreprise . imposition . IS
question: Quelle méthode de gestion de la comptabilité est utilisée pour l'entreprise ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - engagement
- - trésorerie
+ - engagement
+ - trésorerie
déclaration charge sociales . comptabilité . trésorerie:
# rend non applicable: entreprise . imposition . régime . micro-entreprise
@@ -68,13 +66,10 @@ déclaration charge sociales . nature de l'activité:
- entreprise . activité . nature
question: Quelle est la nature de votre activité ?
par défaut: "'artisanale'"
- valeur:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - artisanale
- - commerciale
- - libérale
+ une possibilité:
+ - artisanale
+ - commerciale
+ - libérale
références:
Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite
Comment déterminer la nature de l'activité d'une entreprise ?: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32887
diff --git "a/modele-social/r\303\250gles/dirigeant/conjoint-collaborateur.publicodes" "b/modele-social/r\303\250gles/dirigeant/conjoint-collaborateur.publicodes"
index d360ce7ca6..da6fa0a555 100644
--- "a/modele-social/r\303\250gles/dirigeant/conjoint-collaborateur.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/conjoint-collaborateur.publicodes"
@@ -33,11 +33,9 @@ dirigeant . indépendant . conjoint collaborateur . assiette:
par défaut: "'forfaitaire'"
une possibilité:
- choix obligatoire: oui
- possibilités:
- - forfaitaire
- - revenu sans partage
- - revenu avec partage
+ - forfaitaire
+ - revenu sans partage
+ - revenu avec partage
avec:
forfaitaire:
@@ -52,12 +50,9 @@ dirigeant . indépendant . conjoint collaborateur . assiette:
titre: Proportion revenu
question: À quelle proportion du revenu le conjoint cotise-t-il ?
par défaut: "'tiers'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - tiers
- - moitié
+ une possibilité:
+ - tiers
+ - moitié
avec:
moitié:
diff --git "a/modele-social/r\303\250gles/dirigeant/ind\303\251pendant/cotisations-et-contributions.publicodes" "b/modele-social/r\303\250gles/dirigeant/ind\303\251pendant/cotisations-et-contributions.publicodes"
index cacf8a02ba..e742179784 100644
--- "a/modele-social/r\303\250gles/dirigeant/ind\303\251pendant/cotisations-et-contributions.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/ind\303\251pendant/cotisations-et-contributions.publicodes"
@@ -97,9 +97,9 @@ dirigeant . indépendant . cotisations et contributions . déduction tabac . rev
dirigeant . indépendant . cotisations et contributions . début activité:
titre: Cotisations forfaitaires de début d’activité
description: |
- Lorsque vous commencez votre activité, vos **revenus professionnels**
- n’étant pas connus, **les cotisations et contributions des deux premières
- années sont calculées sur une **base forfaitaire**.
+ Lorsque vous commencez votre activité, vos revenus professionnels n’étant pas
+ connus, les **cotisations et contributions** des deux premières années sont
+ calculées sur une **base forfaitaire**.
Ces cotisations seront ajustées et régularisées en fonction de vos revenus réels
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CARCDSF.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CARCDSF.publicodes"
index aab2b05dd0..330b8d2498 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CARCDSF.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CARCDSF.publicodes"
@@ -198,13 +198,10 @@ dirigeant . indépendant . PL . CARCDSF . sage-femme . RID:
Il existe classes de cotisations aux choix, correspondant à des cotisations
et des degrés d'indemnisations différents.
par défaut: "'A'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - A
- - B
- - C
+ une possibilité:
+ - A
+ - B
+ - C
avec:
A:
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CIPAV.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CIPAV.publicodes"
index d490d6e995..cf03883698 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CIPAV.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CIPAV.publicodes"
@@ -194,13 +194,10 @@ dirigeant . indépendant . PL . CIPAV . invalidité et décès:
les affiliés cotisent en « classe A » mais il est possible de cotiser en
classe B ou C afin de bénéficier d'une meilleure couverture
invalidité-décès.
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - A
- - B
- - C
+ une possibilité:
+ - A
+ - B
+ - C
par défaut: "'A'"
avec:
@@ -262,10 +259,8 @@ dirigeant . indépendant . PL . CIPAV . conjoint collaborateur:
complémentaire et le régime d’invalidité-décès Cipav ?
par défaut: "'quart'"
une possibilité:
- choix obligatoire: oui
- possibilités:
- - quart
- - moitié
+ - quart
+ - moitié
avec:
moitié:
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNAVPL.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNAVPL.publicodes"
index 5b3430c985..0b0377a8c6 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNAVPL.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNAVPL.publicodes"
@@ -140,12 +140,9 @@ dirigeant . indépendant . PL . CNAVPL . conjoint collaborateur . proportion:
À quelle proportion du revenu le conjoint cotise-t-il pour le régime de
base ?
par défaut: "'quart'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - quart
- - moitié
+ une possibilité:
+ - quart
+ - moitié
avec:
moitié:
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNBF.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNBF.publicodes"
index a1df557bab..ca3897d841 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNBF.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/CNBF.publicodes"
@@ -278,13 +278,10 @@ dirigeant . indépendant . PL . CNBF . retraite complémentaire:
Il existe classes de cotisations aux choix, correspondant à des cotisations
et des degrés d'indemnisations différents.
par défaut: "'C1'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - C1
- - C2
- - C2P
+ une possibilité:
+ - C1
+ - C2
+ - C2P
avec:
C1:
titre: classe 1
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/PAMC.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/PAMC.publicodes"
index a237c54a33..a2c6d9e895 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/PAMC.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/PAMC.publicodes"
@@ -196,21 +196,26 @@ dirigeant . indépendant . PL . PAMC . maladie . participation CPAM:
Article 51 de la convention nationale organisant les rapports entre les chirurgiens-dentistes libéraux et l’assurance maladie: https://www.ameli.fr/sites/default/files/Documents/CONVENTION-NATIONALE-DENTAIRE-CONSOLIDEE-AVENANT2.pdf#page=63
dirigeant . indépendant . PL . PAMC . maladie . contribution additionnelle:
- formule:
- produit:
- - (assiette des cotisations - revenus activité conventionnée)
- - taux
- arrondi: oui
- avec:
- taux:
- taux progressif:
- assiette: assiette des cotisations
- multiplicateur: plafond sécurité sociale
- tranches:
- - plafond: 40%
- taux: 3.25%
- - plafond: 110%
- taux: 9.75%
+ produit:
+ - (assiette des cotisations - revenus activité conventionnée)
+ - taux
+ arrondi: oui
+ avec:
+ taux:
+ variations:
+ - si: métier . santé . médecin . secteur = 'S2'
+ alors: 3.25%
+ - sinon:
+ taux progressif:
+ assiette: assiette des cotisations
+ multiplicateur: plafond sécurité sociale
+ tranches:
+ - plafond: 40%
+ taux: 3.25%
+ - plafond: 110%
+ taux: 9.75%
+ références:
+ Taux de cotisations - Praticien ou auxiliaire médical: https://www.urssaf.fr/accueil/outils-documentation/taux-baremes/taux-cotisations-pam.html
dirigeant . indépendant . PL . PAMC . allocations familiales:
applicable si: métier . santé . médecin . secteur = 'S1'
diff --git "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes" "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes"
index 40ceb3b709..8500330b26 100644
--- "a/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes"
+++ "b/modele-social/r\303\250gles/dirigeant/professions-lib\303\251rales/profession-lib\303\251rale.publicodes"
@@ -9,12 +9,10 @@ dirigeant . indépendant . PL . métier:
par défaut: "'rattaché CIPAV'"
question: A quelle catégorie appartient votre profession ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - santé
- - juridique
- - expert-comptable
- - rattaché CIPAV
+ - santé
+ - juridique
+ - expert-comptable
+ - rattaché CIPAV
dirigeant . indépendant . PL . métier . rattaché CIPAV:
titre: Autre métier rattaché à la Cipav
@@ -45,14 +43,12 @@ dirigeant . indépendant . PL . métier . santé:
diététicien et chiropracteur dépendent de la
Cipav pour leur retraite et invalidité.
une possibilité:
- choix obligatoire: oui
- possibilités:
- - médecin
- - chirurgien-dentiste
- - sage-femme
- - auxiliaire médical
- - pharmacien
- - vétérinaire
+ - médecin
+ - chirurgien-dentiste
+ - sage-femme
+ - auxiliaire médical
+ - pharmacien
+ - vétérinaire
avec:
auxiliaire médical:
@@ -68,13 +64,10 @@ dirigeant . indépendant . PL . métier . santé:
Les taux de cotisations et remboursement de la CPAM ne sont pas les même en
fonction du régime de tarification choisie par le praticien.
par défaut: "'S1'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - 'S1'
- - 'S2'
- - 'non conventionné'
+ une possibilité:
+ - 'S1'
+ - 'S2'
+ - 'non conventionné'
avec:
non conventionné:
@@ -99,11 +92,9 @@ dirigeant . indépendant . PL . métier . santé:
dirigeant . indépendant . PL . métier . juridique:
titre: Professions juridiques et judicaires
une possibilité:
- choix obligatoire: oui
- possibilités:
- - avocat
- - notaire
- - officier
+ - avocat
+ - notaire
+ - officier
avec:
avocat:
diff --git "a/modele-social/r\303\250gles/entreprise/activit\303\251.publicodes" "b/modele-social/r\303\250gles/entreprise/activit\303\251.publicodes"
index 1e6cc6611f..36722bc07c 100644
--- "a/modele-social/r\303\250gles/entreprise/activit\303\251.publicodes"
+++ "b/modele-social/r\303\250gles/entreprise/activit\303\251.publicodes"
@@ -18,13 +18,10 @@ entreprise . activité . nature:
Toutefois, à partir de la troisième année civile suivant celle au cours de laquelle la situation de pluriactivité a débuté, les personnes intéressées peuvent demander que l’activité qui a procuré le montant de chiffre d’affaires ou de recettes hors taxes le plus élevé sur les trois dernières années soit considérée comme leur activité principale.
par défaut: "'commerciale'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - artisanale
- - commerciale
- - libérale
+ une possibilité:
+ - artisanale
+ - commerciale
+ - libérale
références:
Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite
Comment déterminer la nature de l’activité d’une entreprise ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat
@@ -219,12 +216,9 @@ entreprise . activités . service ou vente:
- activité . nature . artisanale
- activité . nature . commerciale
question: Quel est le type d’activité principale de l’entreprise ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - vente
- - service
+ une possibilité:
+ - vente
+ - service
par défaut:
variations:
- si: activité . nature . artisanale
diff --git "a/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes" "b/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes"
index a101607ff5..d87bc9f7e8 100644
--- "a/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes"
+++ "b/modele-social/r\303\250gles/entreprise/cat\303\251gorie-juridique.publicodes"
@@ -1,9 +1,7 @@
entreprise . associés:
une possibilité:
- choix obligatoire: oui
- possibilités:
- - unique
- - multiples
+ - unique
+ - multiples
description: |
Si vous êtes le seul associé de votre société, alors vous êtes dans le cas d'une « société unipersonnelle ».
@@ -32,15 +30,13 @@ entreprise . catégorie juridique:
références:
Liste des catégories juridique de l'INSEE: https://www.insee.fr/fr/information/2028129
une possibilité:
- choix obligatoire: oui
- possibilités:
- - EI
- - SARL
- - SAS
- - SELARL
- - SELAS
- - association
- - autre
+ - EI
+ - SARL
+ - SAS
+ - SELARL
+ - SELAS
+ - association
+ - autre
meta:
affichage: radio
diff --git "a/modele-social/r\303\250gles/entreprise/cessation-activit\303\251.publicodes" "b/modele-social/r\303\250gles/entreprise/cessation-activit\303\251.publicodes"
index e44a8c3772..202718f907 100644
--- "a/modele-social/r\303\250gles/entreprise/cessation-activit\303\251.publicodes"
+++ "b/modele-social/r\303\250gles/entreprise/cessation-activit\303\251.publicodes"
@@ -2,7 +2,7 @@ entreprise . en cessation d'activité:
valeur: non
entreprise . date de cessation:
- question: À quelle date comptez-vous déclarer la cessation d’activité ?
+ question: À quelle date avez-vous ou comptez-vous déclarer la cessation d’activité ?
applicable si: en cessation d'activité
par défaut: période . fin d'année
description: La date de cessation est la date à laquelle l’entreprise cessera son activité.
diff --git "a/modele-social/r\303\250gles/entreprise/entreprise.publicodes" "b/modele-social/r\303\250gles/entreprise/entreprise.publicodes"
index f5b620dc4e..b3c31ce15b 100644
--- "a/modele-social/r\303\250gles/entreprise/entreprise.publicodes"
+++ "b/modele-social/r\303\250gles/entreprise/entreprise.publicodes"
@@ -148,6 +148,70 @@ entreprise . chiffre d'affaires . BIC:
- service BIC
- vente restauration hébergement
+entreprise . chiffre d'affaires . seuil micro:
+ experimental: oui
+
+entreprise . chiffre d'affaires . seuil micro . libérale:
+ unité: €/an
+ variations:
+ - si: date >= 01/2023
+ alors: 77700 €/an
+ - sinon: 72600 €/an
+
+entreprise . chiffre d'affaires . seuil micro . total:
+ unité: €/an
+ variations:
+ - si: date >= 01/2023
+ alors: 188700 €/an
+ - sinon: 176200 €/an
+
+entreprise . chiffre d'affaires . seuil micro . dépassé:
+ experimental: oui
+ applicable si: imposition . IR
+ unité: €/an
+ une de ces conditions:
+ - entreprise . chiffre d'affaires > total
+ - entreprise . chiffre d'affaires . service > libérale
+ description: |
+ Le statut de micro-entreprise s’applique tant que le chiffre d’affaires annuel
+ (effectivement encaissé au cours de l’année civile) ne dépasse pas les seuils du
+ régime fiscal de la micro-entreprise.
+
+ En cas de dépassement **sur deux années consécutives**, l’entreprise bascule
+ automatiquement dans le régime de [l’entreprise
+ individuelle](/simulateurs/indépendant).
+
+ À la fin de la première année d’activité, le CA est proratisé par rapport à la
+ durée d’activité.
+
+ > ##### Exemple :
+ > Un contribuable crée une entreprise le 1er août et encaisse des recettes HT de
+ > `50 000 €` au cours des cinq mois d’activité de sa première année civile
+ > d’exploitation.
+ > Les recettes de cette première année civile sont ajustées *prorata temporis*
+ > pour les comparer au plafond :
+ >
+ > `50 000€ x (365/153) = 119 280 €`
+
+
+ Les charges ne sont pas déductibles pour le calcul du plafond (comme pour le
+ calcul des cotisations)
+
+
+ ### Multi-activité
+
+ Lorsqu’un entrepreneur exerce 2 activités au sein de sa micro-entreprise, le
+ seuil de chiffre d’affaires à respecter n’est pas pour autant doublé. En effet
+ l’exercice de plusieurs activités avec la même micro-entreprise n’augmente pas
+ les seuils.
+
+ références:
+ Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32353
+ Article 50-0 du Code général des impôts: https://www.legifrance.gouv.fr/affichCode.do?idSectionTA=LEGISCTA000006199553&cidTexte=LEGITEXT000006069577
+ Bofip (dépassement micro-bnc): https://bofip.impots.gouv.fr/bofip/4807-PGP.html
+ Bofip (dépassement micro-bic): https://bofip.impots.gouv.fr/bofip/1802-PGP.html
+ autoentrepreneur.urssaf.fr: https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html
+
entreprise . TVA . franchise de TVA: oui
entreprise . résultat fiscal:
@@ -178,10 +242,10 @@ entreprise . exercice:
date trop ancienne:
type: notification
sévérité: avertissement
- formule: début < 01/01/2018
+ formule: début < 01/01/2022
description:
La date saisie est trop ancienne. Le simulateur n’intègre pas les
- barèmes avant 2018.
+ barèmes avant 2022.
début:
type: date
@@ -195,10 +259,11 @@ entreprise . exercice:
durée:
titre: durée de l’exercice
- formule:
- durée:
- depuis: début
- jusqu'à: fin
+ somme:
+ - durée:
+ depuis: début
+ jusqu'à: fin
+ - 1 jour
durée maximale:
type: notification
@@ -268,6 +333,8 @@ entreprise . capital social:
question: Quele est le capital social de la société ?
unité: €
+entreprise . capital social . détenu au moins à 75 pourcents par des personnes physiques: oui
+
entreprise . salariés:
entreprise . salariés . effectif:
@@ -298,15 +365,13 @@ entreprise . salariés . effectif:
Le franchissement d’un seuil à la hausse n’est pris en compte que s’il est atteint ou dépassé pendant 5 années civiles consécutives.
une possibilité:
- choix obligatoire: oui
- possibilités:
- - moins de 5
- - moins de 11
- - moins de 20
- - moins de 50
- - moins de 150
- - moins de 250
- - plus de 250
+ - moins de 5
+ - moins de 11
+ - moins de 20
+ - moins de 50
+ - moins de 150
+ - moins de 250
+ - plus de 250
par défaut: "'moins de 5'"
diff --git "a/modele-social/r\303\250gles/entreprise/imposition.publicodes" "b/modele-social/r\303\250gles/entreprise/imposition.publicodes"
index fa69042aab..2ac192cfbb 100644
--- "a/modele-social/r\303\250gles/entreprise/imposition.publicodes"
+++ "b/modele-social/r\303\250gles/entreprise/imposition.publicodes"
@@ -1,10 +1,8 @@
entreprise . imposition:
question: Quel est le type d’imposition de votre entreprise ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - IR
- - IS
+ - IR
+ - IS
par défaut:
variations:
@@ -48,11 +46,9 @@ entreprise . imposition . IR . type de bénéfices:
question: Quel est le type de bénéfices de votre entreprise ?
par défaut: oui
une possibilité:
- choix obligatoire: oui
- possibilités:
- - BNC
- - BIC
- - BA
+ - BNC
+ - BIC
+ - BA
références:
'Impôt sur le revenu : BIC, BNC, comment ça marche ?': https://www.economie.gouv.fr/entreprises/impot-sur-revenu-bic-bnc
@@ -126,94 +122,53 @@ entreprise . imposition . IS:
Quelles sont les entreprises soumises à l’impôt sur les sociétés (IS) ?: "https://bpifrance-creation.fr/encyclopedie/fiscalite-lentreprise/generalites/is-impot-societes"
Comparaison IR/IS: "https://bpifrance-creation.fr/encyclopedie/fiscalite-lentreprise/generalites/imposition-benefices#:~:text=Principe%20de%20l%27imp%C3%B4t%20sur%20les%20soci%C3%A9t%C3%A9s,-Une%20distinction%20est&text=Les%20entreprises%20dont%20le%20chiffre,%2C%20et%2025%20%25%20au%20del%C3%A0."
+entreprise . imposition . IS . total:
+ somme:
+ - montant
+ - contribution sociale
+
entreprise . imposition . IS . montant:
unité: €/an
- applicable si: prorata temporis > 0
variations:
- - si: exercice . début >= 01/2022
+ - si: éligible taux réduit
alors:
barème:
assiette: résultat imposable
multiplicateur: prorata temporis
tranches:
- taux: taux réduit
- plafond: plafond taux réduit 1
+ plafond: 42500 €/an
- taux: taux normal
- - si: exercice . début >= 01/2021
- alors:
- barème:
- assiette: résultat imposable
- multiplicateur: prorata temporis
- tranches:
- - taux: taux réduit
- plafond: plafond taux réduit 1
- - taux: 26.5%
- - si: exercice . début >= 01/2020
- alors:
- barème:
- assiette: résultat imposable
- multiplicateur: prorata temporis
- tranches:
- - taux: taux réduit
- plafond: plafond taux réduit 1
- - taux: 28%
- - si: exercice . début >= 01/01/2019
- alors:
- barème:
- assiette: résultat imposable
- multiplicateur: prorata temporis
- tranches:
- - taux: taux réduit
- plafond: plafond taux réduit 1
- - taux: 28%
- plafond: plafond taux réduit 2
- - taux: 31%
- - si: exercice . début >= 01/01/2018
- alors:
- barème:
- assiette: résultat imposable
- multiplicateur: prorata temporis
- tranches:
- - taux: taux réduit
- plafond: plafond taux réduit 1
- - taux: 28%
- plafond: plafond taux réduit 2
- - taux: 33.3333%
+ - sinon: résultat imposable * taux normal
arrondi: oui
-
références:
Fiche impots.gouv.fr: https://www.impots.gouv.fr/portail/international-professionnel/impot-sur-les-societes
Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F23575
avec:
- plafond taux réduit 1:
- applicable si: éligible taux réduit
- variations:
- - si: exercice . début >= 01/2022
- alors: 42500 €/an
- - sinon: 38120 €/an
-
- plafond taux réduit 2:
- applicable si: éligible taux réduit
- valeur: 500000 €/an
- taux normal: 25%
taux réduit: 15%
+ taux normal: 25%
entreprise . imposition . IS . éligible taux réduit:
par défaut: oui
toutes ces conditions:
- - chiffre d'affaires <= 7630 k€/an * prorata temporis
- - capital détenu au moins à 75 pourcents par des personnes physiques
-
- avec:
- capital détenu au moins à 75 pourcents par des personnes physiques: oui
+ - chiffre d'affaires <= 10000 k€/an * prorata temporis
+ - capital social . détenu au moins à 75 pourcents par des personnes physiques
entreprise . imposition . IS . prorata temporis:
description: |
- Lorsque la durée de l’exercice n’est pas égale à un an, on pro-ratise les
+ Lorsque la durée de l’exercice n’est pas égale à un an, on proratise les
plafonds utilisés dans le barème de l’impôt sur les sociétés.
unité: '%'
formule: exercice . durée / 1 an
+ note: |
+ Ici on rapporte le nombre de jours de l’exercice à 1 an. En réalité on devrait
+ rapporter le nombre de mois de l’exercice à 12 mois, et pour les mois
+ incomplets, rapporter le nombre de jours à 30 jours.
+
+ > **Exemple pour un exercice du 1er janvier au 15 octobre :**
+ > - prorata temporis théorique = (9 mois complets + (15 jours / 30)) / 12 = 79,17 %
+ > - prorata temporis calculé = 288 jours / 365 = 78,90 %
# TODO: c'est un peu plus subtil que cela : « En cas d’exercice ouvert ou
# arrêté en cours de mois calendaire, le nombre de jours résiduels concourt à
# la détermination du rapport pour un montant égal au rapport existant entre
@@ -222,6 +177,10 @@ entreprise . imposition . IS . prorata temporis:
Bofip: https://bofip.impots.gouv.fr/bofip/2065-PGP.html/identifiant%3DBOI-IS-LIQ-20-20-20180801
entreprise . imposition . IS . contribution sociale:
+ # NB: n'est pas utilisé car le seul usage de entreprise . imposition . IS . total
+ # est dans le simulateur de l'impôt sur les sociétés, et celui-ci ne demande pas
+ # le chiffres d'affaires et dans ce cas c'est la valeur par défaut de la non
+ # applicabilité qui est utilisée.
description: |
La contribution sociale sur les bénéfices est un impôt distinct de l’impôt sur
les sociétés. Son montant n’est pas déductible des résultats.
@@ -229,13 +188,21 @@ entreprise . imposition . IS . contribution sociale:
L’assiette bénéficie d’un abattement important, et seules les entreprises
réalisant plus de 2,3 millions d’euros de bénéfices sont concernées par cette
contribution.
+ non applicable si:
+ par défaut: oui
+ toutes ces conditions:
+ - non applicable si: entreprise . catégorie juridique . EI
+ valeur: chiffre d'affaires <= 7630 k€/an * prorata temporis
+ - capital social . détenu au moins à 75 pourcents par des personnes physiques
formule:
produit:
- valeur: IS . montant
- abattement: 763000 €/an * prorata temporis
+ abattement: 763 k€/an * prorata temporis
- 3.3%
+ arrondi: oui
références:
- Bofip: https://bofip.impots.gouv.fr/bofip/3492-PGP.html/identifiant%3DBOI-IS-AUT-10-20-20130318
+ Contribution sociale sur l'impôt sur les sociétés: https://entreprendre.service-public.fr/vosdroits/F23510
+ Contribution sociale sur l'IS - Modalités de calcul : https://bofip.impots.gouv.fr/bofip/3492-PGP.html/identifiant%3DBOI-IS-AUT-10-20-20130318
entreprise . imposition . IS . résultat imposable:
titre: Résultat de l’exercice
@@ -246,12 +213,14 @@ entreprise . imposition . IS . résultat imposable:
entreprise . imposition . IS . information sur le report de déficit:
type: notification
formule: résultat imposable < 0 €/an
- # TODO: Support des références dans les notifications
description: |
Les déficits subits au cours d’un exercice peuvent être reportés sur les
exercices suivants (report en avant), ou sur le seul exercice précédent (report
en arrière).
+ [Voir la fiche « Impôt sur les sociétés (IS) : report de déficit » sur
+ Entreprendre.Service-Public.fr](https://entreprendre.service-public.fr/vosdroits/F23628)
+
entreprise . imposition . IS . résultat net:
résumé: Après déduction des charges et de l’impôt sur les société
somme:
@@ -264,23 +233,15 @@ entreprise . imposition . IS . résultat net:
entreprise . imposition . régime:
question: Quel est le régime d’imposition de votre entreprise ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - micro-entreprise
- - déclaration contrôlée
- - réel simplifié
- - réel normal
+ - micro-entreprise
+ - déclaration contrôlée
+ - réel simplifié
+ - réel normal
références:
Les différents régimes d’imposition: https://www.economie.gouv.fr/entreprises/les-differents-regimes-dimposition
entreprise . imposition . régime . micro-entreprise:
titre: micro-fiscal
- non applicable si: entreprise . imposition . IS
- valeur: régime = 'micro-entreprise'
- par défaut: non
-
- rend non applicable: dirigeant . indépendant . cotisations facultatives
- question: Avez-vous opté pour le régime micro-fiscal ?
description: |
Avec le régime micro-fiscal, les charges déductibles sont estimées forfaitairement, en fonction d’un pourcentage du chiffre d’affaires. Ce
pourcentage dépend du type d’activité : 71% pour les activités de vente, restauration et hébergement (location de meublé de tourisme
@@ -288,6 +249,11 @@ entreprise . imposition . régime . micro-entreprise:
Cette option permet de simplifier votre comptabilité et peut être avantageuse en termes de revenu imposable dans le cas où vos charges de
fonctionnement sont faibles.
+ non applicable si: entreprise . imposition . IS
+ valeur: régime = 'micro-entreprise'
+ question: Avez-vous opté pour le régime micro-fiscal ?
+ par défaut: non
+ rend non applicable: dirigeant . indépendant . cotisations facultatives
références:
Régime micro-fiscal: https://entreprendre.service-public.fr/vosdroits/F23267
"Changement de régime d’imposition : comment ça marche ?": https://www.economie.gouv.fr/entreprises/changement-regime-imposition
@@ -335,74 +301,6 @@ entreprise . imposition . régime . micro-entreprise . alerte seuil dépassés:
est dépassé. [En savoir
plus](/documentation/entreprise/chiffre-d'affaires/seuil-micro/dépassé)
-entreprise . chiffre d'affaires . seuil micro:
- experimental: oui
-
-entreprise . chiffre d'affaires . seuil micro . libérale:
- unité: €/an
- variations:
- - si: date >= 01/2023
- alors: 77700 €/an
- - sinon: 72600 €/an
-
-entreprise . chiffre d'affaires . seuil micro . total:
- unité: €/an
- variations:
- - si: date >= 01/2023
- alors: 188700 €/an
- - sinon: 176200 €/an
-
-entreprise . chiffre d'affaires . seuil micro . dépassé:
- experimental: oui
- applicable si: imposition . IR
- description: |
- Le statut de micro-entreprise s’applique tant que le chiffre d’affaires annuel
- (effectivement encaissé au cours de l’année civile) ne dépasse pas les seuils du
- régime fiscal de la micro-entreprise.
-
- En cas de dépassement **sur deux années consécutives**, l’entreprise bascule
- automatiquement dans le régime de [l’entreprise
- individuelle](/simulateurs/indépendant).
-
- À la fin de la première année d’activité, le CA est proratisé par rapport à la
- durée d’activité.
-
- > ##### Exemple :
- > Un contribuable crée une entreprise le 1er août et encaisse des recettes HT de
- > `50 000 €` au cours des cinq mois d’activité de sa première année civile
- > d’exploitation.
- > Les recettes de cette première année civile sont ajustées *prorata temporis*
- > pour les comparer au plafond :
- >
- > `50 000€ x (365/153) = 119 280 €`
-
-
- Les charges ne sont pas déductibles pour le calcul du plafond (comme pour le
- calcul des cotisations)
-
-
- ### Multi-activité
-
- Lorsqu’un entrepreneur exerce 2 activités au sein de sa micro-entreprise, le
- seuil de chiffre d’affaires à respecter n’est pas pour autant doublé. En effet
- l’exercice de plusieurs activités avec la même micro-entreprise n’augmente pas
- les seuils.
-
- références:
- Fiche service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32353
- Article 50-0 du Code général des impôts: https://www.legifrance.gouv.fr/affichCode.do?idSectionTA=LEGISCTA000006199553&cidTexte=LEGITEXT000006069577
- Bofip (dépassement micro-bnc): https://bofip.impots.gouv.fr/bofip/4807-PGP.html
- Bofip (dépassement micro-bic): https://bofip.impots.gouv.fr/bofip/1802-PGP.html
- autoentrepreneur.urssaf.fr: https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html
- unité: €/an
- # TODO: les seuils micro sont dupliqués à plusieurs endroits (artiste-auteur .
- # revenus . BNC . contrôle micro-bnc, tableau de la comparaison de régime,
- # économie collaborative). Il faudrait référencer la même valeur partout où
- # elle est utilisée.
- une de ces conditions:
- - entreprise . chiffre d'affaires > total
- - entreprise . chiffre d'affaires . service > libérale
-
entreprise . imposition . régime . déclaration contrôlée:
applicable si: IR . type de bénéfices . BNC
valeur: régime = 'déclaration contrôlée'
diff --git "a/modele-social/r\303\250gles/imp\303\264t.publicodes" "b/modele-social/r\303\250gles/imp\303\264t.publicodes"
index c12c173bde..170d484e6e 100644
--- "a/modele-social/r\303\250gles/imp\303\264t.publicodes"
+++ "b/modele-social/r\303\250gles/imp\303\264t.publicodes"
@@ -46,13 +46,10 @@ impôt . méthode de calcul:
# où l’on aura a calculer l’impot avec plusieurs sources de revenu
non applicable si: dirigeant . auto-entrepreneur . impôt . versement libératoire > 0
par défaut: par défaut
- valeur:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - taux neutre
- - taux personnalisé
- - barème standard
+ une possibilité:
+ - taux neutre
+ - taux personnalisé
+ - barème standard
références:
Différence taux neutre / personnalisé: https://www.impots.gouv.fr/particulier/questions/comment-gerer-mon-prelevement-la-source
Calcul du taux d’imposition: https://www.economie.gouv.fr/files/files/ESPACE-EVENEMENTIEL/PAS/Fiche_de_calcul_taux_simplifiee.pdf
@@ -834,13 +831,10 @@ impôt . foyer fiscal:
impôt . foyer fiscal . situation de famille:
question: Quelle est votre situation familiale ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - célibataire
- - couple
- - veuf
+ une possibilité:
+ - célibataire
+ - couple
+ - veuf
par défaut: "'célibataire'"
impôt . foyer fiscal . situation de famille . célibataire:
diff --git "a/modele-social/r\303\250gles/salari\303\251/contrat.publicodes" "b/modele-social/r\303\250gles/salari\303\251/contrat.publicodes"
index bb1400e247..3af5cf3407 100644
--- "a/modele-social/r\303\250gles/salari\303\251/contrat.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/contrat.publicodes"
@@ -2,13 +2,11 @@ salarié . contrat:
icônes: 📄
question: De quel type de contrat s'agit-il ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - CDI
- - CDD
- - apprentissage
- - professionnalisation
- - stage
+ - CDI
+ - CDD
+ - apprentissage
+ - professionnalisation
+ - stage
par défaut: "'CDI'"
description: |
Le contrat qui lie une entreprise (via son établissement) à un individu, qui est alors son salarié.
@@ -135,10 +133,8 @@ salarié . contrat . apprentissage . diplôme préparé:
déprécié: oui # Était utile pour une aide à l'embauche de 2019
question: Quel type de diplôme l'apprenti prépare-t-il ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - niveau bac ou moins
- - niveau supérieur au bac
+ - niveau bac ou moins
+ - niveau supérieur au bac
par défaut: "'niveau supérieur au bac'"
avec:
@@ -159,14 +155,11 @@ salarié . contrat . apprentissage . diplôme préparé:
salarié . contrat . apprentissage . ancienneté:
déprécié: oui # Était utile pour une aide à l'embauche de 2019
question: Depuis combien de temps l'apprenti est-il employé ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - moins d'un an
- - moins de deux ans
- - moins de trois ans
- - moins de quatre ans
+ une possibilité:
+ - moins d'un an
+ - moins de deux ans
+ - moins de trois ans
+ - moins de quatre ans
par défaut: "'moins d'un an'"
salarié . contrat . apprentissage . ancienneté . moins d'un an:
@@ -214,23 +207,55 @@ salarié . contrat . apprentissage . assiette réduite apprentissage:
salarié . contrat . apprentissage . assiette réduite apprentissage . CSG-CRDS:
description:
- Pour les contrats conclus depuis le 1er mars 2025, les apprentis bénéficient
- d’une exonération de CSG et de CRDS jusqu’à 50% du Smic.
+ Pour les contrats conclus **depuis le 1er mars 2025**, les apprentis bénéficient
+ d’une exonération de CSG et de CRDS jusqu’à **50 % du Smic**.
+
+ Si la rémunération brute de l’apprenti est inférieure à 50 % du Smic, alors la
+ part employeur de la mutuelle (qui fait partie de l’assiette de la CSG-CRDS)
+ est également exonérée de CSG et de CRDS.
- Pour les contrats conclus avant, cette exonération est totale.
+ Pour les contrats conclus **avant le 1er mars 2025**, cette exonération est
+ totale.
références:
Embaucher un alternant en contrat d’apprentissage - les exonérations: https://www.urssaf.fr/accueil/employeur/embaucher-gerer-salaries/embaucher/contrat-apprentissage.html#ancre-les-exonerations
Contrat d’apprentissage - Quel est le salaire de l’apprenti ?: https://www.service-public.fr/particuliers/vosdroits/F2918#fiche-item-4
- remplace:
- références à: cotisations . assiette
- dans: salarié . cotisations . CSG-CRDS
+ Article L136-1-1 du Code de la sécurité sociale: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000048683400
+ remplace: cotisations . CSG-CRDS . assiette de base
variations:
- - si: date >= 03/2025
+ - si:
+ toutes ces conditions:
+ - date >= 03/2025
+ - rémunération . brut > 50% * SMIC
alors:
- valeur: cotisations . assiette
- abattement: 50% * SMIC
+ valeur: salarié . cotisations . CSG-CRDS . assiette de base
+ contexte:
+ cotisations . assiette . sans prévoyance:
+ valeur: cotisations . assiette . sans prévoyance
+ abattement: 50% * SMIC
- sinon: 0
+salarié . contrat . apprentissage . assiette réduite apprentissage . taxe sur les salaires:
+ description: |
+ La part du salaire des apprentis correspondant à 11 % du Smic n’est pas soumise
+ à la taxe sur les salaires.
+ remplace: régimes spécifiques . taxe sur les salaires . assiette
+ valeur: cotisations . CSG-CRDS . assiette de base
+ contexte:
+ salarié . cotisations . CSG-CRDS . assiette de base . assiette avant abattement:
+ valeur: salarié . cotisations . CSG-CRDS . assiette de base . assiette avant abattement
+ abattement: 11% * SMIC
+ références:
+ Article 231 bis I du Code général des impôts: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006303786/
+
+salarié . contrat . apprentissage . exonération taxe sur les salaires:
+ description: |
+ Les entreprises de 10 salariés ou moins sont exonérées de la taxe sur les
+ salaires de ses apprentis.
+ valeur: entreprise . salariés . effectif < 11
+ rend non applicable: régimes spécifiques . taxe sur les salaires
+ références:
+ Article 231 bis I du Code général des impôts: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000006303786/
+
salarié . contrat . professionnalisation . jeune de moins de 30 ans:
question: Le salarié embauché a-t-il moins de 30 ans ?
par défaut: oui
@@ -246,12 +271,11 @@ salarié . contrat . CDD . motif:
description: |
Le CDD est un contrat d'exception: son recours doit être autorisé par l'un des motifs spécifiés dans la loi.
une possibilité:
- choix obligatoire: oui # cette contrainte devrait découler de la valeur CDD en amont, c'est un fix temporaire, qui devra être levé au passage à une simulation CDI / CDD
- possibilités:
- - classique
- - contrat aidé
- - complément formation
- - issue d'apprentissage
+ # cette contrainte devrait découler de la valeur CDD en amont, c'est un fix temporaire, qui devra être levé au passage à une simulation CDI / CDD
+ - classique
+ - contrat aidé
+ - complément formation
+ - issue d'apprentissage
# les CDD d'usage "concentrent la moitié des embauches en CDD"
par défaut: "'classique . accroissement activité'"
références:
@@ -264,13 +288,11 @@ salarié . contrat . CDD . motif:
classique:
titre: motifs classiques
une possibilité:
- choix obligatoire: oui
- possibilités:
- - remplacement
- - accroissement activité
- - saisonnier
- - usage
- - mission
+ - remplacement
+ - accroissement activité
+ - saisonnier
+ - usage
+ - mission
références:
Code du travail - Article L1242-2: https://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=714D2E2B814371F4F1D5AA88472CD621.tpdila20v_1?idArticle=LEGIARTI000033024658&cidTexte=LEGITEXT000006072050&dateTexte=20170420
diff --git "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/b\303\242timent.publicodes" "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/b\303\242timent.publicodes"
index a16a2fab8b..98c723aa7f 100644
--- "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/b\303\242timent.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/b\303\242timent.publicodes"
@@ -11,13 +11,10 @@ salarié . convention collective . BTP:
salarié . convention collective . BTP . catégorie:
question: À quelle catégorie le salarié appartient-t-il ?
par défaut: "'ouvrier'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - ouvrier
- - etam
- - cadre
+ une possibilité:
+ - ouvrier
+ - etam
+ - cadre
salarié . convention collective . BTP . catégorie . ouvrier:
titre: Ouvrier
@@ -169,19 +166,16 @@ salarié . convention collective . BTP . congés intempéries:
salarié . convention collective . BTP . congés intempéries . caisse de rattachement:
question: À quelle caisse l'entreprise est-elle rattachée pour le versement de
la cotisation congés intempéries ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - idf
- - nord ouest
- - grand ouest
- - centre ouest
- - centre
- - grand est
- - rhône alpes auvergne
- - méditerranée
- - sud ouest
+ une possibilité:
+ - idf
+ - nord ouest
+ - grand ouest
+ - centre ouest
+ - centre
+ - grand est
+ - rhône alpes auvergne
+ - méditerranée
+ - sud ouest
par défaut: "'idf'"
avec:
diff --git "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/spectacle-vivant.publicodes" "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/spectacle-vivant.publicodes"
index c5fe52e3da..6f3004a114 100644
--- "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/spectacle-vivant.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/spectacle-vivant.publicodes"
@@ -62,12 +62,9 @@ salarié . régimes spécifiques . intermittents du spectacle:
- convention collective . SVP
question: A quel statut d'intermittent est rattaché l'employé ?
par défaut: "'technicien'"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - technicien
- - artiste
+ une possibilité:
+ - technicien
+ - artiste
salarié . régimes spécifiques . intermittents du spectacle . formation professionnelle:
remplace: formation professionnelle
diff --git "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/sport.publicodes" "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/sport.publicodes"
index 1b70d77d1b..c2e5225b1d 100644
--- "a/modele-social/r\303\250gles/salari\303\251/conventions-collectives/sport.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/conventions-collectives/sport.publicodes"
@@ -77,13 +77,10 @@ salarié . convention collective . sport . cotisations . régime frais de santé
salarié . convention collective . sport . cotisations . régime frais de santé . option:
question: Quel option a été choisi pour le régime des frais de santé ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - R1
- - R2
- - R3
+ une possibilité:
+ - R1
+ - R2
+ - R3
par défaut: "'R1'"
références:
unamens.fr: https://www.umanens.fr/reglementation-couverture-sante-obligatoire/ccn-sport
diff --git "a/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes" "b/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes"
index 0d4057160e..64104078dc 100644
--- "a/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/cotisations.publicodes"
@@ -517,7 +517,7 @@ salarié . cotisations . CSG-CRDS . assiette de base:
avec:
assiette abattue:
barème:
- assiette: cotisations . assiette . sans prévoyance # - rémunération . revenus de remplacement
+ assiette: assiette avant abattement
multiplicateur: temps de travail . plafond sécurité sociale
# c'est en fait un abattement de 1,75% sur la partie en-dessous de 4 fois le plafond
@@ -525,6 +525,8 @@ salarié . cotisations . CSG-CRDS . assiette de base:
- taux: 98.25%
plafond: 4
- taux: 100%
+ assiette avant abattement:
+ valeur: cotisations . assiette . sans prévoyance # - rémunération . revenus de remplacement
salarié . cotisations . CSG-CRDS . assiette revenu remplacements:
# TODO : déplacer dans une section "revenu de remplacement"
diff --git "a/modele-social/r\303\250gles/salari\303\251/exon\303\251rations/lodeom.publicodes" "b/modele-social/r\303\250gles/salari\303\251/exon\303\251rations/lodeom.publicodes"
index 162e4f87ca..ba8d4d80a7 100644
--- "a/modele-social/r\303\250gles/salari\303\251/exon\303\251rations/lodeom.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/exon\303\251rations/lodeom.publicodes"
@@ -1,11 +1,8 @@
salarié . cotisations . exonérations . zones lodeom:
question: Quelle est votre localisation ?
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - zone un
- - zone deux
+ une possibilité:
+ - zone un
+ - zone deux
avec:
zone un:
valeur: zones lodeom = 'zone un'
@@ -83,11 +80,9 @@ salarié . cotisations . exonérations . lodeom . zone un:
barèmes:
question: Quel barème envisagez-vous ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - compétitivité
- - compétitivité renforcée
- - innovation et croissance
+ - compétitivité
+ - compétitivité renforcée
+ - innovation et croissance
avec:
compétitivité:
valeur: barèmes = 'compétitivité'
@@ -307,11 +302,9 @@ salarié . cotisations . exonérations . lodeom . zone deux:
barèmes:
question: Quel barème souhaitez-vous appliquer ?
une possibilité:
- choix obligatoire: oui
- possibilités:
- - moins de 11 salariés
- - sectoriel
- - renforcé
+ - moins de 11 salariés
+ - sectoriel
+ - renforcé
avec:
moins de 11 salariés:
valeur: barèmes = 'moins de 11 salariés'
diff --git "a/modele-social/r\303\250gles/salari\303\251/salari\303\251.publicodes" "b/modele-social/r\303\250gles/salari\303\251/salari\303\251.publicodes"
index 89f431d578..cde77bc949 100644
--- "a/modele-social/r\303\250gles/salari\303\251/salari\303\251.publicodes"
+++ "b/modele-social/r\303\250gles/salari\303\251/salari\303\251.publicodes"
@@ -11,18 +11,15 @@ salarié . convention collective:
experimental: oui
par défaut: "'droit commun'"
question: "Quelle convention collective est applicable à l'entreprise ?"
- formule:
- une possibilité:
- choix obligatoire: oui
- possibilités:
- - HCR
- - BTP
- - sport
- - SVP
- - compta
- - optique
- - autre
- - droit commun
+ une possibilité:
+ - HCR
+ - BTP
+ - sport
+ - SVP
+ - compta
+ - optique
+ - autre
+ - droit commun
avec:
avertissement convention collective:
@@ -252,16 +249,13 @@ salarié . régimes spécifiques . DFS . profession:
question:
Quelle est la profession du salarié pour l'application de la déduction
forfaitaire spécifique ?
- formule:
- une possibilité:
- possibilités:
- - journaliste
- - ouvrier du bâtiment
- - artiste musicien
- - artiste dramatique
- - pilote de ligne ou personnel navigant
- - voyageur, représentant et placier
- choix obligatoire: oui
+ une possibilité:
+ - journaliste
+ - ouvrier du bâtiment
+ - artiste musicien
+ - artiste dramatique
+ - pilote de ligne ou personnel navigant
+ - voyageur, représentant et placier
avec:
artiste dramatique:
@@ -339,15 +333,12 @@ salarié . régimes spécifiques . taux réduits . profession:
question:
Quelle est la profession du salarié pour l'application de taux de cotisations
réduits ?
- formule:
- une possibilité:
- possibilités:
- - VRP multicarte
- - journaliste
- - profession médicale
- - artiste du spectacle
- - mannequin
- choix obligatoire: oui
+ une possibilité:
+ - VRP multicarte
+ - journaliste
+ - profession médicale
+ - artiste du spectacle
+ - mannequin
avec:
VRP multicarte:
@@ -518,7 +509,7 @@ salarié . régimes spécifiques . taxe sur les salaires:
distribuent.
barème:
assiette:
- valeur: cotisations . CSG-CRDS . assiette de base
+ valeur: assiette
abattement: rémunération . net . imposable . exonération prime d'impatriation
tranches:
- taux: 4.25%
@@ -547,6 +538,9 @@ salarié . régimes spécifiques . taxe sur les salaires:
Taxe sur les salaires: https://www.service-public.fr/professionnels-entreprises/vosdroits/F22576
Exonérations spécifiques à la taxe sur les salaires: http://bofip.impots.gouv.fr/bofip/6691-PGP.html
+ avec:
+ assiette: cotisations . CSG-CRDS . assiette de base
+
salarié . coût total employeur:
identifiant court: cout-total-employeur
synonymes: [salaire chargé]
diff --git a/site/mon-entreprise.fr/images/og/default.png b/site/mon-entreprise.fr/images/og/default.png
new file mode 100644
index 0000000000..61f4c9dedc
Binary files /dev/null and b/site/mon-entreprise.fr/images/og/default.png differ
diff --git a/site/mon-entreprise.fr/images/og/simulateur-salarie-en.png b/site/mon-entreprise.fr/images/og/simulateur-salarie-en.png
new file mode 100644
index 0000000000..82c7c5c4bc
Binary files /dev/null and b/site/mon-entreprise.fr/images/og/simulateur-salarie-en.png differ
diff --git a/site/mon-entreprise.fr/images/og/simulateur-salarie-fr.png b/site/mon-entreprise.fr/images/og/simulateur-salarie-fr.png
new file mode 100644
index 0000000000..ef7949b1cf
Binary files /dev/null and b/site/mon-entreprise.fr/images/og/simulateur-salarie-fr.png differ
diff --git a/site/public/images/og/default.png b/site/public/images/og/default.png
new file mode 100644
index 0000000000..61f4c9dedc
Binary files /dev/null and b/site/public/images/og/default.png differ
diff --git a/site/public/images/og/simulateur-salarie-en.png b/site/public/images/og/simulateur-salarie-en.png
new file mode 100644
index 0000000000..82c7c5c4bc
Binary files /dev/null and b/site/public/images/og/simulateur-salarie-en.png differ
diff --git a/site/public/images/og/simulateur-salarie-fr.png b/site/public/images/og/simulateur-salarie-fr.png
new file mode 100644
index 0000000000..ef7949b1cf
Binary files /dev/null and b/site/public/images/og/simulateur-salarie-fr.png differ
diff --git a/site/scripts/i18n/utils.js b/site/scripts/i18n/utils.js
index 87b0e4df41..421869a1c4 100644
--- a/site/scripts/i18n/utils.js
+++ b/site/scripts/i18n/utils.js
@@ -198,9 +198,12 @@ export const fetchTranslation = async (text) => {
'Content-Type': 'application/x-www-form-urlencoded',
},
body: new URLSearchParams({
- text: text.replace(/{{/g, '').replace(/}}/g, ''),
+ text: text
+ .replace(/ > /g, ' >
')
+ .replace(/{{/g, '')
+ .replace(/}}/g, ''),
tag_handling: 'xml',
- ignore_tags: 'keep',
+ ignore_tags: 'var,quote',
source_lang: 'FR',
target_lang: 'EN',
}),
@@ -213,8 +216,9 @@ export const fetchTranslation = async (text) => {
try {
const { translations } = await response.json()
const translation = translations[0].text
- .replace(//g, '{{')
- .replace(/<\/keep>/g, '}}')
+ .replace(//g, '{{')
+ .replace(/<\/var>/g, '}}')
+ .replace(/ > <\/quote>/g, ' > ')
console.log(
`✅ Deepl translation succeeded for:\n\t${text}\n\t${translation}\n`
)
diff --git a/site/source/components/EngineValue/Condition.tsx b/site/source/components/EngineValue/Condition.tsx
index 7389ebdbfd..531b53882c 100644
--- a/site/source/components/EngineValue/Condition.tsx
+++ b/site/source/components/EngineValue/Condition.tsx
@@ -1,16 +1,36 @@
import { useEngine } from '../utils/EngineContext'
import { ConditionProps } from './types'
+/**
+ * Utilisation :
+ *
+ *
+ * { children }
+ *
+ * Les enfants seront rendus si l'expression est vraie.
+ * Exemple : 0}>
+ *
+ *
+ * { children }
+ *
+ * Les enfants seront rendus si l'expression est fausse.
+ * Exemple : 0}>
+ * Cet exemple est équivalent à
+ * mais cette propriété est utile lorsque la condition d'affichage est du type
+ * "toujours sauf toutes ces conditions" qui se traduit en Publicodes par
+ * "toutes ces conditions" != oui
+ */
export function Condition({
expression,
children,
engine: engineFromProps,
contexte = {},
+ non = false,
}: ConditionProps) {
const defaultEngine = useEngine()
const engine = engineFromProps ?? defaultEngine
const nodeValue = engine.evaluate({
- '!=': [expression, 'non'],
+ '!=': [expression, non ? 'oui' : 'non'],
contexte,
}).nodeValue
diff --git a/site/source/components/EngineValue/types.ts b/site/source/components/EngineValue/types.ts
index 6c89779642..6219d39abb 100644
--- a/site/source/components/EngineValue/types.ts
+++ b/site/source/components/EngineValue/types.ts
@@ -20,4 +20,5 @@ export type ConditionProps = {
children: React.ReactNode
engine?: Engine
contexte?: Contexte
+ non?: boolean
}
diff --git "a/site/source/components/R\303\251ductionDeCotisations/MonthOptions.tsx" "b/site/source/components/R\303\251ductionDeCotisations/MonthOptions.tsx"
index 26932304ae..9d105bd566 100644
--- "a/site/source/components/R\303\251ductionDeCotisations/MonthOptions.tsx"
+++ "b/site/source/components/R\303\251ductionDeCotisations/MonthOptions.tsx"
@@ -14,9 +14,6 @@ import {
QuantitéField,
SmallBody,
Strong,
- StyledInput,
- StyledInputContainer,
- StyledSuffix,
Ul,
} from '@/design-system'
import { euros } from '@/domaine/Montant'
@@ -332,17 +329,12 @@ const StyledLabel = styled(SmallBody)`
// - Créer un composant dédié dans le design-system
// - Utiliser des sélecteurs CSS génériques
const NumberFieldContainer = styled.div`
- max-width: 120px;
- ${StyledInputContainer} {
- border-color: ${({ theme }) => theme.colors.bases.primary[800]};
- background-color: 'rgba(255, 255, 255, 10%)';
- &:focus-within {
- outline-color: ${({ theme }) => theme.colors.bases.primary[700]};
- }
- ${StyledInput}, ${StyledSuffix} {
- color: ${({ theme }) => theme.colors.bases.primary[800]}!important;
- }
- }
+ max-width: 120px;
+
+ /* ✅ Personnalisation sans dépendre des composants internes */
+ --textfield-border-color: ${({ theme }) => theme.colors.bases.primary[800]};
+ --textfield-text-color: ${({ theme }) => theme.colors.bases.primary[800]};
+ --textfield-focus-outline-color: ${({ theme }) => theme.colors.bases.primary[700]};
`
const StyledSmallBody = styled(SmallBody)`
font-weight: bold;
diff --git a/site/source/components/conversation/getOnePossibilityOptions.tsx b/site/source/components/conversation/getOnePossibilityOptions.tsx
index 07bdb9e72c..861fa3ad12 100644
--- a/site/source/components/conversation/getOnePossibilityOptions.tsx
+++ b/site/source/components/conversation/getOnePossibilityOptions.tsx
@@ -37,9 +37,13 @@ export const getOnePossibilityOptions = (
nodeKind: 'reference'
})[]
)
- .filter(
- (explanation) => engine.evaluate(explanation).nodeValue !== null
- )
+ .filter((explanation) => {
+ return (
+ engine.evaluate(explanation).nodeValue !== null &&
+ engine.evaluate({ 'est applicable': explanation.dottedName })
+ .nodeValue
+ )
+ })
.map(({ dottedName }) =>
getOnePossibilityOptions(engine, dottedName as DottedName)
),
diff --git "a/site/source/components/simulationExplanation/Ind\303\251pendantCotisationsForfaitaires.tsx" "b/site/source/components/simulationExplanation/Ind\303\251pendantCotisationsForfaitaires.tsx"
index a75aedd120..77c603bb64 100644
--- "a/site/source/components/simulationExplanation/Ind\303\251pendantCotisationsForfaitaires.tsx"
+++ "b/site/source/components/simulationExplanation/Ind\303\251pendantCotisationsForfaitaires.tsx"
@@ -5,6 +5,8 @@ import { FromBottom } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Button, H3, Intro, Markdown, Message, Spacing } from '@/design-system'
+import { Condition } from '../EngineValue/Condition'
+
export default function CotisationsForfaitaires() {
const rule = useEngine().getRule(
'dirigeant . indépendant . cotisations et contributions . début activité'
@@ -14,12 +16,25 @@ export default function CotisationsForfaitaires() {
{rule.title}
-
-
- Montant des cotisations forfaitaires :{' '}
-
-
-
+ {/* TODO: supprimer cette Condition quand
+ https://github.com/betagouv/mon-entreprise/issues/4035
+ sera résolu */}
+
+
+
+ Cotisations forfaitaires :{' '}
+
+
+
+
{rule.rawNode.description ?? ''}
{rule.rawNode.références && (
diff --git "a/site/source/components/simulationExplanation/Ind\303\251pendantExplanation.tsx" "b/site/source/components/simulationExplanation/Ind\303\251pendantExplanation.tsx"
index 78adb1f486..08ad0072d8 100644
--- "a/site/source/components/simulationExplanation/Ind\303\251pendantExplanation.tsx"
+++ "b/site/source/components/simulationExplanation/Ind\303\251pendantExplanation.tsx"
@@ -10,8 +10,6 @@ import StackedBarChart from '@/components/StackedBarChart'
import { H3 } from '@/design-system'
import { Condition } from '../EngineValue/Condition'
-import { WhenApplicable } from '../EngineValue/WhenApplicable'
-import { WhenNotApplicable } from '../EngineValue/WhenNotApplicable'
import CotisationsForfaitaires from './IndépendantCotisationsForfaitaires'
import CotisationsRégularisation from './IndépendantCotisationsRégularisation'
import InstitutionsPartenaires from './InstitutionsPartenaires'
@@ -23,12 +21,15 @@ export default function IndépendantExplanation() {
return (
<>
-
+ {/* TODO: remplacer Condition par When(Not)Applicable quand
+ https://github.com/betagouv/mon-entreprise/issues/4035
+ sera résolu */}
+
-
-
+
+
-
+
diff --git a/site/source/components/utils/Meta.tsx b/site/source/components/utils/Meta.tsx
index 9e12855106..d9fc3528d6 100644
--- a/site/source/components/utils/Meta.tsx
+++ b/site/source/components/utils/Meta.tsx
@@ -23,6 +23,20 @@ export default function Meta({
ogImage,
}: PropType) {
const { t, i18n } = useTranslation()
+ const siteUrl = 'https://mon-entreprise.urssaf.fr'
+ const defaultImage = '/images/og/default.png'
+
+ const relativeOgImage =
+ ogImage ??
+ (i18n.language === 'fr'
+ ? defaultImage
+ : defaultImage)
+
+ const absoluteOgImage = relativeOgImage.startsWith('http')
+ ? relativeOgImage
+ : `${siteUrl}${relativeOgImage}`
+
+
return (
-
+
+
+
+
+
+
+
+
)
}
diff --git a/site/source/design-system/molecules/field/TextField.tsx b/site/source/design-system/molecules/field/TextField.tsx
index 46ff30b9a7..9e8eed73b2 100644
--- a/site/source/design-system/molecules/field/TextField.tsx
+++ b/site/source/design-system/molecules/field/TextField.tsx
@@ -143,12 +143,11 @@ export const StyledInputContainer = styled.div<{
}>`
border-radius: ${({ theme }) => theme.box.borderRadius};
border: ${({ theme }) =>
- `${theme.box.borderWidth} solid
- ${
+ `${theme.box.borderWidth} solid var(--textfield-border-color, ${
theme.darkMode
? theme.colors.extended.grey[100]
: theme.colors.extended.grey[700]
- }`};
+ })`};
outline: transparent solid 1px;
position: relative;
display: flex;
@@ -163,12 +162,15 @@ export const StyledInputContainer = styled.div<{
outline-color: ${({ theme, $hasError }) =>
$hasError
? theme.colors.extended.error[400]
- : theme.darkMode
- ? theme.colors.bases.primary[100]
- : theme.colors.bases.primary[700]};
+ : `var(--textfield-focus-outline-color, ${
+ theme.darkMode
+ ? theme.colors.bases.primary[100]
+ : theme.colors.bases.primary[700]
+ })`};
outline-offset: ${({ theme }) => theme.spacings.xxs};
outline-width: ${({ theme }) => theme.spacings.xxs};
}
+
&:focus-within ${StyledLabel} {
color: ${({ theme }) => theme.colors.bases.primary[800]};
background-color: transparent;
@@ -225,9 +227,11 @@ export const StyledInputContainer = styled.div<{
theme.spacings.xs
}) ${theme.spacings.sm} ${theme.spacings.xs}`};
color: ${({ theme }) =>
- theme.darkMode
- ? theme.colors.extended.grey[100]
- : theme.colors.extended.grey[800]};
+ `var(--textfield-text-color, ${
+ theme.darkMode
+ ? theme.colors.extended.grey[100]
+ : theme.colors.extended.grey[800]
+ })`};
}
${({ $small }) =>
@@ -238,4 +242,4 @@ export const StyledInputContainer = styled.div<{
line-height: 1.25rem;
}
`}
-`
+`
\ No newline at end of file
diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml
index 369ce2da0a..3d235773f3 100644
--- a/site/source/locales/rules-en.yaml
+++ b/site/source/locales/rules-en.yaml
@@ -2508,33 +2508,33 @@ dirigeant . indépendant . PL . PAMC . assiette participation CPAM:
**income from conventional activity / (100% + average fee overrun)**.
- > **Proof:**
+ > **Proof:**
- >
+ >
- > If we take the following variables,
+ > If we take the following variables,
- > - `h+` : total fees (with overrun)
+ > - `h+` : total fees (with overrun)
- > - `h`: fees without overrun
+ > - `h`: fees without overrun
- > - `d%` : average percentage fee exceeded
+ > - `d%` : average percentage fee exceeded
- >
+ >
- > We have: `h+ = h + h * d% = h * (100% + d%)`.
+ > We have: `h+ = h + h * d% = h * (100% + d%)`.
- > And: `total fees - total excess fees = fees without excess = h`.
+ > And: `total fees - total excess fees = fees without excess = h`.
- >
+ >
- > If we replace the CPAM participation base in the formula, we obtain :
+ > If we replace the CPAM participation base in the formula, we obtain :
- 1. `income from conventional activity * h / h+` > 2.
+ > 1. `income from conventional activity * h / h+`
- 2. `income from conventional activity * h / (h * (100% + d%))` > 3.
+ > 2. `income from conventional activity * h / (h * (100% + d%))`
- > 3. `income from conventional activity / (100% + d%)`
+ > 3. `income from conventional activity / (100% + d%)`
note.fr: >
La formule donnée par l’Urssaf est la suivante :
@@ -2606,9 +2606,9 @@ dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentist
The formula for calculating the overrun rate is as follows:
- > Urssaf rate = (overruns - amounts reimbursed CMU lump sums) / (amounts reimbursable > procedures + amounts reimbursed CMU lump sums).
+ > Urssaf rate = (overruns - reimbursed CMU lump-sum amounts) / (reimbursable
- > reimbursable procedures + reimbursed CMU lump-sum amounts)
+ > procedures amounts + reimbursed CMU lump-sum amounts)
description.fr: >
Le « taux Urssaf » permet de calculer la part de votre cotisation
d’assurance
@@ -2655,6 +2655,10 @@ dirigeant . indépendant . PL . PAMC . maladie:
titre.en: '[automatic] disease (after CPAM participation)'
titre.fr: maladie (après participation CPAM)
dirigeant . indépendant . PL . PAMC . maladie . contribution additionnelle:
+ avec:
+ taux:
+ titre.en: '[automatic] rate'
+ titre.fr: taux
titre.en: '[automatic] supplementary contribution'
titre.fr: contribution additionnelle
dirigeant . indépendant . PL . PAMC . maladie . participation CPAM:
@@ -3322,7 +3326,7 @@ dirigeant . indépendant . conjoint collaborateur:
#### Advantages of the status of collaborating spouse
- > This status of collaborating spouse is flexible, simple (few administrative formalities) and of low cost for the company for a complete social protection. It can be chosen even if the spouse has an activity outside the company.
+ > This status of collaborating spouse is flexible, simple (few administrative formalities) and of low cost for the company for a complete social protection. It can be chosen even if the spouse has an activity outside the company.
description.fr: >
En tant que collaborateur, le conjoint d'un indépendant verse des
cotisations en matière de retraite et d'invalidité-décès et bénéficie en
@@ -3625,18 +3629,18 @@ dirigeant . indépendant . cotisations et contributions . début activité:
titre.en: '[automatic] sickness lump sum'
titre.fr: assiette forfaitaire maladie
description.en: >
- [automatic] When you start your business, your **professional income** is
- not known.
+ [automatic] When you start your business, as your professional income is not
+ known, your
- contributions for the first two years are calculated on a **lump-sum basis**.
+ contributions** for the first two years are calculated on a **lump-sum basis**.
- are calculated on a **lump-sum basis**.
+ calculated on a **lump-sum basis**.
These contributions will be adjusted and regularized on the basis of your actual income
- for the year in question. If your income is higher than the fixed base used to calculate
+ for the year in question. If your income exceeds the flat-rate base used to calculate
taken into account for calculating provisional contributions, you will be
@@ -3650,11 +3654,12 @@ dirigeant . indépendant . cotisations et contributions . début activité:
and **plan your cash flow** accordingly.
description.fr: >
- Lorsque vous commencez votre activité, vos **revenus professionnels**
+ Lorsque vous commencez votre activité, vos revenus professionnels n’étant
+ pas
- n’étant pas connus, **les cotisations et contributions des deux premières
+ connus, les **cotisations et contributions** des deux premières années sont
- années sont calculées sur une **base forfaitaire**.
+ calculées sur une **base forfaitaire**.
@@ -4782,7 +4787,7 @@ déclaration charge sociales . nature de l'activité . artisanale:
and know-how.
- > For example: works, activities related to building, repair of products supplied by the client, hairdressers...
+ > For example: works, activities related to building, repair of products supplied by the client, hairdressers...
- The company must not employ more than 10 employees (the activity becomes commercial beyond that).
@@ -5258,23 +5263,23 @@ déclaration revenus PAMC . dividendes:
children.
- > For information, dividends are subject to :
+ > For information, dividends are subject to :
- > - social security contributions for the portion exceeding 10% of the share capital
+ > - social security contributions for the portion exceeding 10% of the share capital
- > share capital contributed by the majority shareholder, share premiums and
+ > share capital contributed by the majority shareholder, share premiums and
- > and contributions to shareholders' current accounts (average over the year).
+ > and contributions to shareholders' current accounts (average over the year).
- > contributed by the manager);
+ > contributed by the manager);
- > - social security contributions (17.2%) for the portion below 10% not subject to
+ > - social security contributions (17.2%) for the portion below 10% not subject to
- > contributions;
+ > contributions;
- > - income tax on all dividends (i.e. 12.8%, i.e.
+ > - income tax on all dividends (i.e. 12.8%, i.e.
- > progressive scale after a 40% allowance under certain conditions).
+ > progressive scale after a 40% allowance under certain conditions).
description.fr: >
Indiquez la part des dividendes perçus supérieure à 10% du montant du
capital
@@ -5930,13 +5935,13 @@ entreprise . activité . nature:
bodies (order, chamber or union).
- > Examples of regulated professions: architect, lawyer, nurse, doctor...
+ > Examples of regulated professions: architect, lawyer, nurse, doctor...
These are other people who practice a science or art, and whose intellectual activity plays the main role. Their income must represent remuneration for personal work, without any subordinate relationship, while engaging their technical and moral responsibility.
- > Examples of non-regulated professions: developer, historian, urban planner...
+ > Examples of non-regulated professions: developer, historian, urban planner...
description.fr: >
Certaines professions libérales ont été classées dans le domaine libéral
par la loi et leur titre est protégé. Leurs membres doivent respecter
@@ -6112,13 +6117,13 @@ entreprise . activités:
bodies (order, chamber or union).
- > Examples of regulated professions: architect, lawyer, nurse, doctor...
+ > Examples of regulated professions: architect, lawyer, nurse, doctor...
These are other people who practice a science or art, and whose intellectual activity plays the main role. Their income must represent remuneration for personal work, without any subordinate relationship, while engaging their technical and moral responsibility.
- > Examples of non-regulated professions: developer, historian, urban planner...
+ > Examples of non-regulated professions: developer, historian, urban planner...
description.fr: >
Certaines professions libérales ont été classées dans le domaine libéral
par la loi et leur titre est protégé. Leurs membres doivent respecter
@@ -6295,10 +6300,10 @@ entreprise . activités . saisonnière:
you contribute on your actual income.
- You can request the application of this exemption from your space in urssaf: Messaging > New message > Another subject (information, documents or supporting documents) > Request information on my account or a summary > Make a request or an additional request "
+ You can request the application of this exemption from your space in urssaf: Messaging > New message > Another subject (information, documents or supporting documents) > Request information on my account or a summary > Make a request or an additional request "
- > Please note: the minimum base for the basic pension guarantees the validation of 3 quarters of old-age insurance.
+ > Please note: the minimum base for the basic pension guarantees the validation of 3 quarters of old-age insurance.
description.fr: >
Les professionnels exerçant une activité saisonnière peuvent bénéficier
@@ -6395,6 +6400,9 @@ entreprise . capital social:
question.fr: Quele est le capital social de la société ?
titre.en: '[automatic] Share capital'
titre.fr: Capital social
+entreprise . capital social . détenu au moins à 75 pourcents par des personnes physiques:
+ titre.en: '[automatic] at least 75 percent owned by individuals'
+ titre.fr: détenu au moins à 75 pourcents par des personnes physiques
entreprise . catégorie juridique:
note.en: '[automatic] We base ourselves here on the legal categories defined by INSEE'
note.fr: On se base ici sur les catégories juridiques définies par l'INSEE
@@ -6679,7 +6687,7 @@ entreprise . charges:
expense with no fixed asset.
- > Note**: social contributions to the self-employed workers' scheme and the deductible
+ > **Note**: social contributions to the self-employed workers' scheme and the deductible
and the deductible portion of CSG are deductible from taxable income and income subject to
@@ -6890,21 +6898,21 @@ entreprise . chiffre d'affaires . seuil micro . dépassé:
duration of activity.
- > ##### Example:
+ > ##### Example:
- > A taxpayer sets up a business on August 1 and receives revenues of
+ > A taxpayer sets up a business on August 1 and receives revenues of
- > 50,000 over the five months of the first calendar year.
+ > 50,000 over the five months of the first calendar year.
- > of operations.
+ > of operations.
- > Revenues for this first calendar year are adjusted *prorata temporis* to > compare them with the ceiling
+ > Revenues for this first calendar year are adjusted *prorata temporis* to
- > to compare with the ceiling:
+ > compare them with the ceiling:
- >
+ >
- > `50 000€ x (365/153) = 119 280 €`
+ > `50 000€ x (365/153) = 119 280 €`
@@ -7005,7 +7013,7 @@ entreprise . chiffre d'affaires . vente restauration hébergement:
or accommodation
- > Note: for furnished rentals, only classified furnished tourist accommodation and bed and breakfast are included in this category; other furnished rentals are included in the "BIC services" category.
+ > Note: for furnished rentals, only classified furnished tourist accommodation and bed and breakfast are included in this category; other furnished rentals are included in the "BIC services" category.
This income is taxable in the BIC category.
@@ -7193,8 +7201,10 @@ entreprise . date de cessation:
description.fr:
La date de cessation est la date à laquelle l’entreprise cessera
son activité.
- question.en: '[automatic] When do you plan to declare your cessation of activity?'
- question.fr: À quelle date comptez-vous déclarer la cessation d’activité ?
+ question.en:
+ '[automatic] On what date have you or do you intend to declare the
+ cessation of activity?'
+ question.fr: À quelle date avez-vous ou comptez-vous déclarer la cessation d’activité ?
titre.en: '[automatic] termination date'
titre.fr: date de cessation
entreprise . date de création:
@@ -7273,10 +7283,10 @@ entreprise . exercice:
date trop ancienne:
description.en:
'[automatic] The date entered is too old. The simulator does not
- include scales prior to 2018.'
+ integrate scales before 2022.'
description.fr:
La date saisie est trop ancienne. Le simulateur n’intègre pas
- les barèmes avant 2018.
+ les barèmes avant 2022.
titre.en: '[automatic] date too old'
titre.fr: date trop ancienne
durée:
@@ -7520,22 +7530,26 @@ entreprise . imposition . IS . information sur le report de déficit:
(carry forward), or to the previous year only (carry back).
back).
+
+
+ [See the fact sheet "Impôt sur les sociétés (IS) : report de déficit" on
+
+ Entreprendre.Service-Public.fr](https://entreprendre.service-public.fr/vosdroits/F23628)
description.fr: >
Les déficits subits au cours d’un exercice peuvent être reportés sur les
exercices suivants (report en avant), ou sur le seul exercice précédent (report
en arrière).
+
+
+ [Voir la fiche « Impôt sur les sociétés (IS) : report de déficit » sur
+
+ Entreprendre.Service-Public.fr](https://entreprendre.service-public.fr/vosdroits/F23628)
titre.en: '[automatic] information on deficit carryover'
titre.fr: information sur le report de déficit
entreprise . imposition . IS . montant:
avec:
- plafond taux réduit 1:
- titre.en: '[automatic] ceiling reduced rate 1'
- titre.fr: plafond taux réduit 1
- plafond taux réduit 2:
- titre.en: '[automatic] ceiling reduced rate 2'
- titre.fr: plafond taux réduit 2
taux normal:
titre.en: '[automatic] standard rate'
titre.fr: taux normal
@@ -7551,8 +7565,33 @@ entreprise . imposition . IS . prorata temporis:
the ceilings used in the corporate income tax scale.
description.fr: |
- Lorsque la durée de l’exercice n’est pas égale à un an, on pro-ratise les
+ Lorsque la durée de l’exercice n’est pas égale à un an, on proratise les
plafonds utilisés dans le barème de l’impôt sur les sociétés.
+ note.en: >
+ [automatic] Here, the number of days in the financial year is divided by 1
+ year. In reality, we should divide the number of months in the financial
+ year by 12, and for incomplete months, divide the number of days by 30.
+
+
+ > **Example for a financial year running from January 1 to October 15:**
+
+ > - theoretical prorata temporis = (9 full months + (15 days / 30)) / 12 = 79.17
+
+ > - calculated prorata temporis = 288 days / 365 = 78.90
+ note.fr: >
+ Ici on rapporte le nombre de jours de l’exercice à 1 an. En réalité on
+ devrait
+
+ rapporter le nombre de mois de l’exercice à 12 mois, et pour les mois
+
+ incomplets, rapporter le nombre de jours à 30 jours.
+
+
+ > **Exemple pour un exercice du 1er janvier au 15 octobre :**
+
+ > - prorata temporis théorique = (9 mois complets + (15 jours / 30)) / 12 = 79,17 %
+
+ > - prorata temporis calculé = 288 jours / 365 = 78,90 %
titre.en: '[automatic] prorata temporis'
titre.fr: prorata temporis
entreprise . imposition . IS . résultat imposable:
@@ -7565,11 +7604,10 @@ entreprise . imposition . IS . résultat net:
résumé.fr: Après déduction des charges et de l’impôt sur les société
titre.en: '[automatic] net result'
titre.fr: résultat net
+entreprise . imposition . IS . total:
+ titre.en: '[automatic] total'
+ titre.fr: total
entreprise . imposition . IS . éligible taux réduit:
- avec:
- capital détenu au moins à 75 pourcents par des personnes physiques:
- titre.en: '[automatic] capital at least 75 percent owned by individuals'
- titre.fr: capital détenu au moins à 75 pourcents par des personnes physiques
titre.en: '[automatic] eligible for reduced rate'
titre.fr: éligible taux réduit
entreprise . imposition . régime:
@@ -9048,21 +9086,21 @@ protection sociale . retraite . base:
benefit from the **full rate**.
- > **Detailed calculation:** 50% x average annual income x pension pro rata
+ > **Detailed calculation:** 50% x average annual income x pension pro rata
- >
+ >
- > With :
+ > With :
- > - _average annual income_ = average of salaries and income contributed by
+ > - _average annual income_ = average of salaries and income contributed by
- > self-employed during the 25 most advantageous years of your
+ > self-employed during the 25 most advantageous years of your
- > career ;
+ > career ;
- > - _prorata de pension_ = length of insurance with the Assurance retraite /q
+ > - _prorata de pension_ = length of insurance with the Assurance retraite /q
- > insurance period to obtain a full pension.
+ > insurance period to obtain a full pension.
description.fr: >
Le montant de votre pension pour la retraite de base est calculé à partir de
la
@@ -9450,7 +9488,7 @@ protection sociale . retraite . complémentaire:
supplementary pension contributions.
- > This amount may vary between now and your retirement, depending on
+ > This amount may vary between now and your retirement, depending on
point value. Nevertheless, it provides an order of magnitude
@@ -9820,7 +9858,7 @@ salarié . activité partielle . indemnisation entreprise:
The employer may receive partial activity allowance up to a maximum of 1,000 hours per year and per employee**.
- > Warning**: in the event of fraud or false declaration, the employer is liable to 2 years' imprisonment and a €30,000 fine.
+ > Warning**: in the event of fraud or false declaration, the employer is liable to 2 years' imprisonment and a €30,000 fine.
description.fr: >-
Si l'employeur a obtenu l'autorisation administrative, il peut déposer une
**demande d'indemnisation** qui lui permet d'obtenir le **remboursement
@@ -10201,7 +10239,7 @@ salarié . contrat . CDD . motif:
titre.fr: Accroissement temporaire d'activité
mission:
description.en: >
- [automatic] > Also known as a defined purpose contract.
+ [automatic] > Also known as a defined purpose contract.
Recruitment of engineers and managers, within the meaning of the collective agreements, with a view to achieving a defined objective when an extended branch agreement or, failing that, a company agreement so provides and defines :
@@ -10385,17 +10423,34 @@ salarié . contrat . apprentissage . assiette réduite apprentissage:
titre.fr: assiette réduite apprentissage
salarié . contrat . apprentissage . assiette réduite apprentissage . CSG-CRDS:
description.en: >-
- [automatic] For contracts signed on or after March 1, 2025, apprentices are
- exempt from CSG and CRDS up to 50% of the minimum wage.
+ [automatic] For contracts signed **since March 1, 2025**, apprentices are
+ exempt from CSG and CRDS up to **50% of Smic**.
+
+ If the apprentice's gross remuneration is less than 50% of the minimum wage, the employer's share of the health insurance fund (which forms part of the CSG-CRDS base) is also exempt from CSG and CRDS.
- For contracts signed before, this exemption is total.
+ For contracts signed **before March 1, 2025**, this exemption is total.
description.fr: >-
- Pour les contrats conclus depuis le 1er mars 2025, les apprentis bénéficient
- d’une exonération de CSG et de CRDS jusqu’à 50% du Smic.
+ Pour les contrats conclus **depuis le 1er mars 2025**, les apprentis
+ bénéficient d’une exonération de CSG et de CRDS jusqu’à **50 % du Smic**.
- Pour les contrats conclus avant, cette exonération est totale.
+ Si la rémunération brute de l’apprenti est inférieure à 50 % du Smic, alors la part employeur de la mutuelle (qui fait partie de l’assiette de la CSG-CRDS) est également exonérée de CSG et de CRDS.
+
+ Pour les contrats conclus **avant le 1er mars 2025**, cette exonération est totale.
titre.en: '[automatic] CSG-CRDS'
titre.fr: CSG-CRDS
+salarié . contrat . apprentissage . assiette réduite apprentissage . taxe sur les salaires:
+ description.en: >
+ [automatic] The portion of an apprentice's salary corresponding to 11% of
+ the minimum wage is not subject to payroll tax.
+
+ payroll tax.
+ description.fr: >
+ La part du salaire des apprentis correspondant à 11 % du Smic n’est pas
+ soumise
+
+ à la taxe sur les salaires.
+ titre.en: '[automatic] payroll tax'
+ titre.fr: taxe sur les salaires
salarié . contrat . apprentissage . diplôme:
titre.en: '[automatic] Diploma prepared'
titre.fr: Diplôme préparé
@@ -10439,6 +10494,17 @@ salarié . contrat . apprentissage . diplôme préparé:
question.fr: Quel type de diplôme l'apprenti prépare-t-il ?
titre.en: '[automatic] prepared diploma'
titre.fr: diplôme préparé
+salarié . contrat . apprentissage . exonération taxe sur les salaires:
+ description.en: >
+ [automatic] Companies with 10 or fewer employees are exempt from payroll tax
+ on
+
+ apprentices.
+ description.fr: |
+ Les entreprises de 10 salariés ou moins sont exonérées de la taxe sur les
+ salaires de ses apprentis.
+ titre.en: '[automatic] payroll tax exemption'
+ titre.fr: exonération taxe sur les salaires
salarié . contrat . date d'embauche:
question.en: "[automatic] What is the employee's date of hire?"
question.fr: Quelle est la date d'embauche du salarié ?
@@ -11256,6 +11322,9 @@ salarié . cotisations . CSG-CRDS . assiette de base:
assiette abattue:
titre.en: '[automatic] '
titre.fr: assiette abattue
+ assiette avant abattement:
+ titre.en: '[automatic] base before allowance'
+ titre.fr: assiette avant abattement
titre.en: '[automatic] base plate'
titre.fr: assiette de base
salarié . cotisations . CSG-CRDS . assiette heures supplémentaires et complémentaires défiscalisées:
@@ -12654,7 +12723,7 @@ salarié . cotisations . formation professionnelle:
collective agreements.
- > For example, for the Syntec collective agreement, a supplement of 0.025% is mandatory.
+ > For example, for the Syntec collective agreement, a supplement of 0.025% is mandatory.
The rate is increased to 1.3% for temporary work companies. In addition, if the threshold of 10 employees is crossed, specific rates apply in order to limit the increase of the contribution to professional training:
@@ -12987,7 +13056,7 @@ salarié . coût total employeur:
[automatic] The total cost of hiring an employee, including deferred
assistance in addition to the remuneration components.
- > It is therefore also a measure of the value that the employee brings to the company: the employer is willing to pay this amount in return for the work provided.
+ > It is therefore also a measure of the value that the employee brings to the company: the employer is willing to pay this amount in return for the work provided.
To this total cost, you must not forget to add the expenses specific to your company: finding the right candidate, workstation, equipment, initial training, occupational medicine, etc.
@@ -13732,6 +13801,10 @@ salarié . régimes spécifiques . taux réduits . réduction de taux:
titre.en: '[automatic] rate reduction'
titre.fr: réduction de taux
salarié . régimes spécifiques . taxe sur les salaires:
+ avec:
+ assiette:
+ titre.en: '[automatic] plate'
+ titre.fr: assiette
description.en: '[automatic] The payroll tax in France is a progressive tax
created in 1948 that some employers must pay on the salaries they
distribute.'
@@ -14241,9 +14314,9 @@ salarié . rémunération . frais professionnels:
- the employer provides free transport for the employee.
- > Good to know
+ > Good to know
- > No proof of fuel costs is required when the employer's contribution does not exceed €200 for fuel costs, or €500 for fuel costs for electric, plug-in hybrid or hydrogen vehicles.
+ > No proof of fuel costs is required when the employer's contribution does not exceed €200 for fuel costs, or €500 for fuel costs for electric, plug-in hybrid or hydrogen vehicles.
description.fr: >
Une prise en charge par l’employeur, sous forme de « prime de
transport », des frais de carburant et d’alimentation des
diff --git a/site/source/locales/ui-en.yaml b/site/source/locales/ui-en.yaml
index d84fc62509..87a6257c9f 100644
--- a/site/source/locales/ui-en.yaml
+++ b/site/source/locales/ui-en.yaml
@@ -1776,7 +1776,7 @@ pages:
included in the simulator.5>
title: Corporate tax simulator
indépendant:
- cotisations-forfaitaires: "Flat-rate contributions: "
+ cotisations-forfaitaires: "Flat-rate contributions : "
meta:
description: Calculating net income after tax and contributions from sales and
vice versa
diff --git a/site/source/locales/ui-fr.yaml b/site/source/locales/ui-fr.yaml
index a968a97f57..76c3948095 100644
--- a/site/source/locales/ui-fr.yaml
+++ b/site/source/locales/ui-fr.yaml
@@ -1885,7 +1885,7 @@ pages:
pas intégrés dans le simulateur.5>
title: Simulateur d’impôt sur les sociétés
indépendant:
- cotisations-forfaitaires: "Montant des cotisations forfaitaires : "
+ cotisations-forfaitaires: "Cotisations forfaitaires : "
meta:
description: Calcul du revenu net après impôt et des cotisations à partir du
chiffre d'affaires et inversement
diff --git a/site/source/pages/simulateurs/impot-societe/index.tsx b/site/source/pages/simulateurs/impot-societe/index.tsx
index 58ca5a210f..bb5396b979 100644
--- a/site/source/pages/simulateurs/impot-societe/index.tsx
+++ b/site/source/pages/simulateurs/impot-societe/index.tsx
@@ -139,7 +139,7 @@ function Explanations() {
diff --git a/site/source/pages/simulateurs/impot-societe/simulationConfig.ts b/site/source/pages/simulateurs/impot-societe/simulationConfig.ts
index 45311f60f9..436aee2596 100644
--- a/site/source/pages/simulateurs/impot-societe/simulationConfig.ts
+++ b/site/source/pages/simulateurs/impot-societe/simulationConfig.ts
@@ -6,7 +6,6 @@ const ISSimulationConfig: SimulationConfig = {
salarié: 'non',
'entreprise . catégorie juridique': "''",
'entreprise . imposition': "'IS'",
- 'entreprise . imposition . IS . éligible taux réduit': 'oui',
'entreprise . TVA . franchise de TVA': 'non',
},
}
diff --git a/site/test/modele-social/entreprise/imposition.test.ts b/site/test/modele-social/entreprise/imposition.test.ts
new file mode 100644
index 0000000000..908a4292d4
--- /dev/null
+++ b/site/test/modele-social/entreprise/imposition.test.ts
@@ -0,0 +1,113 @@
+import rules, { DottedName } from 'modele-social'
+import Engine from 'publicodes'
+import { beforeEach, describe, expect, it } from 'vitest'
+
+import ISSimulationConfig from '@/pages/simulateurs/impot-societe/simulationConfig'
+
+const situationParDéfaut = {
+ ...ISSimulationConfig.situation,
+ 'entreprise . charges': '10 k€/an',
+ 'dirigeant . rémunération . totale': 0,
+}
+
+describe('entreprise . imposition', () => {
+ let engine: Engine
+ beforeEach(() => {
+ engine = new Engine(rules)
+ })
+
+ describe('IS', () => {
+ it('calcule un impôt sur les sociétés nul en cas de déficit', () => {
+ const e = engine.setSituation({
+ ...situationParDéfaut,
+ "entreprise . chiffre d'affaires": '8 k€/an',
+ })
+
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . résultat imposable',
+ -2000
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . montant', 0)
+ expect(e).not.toBeApplicable(
+ 'entreprise . imposition . IS . contribution sociale'
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . total', 0)
+ })
+
+ it('calcule un impôt sur les sociétés pour un résultat imposable inférieur au plafond de taux réduit', () => {
+ const e = engine.setSituation({
+ ...situationParDéfaut,
+ "entreprise . chiffre d'affaires": '52.5 k€/an',
+ })
+
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . résultat imposable',
+ 42500
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . montant', 6375)
+ expect(e).not.toBeApplicable(
+ 'entreprise . imposition . IS . contribution sociale'
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . total', 6375)
+ })
+
+ it('calcule un impôt sur les sociétés pour un résultat imposable supérieur au plafond de taux réduit pour une entreprise exonérée de contribution sociale', () => {
+ const e = engine.setSituation({
+ ...situationParDéfaut,
+ "entreprise . chiffre d'affaires": '110 k€/an',
+ })
+
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . résultat imposable',
+ 100000
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . montant', 20750)
+ expect(e).not.toBeApplicable(
+ 'entreprise . imposition . IS . contribution sociale'
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . total', 20750)
+ })
+
+ it('calcule un impôt sur les sociétés pour un résultat imposable supérieur au plafond de taux réduit pour une entreprise soumise à la contribution sociale et éligible au taux réduit', () => {
+ const e = engine.setSituation({
+ ...situationParDéfaut,
+ "entreprise . chiffre d'affaires": '9010 k€/an',
+ })
+
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . résultat imposable',
+ 9000000
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . montant', 2245750)
+ expect(e).toBeApplicable(
+ 'entreprise . imposition . IS . contribution sociale'
+ )
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . contribution sociale',
+ 48931
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . total', 2294681)
+ })
+
+ it('calcule un impôt sur les sociétés pour un résultat imposable supérieur au plafond de taux réduit pour une entreprise soumise à la contribution sociale et non éligible au taux réduit', () => {
+ const e = engine.setSituation({
+ ...situationParDéfaut,
+ "entreprise . chiffre d'affaires": '10010 k€/an',
+ })
+
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . résultat imposable',
+ 10000000
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . montant', 2500000)
+ expect(e).toBeApplicable(
+ 'entreprise . imposition . IS . contribution sociale'
+ )
+ expect(e).toEvaluate(
+ 'entreprise . imposition . IS . contribution sociale',
+ 57321
+ )
+ expect(e).toEvaluate('entreprise . imposition . IS . total', 2557321)
+ })
+ })
+})
diff --git "a/site/test/regressions/__snapshots__/imp\303\264t-soci\303\251t\303\251.test.ts.snap" "b/site/test/regressions/__snapshots__/imp\303\264t-soci\303\251t\303\251.test.ts.snap"
index 2035482ebc..764058aa53 100644
--- "a/site/test/regressions/__snapshots__/imp\303\264t-soci\303\251t\303\251.test.ts.snap"
+++ "b/site/test/regressions/__snapshots__/imp\303\264t-soci\303\251t\303\251.test.ts.snap"
@@ -1,53 +1,53 @@
// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
exports[`calculate simulations-impot-société > bénéfices 1`] = `
-"entreprise . imposition . IS . contribution sociale: 0
+"entreprise . imposition . IS . contribution sociale: null
entreprise . imposition . IS . montant: 0
Notifications affichées : entreprise . imposition . IS . information sur le report de déficit"
`;
exports[`calculate simulations-impot-société > bénéfices 2`] = `
-"entreprise . imposition . IS . contribution sociale: 0
+"entreprise . imposition . IS . contribution sociale: null
entreprise . imposition . IS . montant: 0"
`;
exports[`calculate simulations-impot-société > bénéfices 3`] = `
-"entreprise . imposition . IS . contribution sociale: 0
+"entreprise . imposition . IS . contribution sociale: null
entreprise . imposition . IS . montant: 300"
`;
exports[`calculate simulations-impot-société > bénéfices 4`] = `
-"entreprise . imposition . IS . contribution sociale: 0
+"entreprise . imposition . IS . contribution sociale: null
entreprise . imposition . IS . montant: 3000"
`;
exports[`calculate simulations-impot-société > bénéfices 5`] = `
-"entreprise . imposition . IS . contribution sociale: 0
-entreprise . imposition . IS . montant: 45762"
+"entreprise . imposition . IS . contribution sociale: null
+entreprise . imposition . IS . montant: 45750"
`;
exports[`calculate simulations-impot-société > bénéfices 6`] = `
-"entreprise . imposition . IS . contribution sociale: 0
-entreprise . imposition . IS . montant: 495762"
+"entreprise . imposition . IS . contribution sociale: null
+entreprise . imposition . IS . montant: 495750"
`;
exports[`calculate simulations-impot-société > bénéfices 7`] = `
-"entreprise . imposition . IS . contribution sociale: 139750
-entreprise . imposition . IS . montant: 4995762"
+"entreprise . imposition . IS . contribution sociale: 139821
+entreprise . imposition . IS . montant: 5000000"
`;
exports[`calculate simulations-impot-société > prorata temporis 1`] = `
-"entreprise . imposition . IS . contribution sociale: 0
-entreprise . imposition . IS . montant: 245762"
+"entreprise . imposition . IS . contribution sociale: null
+entreprise . imposition . IS . montant: 245750"
`;
exports[`calculate simulations-impot-société > prorata temporis 2`] = `
-"entreprise . imposition . IS . contribution sociale: 0
-entreprise . imposition . IS . montant: 277936"
+"entreprise . imposition . IS . contribution sociale: null
+entreprise . imposition . IS . montant: 248218"
`;
exports[`calculate simulations-impot-société > prorata temporis 3`] = `
-"entreprise . imposition . IS . contribution sociale: 0
-entreprise . imposition . IS . montant: 272981"
+"entreprise . imposition . IS . contribution sociale: null
+entreprise . imposition . IS . montant: 243968"
`;
diff --git "a/site/test/regressions/__snapshots__/ind\303\251pendant.test.ts.snap" "b/site/test/regressions/__snapshots__/ind\303\251pendant.test.ts.snap"
index da9307b964..7371696563 100644
--- "a/site/test/regressions/__snapshots__/ind\303\251pendant.test.ts.snap"
+++ "b/site/test/regressions/__snapshots__/ind\303\251pendant.test.ts.snap"
@@ -124,6 +124,18 @@ impôt . montant: 592"
exports[`calculate simulations-indépendant > années précédentes 1`] = `
"dirigeant . indépendant . cotisations et contributions . début activité: null
+dirigeant . indépendant . revenu professionnel: 62367
+dirigeant . rémunération . cotisations: 27280
+dirigeant . rémunération . net: 60000
+dirigeant . rémunération . net . après impôt: 48004
+dirigeant . rémunération . totale: 87280
+entreprise . charges: 0
+entreprise . chiffre d'affaires: 87280
+impôt . montant: 11996"
+`;
+
+exports[`calculate simulations-indépendant > années précédentes 2`] = `
+"dirigeant . indépendant . cotisations et contributions . début activité: null
dirigeant . indépendant . revenu professionnel: 51974
dirigeant . rémunération . cotisations: 22810
dirigeant . rémunération . net: 50000
@@ -134,7 +146,7 @@ entreprise . chiffre d'affaires: 72810
impôt . montant: 9186"
`;
-exports[`calculate simulations-indépendant > années précédentes 2`] = `
+exports[`calculate simulations-indépendant > années précédentes 3`] = `
"dirigeant . indépendant . cotisations et contributions . début activité: null
dirigeant . indépendant . revenu professionnel: 41594
dirigeant . rémunération . cotisations: 18798
@@ -146,18 +158,6 @@ entreprise . chiffre d'affaires: 58798
impôt . montant: 6400"
`;
-exports[`calculate simulations-indépendant > années précédentes 3`] = `
-"dirigeant . indépendant . cotisations et contributions . début activité: 3548
-dirigeant . indépendant . revenu professionnel: 31191
-dirigeant . rémunération . cotisations: 13973
-dirigeant . rémunération . net: 30000
-dirigeant . rémunération . net . après impôt: 26637
-dirigeant . rémunération . totale: 43973
-entreprise . charges: 0
-entreprise . chiffre d'affaires: 43973
-impôt . montant: 3363"
-`;
-
exports[`calculate simulations-indépendant > conjoint collaborateur 1`] = `
"dirigeant . indépendant . cotisations et contributions . début activité: null
dirigeant . indépendant . revenu professionnel: 52104
diff --git "a/site/test/regressions/__snapshots__/professions-lib\303\251rales.test.ts.snap" "b/site/test/regressions/__snapshots__/professions-lib\303\251rales.test.ts.snap"
index 8abfce02d5..a48fce17d9 100644
--- "a/site/test/regressions/__snapshots__/professions-lib\303\251rales.test.ts.snap"
+++ "b/site/test/regressions/__snapshots__/professions-lib\303\251rales.test.ts.snap"
@@ -100,6 +100,17 @@ protection sociale . retraite . trimestres: 4"
`;
exports[`calculate simulations-professions-libérales > CIPAV années précédentes 1`] = `
+"dirigeant . indépendant . cotisations et contributions: 26788
+dirigeant . rémunération . net: 60000
+dirigeant . rémunération . net . après impôt: 48008
+entreprise . chiffre d'affaires: 86788
+impôt . montant: 11992
+protection sociale . retraite . base: 340
+protection sociale . retraite . complémentaire: 390
+protection sociale . retraite . trimestres: 4"
+`;
+
+exports[`calculate simulations-professions-libérales > CIPAV années précédentes 2`] = `
"dirigeant . indépendant . cotisations et contributions: 21074
dirigeant . rémunération . net: 50000
dirigeant . rémunération . net . après impôt: 40828
@@ -110,7 +121,7 @@ protection sociale . retraite . complémentaire: 291
protection sociale . retraite . trimestres: 4"
`;
-exports[`calculate simulations-professions-libérales > CIPAV années précédentes 2`] = `
+exports[`calculate simulations-professions-libérales > CIPAV années précédentes 3`] = `
"dirigeant . indépendant . cotisations et contributions: 15033
dirigeant . rémunération . net: 40000
dirigeant . rémunération . net . après impôt: 33630
@@ -121,17 +132,6 @@ protection sociale . retraite . complémentaire: 0
protection sociale . retraite . trimestres: 4"
`;
-exports[`calculate simulations-professions-libérales > CIPAV années précédentes 3`] = `
-"dirigeant . indépendant . cotisations et contributions: 11587
-dirigeant . rémunération . net: 30000
-dirigeant . rémunération . net . après impôt: 26656
-entreprise . chiffre d'affaires: 41587
-impôt . montant: 3344
-protection sociale . retraite . base: null
-protection sociale . retraite . complémentaire: 0
-protection sociale . retraite . trimestres: 0"
-`;
-
exports[`calculate simulations-professions-libérales > CIPAV conjoint collaborateur 1`] = `
"dirigeant . indépendant . cotisations et contributions: 31571
dirigeant . rémunération . net: 60000
@@ -452,11 +452,11 @@ protection sociale . retraite . trimestres: 4"
`;
exports[`calculate simulations-professions-libérales > médecin 4`] = `
-"dirigeant . indépendant . cotisations et contributions: 115354
-dirigeant . rémunération . net: 284646
-dirigeant . rémunération . net . après impôt: 173574
+"dirigeant . indépendant . cotisations et contributions: 108568
+dirigeant . rémunération . net: 291432
+dirigeant . rémunération . net . après impôt: 177102
entreprise . chiffre d'affaires: 400000
-impôt . montant: 111072
+impôt . montant: 114330
protection sociale . retraite . base: 360
protection sociale . retraite . complémentaire: 0
protection sociale . retraite . trimestres: 4"
diff --git "a/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap" "b/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap"
index 8be30d23c6..981ae24aa8 100644
--- "a/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap"
+++ "b/site/test/regressions/__snapshots__/salari\303\251.test.ts.snap"
@@ -140,8 +140,8 @@ exports[`calculate simulations-salarié > apprentissage 1`] = `
"salarié . contrat . salaire brut: 1500
salarié . contrat . salaire brut . équivalent temps plein: null
salarié . coût total employeur: 1132
-salarié . rémunération . net . payé après impôt: 1267
-salarié . rémunération . net . à payer avant impôt: 1267
+salarié . rémunération . net . payé après impôt: 1353
+salarié . rémunération . net . à payer avant impôt: 1353
Notifications affichées : salarié . rémunération . assiette de vérification du SMIC . contrôle"
`;
@@ -150,8 +150,8 @@ exports[`calculate simulations-salarié > apprentissage 2`] = `
"salarié . contrat . salaire brut: 2500
salarié . contrat . salaire brut . équivalent temps plein: null
salarié . coût total employeur: 3162
-salarié . rémunération . net . payé après impôt: 2059
-salarié . rémunération . net . à payer avant impôt: 2059"
+salarié . rémunération . net . payé après impôt: 2145
+salarié . rémunération . net . à payer avant impôt: 2145"
`;
exports[`calculate simulations-salarié > atmp 1`] = `
diff --git "a/site/test/regressions/imp\303\264t-soci\303\251t\303\251.yaml" "b/site/test/regressions/imp\303\264t-soci\303\251t\303\251.yaml"
index 0b56e87e81..5b4a88ace9 100644
--- "a/site/test/regressions/imp\303\264t-soci\303\251t\303\251.yaml"
+++ "b/site/test/regressions/imp\303\264t-soci\303\251t\303\251.yaml"
@@ -5,13 +5,14 @@ bénéfices:
- entreprise . résultat fiscal: 20000 €/an
- entreprise . résultat fiscal: 200000 €/an
- entreprise . résultat fiscal: 2000000 €/an
- - entreprise . résultat fiscal: 20000000 €/an
+ - entreprise . chiffre d'affaires: 20000000 €/an
+ entreprise . résultat fiscal: 20000000 €/an
prorata temporis:
- entreprise . résultat fiscal: 1000000 €/an
- entreprise . résultat fiscal: 1000000 €/an
- entreprise . exercice . début: 01/01/2020
- entreprise . exercice . fin: 01/06/2020
+ entreprise . exercice . début: 01/01/2024
+ entreprise . exercice . fin: 01/06/2024
- entreprise . résultat fiscal: 1000000 €/an
- entreprise . exercice . début: 01/01/2020
- entreprise . exercice . fin: 01/06/2021
+ entreprise . exercice . début: 01/01/2024
+ entreprise . exercice . fin: 01/06/2025
diff --git "a/site/test/regressions/ind\303\251pendant.yaml" "b/site/test/regressions/ind\303\251pendant.yaml"
index 216f7149a0..972724a614 100644
--- "a/site/test/regressions/ind\303\251pendant.yaml"
+++ "b/site/test/regressions/ind\303\251pendant.yaml"
@@ -9,12 +9,12 @@
- dirigeant . rémunération . net: 1000000 €/an
années précédentes:
+ - dirigeant . rémunération . net: 60000 €/an
+ date: 01/2024
- dirigeant . rémunération . net: 50000 €/an
date: 01/2023
- dirigeant . rémunération . net: 40000 €/an
date: 01/2022
- - dirigeant . rémunération . net: 30000 €/an
- date: 01/2021
inversions:
- dirigeant . rémunération . totale: 2000 €/an
diff --git "a/site/test/regressions/professions-lib\303\251rales.yaml" "b/site/test/regressions/professions-lib\303\251rales.yaml"
index 186e22637d..68dc2b8382 100644
--- "a/site/test/regressions/professions-lib\303\251rales.yaml"
+++ "b/site/test/regressions/professions-lib\303\251rales.yaml"
@@ -127,12 +127,12 @@ CIPAV ACRE:
dirigeant . rémunération . net: 50000 €/an
CIPAV années précédentes:
+ - dirigeant . rémunération . net: 60000 €/an
+ date: 01/2024
- dirigeant . rémunération . net: 50000 €/an
date: 01/2023
- dirigeant . rémunération . net: 40000 €/an
date: 01/2022
- - dirigeant . rémunération . net: 30000 €/an
- date: 01/2021
CIPAV année incomplète:
- &AnnéeIncomplete