Nouvel assistant à la déclaration de revenu des indépendants

pull/2092/head
Johan Girod 2022-03-31 15:14:24 +02:00
parent 0a4138bbb5
commit 2a7c940dc3
123 changed files with 7320 additions and 2425 deletions

View File

@ -0,0 +1,780 @@
DRI:
valeur: non
remplace:
- règle: année
par: 2021
- règle: entreprise . catégorie juridique . EI . auto-entrepreneur . défaut
par: non
DRI . cas exclus:
applicable si:
une de ces conditions:
- entreprise . catégorie juridique . EI . auto-entrepreneur
- entreprise . catégorie juridique . SAS
- entreprise . catégorie juridique . autre
- toutes ces conditions:
- entreprise . catégorie juridique . SARL
- entreprise . catégorie juridique . SARL . unipersonnelle = non
- entreprise . date de création >= 01/01/2022
- entreprise . imposition . IR . type de bénéfices . BA
variations:
- si: entreprise . imposition . IR . type de bénéfices . BA
alors:
texte: |-
### Nous ne proposons pas encore d'aide pour les entreprises agricoles
{{ désolé }}
- si: entreprise . catégorie juridique . autre
alors:
texte: |-
### Nous ne proposons pas encore d'aide pour votre type d'entreprise
{{ désolé }}
- si: entreprise . catégorie juridique . EI . auto-entrepreneur
alors:
texte: |-
### Nous ne proposons pas encore d'aide pour les auto-entrepreneurs
{{ désolé }}
{{ autres outils }}
- si: entreprise . catégorie juridique . SAS
alors:
texte: |-
### Nous ne proposons pas encore d'aide pour les dirigeants de SAS(U)
{{ désolé }}
{{ autres outils }}
- si:
une de ces conditions:
- toutes ces conditions:
- entreprise . catégorie juridique . SARL
- entreprise . catégorie juridique . SARL . unipersonnelle = non
- entreprise . catégorie juridique . SELARL
- entreprise . catégorie juridique . SELAS
alors:
texte: |-
### Nous ne proposons pas encore d'aide pour les dirigeant de {{ entreprise . catégorie juridique }}
{{ désolé }}
{{ autres outils }}
- si: entreprise . date de création >= 01/01/2022
alors:
texte: |-
### Vous avez créé votre entreprise en 2022
Les revenus de cette entreprise seront à déclarer l'année prochaine.
Vous pouvez estimer le montant de votre revenu net après impôt grâce aux
simulateurs disponibles sur ce site.
DRI . cas exclus . désolé:
texte: |-
Nous en sommes désolés. Si vous rencontrez des difficultés à remplir votre déclaration,
rapprochez-vous de votre comptable. Si vous êtes sans comptable, vous pouvez
[contacter le service des impôts](https://www.impots.gouv.fr/contacts).
DRI . cas exclus . autres outils:
texte: |-
Ce site propose d'autres outils qui pourraient vous intéresser (par exemple un
simulateur de revenu net après impôt).
DRI . nombre de déclarations:
somme:
- valeur: entreprise . durée d'activité . en fin d'année
unité: an
- 0.5
plancher: 0
arrondi: oui
unité: ''
DRI . accompagnement imposition par défaut: nombre de déclarations < 5
DRI . accompagnement imposition:
titre: Assistant en mode accompagnement
non applicable si: DRI . cas exclus
par défaut: accompagnement imposition par défaut
DRI . accompagnement imposition . type:
variations:
- si: entreprise . catégorie juridique . EI
alors:
texte: |-
Votre entreprise est une **entreprise individuelle**. {{ situation }}
- si: entreprise . catégorie juridique . SARL . unipersonnelle
alors:
texte: |-
Votre entreprise est une **EURL**. {{ situation }}
DRI . accompagnement imposition . type . situation:
variations:
- si: entreprise . imposition . IS
alors:
texte: Vous avez choisi l'option pour être imposé à l'**impôt sur les sociétés** (IS).
- si: entreprise . catégorie juridique . EI
alors:
texte: |-
Par défaut, ce type d'entreprise est imposée à l'**impôt sur le revenu** (IR),
mais il y a souvent des exceptions.
- si: entreprise . catégorie juridique . SARL . unipersonnelle
alors:
texte: |-
Par défaut, ce type d'entreprise est imposée à l'**impôt sur le revenu** (IR),
mais il y a souvent des exceptions.
DRI . accompagnement imposition . type . exceptions:
variations:
- si: entreprise . catégorie juridique . EI
alors:
texte: |-
Par défaut les entreprises individuelles sont imposées à l'impôt sur le revenu. Cependant,
votre entreprise peut être imposée à l'**impôt sur les société** si :
- c'est une **entreprise individuelle à responsabilité limitée** (EIRL),
- et **une demande a été envoyée aux impôts** pour choisir l'impôt sur les sociétés.
Ce choix a pu être fait pour vous permettre de vous verser des dividendes par exemple.
{{comptable}}
- si: entreprise . catégorie juridique . SARL . unipersonnelle
alors:
texte: |-
Par défaut les EURL sont imposées à l'impôt sur le revenu.
Votre entreprise est imposée à l'**impôt sur les sociétés** (IS) si **une demande a été envoyée aux impôts**
pour choisir l'impôt sur les sociétés. Cette demande a pu avoir lieu lors de la création ou après.
> Il est assez fréquent que les EURL choisissent l'option de l'impôt sur les sociétés. Ce choix permet
de se verser des dividendes par exemple.
{{comptable}}
DRI . comptable:
texte: En cas de doutes, **demandez à votre comptable**.
DRI . accompagnement imposition . bénéfice:
texte: |-
L'activité principale de votre entreprise est
« **{{ entreprise . activité principale }}** ».
{{situation}}
DRI . accompagnement imposition . bénéfice . situation:
variations:
- si:
toutes ces conditions:
- entreprise . imposition . IR . type de bénéfices . BIC et BNC possibles
- entreprise . imposition . IR . type de bénéfices . BNC
alors:
texte: En général les **bénéfices** de cette activité sont de type **non commerciaux** (BNC), mais il peut y avoir des exceptions.
- si:
toutes ces conditions:
- entreprise . imposition . IR . type de bénéfices . BIC et BNC possibles
- entreprise . imposition . IR . type de bénéfices . BIC
alors:
texte: Dans le cas de votre entreprise, les bénéfices sont de type **industriel et commerciaux** (BIC).
- si: entreprise . imposition . IR . type de bénéfices . BIC
alors:
texte: Les **bénéfices** de ce type d'activité sont de type **industriel et commerciaux** (BIC)
- si: entreprise . imposition . IR . type de bénéfices . BNC
alors:
texte: Les **bénéfices** de cette activité sont de type **non commerciaux** (BNC)
DRI . accompagnement imposition . bénéfice . explications:
texte: |-
La déclaration de revenus contient **trois sections principales** pour déclarer les
bénéfices de votre activité :
- les bénéfices de type **industriels et commerciaux** (BIC)
- les bénéfices de type **non commerciaux** (BNC)
- les bénéfices de type **agricoles** (BA)
Dans votre cas, vous **remplirez la section {{ entreprise . imposition . IR . type de bénéfices}}**
pour déclarer les bénéfices (ou déficits) de votre entreprise.
À noter : le type de bénéfice change la façon dont le comptable doit gérer l'entreprise. Par
exemple, cela détermine s'il doit utiliser une comptabilité de trésorerie ou d'engagement et quelle
liasse fiscale il doit remplir.
DRI . accompagnement imposition . bénéfice . exceptions:
applicable si: entreprise . imposition . IR . type de bénéfices . BIC et BNC possibles
texte: |-
Les bénéfices de votre activité peuvent être de type **industriels et commerciaux** (BIC) si :
- la majeure partie de votre activité consiste en la **vente de bien**,
- ou vous créez dans le but de **reproduire et vendre** votre création (par exemple, un photographe d'illustration qui prend des photos pour le compte de clients).
{{comptable}}
DRI . accompagnement imposition . régime memento fiscal:
question: |-
Dans la section « **vos obligations fiscales** »,
quel est le « **régime d'imposition** » inscrit sur la première ligne ?
une possibilité:
choix obligatoire: oui
possibilités:
- RSI
- RN
- DECC
- SPECIAL
- MICROE
DRI . accompagnement imposition . régime memento fiscal . RSI:
non applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: RSI - Réel simplifié d'imposition
valeur: régime memento fiscal = 'RSI'
remplace:
règle: entreprise . imposition . régime
par: "'réel simplifié'"
DRI . accompagnement imposition . régime memento fiscal . RN:
non applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: RN - Réel normal
valeur: régime memento fiscal = 'RN'
remplace:
règle: entreprise . imposition . régime
par: "'réel normal'"
DRI . accompagnement imposition . régime memento fiscal . DECC:
applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: DECC - Régime de la déclaration contrôlée
valeur: régime memento fiscal = 'DECC'
remplace:
règle: entreprise . imposition . régime
par: "'déclaration contrôlée'"
DRI . accompagnement imposition . régime memento fiscal . SPECIAL:
applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: SPECIAL - Régime spécial des bénéfices non commerciaux
description: Le régime spécial correspond au **régime de la micro-entreprise** pour les bénéfices de type non commerciaux (BNC)
valeur: régime memento fiscal = 'SPECIAL'
remplace:
règle: entreprise . imposition . régime
par: "'micro-entreprise'"
DRI . accompagnement imposition . régime memento fiscal . MICROE:
non applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: MICROE - Régime des micro-entreprises
valeur: régime memento fiscal = 'MICROE'
remplace:
règle: entreprise . imposition . régime
par: "'micro-entreprise'"
DRI . accompagnement imposition . régime:
applicable si:
une de ces conditions:
- entreprise . imposition . régime . réel normal
- entreprise . imposition . régime . réel simplifié
- entreprise . imposition . régime . déclaration contrôlée
- entreprise . imposition . régime . micro-entreprise
variations:
- si: entreprise . imposition . régime . réel normal
alors:
texte: Votre entreprise est imposée au **régime réel normal** (RN).
- si: entreprise . imposition . régime . réel simplifié
alors:
texte: Votre entreprise est imposée au **régime réel simplifié** (RSI).
- si: entreprise . imposition . régime . déclaration contrôlée
alors:
texte: Votre entreprise est imposée au **régime de la déclaration contrôlée**.
- si: entreprise . imposition . régime . micro-entreprise
alors:
texte: Votre entreprise est imposée au régime de la **micro-entreprise**.
DRI . accompagnement imposition . explications:
texte: |-
Votre régime d'imposition change le niveau de détail demandé lors du remplissage des obligations
comptables.
{{ situation }}
DRI . accompagnement imposition . explications . situation:
variations:
- si: entreprise . imposition . régime . micro-entreprise
alors:
texte:
Avec le régime de la micro-entreprise, vous n'avez pas à détailler les dépenses de votre
entreprise. Le bénéfice imposable est calculé en prenant un **pourcentage du chiffre d'affaires**.
C'est ce qu'on appelle l'**abattement forfaitaire**.
- si: entreprise . imposition . régime . réel normal
alors:
texte: |-
Avec le régime réel normal, vous aurez à fournir un bilan comptable complet, qu'il vous faudra déclarer avec un logiciel comptable spécifique (vous ne pourrez pas déclarer le résultat de l'entreprise directement sur impot.gouv.fr)
Il est donc très fortement conseillé d'avoir un comptable.
- si: entreprise . imposition . régime . réel simplifié
alors:
texte: Avec le régime réel simplifié, vous devrez déposer un bilan comptable simplifié. Il est donc conseillé d'avoir un comptable.
- si: entreprise . imposition . régime . déclaration contrôlée
alors:
texte: Avec le régime de la déclaration contrôlée, vous devrez tenir une comptabilité complète, et établir les comptes annuels en fin d'année. Il est donc conseillé d'avoir un comptable.
DRI . liasse:
valeur: oui
applicable si:
une de ces conditions:
- réel simplifié
- réel normal
- déclaration contrôlée
DRI . liasse . réel simplifié:
applicable si: entreprise . imposition . régime . réel simplifié
valeur: oui
title: Liasse fiscale du régime réel simplifié
meta:
formulaire: Formulaire 2033-SD
DRI . liasse . réel simplifié . Déductions:
applicable si: entreprise . imposition . IR
meta:
section: oui
DRI . liasse . réel simplifié . c342:
unité:
meta:
facultatif: oui
applicable si: entreprise . imposition . IR
titre: '342'
résumé: Déductions
DRI . liasse . réel simplifié . résultat:
applicable si: entreprise . imposition . IR
titre: Résultat fiscal après imputation des déficits
meta:
section: oui
DRI . liasse . réel simplifié . c370:
unité:
titre: '370'
résumé: Bénéfice
applicable si: entreprise . imposition . IR
DRI . liasse . réel simplifié . c372:
unité:
titre: '372'
résumé: Déficit
applicable si: entreprise . imposition . IR
DRI . liasse . réel simplifié . Divers:
meta:
section: oui
DRI . liasse . réel simplifié . c381:
unité:
titre: '381'
meta:
facultatif: oui
résumé: Primes et cotisations complémentaires facultatives
DRI . liasse . réel simplifié . c326:
titre: '326'
unité:
résumé: dont montant déductible des cotisations sociales obligatoires
DRI . liasse . réel simplifié . plus-values et moins-values:
applicable si: entreprise . imposition . IR
meta:
section: oui
DRI . liasse . réel simplifié . c596:
applicable si: entreprise . imposition . IR
titre: '596'
unité:
résumé: Court terme
DRI . liasse . réel normal:
applicable si: entreprise . imposition . régime . réel normal
valeur: oui
title: Liasse fiscale du régime réel normal
meta:
formulaire: Formulaire 2052-SD et 2053-SD
DRI . liasse . déclaration contrôlée:
applicable si: entreprise . imposition . régime . déclaration contrôlée
valeur: oui
title: Déclaration contrôlée
meta:
formulaire: Formulaire 2035-SD
DRI . liasse . déclaration contrôlée . impôts et taxe:
meta:
section: oui
DRI . liasse . déclaration contrôlée . BV:
résumé: contribution sociale généralisée déductible
unité:
DRI . liasse . déclaration contrôlée . charges sociales personnelles:
meta:
section: oui
DRI . liasse . déclaration contrôlée . BT:
résumé: dont obligatoires
unité:
DRI . liasse . déclaration contrôlée . BZ:
résumé: dont cotisations facultatives Madelin
meta:
facultatif: oui
unité:
DRI . liasse . déclaration contrôlée . BU:
résumé: dont facultatives aux nouveaux plans d'épargne retraite
meta:
facultatif: oui
unité:
DRI . liasse . déclaration contrôlée . excedents:
meta:
section: oui
DRI . liasse . déclaration contrôlée . CB:
résumé: Plus-value à court terme
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CE:
résumé: Total
unité:
DRI . liasse . déclaration contrôlée . insuffisance:
meta:
section: oui
DRI . liasse . déclaration contrôlée . CK:
résumé: Moins-value à court terme
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . divers à déduire:
meta:
section: oui
DRI . liasse . déclaration contrôlée . CS:
résumé: dont exonération sur le bénéfice « zone franche urbaine entrepreneur »
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CT:
résumé: dont l'abondement sur l'épargne salariale
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . AW:
unité:
résumé: dont exonération sur le bénéfice « entreprise nouvelle »
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CO:
unité:
résumé: dont exonération sur le bénéfice « jeunes artistes »
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CU:
résumé: dont exonération sur le bénéfice « jeunes entreprise innovantes »
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CQ:
résumé: dont déduction « médecin conventionnés de secteur 1 »
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CI:
résumé: dont exonération médecin « zones déficitaires en offre de soin »
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CJ:
résumé: dont aides Fonds de solidarité Covid
unité:
meta:
facultatif: oui
DRI . liasse . déclaration contrôlée . CN:
unité:
résumé: Total
DRI . liasse . OGA:
applicable si: entreprise . imposition . IR
question: Êtes-vous adhérant à une OGA ?
DRI . liasse . remboursement cotisation:
applicable si: déclaration contrôlée . BT = 0
question: Avez vous reçu un remboursement de cotisation en 2021 ?
DRI . déclaration revenus:
question: Quelle est la personne concernée ?
une possibilité:
choix obligatoire: oui
possibilités:
- déclarant 1
- déclarant 2
meta:
affichage: toggle
DRI . déclaration revenus . déclarant 1:
valeur: déclaration revenus = 'déclarant 1'
DRI . déclaration revenus . déclarant 2:
valeur: déclaration revenus = 'déclarant 2'
DRI . déclaration revenus . BNC:
applicable si: entreprise . imposition . IR . type de bénéfices . BNC
titre: Revenus non commerciaux professionnels
valeur: oui
meta:
section: oui
DRI . déclaration revenus . BNC . durée de l'exercice:
applicable si: entreprise . durée d'activité . en fin d'année < 1 an
meta:
cases: [5XI, 5YI]
valeur:
valeur: entreprise . durée d'activité . en fin d'année
unité: mois
arrondi: oui
unité: ''
DRI . déclaration revenus . BNC . régime de la déclaration contrôlée:
applicable si: entreprise . imposition . régime . déclaration contrôlée
valeur: oui
meta:
section: oui
DRI . déclaration revenus . BNC . revenus exonérés:
note: régimes zonés article 1417, IV, b du code général des impôts
meta:
cases:
défaut: [5QB, 5RB]
sans OGA: [5QH, 5RH]
non applicable si: valeur = 0
valeur:
nom: valeur
meta:
affichage: non
somme:
- valeur: liasse . déclaration contrôlée . CS
par défaut: 0
- valeur: liasse . déclaration contrôlée . AW
par défaut: 0
- valeur: liasse . déclaration contrôlée . CU
par défaut: 0
- valeur: liasse . déclaration contrôlée . CI
par défaut: 0
- valeur: liasse . déclaration contrôlée . CT
par défaut: 0
- valeur: liasse . déclaration contrôlée . CO
par défaut: 0
- valeur: liasse . déclaration contrôlée . CQ
par défaut: 0
- valeur: liasse . déclaration contrôlée . CJ
par défaut: 0
unité: ''
DRI . déclaration revenus . BNC . revenus imposables:
note: cas général
meta:
cases:
défaut: [5QC, 5RC]
sans OGA: [5QI, 5RI]
valeur: liasse . déclaration contrôlée . CE
abattement: liasse . déclaration contrôlée . CN
unité: ''
DRI . déclaration revenus . BNC . plus-values:
titre: ' '
note: dont plus-values à court terme, subventions déquipement, indemnités dassurance pour perte délément dactif
meta:
cases:
défaut: [5XP, 5YP]
sans OGA: [5XQ, 5YQ]
valeur: DRI . liasse . déclaration contrôlée . CB
unité: ''
DRI . déclaration revenus . BNC . moins-values:
titre: ''
note: dont moins-values à court terme
meta:
cases:
défaut: [5XH, 5YH]
sans OGA: [5XL, 5YL]
valeur: DRI . liasse . déclaration contrôlée . CK
unité: ''
DRI . déclaration revenus . BNC . déficits:
applicable si: liasse . déclaration contrôlée . CE < liasse . déclaration contrôlée . CN
note: y compris inventeurs non professionnels
meta:
cases:
défaut: [5QE, 5RE]
sans OGA: [5QK, 5RK]
valeur: liasse . déclaration contrôlée . CN
abattement: liasse . déclaration contrôlée . CE
unité: ''
DRI . déclaration revenus . BNC . jeunes créateurs:
titre: 'Jeunes créateurs : abattement de 50 %'
valeur: DRI . liasse . déclaration contrôlée . CO
unité: ''
meta:
cases: [5QL, 5RL]
DRI . déclaration revenus . BIC:
applicable si: entreprise . imposition . IR . type de bénéfices . BIC
titre: Revenus industriels et commerciaux professionnels
résumé: Y compris locations meublées professionnelles
valeur: oui
meta:
section: oui
DRI . déclaration revenus . BIC . durée de l'exercice:
applicable si: entreprise . durée d'activité . en fin d'année < 1 an
meta:
cases: [5DB, 5EB]
valeur:
valeur: entreprise . durée d'activité . en fin d'année
unité: mois
arrondi: oui
unité: ''
DRI . déclaration revenus . BIC . Régime du bénéfice réel:
non applicable si: entreprise . imposition . régime . micro-entreprise
valeur: oui
meta:
section: oui
DRI . déclaration revenus . BIC . revenus exonérés:
note: régimes zonés article 1417, IV, b du code général des impôts
meta:
cases:
défaut: [5KB, 5LB]
sans OGA: [5KH, 5LH]
non applicable si: valeur = 0
valeur:
nom: valeur
meta:
affichage: non
valeur: liasse . réel simplifié . c342
par défaut: 0
unité: ''
DRI . déclaration revenus . BIC . revenus imposables:
note: cas général
meta:
cases:
défaut: [5KC, 5LC]
sans OGA: [5KI, 5LI]
valeur: liasse . réel simplifié . c370
unité: ''
DRI . déclaration revenus . BIC . plus-values:
applicable si: liasse . réel simplifié . c596 > 0
titre: ' '
note: dont plus-values à court terme, subventions déquipement, indemnités dassurance pour perte délément dactif
meta:
cases:
défaut: [5DK, 5EK]
sans OGA: [5DL, 5EL]
valeur: liasse . réel simplifié . c596
unité: ''
DRI . déclaration revenus . BIC . moins-values:
applicable si: liasse . réel simplifié . c596 < 0
titre: ''
note: dont moins-values à court terme
meta:
cases:
défaut: [5DM, 5EM]
sans OGA: [5DN, 5EN]
valeur: liasse . réel simplifié . c596
unité: ''
DRI . déclaration revenus . BIC . déficits:
meta:
cases:
défaut: [5KF, 5LF]
sans OGA: [5KL, 5LL]
valeur: liasse . réel simplifié . c372
unité: ''
DRI . déclaration revenus . indépendant:
titre: Données complémentaires de la déclaration de revenu des indépendants
valeur: oui
meta:
section: oui
DRI . déclaration revenus . indépendant . cotisations sociales:
unité: ''
meta:
cases: [DSCA, DSCB]
somme:
- DRI . liasse . déclaration contrôlée . BT
- DRI . liasse . réel simplifié . c326
DRI . déclaration revenus . indépendant . cotisations facultatives:
meta:
cases: [DSEA, DSEB]
non applicable si: valeur = 0
valeur:
meta:
affichage: non
nom: valeur
unité: ''
somme:
- valeur: DRI . liasse . déclaration contrôlée . BZ
par défaut: 0
- valeur: DRI . liasse . déclaration contrôlée . BU
par défaut: 0
- valeur: DRI . liasse . réel simplifié . c381
par défaut: 0
DRI . cotisations: dirigeant . indépendant . cotisations et contributions + DRI . cotisations . régularisation
DRI . cotisations . assiette des cotisations:
rend non applicable:
- entreprise . résultat fiscal
remplace: dirigeant . indépendant . assiette des cotisations
unité:
somme:
# BNC
- déclaration revenus . BNC . revenus imposables
- valeur: déclaration revenus . BNC . plus-values
par défaut: 0
- valeur: déclaration revenus . BNC . revenus exonérés
par défaut: 0
# BIC
- déclaration revenus . BIC . revenus imposables
- valeur: déclaration revenus . BIC . plus-values
par défaut: 0
- valeur: déclaration revenus . BIC . revenus exonérés
par défaut: 0
# Cotisations facultatives
- valeur: déclaration revenus . indépendant . cotisations facultatives
par défaut: 0
abattement:
somme:
- valeur: déclaration revenus . BNC . moins-values
par défaut: 0
- valeur: déclaration revenus . BNC . déficits
par défaut: 0
DRI . cotisations . assiette CSG:
remplace: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . assiette
somme:
- assiette des cotisations
- déclaration revenus . indépendant . cotisations sociales
DRI . cotisations . régularisation:
valeur: dirigeant . indépendant . cotisations et contributions - cotisations . appelées en 2021
DRI . cotisations . appelées en 2021:
question: Quel est le montant des cotisations provisionnelles appelées en 2021 ?
unité:

View File

@ -1,4 +1,4 @@
déclaration indépendants:
déclaration charge sociales:
description: >-
Ces règles calculent les montants des charges sociales à reporter dans la déclaration de revenu
des indépendants et dans les déclaration de résultats.
@ -11,7 +11,7 @@ déclaration indépendants:
règle: entreprise . activité . mixte
par: oui
déclaration indépendants . comptabilité:
déclaration charge sociales . comptabilité:
titre: régime de la déclaration contrôlée
non applicable si: entreprise . imposition . IS
question: Quel méthode de gestion de la comptabilité est utilisée pour l'entreprise ?
@ -22,20 +22,20 @@ déclaration indépendants . comptabilité:
- engagement
- trésorerie
déclaration indépendants . comptabilité . trésorerie:
déclaration charge sociales . comptabilité . trésorerie:
rend non applicable: entreprise . imposition . IR . micro-fiscal
valeur: comptabilité = 'trésorerie'
titre: comptabilité de trésorerie
déclaration indépendants . comptabilité . engagement:
déclaration charge sociales . comptabilité . engagement:
valeur: comptabilité = 'engagement'
titre: comptabilité d'engagement
déclaration indépendants . cotisations payées:
déclaration charge sociales . cotisations payées:
remplace:
- règle: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible
par: CSG non déductible + CRDS
- règle: déclaration indépendants . résultat simple . cotisations obligatoires
- règle: déclaration charge sociales . résultat simple . cotisations obligatoires
par:
valeur: cotisations payées . total charges sociales
abattement:
@ -51,7 +51,7 @@ déclaration indépendants . cotisations payées:
non applicable si: résultat simple
valeur: oui
déclaration indépendants . cotisations payées . total charges sociales:
déclaration charge sociales . cotisations payées . total charges sociales:
remplace:
règle: dirigeant . indépendant . cotisations et contributions
par:
@ -68,7 +68,7 @@ déclaration indépendants . cotisations payées . total charges sociales:
3. Selectionnez "relevé de situation comptable"
4. Reportez dans ce champs le montant de la colonne "Cotisation", ligne "Année 2021"
déclaration indépendants . cotisations payées . CSG déductible:
déclaration charge sociales . cotisations payées . CSG déductible:
question: Quel est le montant total de CSG déductible payé cette année ?
remplace: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
unité: €/an
@ -81,7 +81,7 @@ déclaration indépendants . cotisations payées . CSG déductible:
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant déductible CSG" (dernière ligne)
déclaration indépendants . cotisations payées . CSG non déductible:
déclaration charge sociales . cotisations payées . CSG non déductible:
question: Quel est le montant total de CSG non déductible payé cette année ?
unité: €/an
description: |
@ -93,7 +93,7 @@ déclaration indépendants . cotisations payées . CSG non déductible:
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant non déductible : CSG" (dernière ligne)
déclaration indépendants . cotisations payées . CRDS:
déclaration charge sociales . cotisations payées . CRDS:
question: Quel est le montant total de CRDS payé cette année ?
unité: €/an
description: |
@ -105,7 +105,7 @@ déclaration indépendants . cotisations payées . CRDS:
3. Puis, "attestation CSG/CRDS"
4. Reportez dans ce champs le total de la colonne "Montant non déductible : CRDS" (dernière ligne)
déclaration indépendants . cotisations payées . cotisations obligatoires déductibles:
déclaration charge sociales . cotisations payées . cotisations obligatoires déductibles:
remplace: cotisations obligatoires déductibles
unité: €/an
valeur: cotisations payées . total charges sociales
@ -114,7 +114,7 @@ déclaration indépendants . cotisations payées . cotisations obligatoires déd
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS
- dirigeant . indépendant . cotisations et contributions . formation professionnelle
déclaration indépendants . cotisations payées version simple:
déclaration charge sociales . cotisations payées version simple:
applicable si:
toutes ces conditions:
- une de ces conditions:
@ -131,19 +131,19 @@ déclaration indépendants . cotisations payées version simple:
- cotisations payées version simple . cotisations sociales
- cotisations payées version simple . CSG déductible et CFP
déclaration indépendants . cotisations payées version simple . CSG déductible et CFP:
déclaration charge sociales . cotisations payées version simple . CSG déductible et CFP:
question: Quel est le montant total de CSG déductible et CFP payées cette année ?
unité: €/an
description: |
Indiquez le montant de la part de CSG déductible et de CFP que vous avez payé en 2021 (peu importe lannée à laquelle ces contributions se rapportent).
déclaration indépendants . cotisations payées version simple . cotisations sociales:
déclaration charge sociales . cotisations payées version simple . cotisations sociales:
question: Quel est le montant de vos cotisations sociales payées cette année ?
unité: €/an
description: |
Indiquez le montant des cotisations sociales aux régimes obligatoires (maladie-maternité, vieillesse, invalidité-décès, famille) que vous avez payées en 2021 (peu importe lannée à laquelle ces cotisations se rapportent).
déclaration indépendants . régime d'imposition: oui
déclaration indépendants . régime d'imposition . déclaration contrôlée:
déclaration charge sociales . régime d'imposition: oui
déclaration charge sociales . régime d'imposition . déclaration contrôlée:
titre: régime de la déclaration contrôlée
applicable si: entreprise . activité . libérale
non applicable si:
@ -158,7 +158,7 @@ déclaration indépendants . régime d'imposition . déclaration contrôlée:
Dans le cas de la déclaration contrôlée, le contribuable est imposé sur les bénéfices effectivement réalisés. Dans le cas du régime micro-BNC, un abattement forfaitaire de 34 % est appliqué automatiquement après déclaration du chiffre daffaires.
déclaration indépendants . régime d'imposition . réel:
déclaration charge sociales . régime d'imposition . réel:
description: |
Le régime simplifié d'imposition (RSI) et le régime réel normal (RN) s'appliquent aux bénéfices réalisés au cours de l'exercice et à la taxe sur la valeur ajoutée (TVA).
@ -176,7 +176,7 @@ déclaration indépendants . régime d'imposition . réel:
- simplifié
- normal
déclaration indépendants . régime d'imposition . réel . simplifié:
déclaration charge sociales . régime d'imposition . réel . simplifié:
description: |
Les entreprises soumises au régime d'imposition réel simplifié doivent tenir une comptabilité classique : un bilan, un compte de résultat et des annexes. Des dispositions particulières sappliquent pour alléger vos obligations comptables :
@ -188,7 +188,7 @@ déclaration indépendants . régime d'imposition . réel . simplifié:
acronyme: RSI
valeur: réel = 'simplifié'
déclaration indépendants . régime d'imposition . réel . normal:
déclaration charge sociales . régime d'imposition . réel . normal:
description: |
La comptabilité de lentreprise soumise au régime réel normal doit être plus précise que pour le régime réel simplifié :
@ -202,7 +202,7 @@ déclaration indépendants . régime d'imposition . réel . normal:
acronyme: RN
valeur: réel = 'normal'
déclaration indépendants . nature de l'activité:
déclaration charge sociales . nature de l'activité:
remplace:
- entreprise . activité
- règle: entreprise . activité . libérale
@ -224,7 +224,7 @@ déclaration indépendants . nature de l'activité:
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
déclaration indépendants . ACRE:
déclaration charge sociales . ACRE:
description: >-
L'aide à la création ou à la reprise d'une entreprise (Acre) consiste en une
exonération partielle de charges sociales, dite exonération de début
@ -261,7 +261,7 @@ déclaration indépendants . ACRE:
applicable si: entreprise . durée d'activité . en début d'année <= 1 an
par défaut: non
déclaration indépendants . nature de l'activité . libérale:
déclaration charge sociales . nature de l'activité . libérale:
rend non applicable: dirigeant . indépendant . PL . CIPAV
formule: nature de l'activité = 'libérale'
titre: Libérale rattachée au régime général
@ -275,13 +275,13 @@ déclaration indépendants . nature de l'activité . libérale:
références:
fiche Wikipedia: https://fr.m.wikipedia.org/wiki/Profession_libérale
déclaration indépendants . nature de l'activité . commerciale:
déclaration charge sociales . nature de l'activité . commerciale:
formule: nature de l'activité = 'commerciale'
description: |
- Achats de biens pour leur revente en l'état (commerce en gros ou de détail)
- Vente de prestations de services commerciales (location de matériel, transport, agence immobilière, hôtellerie-restauration, entreprise de spectacles, activité de sécurité privée, location, etc.)
- Activité de production ou de transformation grâce à l'utilisation d'outils industriels, extraction, industries minières, manutention, magasinage et stockage
déclaration indépendants . nature de l'activité . artisanale:
déclaration charge sociales . nature de l'activité . artisanale:
formule: nature de l'activité = 'artisanale'
description: |
C'est une activité de service, de production, de transformation, ou de réparation exercée par un professionnel qualifié, et qui nécessite des compétences et un savoir-faire spécifiques.
@ -293,7 +293,7 @@ déclaration indépendants . nature de l'activité . artisanale:
références:
liste des activités artisanales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/activites-artisanales-0
déclaration indépendants . réduction covid:
déclaration charge sociales . réduction covid:
titre: Réduction de cotisation Covid
remplace:
- règle: dirigeant . indépendant . cotisations et contributions . cotisations
@ -340,7 +340,7 @@ déclaration indépendants . réduction covid:
Pour plus dinformation, et connaitre le montant de lexonération dont vous pouvez bénéficier, vous pouvez utiliser le [simulateur dexonération COVID](/simulateurs/exonération-covid "Nouvelle fenêtre").
par défaut: non
déclaration indépendants . réduction covid . montant:
déclaration charge sociales . réduction covid . montant:
question: Quel est le montant de lexonération sociale liée à la crise sanitaire pour les cotisations de lannée 2021 ?
description: |-
Pour connaître le montant de l'exonération, vous pouvez utiliser le simulateur d'exonération COVID.
@ -349,7 +349,7 @@ déclaration indépendants . réduction covid . montant:
titre: Réduction Covid
par défaut: 0 €/an
déclaration indépendants . réduction covid . conjoint collaborateur:
déclaration charge sociales . réduction covid . conjoint collaborateur:
applicable si: dirigeant . indépendant . conjoint collaborateur
remplace:
règle: dirigeant . indépendant . conjoint collaborateur . cotisations
@ -358,14 +358,14 @@ déclaration indépendants . réduction covid . conjoint collaborateur:
abattement: réduction covid . conjoint collaborateur
valeur: montant
déclaration indépendants . réduction covid . total:
déclaration charge sociales . réduction covid . total:
titre: Réduction Covid
description: Intégrée dans le montant des cotisations affiché ci-dessus
somme:
- montant
- conjoint collaborateur
déclaration indépendants . réduction covid . part cotisations:
déclaration charge sociales . réduction covid . part cotisations:
titre: Part réduction Covid sur cotisations (hors CSG/CRDS)
arrondi: oui
résoudre la référence circulaire: oui
@ -373,39 +373,39 @@ déclaration indépendants . réduction covid . part cotisations:
assiette: montant
taux: pourcentage cotisations
déclaration indépendants . réduction covid . pourcentage cotisations:
déclaration charge sociales . réduction covid . pourcentage cotisations:
unité: '%'
valeur: dirigeant . indépendant . cotisations et contributions . cotisations / (dirigeant . indépendant . cotisations et contributions . cotisations + dirigeant . indépendant . cotisations et contributions . CSG et CRDS)
déclaration indépendants . réduction covid . part CSG:
déclaration charge sociales . réduction covid . part CSG:
titre: Part réduction Covid sur CSG
valeur: montant - part cotisations
déclaration indépendants . réduction covid . part CSG . déductible:
déclaration charge sociales . réduction covid . part CSG . déductible:
titre: Part réduction Covid sur CSG/CRDS déductible
produit:
assiette: part CSG
taux: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible . taux / taux CSG
arrondi: oui
déclaration indépendants . réduction covid . part CSG . non déductible:
déclaration charge sociales . réduction covid . part CSG . non déductible:
titre: Part réduction Covid sur CSG/CRDS non déductible
valeur: part CSG - part CSG . déductible
déclaration indépendants . réduction covid . taux CSG:
déclaration charge sociales . réduction covid . taux CSG:
unité: '%'
valeur:
somme:
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . non déductible . taux
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible . taux
déclaration indépendants . cotisations obligatoires déductibles:
déclaration charge sociales . cotisations obligatoires déductibles:
description: Cotisations obligatoires déductibles, utile pour calculer l'assiette de la CSG/CRDS
somme:
- dirigeant . indépendant . cotisations et contributions . cotisations
- dirigeant . indépendant . conjoint collaborateur . cotisations
déclaration indépendants . rémunération déductible:
déclaration charge sociales . rémunération déductible:
variations:
- si: entreprise . imposition . IS
alors: dirigeant . rémunération . nette

View File

@ -1,4 +1,4 @@
déclaration indépendants . résultat simple . revenu net fiscal:
déclaration charge sociales . résultat simple . revenu net fiscal:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: revenu net fiscal
@ -6,7 +6,7 @@ déclaration indépendants . résultat simple . revenu net fiscal:
description: Résultat avant déduction des charges sociales et exonérations fiscales
valeur: dirigeant . rémunération . totale
déclaration indépendants . résultat simple . cotisations obligatoires:
déclaration charge sociales . résultat simple . cotisations obligatoires:
titre: Cotisations sociales obligatoires déductibles
résumé: '[C]'
description: |
@ -23,21 +23,21 @@ déclaration indépendants . résultat simple . cotisations obligatoires:
références:
Notice impots.gouv.fr: https://www.impots.gouv.fr/portail/www2/fichiers/documentation/brochure/ir_2021/pdf_som/11-bis-decla_fusion_fisc_185a195.pdf
déclaration indépendants . résultat simple: oui
déclaration indépendants . résultat simple . CSG déductible:
déclaration charge sociales . résultat simple: oui
déclaration charge sociales . résultat simple . CSG déductible:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: CSG déductible
résumé: '[B]'
description: "Montant de la CSG déductible à l'impôt sur le revenu"
valeur: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
déclaration indépendants . résultat simple . CFP:
déclaration charge sociales . résultat simple . CFP:
non applicable si: entreprise . imposition . IR . micro-fiscal
résumé: '[D]'
description: Contribution à la formation professionnelle
valeur: dirigeant . indépendant . cotisations et contributions . formation professionnelle
déclaration indépendants . résultat simple . total charges sociales déductible:
déclaration charge sociales . résultat simple . total charges sociales déductible:
non applicable si: entreprise . imposition . IR . micro-fiscal
titre: charges sociales obligatoires déductibles fiscalement
résumé: '[B + C + D]'
@ -52,7 +52,7 @@ déclaration indépendants . résultat simple . total charges sociales déductib
- **déclaration contrôlée :** la rubrique BK du formulaire 2035-A-SD
- **régime micro fiscal :** pas de liasse professionnelle fiscale à souscrire
déclaration indépendants . résultat simple . assiette sociale:
déclaration charge sociales . résultat simple . assiette sociale:
non applicable si: entreprise . imposition . IR . micro-fiscal
résumé: '[A - (B + C + D)]'
description: Assiette utilisée pour le calcul des cotisations sociales

View File

@ -11,6 +11,9 @@ entreprise . SIREN:
entreprise . nom:
type: texte
entreprise . activité principale:
type: texte
entreprise . date de création:
question: Quelle est votre date de début d'activité ?
par défaut: 01/01/2021
@ -72,10 +75,10 @@ entreprise . chiffre d'affaires:
- dirigeant . rémunération . impôt
- dirigeant . rémunération . cotisations
- charges
- applicable si: entreprise . imposition . IS
- applicable si: imposition . IS
somme:
- imposition . IS . résultat net
- imposition . IS . impôt sur les sociétés
- imposition . IS
plancher: 0€/an
arrondi: oui
identifiant court: CA
@ -513,6 +516,8 @@ entreprise . activité:
Spécifiquement pour les auto-entrepreneurs: https://www.shine.fr/blog/categorie-activite-auto-entrepreneur
entreprise . activité . libérale:
question: Votre activité est-elle une profession libérale ?
valeur: activité = 'libérale'
description: |
Ce sont les professions "intellectuelles" : médecins, sage-femme, kiné, avocat, mais aussi consultant, développeur, designer...
@ -524,6 +529,7 @@ entreprise . activité . libérale:
liste des professions libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
entreprise . activité . commerciale:
valeur: activité = 'commerciale'
description: |
### Activité commerciale
- Achats de biens pour leur revente en l'état (commerce en gros ou de détail)
@ -534,6 +540,7 @@ entreprise . activité . commerciale:
Activité de production ou de transformation grâce à l'utilisation d'outils industriels, extraction, industries minières, manutention, magasinage et stockage
entreprise . activité . artisanale:
valeur: activité = 'artisanale'
description: |
C'est une activité de service, de production, de transformation, ou de réparation exercée par un professionnel qualifié, et qui nécessite des compétences et un savoir-faire spécifiques.

View File

@ -15,42 +15,37 @@ entreprise . catégorie juridique:
entreprise . catégorie juridique . EI:
titre: 'EI ou EIRL'
applicable si: catégorie juridique = 'EI'
valeur: oui
valeur: catégorie juridique = 'EI'
entreprise . catégorie juridique . EI . auto-entrepreneur:
question: Êtes-vous auto-entrepreneur ?
par défaut:
nom: défaut
valeur: oui
remplace:
règle: imposition . IR . micro-fiscal
par: oui
par défaut: oui
entreprise . catégorie juridique . EI . responsabilité limité:
non applicable si: auto-entrepreneur # pour simplifier
titre: 'EIRL'
question: Votre entreprise est-elle une EIRL ?
par défaut: non
entreprise . catégorie juridique . EI . imposition entreprise:
non applicable si: responsabilité limité
remplace: entreprise . imposition
valeur: "'IR'"
entreprise . catégorie juridique . SARL:
titre: 'EURL ou SARL'
applicable si: catégorie juridique = 'SARL'
valeur: oui
valeur: catégorie juridique = 'SARL'
entreprise . catégorie juridique . SARL . unipersonnelle:
titre: EURL
description: |-
Une EURL est une entreprise avec un seul associé. Cela signifie que vous êtes le seul et unique propriétaire de l'entreprise.
question: Votre entreprise est-elle une EURL ?
par défaut: oui
entreprise . catégorie juridique . SELARL:
titre: 'SELARL'
applicable si: catégorie juridique = 'SELARL'
valeur: oui
valeur: catégorie juridique = 'SELARL'
remplace:
- règle: entreprise . activité
par: "'libérale'"
@ -59,8 +54,7 @@ entreprise . catégorie juridique . SELARL:
entreprise . catégorie juridique . SELAS:
titre: 'SELARL'
applicable si: catégorie juridique = 'SELAS'
valeur: oui
valeur: catégorie juridique = 'SELAS'
remplace:
- règle: entreprise . activité
par: "'libérale'"
@ -72,8 +66,7 @@ entreprise . catégorie juridique . SAS:
règle: entreprise . imposition
par: "'IS'"
titre: 'SASU ou SAS'
applicable si: catégorie juridique = 'SAS'
valeur: oui
valeur: catégorie juridique = 'SAS'
entreprise . catégorie juridique . SAS . unipersonnelle:
titre: 'SASU'
@ -81,5 +74,4 @@ entreprise . catégorie juridique . SAS . unipersonnelle:
par défaut: oui
entreprise . catégorie juridique . autre:
applicable si: catégorie juridique = 'autre'
valeur: oui
valeur: catégorie juridique = 'autre'

View File

@ -1,20 +1,61 @@
entreprise . imposition:
question: Comment l'entreprise est-elle imposée ?
description: |
Indiquez si le régime dimposition des revenus liés à lactivité indépendante relèvent :
- de limpôt sur le revenu : les bénéfices de lentreprise sont imposés directement auprès du travailleur indépendant, au barème progressif de limpôt sur le revenu.
- de limpôt sur les sociétés : les bénéfices de lentreprise sont imposés au nom de la société, au taux de limpôt sur les sociétés.
question: Quel est le **type d'imposition** de votre entreprise ?
une possibilité:
choix obligatoire: oui
possibilités:
- IR
- IS
par défaut: "'IR'"
par défaut:
variations:
- si:
une de ces conditions:
- catégorie juridique . SARL . unipersonnelle
- catégorie juridique . EI
alors: "'IR'"
- sinon: "'IS'"
entreprise . imposition . IR:
applicable si: imposition = 'IR'
titre: Impôt sur le revenu
valeur: oui
valeur: imposition = 'IR'
titre: Impôt sur le revenu (IR)
description: |
Le résultat de votre entreprise est imposé à l'impôt sur le revenu, comme les autres revenus de
votre foyer.
Le résultat est déterminé lors du remplissage de la **liasse fiscale** (aussi appelée
déclaration de résultat). C'est le comptable qui s'en charge.
Si votre entreprise gagne de l'argent, le résultat est appelé **bénéfice**. Il est ajouté aux autres
revenus imposables (s'ils existent) : **votre impôt sur le revenu est plus élevé**.
Si votre entreprise perd de l'argent, le résultat est appelé **déficit**. Il vient réduire le montant du
revenu imposable de votre ménage : **votre impôt sur le revenu est moins élevé**.
Avec l'imposition sur le revenu, il n'y a pas de différence fiscale entre les revenus de votre foyer et ceux de
votre entreprise. Cela veut dire que le montant que vous vous versez depuis le compte bancaire professionnel
vers votre compte bancaire personnel ne change pas le résultat de l'entreprise.
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
entreprise . imposition . IR . type de bénéfices . BNC:
valeur: type de bénéfices = 'BNC'
entreprise . imposition . IR . type de bénéfices . BIC:
valeur: type de bénéfices = 'BIC'
entreprise . imposition . IR . type de bénéfices . BA:
applicable si: BA possible
valeur: type de bénéfices = 'BA'
entreprise . imposition . IR . type de bénéfices . BA possible: non
entreprise . imposition . IR . type de bénéfices . BIC et BNC possibles: non
entreprise . imposition . IR . micro-fiscal:
rend non applicable: dirigeant . indépendant . cotisations facultatives
@ -113,9 +154,124 @@ entreprise . imposition . IR . information sur le report de déficit:
bofip: https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301
entreprise . imposition . IS:
applicable si: imposition = 'IS'
valeur: oui
titre: Impôt sur les sociétés
valeur: imposition = 'IS'
titre: Impôt sur les sociétés (IS)
description: |-
Le **résultat** de votre entreprise est imposé à l'**impôt sur les sociétés**.
Si votre entreprise perd de l'argent, le résultat est appelé **déficit**. Elle n'aura pas à payer d'impôt
sur les sociétés.
Si votre entreprise gagne de l'argent, le résultat est appelé **bénéfice**. Il sera imposé à un
**taux fixe**.
Le résultat imposable est déterminé lors du remplissage de la **liasse fiscale** (aussi appelée
déclaration de résultat). C'est le comptable qui s'en charge.
À noter : il existe **deux façons de se rémunérer** avec une entreprise à l'impôt sur les sociétés :
- Vous pouvez vous verser une rémunération en tant que dirigeant pendant l'année. Cette rémunération est
déduite (soustraite) du résultat pour calculer le bénéfice imposable de votre entreprise. En revanche, cette
rémunération est ajoutée aux revenus imposables de votre foyer pour le calcul de l'impôt sur le revenu.
- Vous pouvez aussi vous verser des dividendes à partir des bénéfices des années précédentes. Vous aurez à payer
un impôt fixe sur ces derniers : c'est ce que l'on appelle la "flat tax".
Dans tous les cas, vous aurez à payer des **cotisations sociales** sur les revenus que vous touchez.
entreprise . imposition . IS . montant:
unité: €/an
barème:
assiette: résultat imposable
multiplicateur: prorata temporis
variations:
- si: exercice . début >= 01/01/2022
alors:
tranches:
- taux:
nom: taux réduit
valeur: 15%
plafond:
nom: plafond taux réduit 1
applicable si: éligible taux réduit
valeur: 38120 €/an
- taux:
nom: taux normal
valeur: 25%
- si: exercice . début >= 01/01/2021
alors:
tranches:
- taux: taux réduit
plafond: plafond taux réduit 1
- taux: 26.5%
- si: exercice . début >= 01/01/2020
alors:
tranches:
- taux: taux réduit
plafond: plafond taux réduit 1
- taux: 28%
- si: exercice . début >= 01/01/2019
alors:
tranches:
- taux: taux réduit
plafond: plafond taux réduit 1
- taux: 28%
plafond:
nom: plafond taux réduit 2
applicable si: éligible taux réduit
valeur: 500000 €/an
- taux: 31%
- si: exercice . début >= 01/01/2018
alors:
tranches:
- taux: taux réduit
plafond: plafond taux réduit 1
- taux: 28%
plafond: plafond taux réduit 2
- taux: 33.3333%
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
entreprise . imposition . IS . éligible taux réduit:
par défaut: oui
toutes ces conditions:
- chiffre d'affaires <= 7630 k€/an * prorata temporis
- nom: capital détenu au moins à 75 pourcents par des personnes physiques
valeur: oui
entreprise . imposition . IS . prorata temporis:
description: |
Lorsque la durée de lexercice n'est pas égale à un an, on pro-ratise les
plafonds utilisés dans le barème de l'impôt sur les sociétés.
unité: '%'
formule: exercice . durée / 1 an
# TODO: c'est un peu plus subtil que cela : « En cas dexercice 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
# ce nombre et 30. »
références:
Bofip: https://bofip.impots.gouv.fr/bofip/2065-PGP.html/identifiant%3DBOI-IS-LIQ-20-20-20180801
entreprise . imposition . IS . contribution sociale:
# 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.
# 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éficie sont concernées par cette contribution.
description: |
La contribution sociale sur les bénéfices est un impôt distinct de limpôt sur les sociétés. Son montant nest pas déductible des résultats.
Lassiette bénéficie dun abattement important, et seules les entreprises réalisant plus de 2,3 millions deuros de bénéfices sont concernées par cette contribution.
formule:
produit:
taux: 3.3%
assiette:
valeur: IS
abattement: 763000 €/an * prorata temporis
références:
Bofip: 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
@ -135,97 +291,39 @@ entreprise . imposition . IS . résultat net:
- chiffre d'affaires
- (- charges)
- (- dirigeant . rémunération . totale)
- (- impôt sur les sociétés)
- (- montant)
par défaut: 0
entreprise . imposition . IS . impôt sur les sociétés:
unité: €/an
formule:
barème:
assiette: résultat imposable
multiplicateur: prorata temporis
variations:
- si: exercice . début >= 01/01/2022
alors:
tranches:
- taux: 15%
plafond: plafond taux réduit 1
- taux: 25%
- si: exercice . début >= 01/01/2021
alors:
tranches:
- taux: 15%
plafond: plafond taux réduit 1
- taux: 26.5%
- si: exercice . début >= 01/01/2020
alors:
tranches:
- taux: 15%
plafond: plafond taux réduit 1
- taux: 28%
- si: exercice . début >= 01/01/2019
alors:
tranches:
- taux: 15%
plafond: plafond taux réduit 1
- taux: 28%
plafond: plafond taux réduit 2
- taux: 31%
- si: exercice . début >= 01/01/2018
alors:
tranches:
- taux: 15%
plafond: plafond taux réduit 1
- taux: 28%
plafond: plafond taux réduit 2
- taux: 33.3333%
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
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
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 1:
applicable si: éligible taux réduit
valeur: 38120 €/an
entreprise . imposition . régime . micro-entreprise:
titre: Régime de la micro-entreprise
non applicable si: imposition = 'IS'
remplace:
règle: IR . micro-fiscal
par: oui
valeur: régime = 'micro-entreprise'
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 2:
applicable si: éligible taux réduit
valeur: 500000 €/an
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'
entreprise . imposition . IS . impôt sur les sociétés . éligible taux réduit:
formule:
toutes ces conditions:
- chiffre d'affaires <= 7630 k€/an * prorata temporis
- nom: capital détenu au moins à 75 pourcents par des personnes physiques
valeur: oui
entreprise . imposition . régime . réel normal:
titre: Régime réel normal d'imposition
acronyme: RN
non applicable si: IR . type de bénéfices . BNC
valeur: régime = 'réel normal'
entreprise . imposition . IS . impôt sur les sociétés . prorata temporis:
description: |
Lorsque la durée de lexercice n'est pas égale à un an, on pro-ratise les
plafonds utilisés dans le barème de l'impôt sur les sociétés.
unité: '%'
formule: exercice . durée / 1 an
# TODO: c'est un peu plus subtil que cela : « En cas dexercice 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
# ce nombre et 30. »
références:
Bofip: https://bofip.impots.gouv.fr/bofip/2065-PGP.html/identifiant%3DBOI-IS-LIQ-20-20-20180801
entreprise . imposition . IS . impôt sur les sociétés . contribution sociale:
# 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.
# 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éficie sont concernées par cette contribution.
description: |
La contribution sociale sur les bénéfices est un impôt distinct de limpôt sur les sociétés. Son montant nest pas déductible des résultats.
Lassiette bénéficie dun abattement important, et seules les entreprises réalisant plus de 2,3 millions deuros de bénéfices sont concernées par cette contribution.
formule:
produit:
taux: 3.3%
assiette:
valeur: impôt sur les sociétés
abattement: 763000 €/an * prorata temporis
références:
Bofip: https://bofip.impots.gouv.fr/bofip/3492-PGP.html/identifiant%3DBOI-IS-AUT-10-20-20130318
entreprise . imposition . régime . réel simplifié:
titre: Régime réel simplifié d'imposition
acronyme: RSI
non applicable si: IR . type de bénéfices . BNC
valeur: régime = 'réel simplifié'

View File

@ -8,12 +8,12 @@
"url": "https://github.com/betagouv/mon-entreprise.git",
"directory": "site"
},
"type": "module",
"private": true,
"main": "./source/entry-empty.js",
"engines": {
"node": ">=12.16.1"
},
"type": "module",
"browserslist": [
"> 1% in FR",
"not ie < 11"
@ -54,6 +54,7 @@
"@internationalized/number": "^3.0.3",
"@mui/material": "^5.0.4",
"@mui/styled-engine": "npm:@mui/styled-engine-sc@latest",
"@react-aria/accordion": "^3.0.0-alpha.5",
"@react-aria/button": "^3.4.1",
"@react-aria/checkbox": "^3.2.3",
"@react-aria/dialog": "^3.1.6",
@ -71,6 +72,7 @@
"@react-stately/radio": "^3.3.2",
"@react-stately/searchfield": "^3.1.3",
"@react-stately/toggle": "^3.2.3",
"@react-stately/tree": "^3.2.3",
"@sentry/integrations": "^6.19.6",
"@sentry/react": "^6.19.6",
"@sentry/tracing": "^6.19.6",
@ -80,8 +82,8 @@
"iframe-resizer": "^4.3.2",
"markdown-to-jsx": "^7.1.7",
"modele-social": "workspace:^",
"publicodes": "^1.0.0-beta.32",
"publicodes-react": "^1.0.0-beta.32",
"publicodes": "=1.0.0-beta.33",
"publicodes-react": "1.0.0-beta.33",
"ramda": "^0.27.0",
"react": "^17.0.0",
"react-color": "^2.14.0",
@ -104,6 +106,7 @@
"whatwg-fetch": "^3.0.0"
},
"devDependencies": {
"@react-types/accordion": "^3.0.0-alpha.4",
"@react-types/numberfield": "^3.1.0",
"@react-types/searchfield": "^3.1.2",
"@redux-devtools/extension": "^3.2.2",
@ -127,8 +130,8 @@
"@types/recharts": "^1.8.16",
"@types/serve-static": "^1.13.10",
"@types/styled-components": "^5.1.24",
"@vitejs/plugin-legacy": "^1.7.1",
"@vitejs/plugin-react": "^1.2.0",
"@vitejs/plugin-legacy": "^1.8.1",
"@vitejs/plugin-react": "^1.3.1",
"cypress": "^9.5.4",
"cypress-plugin-tab": "^1.0.5",
"cypress-wait-until": "^1.7.2",

View File

@ -29,7 +29,7 @@ import IntegrationTest from './pages/Dev/IntegrationTest'
import Personas from './pages/Dev/Personas'
import Sitemap from './pages/Dev/Sitemap'
import Documentation from './pages/Documentation'
import Gérer from './pages/Gerer'
import Gérer from './pages/gerer'
import Iframes from './pages/Iframes'
import Integration from './pages/integration/index'
import Landing from './pages/Landing/Landing'
@ -38,6 +38,7 @@ import Simulateurs from './pages/Simulateurs'
import Stats from './pages/Stats/LazyStats'
import Provider, { ProviderProps } from './Provider'
import redirects from './redirects'
import { RootState } from './reducers/rootReducer'
import { constructLocalizedSitePath } from './sitePaths'
import {
retrievePersistedChoixStatutJuridique,
@ -47,6 +48,10 @@ import {
retrievePersistedCompanySituation,
setupCompanySituationPersistence,
} from './storage/persistCompanySituation'
import {
retrievePersistedDRISituation,
setupDRISituationPersistence,
} from './storage/persistDRISituation'
import { setupSimulationPersistence } from './storage/persistSimulation'
type RootProps = {
@ -79,11 +84,13 @@ export default function Root({
onStoreCreated={(store) => {
setupChoixStatutJuridiquePersistence(store)
setupCompanySituationPersistence(store)
setupDRISituationPersistence(store)
setupSimulationPersistence(store)
}}
initialStore={{
choixStatutJuridique: retrievePersistedChoixStatutJuridique(),
companySituation: retrievePersistedCompanySituation(),
DRISituation: retrievePersistedDRISituation(),
}}
>
<EngineProvider value={engine}>
@ -98,13 +105,16 @@ const Router = () => {
const simulatorSituation = useSelector(situationSelector)
const configSituation = useSelector(configSituationSelector)
const companySituation = useSelector(companySituationSelector)
const DRISituation = useSelector((state: RootState) => state.DRISituation)
const situation = useMemo(
() => ({
...DRISituation,
...companySituation,
...configSituation,
...simulatorSituation,
}),
[configSituation, simulatorSituation, companySituation]
[configSituation, simulatorSituation, companySituation, DRISituation]
)
return (

View File

@ -1,8 +1,12 @@
import { Bénéfice } from '@/api/activité-vers-bénéfice'
import { Commune } from '@/api/commune'
import { FabriqueSocialEntreprise } from '@/api/fabrique-social'
export type CompanyActions = ReturnType<
typeof resetCompany | typeof setCompany | typeof addCommuneDetails
| typeof resetCompany
| typeof setCompany
| typeof addCommuneDetails
| typeof setBénéficeType
>
export const resetCompany = () =>
@ -16,6 +20,12 @@ export const addCommuneDetails = (details: Commune) =>
details,
} as const)
export const setBénéficeType = (bénéfice: NonNullable<Bénéfice>) =>
({
type: 'COMPANY::SET_BÉNÉFICE_TYPE',
bénéfice,
} as const)
export const setCompany = (entreprise: FabriqueSocialEntreprise) => {
return {
type: 'COMPANY::SET_EXISTING_COMPANY',

View File

@ -1,12 +1,9 @@
import { FabriqueSocialEntreprise } from '@/api/fabrique-social'
import { useNextQuestionUrl } from '@/selectors/companyStatusSelectors'
import { LegalStatusRequirements } from '@/types/companyTypes'
import { useEffect, useState } from 'react'
import { useDispatch } from 'react-redux'
import { useHistory } from 'react-router'
import { useNextQuestionUrl } from '@/selectors/companyStatusSelectors'
import { LegalStatusRequirements } from '@/types/companyTypes'
import { Action } from './actions'
import { addCommuneDetails, setCompany } from './companyActions'
import { fetchCommuneDetails } from '@/api/commune'
export type CompanyStatusAction = ReturnType<
| typeof isSoleProprietorship
@ -74,21 +71,3 @@ export const resetCompanyStatusChoice = (
type: 'RESET_COMPANY_STATUS_CHOICE',
answersToReset,
} as const)
export const useSetEntreprise = () => {
const dispatch = useDispatch()
return (entreprise: FabriqueSocialEntreprise | null) => {
if (entreprise === null) {
return
}
dispatch(setCompany(entreprise))
void fetchCommuneDetails(
entreprise.firstMatchingEtablissement.codeCommuneEtablissement,
entreprise.firstMatchingEtablissement.codePostalEtablissement
).then(
(communeDetails) =>
communeDetails && dispatch(addCommuneDetails(communeDetails))
)
}
}

View File

@ -0,0 +1,730 @@
{
"01.11Z": "BA",
"01.12Z": "BA",
"01.13Z": "BA",
"01.14Z": "BA",
"01.15Z": "BA",
"01.16Z": "BA",
"01.19Z": "BA",
"01.21Z": "BA",
"01.22Z": "BA",
"01.23Z": "BA",
"01.24Z": "BA",
"01.25Z": "BA",
"01.26Z": "BA",
"01.27Z": "BA",
"01.28Z": "BA",
"01.29Z": "BA",
"01.30Z": "BA",
"01.41Z": "BA",
"01.42Z": "BA",
"01.43Z": "BA",
"01.44Z": "BA",
"01.45Z": "BA",
"01.46Z": "BA",
"01.47Z": "BA",
"01.49Z": "BA",
"01.50Z": "BA",
"01.61Z": "BIC",
"01.62Z": "BA",
"01.63Z": "BA",
"01.64Z": "BA",
"01.70Z": "BNC",
"02.10Z": "BA",
"02.20Z": "BA",
"02.30Z": "BA",
"02.40Z": "BA",
"03.11Z": "BA",
"03.12Z": "BA",
"03.21Z": "BA",
"03.22Z": "BA",
"05.10Z": "BIC",
"05.20Z": "BIC",
"06.10Z": "BIC",
"06.20Z": "BIC",
"07.10Z": "BIC",
"07.21Z": "BIC",
"07.29Z": "BIC",
"08.11Z": "BIC",
"08.12Z": "BIC",
"08.91Z": "BIC",
"08.92Z": "BIC",
"08.93Z": "BIC",
"08.99Z": "BIC",
"09.10Z": "BIC",
"09.90Z": "BIC",
"10.11Z": "BIC",
"10.12Z": "BIC",
"10.13A": "BIC",
"10.13B": "BIC",
"10.20Z": "BIC",
"10.31Z": "BIC",
"10.32Z": "BIC",
"10.39A": "BIC",
"10.39B": "BIC",
"10.41A": "BIC",
"10.41B": "BIC",
"10.42Z": "BIC",
"10.51A": "BIC",
"10.51B": "BIC",
"10.51C": "BIC",
"10.51D": "BIC",
"10.52Z": "BIC",
"10.61A": "BIC",
"10.61B": "BIC",
"10.62Z": "BIC",
"10.71A": "BIC",
"10.71B": "BIC",
"10.71C": "BIC",
"10.71D": "BIC",
"10.72Z": "BIC",
"10.73Z": "BIC",
"10.81Z": "BIC",
"10.82Z": "BIC",
"10.83Z": "BIC",
"10.84Z": "BIC",
"10.85Z": "BIC",
"10.86Z": "BIC",
"10.89Z": "BIC",
"10.91Z": "BIC",
"10.92Z": "BIC",
"11.01Z": "BIC",
"11.02A": "BIC",
"11.02B": "BIC",
"11.03Z": "BIC",
"11.04Z": "BIC",
"11.05Z": "BIC",
"11.06Z": "BIC",
"11.07A": "BIC",
"11.07B": "BIC",
"12.00Z": "BIC",
"13.10Z": "BIC",
"13.20Z": "BIC",
"13.30Z": "BIC",
"13.91Z": "BIC",
"13.92Z": "BIC",
"13.93Z": "BIC",
"13.94Z": "BIC",
"13.95Z": "BIC",
"13.96Z": "BIC",
"13.99Z": "BIC",
"14.11Z": "BIC",
"14.12Z": "BIC",
"14.13Z": "BIC",
"14.14Z": "BIC",
"14.19Z": "BIC",
"14.20Z": "BIC",
"14.31Z": "BIC",
"14.39Z": "BIC",
"15.11Z": "BIC",
"15.12Z": "BIC",
"15.20Z": "BIC",
"16.10A": "BIC",
"16.10B": "BIC",
"16.21Z": "BIC",
"16.22Z": "BIC",
"16.23Z": "BIC",
"16.24Z": "BIC",
"16.29Z": "BIC",
"17.11Z": "BIC",
"17.12Z": "BIC",
"17.21A": "BIC",
"17.21B": "BIC",
"17.21C": "BIC",
"17.22Z": "BIC",
"17.23Z": "BIC",
"17.24Z": "BIC",
"17.29Z": "BIC",
"18.11Z": "BIC",
"18.12Z": "BIC/BNC",
"18.13Z": "BIC/BNC",
"18.14Z": "BIC",
"18.20Z": "BIC",
"19.10Z": "BIC",
"19.20Z": "BIC",
"20.11Z": "BIC",
"20.12Z": "BIC",
"20.13A": "BIC",
"20.13B": "BIC",
"20.14Z": "BIC",
"20.15Z": "BIC",
"20.16Z": "BIC",
"20.17Z": "BIC",
"20.20Z": "BIC",
"20.30Z": "BIC",
"20.41Z": "BIC",
"20.42Z": "BIC",
"20.51Z": "BIC",
"20.52Z": "BIC",
"20.53Z": "BIC",
"20.59Z": "BIC",
"20.60Z": "BIC",
"21.10Z": "BIC",
"21.20Z": "BIC",
"22.11Z": "BIC",
"22.19Z": "BIC",
"22.21Z": "BIC",
"22.22Z": "BIC",
"22.23Z": "BIC",
"22.29A": "BIC",
"22.29B": "BIC",
"23.11Z": "BIC",
"23.12Z": "BIC",
"23.13Z": "BIC",
"23.14Z": "BIC",
"23.19Z": "BIC",
"23.20Z": "BIC",
"23.31Z": "BIC",
"23.32Z": "BIC",
"23.41Z": "BIC",
"23.42Z": "BIC",
"23.43Z": "BIC",
"23.44Z": "BIC",
"23.49Z": "BIC",
"23.51Z": "BIC",
"23.52Z": "BIC",
"23.61Z": "BIC",
"23.62Z": "BIC",
"23.63Z": "BIC",
"23.64Z": "BIC",
"23.65Z": "BIC",
"23.69Z": "BIC",
"23.70Z": "BIC",
"23.91Z": "BIC",
"23.99Z": "BIC",
"24.10Z": "BIC",
"24.20Z": "BIC",
"24.31Z": "BIC",
"24.32Z": "BIC",
"24.33Z": "BIC",
"24.34Z": "BIC",
"24.41Z": "BIC",
"24.42Z": "BIC",
"24.43Z": "BIC",
"24.44Z": "BIC",
"24.45Z": "BIC",
"24.46Z": "BIC",
"24.51Z": "BIC",
"24.52Z": "BIC",
"24.53Z": "BIC",
"24.54Z": "BIC",
"25.11Z": "BIC",
"25.12Z": "BIC",
"25.21Z": "BIC",
"25.29Z": "BIC",
"25.30Z": "BIC",
"25.40Z": "BIC",
"25.50A": "BIC",
"25.50B": "BIC",
"25.61Z": "BIC",
"25.62A": "BIC",
"25.62B": "BIC",
"25.71Z": "BIC",
"25.72Z": "BIC",
"25.73A": "BIC",
"25.73B": "BIC",
"25.91Z": "BIC",
"25.92Z": "BIC",
"25.93Z": "BIC",
"25.94Z": "BIC",
"25.99A": "BIC",
"25.99B": "BIC",
"26.11Z": "BIC",
"26.12Z": "BIC",
"26.20Z": "BIC",
"26.30Z": "BIC",
"26.40Z": "BIC",
"26.51A": "BIC",
"26.51B": "BIC",
"26.52Z": "BIC",
"26.60Z": "BIC",
"26.70Z": "BIC",
"26.80Z": "BIC",
"27.11Z": "BIC",
"27.12Z": "BIC",
"27.20Z": "BIC",
"27.31Z": "BIC",
"27.32Z": "BIC",
"27.33Z": "BIC",
"27.40Z": "BIC",
"27.51Z": "BIC",
"27.52Z": "BIC",
"27.90Z": "BIC",
"28.11Z": "BIC",
"28.12Z": "BIC",
"28.13Z": "BIC",
"28.14Z": "BIC",
"28.15Z": "BIC",
"28.21Z": "BIC",
"28.22Z": "BIC",
"28.23Z": "BIC",
"28.24Z": "BIC",
"28.25Z": "BIC",
"28.29A": "BIC",
"28.29B": "BIC",
"28.30Z": "BIC",
"28.41Z": "BIC",
"28.49Z": "BIC",
"28.91Z": "BIC",
"28.92Z": "BIC",
"28.93Z": "BIC",
"28.94Z": "BIC",
"28.95Z": "BIC",
"28.96Z": "BIC",
"28.99A": "BIC",
"28.99B": "BIC",
"29.10Z": "BIC",
"29.20Z": "BIC",
"29.31Z": "BIC",
"29.32Z": "BIC",
"30.11Z": "BIC",
"30.12Z": "BIC",
"30.20Z": "BIC",
"30.30Z": "BIC",
"30.40Z": "BIC",
"30.91Z": "BIC",
"30.92Z": "BIC",
"30.99Z": "BIC",
"31.01Z": "BIC",
"31.02Z": "BIC",
"31.03Z": "BIC",
"31.09A": "BIC",
"31.09B": "BIC",
"32.11Z": "BIC",
"32.12Z": "BIC",
"32.13Z": "BIC",
"32.20Z": "BIC",
"32.30Z": "BIC",
"32.40Z": "BIC",
"32.50A": "BIC",
"32.50B": "BIC",
"32.91Z": "BIC",
"32.99Z": "BIC",
"33.11Z": "BIC",
"33.12Z": "BIC",
"33.13Z": "BIC",
"33.14Z": "BIC",
"33.15Z": "BIC",
"33.16Z": "BIC",
"33.17Z": "BIC",
"33.19Z": "BIC",
"33.20A": "BIC",
"33.20B": "BIC",
"33.20C": "BIC",
"33.20D": "BIC",
"35.11Z": "BIC",
"35.12Z": "BIC",
"35.13Z": "BIC",
"35.14Z": "BIC",
"35.21Z": "BIC",
"35.22Z": "BIC",
"35.23Z": "BIC",
"35.30Z": "BIC",
"36.00Z": "BIC",
"37.00Z": "BIC",
"38.11Z": "BIC",
"38.12Z": "BIC",
"38.21Z": "BIC",
"38.22Z": "BIC",
"38.31Z": "BIC",
"38.32Z": "BIC",
"39.00Z": "BIC",
"41.10A": "BIC",
"41.10B": "BIC",
"41.10C": "BIC",
"41.10D": "BIC",
"41.20A": "BIC",
"41.20B": "BIC",
"42.11Z": "BIC",
"42.12Z": "BIC",
"42.13A": "BIC",
"42.13B": "BIC",
"42.21Z": "BIC",
"42.22Z": "BIC",
"42.91Z": "BIC",
"42.99Z": "BIC",
"43.11Z": "BIC",
"43.12A": "BIC",
"43.12B": "BIC",
"43.13Z": "BIC",
"43.21A": "BIC",
"43.21B": "BIC",
"43.22A": "BIC",
"43.22B": "BIC",
"43.29A": "BIC",
"43.29B": "BIC",
"43.31Z": "BIC",
"43.32A": "BIC",
"43.32B": "BIC",
"43.32C": "BIC",
"43.33Z": "BIC",
"43.34Z": "BIC",
"43.39Z": "BIC",
"43.91A": "BIC",
"43.91B": "BIC",
"43.99A": "BIC",
"43.99B": "BIC",
"43.99C": "BIC",
"43.99D": "BIC",
"43.99E": "BIC",
"45.11Z": "BIC",
"45.19Z": "BIC",
"45.20A": "BIC",
"45.20B": "BIC",
"45.31Z": "BIC",
"45.32Z": "BIC",
"45.40Z": "BIC",
"46.11Z": "BIC",
"46.12A": "BIC",
"46.12B": "BIC",
"46.13Z": "BIC",
"46.14Z": "BIC",
"46.15Z": "BIC",
"46.16Z": "BIC",
"46.17A": "BIC",
"46.17B": "BIC",
"46.18Z": "BIC",
"46.19A": "BIC",
"46.19B": "BNC",
"46.21Z": "BIC",
"46.22Z": "BIC",
"46.23Z": "BIC",
"46.24Z": "BIC",
"46.31Z": "BIC",
"46.32A": "BIC",
"46.32B": "BIC",
"46.32C": "BIC",
"46.33Z": "BIC",
"46.34Z": "BIC",
"46.35Z": "BIC",
"46.36Z": "BIC",
"46.37Z": "BIC",
"46.38A": "BIC",
"46.38B": "BIC",
"46.39A": "BIC",
"46.39B": "BIC",
"46.41Z": "BIC",
"46.42Z": "BIC",
"46.43Z": "BIC",
"46.44Z": "BIC",
"46.45Z": "BIC",
"46.46Z": "BIC",
"46.47Z": "BIC",
"46.48Z": "BIC",
"46.49Z": "BIC",
"46.51Z": "BIC",
"46.52Z": "BIC",
"46.61Z": "BIC",
"46.62Z": "BIC",
"46.63Z": "BIC",
"46.64Z": "BIC",
"46.65Z": "BIC",
"46.66Z": "BIC",
"46.69A": "BIC",
"46.69B": "BIC",
"46.69C": "BIC",
"46.71Z": "BIC",
"46.72Z": "BIC",
"46.73A": "BIC",
"46.73B": "BIC",
"46.74A": "BIC",
"46.74B": "BIC",
"46.75Z": "BIC",
"46.76Z": "BIC",
"46.77Z": "BIC",
"46.90Z": "BIC",
"47.11A": "BIC",
"47.11B": "BIC",
"47.11C": "BIC",
"47.11D": "BIC",
"47.11E": "BIC",
"47.11F": "BIC",
"47.19A": "BIC",
"47.19B": "BIC",
"47.21Z": "BIC",
"47.22Z": "BIC",
"47.23Z": "BIC",
"47.24Z": "BIC",
"47.25Z": "BIC",
"47.26Z": "BIC",
"47.29Z": "BIC",
"47.30Z": "BIC",
"47.41Z": "BIC",
"47.42Z": "BIC",
"47.43Z": "BIC",
"47.51Z": "BIC",
"47.52A": "BIC",
"47.52B": "BIC",
"47.53Z": "BIC",
"47.54Z": "BIC",
"47.59A": "BIC",
"47.59B": "BIC",
"47.61Z": "BIC",
"47.62Z": "BIC",
"47.63Z": "BIC",
"47.64Z": "BIC",
"47.65Z": "BIC",
"47.71Z": "BIC",
"47.72A": "BIC",
"47.72B": "BIC",
"47.73Z": "BIC",
"47.74Z": "BIC",
"47.75Z": "BIC",
"47.76Z": "BIC",
"47.77Z": "BIC",
"47.78A": "BIC",
"47.78B": "BIC",
"47.78C": "BIC",
"47.79Z": "BIC",
"47.81Z": "BIC",
"47.82Z": "BIC",
"47.89Z": "BIC",
"47.91A": "BIC",
"47.91B": "BIC",
"47.99A": "BIC",
"47.99B": "BIC",
"49.10Z": "BIC",
"49.20Z": "BIC",
"49.31Z": "BIC",
"49.32Z": "BIC",
"49.39A": "BIC",
"49.39B": "BIC",
"49.39C": "BIC",
"49.41A": "BIC",
"49.41B": "BIC",
"49.41C": "BIC",
"49.42Z": "BIC",
"49.50Z": "BIC",
"50.10Z": "BIC",
"50.20Z": "BIC",
"50.30Z": "BIC",
"50.40Z": "BIC",
"51.10Z": "BIC",
"51.21Z": "BIC",
"51.22Z": "BIC",
"52.10A": "BIC",
"52.10B": "BIC",
"52.21Z": "BIC",
"52.22Z": "BIC",
"52.23Z": "BIC",
"52.24A": "BIC",
"52.24B": "BIC",
"52.29A": "BIC",
"52.29B": "BIC",
"53.10Z": "BIC",
"53.20Z": "BIC",
"55.10Z": "BIC",
"55.20Z": "BIC",
"55.30Z": "BIC",
"55.90Z": "BIC",
"56.10A": "BIC",
"56.10B": "BIC",
"56.10C": "BIC",
"56.21Z": "BIC",
"56.29A": "BIC",
"56.29B": "BIC",
"56.30Z": "BIC",
"58.11Z": "BIC",
"58.12Z": "BIC",
"58.13Z": "BIC",
"58.14Z": "BIC",
"58.19Z": "BIC",
"58.21Z": "BIC",
"58.29A": "BIC",
"58.29B": "BIC",
"58.29C": "BIC/BNC",
"59.11A": "BIC",
"59.11B": "BIC",
"59.11C": "BIC",
"59.12Z": "BIC/BNC",
"59.13A": "BIC",
"59.13B": "BIC",
"59.14Z": "BIC",
"59.20Z": "BIC",
"60.10Z": "BIC",
"60.20A": "BIC",
"60.20B": "BIC",
"61.10Z": "BIC",
"61.20Z": "BIC",
"61.30Z": "BIC",
"61.90Z": "BIC",
"62.01Z": "BIC/BNC",
"62.02A": "BNC",
"62.02B": "BIC",
"62.03Z": "BIC",
"62.09Z": "BIC/BNC",
"63.11Z": "BIC/BNC",
"63.12Z": "BIC",
"63.91Z": "BIC/BNC",
"63.99Z": "BIC/BNC",
"64.11Z": "BIC",
"64.19Z": "BIC",
"64.20Z": "BIC",
"64.30Z": "BIC",
"64.91Z": "BIC",
"64.92Z": "BIC",
"64.99Z": "BIC",
"65.11Z": "BIC",
"65.12Z": "BIC",
"65.20Z": "BIC",
"65.30Z": "BIC",
"66.11Z": "BIC/BNC",
"66.12Z": "BIC",
"66.19A": "BIC",
"66.19B": "BIC/BNC",
"66.21Z": "BNC",
"66.22Z": "BIC/BNC",
"66.29Z": "BIC/BNC",
"66.30Z": "BNC",
"68.10Z": "BIC",
"68.20A": "BIC",
"68.20B": "BIC/BNC",
"68.31Z": "BIC",
"68.32A": "BIC",
"68.32B": "BIC",
"69.10Z": "BNC",
"69.20Z": "BNC",
"70.10Z": "BIC",
"70.21Z": "BNC",
"70.22Z": "BNC",
"71.11Z": "BNC",
"71.12A": "BNC",
"71.12B": "BNC",
"71.20A": "BIC",
"71.20B": "BIC",
"72.11Z": "BIC/BNC",
"72.19Z": "BIC/BNC",
"72.20Z": "BIC/BNC",
"73.11Z": "BIC/BNC",
"73.12Z": "BIC/BNC",
"73.20Z": "BIC/BNC",
"74.10Z": "BNC",
"74.20Z": "BIC/BNC",
"74.30Z": "BIC/BNC",
"74.90A": "BNC",
"74.90B": "BIC/BNC",
"75.00Z": "BNC",
"77.11A": "BIC",
"77.11B": "BIC",
"77.12Z": "BIC",
"77.21Z": "BIC",
"77.22Z": "BIC",
"77.29Z": "BIC",
"77.31Z": "BIC",
"77.32Z": "BIC",
"77.33Z": "BIC",
"77.34Z": "BIC",
"77.35Z": "BIC",
"77.39Z": "BIC",
"77.40Z": "BIC",
"78.10Z": "BIC/BNC",
"78.20Z": "BIC",
"78.30Z": "BIC/BNC",
"79.11Z": "BIC",
"79.12Z": "BIC/BNC",
"79.90Z": "BIC/BNC",
"80.10Z": "BIC/BNC",
"80.20Z": "BNC",
"80.30Z": "BNC",
"81.10Z": "BIC/BNC",
"81.21Z": "BIC",
"81.22Z": "BIC",
"81.29A": "BIC",
"81.29B": "BIC/BNC",
"81.30Z": "BIC",
"82.11Z": "BIC/BNC",
"82.19Z": "BIC/BNC",
"82.20Z": "BIC",
"82.30Z": "BIC/BNC",
"82.91Z": "BIC/BNC",
"82.92Z": "BIC",
"82.99Z": "BIC/BNC",
"84.11Z": "BIC",
"84.12Z": "BIC",
"84.13Z": "BIC",
"84.21Z": "BIC",
"84.22Z": "BIC",
"84.23Z": "BIC",
"84.24Z": "BIC",
"84.25Z": "BIC",
"84.30A": "BIC",
"84.30B": "BIC",
"84.30C": "BIC",
"85.10Z": "BIC",
"85.20Z": "BIC",
"85.31Z": "BIC",
"85.32Z": "BIC",
"85.41Z": "BIC",
"85.42Z": "BIC",
"85.51Z": "BIC/BNC",
"85.52Z": "BNC",
"85.53Z": "BIC/BNC",
"85.59A": "BNC",
"85.59B": "BNC",
"85.60Z": "BNC",
"86.10Z": "BNC",
"86.21Z": "BNC",
"86.22A": "BNC",
"86.22B": "BNC",
"86.22C": "BNC",
"86.23Z": "BNC",
"86.90A": "BIC",
"86.90B": "BNC",
"86.90C": "BIC",
"86.90D": "BNC",
"86.90E": "BIC/BNC",
"86.90F": "BNC",
"87.10A": "BIC",
"87.10B": "BIC",
"87.10C": "BIC",
"87.20A": "BIC",
"87.20B": "BIC",
"87.30A": "BIC",
"87.30B": "BIC",
"87.90A": "BIC",
"87.90B": "BIC",
"88.10A": "BIC",
"88.10B": "BIC/BNC",
"88.10C": "BIC",
"88.91A": "BIC",
"88.91B": "BIC/BNC",
"88.99A": "BIC",
"88.99B": "BIC",
"90.01Z": "BIC/BNC",
"90.02Z": "BIC/BNC",
"90.03A": "BIC/BNC",
"90.03B": "BNC",
"90.04Z": "BIC",
"91.01Z": "BIC/BNC",
"91.02Z": "BIC",
"91.03Z": "BIC",
"91.04Z": "BIC",
"92.00Z": "BIC/BNC",
"93.11Z": "BIC",
"93.12Z": "BIC",
"93.13Z": "BIC",
"93.19Z": "BNC",
"93.21Z": "BIC",
"93.29Z": "BIC/BNC",
"94.11Z": "BIC",
"94.12Z": "BIC",
"94.20Z": "BIC",
"94.91Z": "BIC",
"94.92Z": "BIC",
"94.99Z": "BIC",
"95.11Z": "BIC",
"95.12Z": "BIC",
"95.21Z": "BIC",
"95.22Z": "BIC",
"95.23Z": "BIC",
"95.24Z": "BIC",
"95.25Z": "BIC",
"95.29Z": "BIC",
"96.01A": "BIC",
"96.01B": "BIC",
"96.02A": "BIC",
"96.02B": "BIC",
"96.03Z": "BIC/BNC",
"96.04Z": "BIC",
"96.09Z": "BIC/BNC"
}

View File

@ -0,0 +1,9 @@
export type Bénéfice = 'BIC' | 'BA' | 'BIC/BNC' | 'BNC' | undefined
export default async function fetchBénéfice(
activité: string
): Promise<Bénéfice> {
const data = (await import('./data.json')).default
return data[activité as keyof typeof data] as Bénéfice
}

View File

@ -34,6 +34,7 @@ export type FabriqueSocialEntreprise = {
codeCommuneEtablissement: string
codePostalEtablissement: string
is_siege: boolean
activitePrincipaleEtablissement: string
}
allMatchingEtablissements: Array<{
address?: string

View File

@ -12,6 +12,7 @@ import { SimulationGoal } from './Simulation'
import { useEngine } from './utils/EngineContext'
import { Markdown } from './utils/markdown'
import { Switch } from '@/design-system/switch'
import { ExplicableRule } from './conversation/Explicable'
const proportions = {
'entreprise . activité . mixte . proportions . service BIC':
@ -45,7 +46,6 @@ export default function ChiffreAffairesActivitéMixte({
<fieldset aria-label={t("Chiffre d'affaires")}>
<SimulationGoal
appear={false}
alwaysShow
onUpdateSituation={clearChiffreAffaireMixte}
dottedName={dottedName}
/>
@ -54,7 +54,6 @@ export default function ChiffreAffairesActivitéMixte({
<Condition expression="entreprise . activité . mixte">
{Object.values(proportions).map((chiffreAffaires) => (
<SimulationGoal
alwaysShow
small
key={chiffreAffaires}
onUpdateSituation={adjustProportions}
@ -135,9 +134,7 @@ function ActivitéMixte() {
Activité mixte
</Switch>
</Trans>
<ButtonHelp type="aide" title={rule.title} light>
<Markdown>{rule.rawNode.description ?? ''}</Markdown>
</ButtonHelp>
<ExplicableRule dottedName={rule.dottedName} light />
</StyledActivitéMixteContainer>
</div>
)

View File

@ -8,6 +8,7 @@ import Engine, {
} from 'publicodes'
import React from 'react'
import { useTranslation } from 'react-i18next'
import styled, { keyframes } from 'styled-components'
import RuleLink from './RuleLink'
import { useEngine } from './utils/EngineContext'
@ -18,6 +19,7 @@ export type ValueProps<Names extends string> = {
displayedUnit?: string
precision?: number
linkToRule?: boolean
flashOnChange?: boolean
} & React.HTMLProps<HTMLSpanElement>
export default function Value<Names extends string>({
@ -25,6 +27,7 @@ export default function Value<Names extends string>({
unit,
engine,
displayedUnit,
flashOnChange = false,
precision,
linkToRule = true,
...props
@ -49,13 +52,36 @@ export default function Value<Names extends string>({
if (isRule && linkToRule) {
return (
<RuleLink dottedName={expression as DottedName}>
<span {...props}>{value}</span>
<StyledValue {...props} key={value} $flashOnChange={flashOnChange}>
{value}
</StyledValue>
</RuleLink>
)
}
return <span {...props}>{value}</span>
return (
<StyledValue {...props} key={value} $flashOnChange={flashOnChange}>
{value}
</StyledValue>
)
}
const flash = keyframes`
from {
background-color: white;
opacity: 0.8;
}
to {
background-color: transparent;
}
`
const StyledValue = styled.span<{ $flashOnChange: boolean }>`
animation: ${flash} 0.2s 1;
will-change: background-color, opacity;
`
type ConditionProps = {
expression: PublicodesExpression | ASTNode
@ -77,10 +103,12 @@ export function Condition({
: value
if (Boolean(boolValue) !== boolValue) {
// eslint-disable-next-line no-console
console.error(
`[ CONDITION NON-BOOLEENNE ] dans le composant Condition: expression=`,
expression
`[ CONDITION NON-BOOLEENNE ] dans le composant Condition: expression=${JSON.stringify(
expression,
null,
2
)}`
)
}
if (!boolValue) {

View File

@ -1,7 +1,7 @@
import Emoji from '@/components/utils/Emoji'
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import Popover from '@/design-system/Popover'
import Popover from '@/design-system/popover/Popover'
import { Strong } from '@/design-system/typography'
import { Link } from '@/design-system/typography/link'
import { Body, SmallBody } from '@/design-system/typography/paragraphs'

View File

@ -1,4 +1,4 @@
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { H2 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Body } from '@/design-system/typography/paragraphs'

View File

@ -1,17 +1,16 @@
import { hideNotification } from '@/actions/actions'
import { useEngine, useInversionFail } from '@/components/utils/EngineContext'
import { Message } from '@/design-system'
import { Button } from '@/design-system/buttons'
import { GenericButtonOrLinkProps } from '@/design-system/typography/link'
import { RootState } from '@/reducers/rootReducer'
import { DottedName } from 'modele-social'
import Engine, { RuleNode } from 'publicodes'
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { RootState } from '@/reducers/rootReducer'
import styled from 'styled-components'
import RuleLink from './RuleLink'
import Emoji from './utils/Emoji'
import { Markdown } from './utils/markdown'
import { Message } from '@/design-system'
// To add a new notification to a simulator, you should create a publicodes rule
// with the "type: notification" attribute. The display can be customized with

View File

@ -1,5 +1,4 @@
import { useIsEmbedded } from '@/components/utils/embeddedContext'
import { EngineContext } from '@/components/utils/EngineContext'
import Meta from '@/components/utils/Meta'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import useSearchParamsSimulationSharing from '@/components/utils/useSearchParamsSimulationSharing'
@ -7,13 +6,17 @@ import useSimulationConfig from '@/components/utils/useSimulationConfig'
import { Spacing } from '@/design-system/layout'
import { H1 } from '@/design-system/typography/heading'
import { Intro } from '@/design-system/typography/paragraphs'
import { Evaluation } from 'publicodes'
import { situationSelector } from '@/selectors/simulationSelectors'
import { ComponentPropsWithoutRef, useContext } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { useLocation } from 'react-router-dom'
import { TrackChapter } from '../../../ATInternetTracking'
import { CurrentSimulatorDataProvider, ExtractFromSimuData } from '../metadata'
import { NextSteps } from './NextSteps'
import { TrackChapter } from '../ATInternetTracking'
import {
CurrentSimulatorDataProvider,
ExtractFromSimuData,
} from '../pages/Simulateurs/metadata'
import { NextSteps } from '../pages/Simulateurs/NextSteps'
export interface PageDataProps {
meta: ExtractFromSimuData<'meta'>
@ -49,9 +52,9 @@ export default function PageData(props: PageDataProps) {
} = props
let { title } = props
const année = useContext(EngineContext).evaluate('année')
.nodeValue as Evaluation<number>
const year = typeof année === 'number' && année !== 2022 ? ` - ${année}` : ''
const année = useSelector(situationSelector)['année']
const year =
typeof année === 'number' && année != 2022 ? ` - version ${année}` : ''
const inIframe = useIsEmbedded()
useSimulationConfig(config)

View File

@ -35,7 +35,7 @@ export default function PageHeader({
`}
>
{titre && <H1>{titre}</H1>}
{children}
<div>{children}</div>
</Grid>
{picture && (

View File

@ -1,6 +1,6 @@
import { Button } from '@/design-system/buttons'
import { SROnly } from '@/design-system/global-style'
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { Trans, useTranslation } from 'react-i18next'
import styled from 'styled-components'
import SearchRulesAndSimulators from './search/SearchRulesAndSimulators'

View File

@ -2,7 +2,7 @@ import { Grid } from '@mui/material'
import Emoji from '@/components/utils/Emoji'
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { CurrentSimulatorDataContext } from '../../pages/Simulateurs/metadata'
import { useContext } from 'react'
import { Trans, useTranslation } from 'react-i18next'

View File

@ -1,14 +1,11 @@
import { Grid } from '@mui/material'
import { updateSituation } from '@/actions/actions'
import { SmallBody } from '@/design-system/typography/paragraphs'
import { targetUnitSelector } from '@/selectors/simulationSelectors'
import { Grid } from '@mui/material'
import { DottedName } from 'modele-social'
import { formatValue, UNSAFE_isNotApplicable } from 'publicodes'
import { formatValue } from 'publicodes'
import React, { useCallback, useState } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import {
situationSelector,
targetUnitSelector,
} from '@/selectors/simulationSelectors'
import styled from 'styled-components'
import RuleInput, { InputProps } from '../conversation/RuleInput'
import RuleLink from '../RuleLink'
@ -25,7 +22,6 @@ type SimulationGoalProps = {
editable?: boolean
isTypeBoolean?: boolean
alwaysShow?: boolean
onUpdateSituation?: (
name: DottedName,
...rest: Parameters<InputProps['onChange']>
@ -38,15 +34,12 @@ export function SimulationGoal({
small = false,
onUpdateSituation,
appear = true,
alwaysShow = false,
editable = true,
isTypeBoolean = false, // TODO : remove when type inference works in publicodes
}: SimulationGoalProps) {
const dispatch = useDispatch()
const engine = useEngine()
const currentUnit = useSelector(targetUnitSelector)
const situation = useSelector(situationSelector)
const isNotApplicable = UNSAFE_isNotApplicable(engine, dottedName)
const evaluation = engine.evaluate({
valeur: dottedName,
...(!isTypeBoolean ? { unité: currentUnit, arrondi: 'oui' } : {}),
@ -61,20 +54,10 @@ export function SimulationGoal({
},
[dispatch, onUpdateSituation, dottedName]
)
if (
!alwaysShow &&
(isNotApplicable === true ||
(!(dottedName in situation) &&
evaluation.nodeValue === false &&
!(dottedName in evaluation.missingVariables)))
) {
if (evaluation.nodeValue === null) {
return null
}
if (
small &&
!editable &&
(evaluation.nodeValue === null || evaluation.nodeValue === undefined)
) {
if (small && !editable && evaluation.nodeValue === undefined) {
return null
}
@ -125,7 +108,7 @@ export function SimulationGoal({
}
aria-labelledby={`${dottedName}-label`}
aria-describedby={`${dottedName}-description`}
displayedUnit=""
displayedUnit=""
dottedName={dottedName}
onFocus={() => setFocused(true)}
onBlur={() => setFocused(false)}

View File

@ -8,7 +8,11 @@ import styled from 'styled-components'
import SeeAnswersButton from '../conversation/SeeAnswersButton'
import Value from '../EngineValue'
export function CompanyDetails() {
export function CompanyDetails({
showSituation = false,
}: {
showSituation?: boolean
}) {
return (
<StyledCompanyContainer>
<div
@ -31,7 +35,7 @@ export function CompanyDetails() {
</H4>
<Body>
<Trans>
Créee le{' '}
Entreprise créée le{' '}
<Strong>
<Value
expression="entreprise . date de création"
@ -48,14 +52,16 @@ export function CompanyDetails() {
</Trans>
</Body>
</div>
<div
css={`
text-align: right;
`}
>
<SeeAnswersButton />
<Spacing xs />
</div>
{showSituation && (
<div
css={`
text-align: right;
`}
>
<SeeAnswersButton />
<Spacing xs />
</div>
)}
</div>
</StyledCompanyContainer>
)

View File

@ -13,6 +13,9 @@ import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
import CompanySearchDetails from './SearchDetails'
import { FromTop } from '../ui/animate'
import { Message } from '@/design-system'
import { H3 } from '@/design-system/typography/heading'
import { Strong } from '@/design-system/typography'
const StyledCard = styled(Card)`
flex-direction: row; // for Safari <= 13
@ -93,13 +96,15 @@ function Results({
}) {
return !results.length ? (
<FromTop>
<MessageContainer>
<Intro>Aucune entreprise correspondante trouvée</Intro>
<Message type="info" icon>
<Body>
<Strong>Aucune entreprise correspondante trouvée</Strong>
</Body>
<Body>
Vous pouvez réessayer avec votre SIREN ou votre SIRET pour un meilleur
résultat
</Body>
</MessageContainer>
</Message>
</FromTop>
) : (
<FromTop>

View File

@ -43,6 +43,10 @@ export default function AnswerList({ onClose }: AnswerListProps) {
)
.concat(passedQuestions)
.filter((answered) => !(answered in companySituation))
.filter(
(dottedName) =>
engine.getRule(dottedName).rawNode.question !== undefined
)
.map((dottedName) => engine.evaluate(engine.getRule(dottedName))),
[engine, passedQuestions, situation, companySituation]
)

View File

@ -24,6 +24,8 @@ import {
} from 'react'
import { Trans } from 'react-i18next'
import styled from 'styled-components'
import { useEngine } from '../utils/EngineContext'
import { ExplicableRule } from './Explicable'
import { InputProps } from './RuleInput'
const relativeDottedName = (rootDottedName: string, childDottedName: string) =>
@ -119,7 +121,7 @@ export function MultipleAnswerInput<Names extends string = DottedName>({
return (
<Component onChange={handleChange} value={currentSelection ?? undefined}>
<RadioChoice
autoFocus={defaultValue}
autoFocus={defaultValue && props.autoFocus}
choice={choice}
rootDottedName={props.dottedName}
/>
@ -174,11 +176,10 @@ function RadioChoice<Names extends string = DottedName>({
{node.title}{' '}
{node.rawNode.icônes && <Emoji emoji={node.rawNode.icônes} />}
</Radio>{' '}
{node.rawNode.description && (
<ButtonHelp type="info" light title={node.title}>
<Markdown>{node.rawNode.description ?? ''}</Markdown>
</ButtonHelp>
)}
<ExplicableRule
light
dottedName={node.dottedName as DottedName}
/>
</span>
)}
</Fragment>
@ -239,8 +240,8 @@ export function useSelection<Names extends string = DottedName>({
missing ? null : defaultValue
)
const handleChange = useCallback(
(value) => {
value && setCurrentSelection(value)
(value: string) => {
setCurrentSelection(value)
},
[setCurrentSelection]
)

View File

@ -1,11 +1,11 @@
import { NumberFieldProps } from '@react-types/numberfield'
import { EngineContext } from '@/components/utils/EngineContext'
import { NumberField } from '@/design-system/field'
import { ASTNode, serializeUnit, Unit } from 'publicodes'
import { debounce } from '@/utils'
import { NumberFieldProps } from '@react-types/numberfield'
import { ASTNode, parseUnit, serializeUnit, Unit } from 'publicodes'
import { useCallback, useContext, useEffect, useState } from 'react'
import { useTranslation } from 'react-i18next'
import styled from 'styled-components'
import { debounce } from '@/utils'
import InputSuggestions from './InputSuggestions'
import { InputProps } from './RuleInput'
@ -27,9 +27,7 @@ export default function NumberInput({
!missing && value != null && typeof value === 'number' ? value : undefined
)
const { i18n, t } = useTranslation()
displayedUnit =
displayedUnit ??
(unit && getSerializedUnit(currentValue ?? 0, unit, i18n.language, t))
const parsedDisplayedUnit = displayedUnit ? parseUnit(displayedUnit) : unit
const engine = useContext(EngineContext)
useEffect(() => {
if (value !== currentValue) {
@ -40,16 +38,23 @@ export default function NumberInput({
)
}
}, [value])
formatOptions = {
style: 'decimal',
...(unit?.numerators.includes('€')
? {
style: 'currency',
currency: 'EUR',
minimumFractionDigits: 0,
}
: {}),
...formatOptions,
if (parsedDisplayedUnit && parsedDisplayedUnit.numerators.includes('€')) {
parsedDisplayedUnit.numerators = parsedDisplayedUnit.numerators.filter(
(u) => u === '€'
)
formatOptions = {
style: 'currency',
currency: 'EUR',
minimumFractionDigits: 0,
...formatOptions,
}
} else {
formatOptions = {
style: 'decimal',
...formatOptions,
}
}
const debouncedOnChange = useCallback(debounce(1000, onChange), [])
@ -58,7 +63,15 @@ export default function NumberInput({
<NumberField
{...(fieldProps as NumberFieldProps)}
description=""
displayedUnit={displayedUnit}
displayedUnit={
parsedDisplayedUnit &&
getSerializedUnit(
currentValue ?? 0,
parsedDisplayedUnit,
i18n.language,
t
)
}
onChange={(valeur) => {
setCurrentValue(valeur)
if (valeur != null && unité) {

View File

@ -27,6 +27,7 @@ type Props<Names extends string = DottedName> = Omit<
autoFocus?: boolean
small?: boolean
dottedName: Names
label?: string
onChange: (value: PublicodesExpression | undefined, dottedName: Names) => void
// TODO: It would be preferable to replace this "showSuggestions" parameter by
// a build-in logic in the engine, by setting the "applicability" of
@ -191,9 +192,11 @@ export const buildVariantTree = <Name extends string>(
variant.explanation as (ASTNode & {
nodeKind: 'reference'
})[]
).map(({ dottedName }) =>
buildVariantTree(engine, dottedName as Name)
),
)
.filter((node) => engine.evaluate(node).nodeValue !== null)
.map(({ dottedName }) =>
buildVariantTree(engine, dottedName as Name)
),
}
: null
) as Choice

View File

@ -1,5 +1,5 @@
import { Button } from '@/design-system/buttons'
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { Trans } from 'react-i18next'
import Answers from './AnswerList'

View File

@ -1,6 +1,6 @@
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { Link } from '@/design-system/typography/link'
import { Body, Intro } from '@/design-system/typography/paragraphs'
import FeedbackSvg from './feedback.svg'

View File

@ -1,5 +1,5 @@
import { Checkbox } from '@/design-system/field'
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import { Link } from '@/design-system/typography/link'
import { Body, SmallBody } from '@/design-system/typography/paragraphs'
import { useCallback, useContext, useState } from 'react'

View File

@ -1,5 +1,5 @@
import { formatValue } from 'publicodes'
import { useRef } from 'react'
import React, { useRef } from 'react'
import { useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { targetUnitSelector } from '@/selectors/simulationSelectors'

View File

@ -1,6 +1,6 @@
import { DottedName } from 'modele-social'
import Engine, { PublicodesExpression, Rule } from 'publicodes'
import React, { createContext, useContext } from 'react'
import { createContext, default as React, useContext } from 'react'
import i18n from '../../locales/i18n'
export type Rules = Record<DottedName, Rule>

View File

@ -110,8 +110,8 @@ export const Markdown = ({
<MarkdownToJsx
{...otherProps}
options={{
...otherProps.options,
forceBlock: true,
...otherProps.options,
overrides: {
h1: H1,
h2: H2,
@ -127,7 +127,9 @@ export const Markdown = ({
li: Li,
code: CodeBlock,
span: TextRenderer,
blockquote: Message,
blockquote: (props) => (
<Message type="info" border={false} icon {...props} />
),
...components,
},
}}

View File

@ -41,7 +41,6 @@ export function getNextSteps(
): Array<DottedName> {
const byCount = ([, [count]]: [unknown, [number]]) => count
const byScore = ([, [, score]]: [unknown, [unknown, number]]) => score
const missingByTotalScore = reduce<MissingVariables, MissingVariables>(
mergeWith(add),
{},
@ -144,7 +143,9 @@ export const useNextQuestions = function (): Array<DottedName> {
}
return next.filter(
(question) => engine.evaluate(question).nodeValue !== null
(question) =>
engine.evaluate(question).nodeValue !== null &&
engine.getRule(question).rawNode.question !== undefined
)
}, [
missingVariables,

View File

@ -12,6 +12,7 @@ import {
setActiveTarget,
batchUpdateSituation,
} from '@/actions/actions'
import { isEmpty } from 'ramda'
type Objectifs = (string | { objectifs: string[] })[]
type ShortName = string
@ -47,8 +48,9 @@ export default function useSearchParamsSimulationSharing() {
searchParams,
dottedNameParamName
)
dispatch(batchUpdateSituation(newSituation as Situation))
if (!isEmpty(newSituation)) {
dispatch(batchUpdateSituation(newSituation as Situation))
}
const newActiveTarget = Object.keys(newSituation).filter((dottedName) =>
objectifs.includes(dottedName)

View File

@ -16,9 +16,7 @@ export default function useSimulationConfig(
const url = useHistory().location.pathname.split('?')[0]
const lastConfig = useSelector(configSelector)
useEffect(() => {
if (config && lastConfig !== config) {
dispatch(setSimulationConfig(config ?? {}, url))
}
}, [config, dispatch, lastConfig, url])
if (config && lastConfig !== config) {
dispatch(setSimulationConfig(config ?? {}, url))
}
}

View File

@ -0,0 +1,3 @@
<svg width="16" height="10" viewBox="0 0 16 10" xmlns="http://www.w3.org/2000/svg">
<path fill-rule="evenodd" clip-rule="evenodd" fill="#1D458C" d="M15.6585 9.75258C16.0742 9.3889 16.1163 8.75713 15.7526 8.3415L8.75259 0.341496C8.5627 0.124481 8.28838 3.43869e-09 8.00001 0C7.71165 -3.43869e-09 7.43732 0.124481 7.24744 0.341496L0.247437 8.3415C-0.116245 8.75713 -0.0741278 9.38889 0.341509 9.75258C0.757145 10.1163 1.38891 10.0741 1.75259 9.6585L8.00001 2.51859L14.2474 9.6585C14.6111 10.0741 15.2429 10.1163 15.6585 9.75258Z" />
</svg>

After

Width:  |  Height:  |  Size: 540 B

View File

@ -0,0 +1,47 @@
import { ComponentStory, ComponentMeta } from '@storybook/react'
import { Accordion } from '@/design-system'
import { Body } from '@/design-system/typography/paragraphs'
import { Item } from '@react-stately/collections'
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {
component: Accordion,
// More on argTypes: https://storybook.js.org/docs/react/api/argtypes
} as ComponentMeta<typeof Accordion>
// More on component templates: https://storybook.js.org/docs/react/writing-stories/introduction#using-args
const Template: ComponentStory<typeof Accordion> = (args) => (
<Accordion {...args}>
<Item key="lorem-ipsum" title="Lorem ipsum" hasChildItems={false}>
<Body>
Nam ipsum doloribus non. Deserunt consequatur quam consectetur odio.
Dolor eos est et omnis quas nulla repellat. Velit voluptate sequi et
voluptatibus sed dolorem dolorum.
</Body>
<Body>
Totam et reprehenderit aliquam hic dolorum ipsum. Iste et neque eos
voluptas deserunt harum. Mollitia numquam incidunt nihil laboriosam.
Error autem possimus quaerat veniam ut explicabo ut. Error esse est
reprehenderit quae dolor occaecati quas laboriosam.
</Body>
</Item>
<Item
key="eligendi-et-voluptatem"
title="Eligendi et voluptatem"
hasChildItems={false}
>
<Body>
Qui tempora tenetur eum voluptatibus sit et assumenda fuga. Temporibus
hic ut in maxime omnis esse et nam. Aliquam veritatis perferendis quia
enim dolorem molestiae. Impedit eaque optio iste. Eligendi et voluptatem
voluptate corporis perferendis.
</Body>
</Item>
</Accordion>
)
export const Basic = Template.bind({})
// More on args: https://storybook.js.org/docs/react/writing-stories/args
Basic.args = {
defaultExpandedKeys: ['lorem-ipsum'],
}

View File

@ -0,0 +1,130 @@
import { FocusStyle } from '@/design-system/global-style'
import { useAccordion, useAccordionItem } from '@react-aria/accordion'
import { filterDOMProps } from '@react-aria/utils'
import { TreeState, useTreeState } from '@react-stately/tree'
import { AriaAccordionProps } from '@react-types/accordion'
import { Node } from '@react-types/shared'
import React, { useRef } from 'react'
import { animated, useSpring } from 'react-spring'
import useMeasure from 'react-use-measure'
import styled, { css } from 'styled-components'
import chevronImg from './chevron.svg'
export default function Accordion<T extends object>(
props: AriaAccordionProps<T>
) {
const state = useTreeState<T>(props)
const ref = useRef<HTMLDivElement>(null)
const { accordionProps } = useAccordion(props, state, ref)
return (
<StyledAccordionGroup
{...filterDOMProps(props)}
{...accordionProps}
ref={ref}
>
{[...state.collection].map((item) => (
<AccordionItem<T> key={item.key} item={item} state={state} />
))}
</StyledAccordionGroup>
)
}
const StyledAccordionGroup = styled.div`
overflow: hidden;
${({ theme }) =>
css`
border-radius: ${theme.box.borderRadius};
border: 1px solid ${theme.colors.bases.primary[400]};
margin-bottom: ${theme.spacings.lg};
`}
`
interface AccordionItemProps<T> {
item: Node<T>
state: TreeState<T>
}
function AccordionItem<T>(props: AccordionItemProps<T>) {
const ref = useRef<HTMLButtonElement>(null)
const { state, item } = props
const { buttonProps, regionProps } = useAccordionItem<T>(props, state, ref)
const isOpen = state.expandedKeys.has(item.key)
// const isDisabled = state.disabledKeys.has(item.key)
const [regionRef, { height }] = useMeasure()
const animatedStyle = useSpring({
reset: false,
to: isOpen
? { opacity: 1, height: height + 48 } // We add 48px that corresponds to the margin
: { opacity: 0, height: 0 },
})
return (
<StyledAccordionItem>
<StyledTitle>
<StyledButton {...buttonProps} ref={ref}>
<span>{item.props.title}</span>
<ChevronRightMedium aria-hidden="true" $isOpen={isOpen} />
</StyledButton>
</StyledTitle>
<StyledContent {...regionProps} style={animatedStyle}>
<div ref={regionRef}>{item.props.children}</div>
</StyledContent>
</StyledAccordionItem>
)
}
const StyledTitle = styled.h3`
margin: 0;
`
const StyledAccordionItem = styled.div`
:not(:first-child) {
border-top: 1px solid ${({ theme }) => theme.colors.bases.primary[400]};
}
`
const StyledButton = styled.button`
display: flex;
width: 100%;
justify-content: space-between;
${({ theme }) => css`
font-family: ${theme.fonts.main};
font-size: ${theme.baseFontSize};
color: ${theme.colors.bases.primary[700]};
padding: ${theme.spacings.lg};
background-color: ${theme.colors.bases.primary[100]};
> span {
border-radius: ${theme.box.borderRadius};
}
`}
:hover {
text-decoration: underline;
}
:focus {
outline: none;
}
:focus > span {
${FocusStyle}
}
`
const ChevronRightMedium = styled.img.attrs({ src: chevronImg })<{
$isOpen: boolean
}>`
transition: transform 0.3s;
${({ $isOpen }) =>
$isOpen &&
css`
transform: rotate(180deg);
`}
`
const StyledContent = styled(animated.div)`
overflow: hidden;
${({ theme }) => css`
/* border-top: 1px solid ${theme.colors.bases.primary[400]}; */
`}
> div {
margin: ${({ theme }) => theme.spacings.lg};
}
`

View File

@ -1,13 +1,16 @@
import { Grid } from '@mui/material'
import { Children, FunctionComponent, ReactNode } from 'react'
import { Children, ComponentProps, FunctionComponent, ReactNode } from 'react'
type AnswerGroupProps = {
children: ReactNode
}
} & ComponentProps<typeof Grid>
const AnswerGroup: FunctionComponent<AnswerGroupProps> = ({ children }) => {
const AnswerGroup: FunctionComponent<AnswerGroupProps> = ({
children,
...props
}) => {
return (
<Grid container justifyContent="flex-start" spacing={3}>
<Grid container spacing={3} {...props}>
{Children.map(children, (c, i) => (
<Grid key={`answerGroup-${i}`} item sm={12} md="auto">
{c}

View File

@ -1,4 +1,4 @@
import PopoverWithTrigger from '@/design-system/PopoverWithTrigger'
import { PopoverWithTrigger } from '@/design-system'
import React from 'react'
import { Trans } from 'react-i18next'
import styled from 'styled-components'

View File

@ -2,7 +2,9 @@ export * as button from './buttons'
export * from './field'
export { GlobalStyle } from './global-style'
export * as layout from './layout'
export { default as Popover } from './Popover'
export { default as PopoverWithTrigger } from './PopoverWithTrigger'
export { default as Popover } from './popover/Popover'
export { default as PopoverWithTrigger } from './popover/PopoverWithTrigger'
export * as typography from './typography'
export * from './message'
export { default as Accordion } from './accordion'
export { Step, Stepper } from './stepper'

View File

@ -5,6 +5,7 @@ import infoIcon from './infoIcon.svg'
import errorIcon from './errorIcon.svg'
import successIcon from './successIcon.svg'
import { Body } from '../typography/paragraphs'
import { Palette, SmallPalette } from '../styled'
type MessageType = 'primary' | 'secondary' | 'info' | 'error' | 'success'
type MessageProps = {
@ -74,9 +75,9 @@ const StyledMessage = styled.div<
>`
display: flex;
position: relative;
align-items: flex-start;
align-items: baseline;
${({ theme, type, border, light }) => {
const colorSpace =
const colorSpace: Palette | SmallPalette =
type === 'secondary' || type === 'primary'
? theme.colors.bases[type]
: theme.colors.extended[type]
@ -87,6 +88,13 @@ const StyledMessage = styled.div<
border: 2px solid ${colorSpace[border ? 500 : 100]};
border-radius: ${theme.box.borderRadius};
margin-bottom: ${theme.spacings.md};
h3,
h4,
h5,
h6 {
color: ${(colorSpace as Palette)[700] ?? colorSpace[600]};
}
`
}}
`

View File

@ -13,8 +13,8 @@ import {
import { AriaDialogProps } from '@react-types/dialog'
import React, { RefObject, useEffect, useRef, useState } from 'react'
import styled, { css, keyframes, ThemeProvider } from 'styled-components'
import { Container } from './layout'
import { H2 } from './typography/heading'
import { Container } from '../layout'
import { H2 } from '../typography/heading'
const useIFrameOffset = () => {
const [offsetTop, setOffset] = useState<number | null | undefined>(

View File

@ -12,7 +12,7 @@ import React, {
} from 'react'
import { useLocation } from 'react-router'
import Popover from './Popover'
import { Link } from './typography/link'
import { Link } from '../typography/link'
type ButtonBuilderProps = AriaButtonProps & {
ref: Ref<HTMLButtonElement>

View File

@ -0,0 +1,33 @@
import { ComponentStory, ComponentMeta } from '@storybook/react'
import { Step, Stepper } from '@/design-system'
import { MemoryRouter } from 'react-router-dom'
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {
component: Stepper,
// More on argTypes: https://storybook.js.org/docs/react/api/argtypes
} as ComponentMeta<typeof Step>
const Template: ComponentStory<typeof Stepper> = (args) => (
<MemoryRouter initialEntries={['/step-2']}>
<Stepper {...args}>
<Step to={'/'} progress={1}>
Première étape
</Step>
<Step to={'/step-2'} progress={0.2}>
Deuxième étape
</Step>
<Step to={'/step-3'} progress={0}>
Troisième étape
</Step>
<Step to={'/step-4'} progress={0} isDisabled>
Dernière étape
</Step>
</Stepper>
</MemoryRouter>
)
export const Basic = Template.bind({})
Basic.args = {
'aria-label': 'Étapes du formulaire en cours',
}

View File

@ -0,0 +1,162 @@
import { useProgressBar } from '@react-aria/progress'
import { useSSRSafeId } from '@react-aria/ssr'
import { Trans } from 'react-i18next'
import { AriaButtonProps } from '@react-types/button'
import styled, { css } from 'styled-components'
import { Link } from '../typography/link'
import { Link as RouterLink } from 'react-router-dom'
import { useRouteMatch } from 'react-router'
import { ComponentPropsWithRef } from 'react'
type Props = {
isDisabled?: boolean
progress: number
to: string
} & AriaButtonProps<typeof RouterLink> &
ComponentPropsWithRef<typeof RouterLink>
export function Step({
isDisabled = false,
progress,
children,
...props
}: Props) {
const labelId = useSSRSafeId()
if (import.meta.env.DEV && (progress > 1 || progress < 0)) {
throw new TypeError('`progress` should be a number between 0 and 1')
}
const active = !!useRouteMatch({ path: props.to, exact: true })
const propsBar = {
'aria-labelledby': labelId,
minValue: 0,
maxValue: 100,
value: progress * 100,
}
const { progressBarProps } = useProgressBar(propsBar)
return (
<StyledStepContainer {...(active && { 'aria-current': 'step' })}>
<StyledStep $active={active} isDisabled={isDisabled} {...props}>
<div id={labelId}>
<StyledStepNumber $active={active} $disabled={isDisabled} />
{children}
</div>
<div className="sr-only">
{progress > 0 ? (
<Trans>Étape non complétée</Trans>
) : (
progress === 1 && <Trans>Étape complétée</Trans>
)}
</div>
<StyledProgressBar
$active={active}
$progress={progress}
$isDisabled={isDisabled}
{...progressBarProps}
></StyledProgressBar>
</StyledStep>
</StyledStepContainer>
)
}
export function Stepper({
children,
...props
}: { children: Array<React.ReactElement<Props, typeof Step>> } & (
| { 'aria-label': string }
| { 'aria-labelledby': string }
)) {
return (
<div role="group" {...props}>
<StyledStepper>{children}</StyledStepper>
</div>
)
}
const StyledStepper = styled.ol`
margin: 0;
padding: 0;
list-style-type: none;
`
const StyledStepContainer = styled.li`
counter-increment: step-counter;
display: inline-block;
margin-right: ${({ theme }) => theme.spacings.lg};
:last-child {
margin-right: 0;
}
margin-bottom: ${({ theme }) => theme.spacings.md};
* {
transition: background-color 0.1s, color 0.1s, border-color 0.1s;
}
`
const StyledStepNumber = styled.span<{ $active: boolean; $disabled: boolean }>`
::before {
content: counter(step-counter);
font-size: 1.125rem;
font-weight: 500;
}
display: inline-flex;
align-items: center;
justify-content: center;
border-radius: 100%;
height: ${({ theme }) => theme.spacings.xl};
width: ${({ theme }) => theme.spacings.xl};
color: ${({ theme, $disabled }) =>
theme.colors.extended.grey[$disabled ? 600 : 100]};
border: 2px solid
${({ theme, $active, $disabled }) =>
$disabled
? theme.colors.extended.grey[600]
: theme.colors.bases.primary[$active ? 800 : 600]};
background-color: ${({ theme, $active, $disabled }) =>
$disabled
? 'transparent'
: theme.colors.bases.primary[$active ? 800 : 600]};
margin-right: ${({ theme }) => theme.spacings.xs};
`
const StyledStep = styled(Link)<{ $active: boolean }>`
text-decoration: none;
text-align: left;
display: inline-block;
${({ $active, theme }) =>
$active
? css`
color: ${theme.colors.bases.primary[800]};
`
: css`
font-weight: inherit;
`};
`
const StyledProgressBar = styled.div<{
$active: boolean
$progress: number
$isDisabled: boolean
}>`
width: 10.115rem;
height: 0.375rem;
margin-top: ${({ theme }) => theme.spacings.md};
border-radius: ${({ theme }) => theme.box.borderRadius};
background-color: ${({ theme }) => theme.colors.extended.grey[300]};
position: relative;
::after {
display: block;
content: '';
height: inherit;
border-radius: inherit;
width: ${({ $progress }) => $progress * 100}%;
min-width: ${({ theme, $active }) => $active && theme.spacings.xs};
background-color: ${({ theme, $active, $isDisabled }) =>
$isDisabled
? theme.colors.extended.grey[600]
: theme.colors.bases.primary[$active ? 800 : 600]};
z-index: 1;
position: absolute;
transition: width 0.2s;
}
`

View File

@ -19,8 +19,11 @@ export const StyledLinkHover = css`
? theme.colors.bases.primary[100]
: theme.colors.bases.primary[800]};
`
export const StyledLink = styled.a`
color: ${({ theme }) => theme.colors.bases.primary[700]};
export const StyledLink = styled.a<{ isDisabled?: boolean }>`
color: ${({ theme, isDisabled }) =>
isDisabled
? theme.colors.extended.grey[600]
: theme.colors.bases.primary[700]};
${({ theme }) =>
theme.darkMode &&
css`
@ -28,6 +31,11 @@ export const StyledLink = styled.a`
color: ${theme.colors.extended.grey[100]};
}
`}
${({ isDisabled }) =>
isDisabled &&
css`
cursor: default;
`}
font-family: ${({ theme }) => theme.fonts.main};
font-weight: 700;
padding: 0;
@ -35,7 +43,7 @@ export const StyledLink = styled.a`
text-decoration: none;
border-radius: ${({ theme }) => theme.box.borderRadius};
&:hover {
${StyledLinkHover}
${({ isDisabled }) => !isDisabled && StyledLinkHover}
}
&:focus-visible {
${FocusStyle}

View File

@ -1,5 +1,5 @@
import { ComponentStory, ComponentMeta } from '@storybook/react'
import { Li, Ul } from '@/design-system/typography/list'
import { Li, Ol, Ul } from '@/design-system/typography/list'
// More on default export: https://storybook.js.org/docs/react/writing-stories/introduction#default-export
export default {
@ -25,3 +25,15 @@ export const XL = Template.bind({})
XL.args = {
size: 'XL',
}
const OlTemplate: ComponentStory<typeof Ol> = (args) => (
<Ol {...args}>
<Li>Élément 1</Li>
<Li>Élément 2</Li>
<Li>Élément 3</Li>
</Ol>
)
export const Numbered = OlTemplate.bind({})
// More on args: https://storybook.js.org/docs/react/writing-stories/args
Numbered.args = {}

View File

@ -1,12 +1,13 @@
import styled, { css } from 'styled-components'
import { baseParagraphStyle } from './paragraphs'
type UlProps = {
type ListProps = {
size?: 'XS' | 'MD' | 'XL'
}
export const Li = styled.li``
export const Ul = styled.ul<UlProps>`
const BaseListStyle = css<ListProps>`
${baseParagraphStyle}
font-size: 1rem;
line-height: 1.5rem;
@ -29,16 +30,73 @@ export const Ul = styled.ul<UlProps>`
position: relative;
padding-left: ${({ theme }) => theme.spacings.lg};
margin-bottom: ${({ theme }) => theme.spacings.xs};
&::before {
content: '●';
font-size: 80%;
display: inline-block;
position: absolute;
left: 0;
width: ${({ theme }) => theme.spacings.lg};
text-align: center;
color: ${({ theme }) => theme.colors.bases.secondary[400]};
margin-bottom: ${({ theme }) => theme.spacings.xs};
}
}
`
export const Ul = styled.ul<ListProps>`
${BaseListStyle}
${Li}::before {
content: '●';
font-size: 80%;
display: inline-block;
position: absolute;
left: 0;
width: ${({ theme }) => theme.spacings.lg};
text-align: center;
color: ${({ theme }) => theme.colors.bases.secondary[400]};
margin-bottom: ${({ theme }) => theme.spacings.xs};
}
`
export const Ol = styled.ol<ListProps>`
${BaseListStyle}
padding-left: ${({ theme }) => theme.spacings.xl};
${({ size = 'MD', theme }) =>
size === 'XS'
? css`
font-size: 0.875rem;
padding-left: ${theme.spacings.lg};
line-height: 1.25rem;
`
: size === 'XL' &&
css`
font-size: 1.25rem;
line-height: 2rem;
padding-left: ${theme.spacings.xxl};
`}
${Li} {
counter-increment: step-counter;
}
${Li}::before {
content: counter(step-counter);
font-size: 1.125rem;
font-weight: 500;
border-radius: 100%;
justify-content: center;
align-items: center;
display: inline-flex;
position: absolute;
left: 0;
${({ theme, size }) => css`
width: ${theme.spacings.lg};
height: ${theme.spacings.lg};
background-color: ${theme.colors.bases.secondary[500]};
color: ${theme.colors.extended.grey[100]};
vertical-align: baseline;
${size === 'XS'
? css`
font-size: 0.875rem;
width: ${theme.spacings.md};
height: ${theme.spacings.md};
`
: size === 'XL' &&
css`
font-size: 1.25rem;
width: ${theme.spacings.xl};
height: ${theme.spacings.xl};
`}
`}
}
`

View File

@ -0,0 +1,42 @@
import { useMemo } from 'react'
import { useTranslation } from 'react-i18next'
/*
Return the ordinal localized string (first, second, etc...)
*/
const suffixes = {
en: {
one: 'st',
two: 'nd',
few: 'rd',
other: 'th',
},
fr: {
one: 'ère',
other: 'ème',
},
}
export function useOrdinal(n: number): string {
const language = useTranslation().i18n.language
if (language !== 'fr' && language !== 'en') {
throw new Error(`Le language ${language} n'est pas supporté`)
}
const pr = useMemo(
() => new Intl.PluralRules(language, { type: 'ordinal' }),
[language]
)
const rule = pr.select(n)
const suffix: Partial<Record<Intl.LDMLPluralRule, string>> =
suffixes[language]
if (!(rule in suffix)) {
throw new Error(
`Le cardinal de ${n} n'est pas défini dans le langage ${language}`
)
}
return `${n}${suffix[rule] ?? ''}`
}

View File

@ -0,0 +1,33 @@
import {
setBénéficeType,
addCommuneDetails,
setCompany,
} from '@/actions/companyActions'
import fetchBénéfice from '@/api/activité-vers-bénéfice'
import { fetchCommuneDetails } from '@/api/commune'
import { FabriqueSocialEntreprise } from '@/api/fabrique-social'
import { useDispatch } from 'react-redux'
export function useSetEntreprise() {
const dispatch = useDispatch()
return (entreprise: FabriqueSocialEntreprise | null) => {
if (entreprise === null) {
return
}
dispatch(setCompany(entreprise))
void fetchCommuneDetails(
entreprise.firstMatchingEtablissement.codeCommuneEtablissement,
entreprise.firstMatchingEtablissement.codePostalEtablissement
).then(
(communeDetails) =>
communeDetails && dispatch(addCommuneDetails(communeDetails))
)
void fetchBénéfice(
entreprise.firstMatchingEtablissement.activitePrincipaleEtablissement
).then((bénéfice) => bénéfice && dispatch(setBénéficeType(bénéfice)))
}
}

View File

@ -1,3 +1,362 @@
DRI:
titre.en: '[automatic] DRI'
titre.fr: DRI
DRI . accompagnement imposition:
titre.en: '[automatic] Assistant in support mode'
titre.fr: Assistant en mode accompagnement
DRI . accompagnement imposition . bénéfice:
titre.en: '[automatic] profit'
titre.fr: bénéfice
DRI . accompagnement imposition . bénéfice . exceptions:
titre.en: '[automatic] exceptions'
titre.fr: exceptions
DRI . accompagnement imposition . bénéfice . explications:
titre.en: '[automatic] explanations'
titre.fr: explications
DRI . accompagnement imposition . bénéfice . situation:
titre.en: '[automatic] situation'
titre.fr: situation
DRI . accompagnement imposition . explications:
titre.en: '[automatic] explanations'
titre.fr: explications
DRI . accompagnement imposition . explications . situation:
titre.en: '[automatic] situation'
titre.fr: situation
DRI . accompagnement imposition . régime:
titre.en: '[automatic] diet'
titre.fr: régime
DRI . accompagnement imposition . régime memento fiscal:
question.en: |-
[automatic] In the "Your Tax Obligations" section,
what is the "**tax regime**" listed on the first line?
question.fr: |-
Dans la section « **vos obligations fiscales** »,
quel est le « **régime d'imposition** » inscrit sur la première ligne ?
titre.en: '[automatic] tax memento system'
titre.fr: régime memento fiscal
DRI . accompagnement imposition . régime memento fiscal . DECC:
titre.en: '[automatic] DECC - Controlled declaration system'
titre.fr: DECC - Régime de la déclaration contrôlée
DRI . accompagnement imposition . régime memento fiscal . MICROE:
titre.en: '[automatic] MICROE - Microenterprise regime'
titre.fr: MICROE - Régime des micro-entreprises
DRI . accompagnement imposition . régime memento fiscal . RN:
titre.en: '[automatic] RN - Normal Real'
titre.fr: RN - Réel normal
DRI . accompagnement imposition . régime memento fiscal . RSI:
titre.en: '[automatic] RSI - Real Simplified Taxation'
titre.fr: RSI - Réel simplifié d'imposition
DRI . accompagnement imposition . régime memento fiscal . SPECIAL:
description.en: '[automatic] The special regime corresponds to the
**microenterprise regime** for non-commercial profits (BNC)'
description.fr: Le régime spécial correspond au **régime de la
micro-entreprise** pour les bénéfices de type non commerciaux (BNC)
titre.en: '[automatic] SPECIAL - Special regime for non-commercial profits'
titre.fr: SPECIAL - Régime spécial des bénéfices non commerciaux
DRI . accompagnement imposition . type:
titre.en: '[automatic] type'
titre.fr: type
DRI . accompagnement imposition . type . exceptions:
titre.en: '[automatic] exceptions'
titre.fr: exceptions
DRI . accompagnement imposition . type . situation:
titre.en: '[automatic] situation'
titre.fr: situation
DRI . accompagnement imposition par défaut:
titre.en: '[automatic] accompaniment by default taxation'
titre.fr: accompagnement imposition par défaut
DRI . cas exclus:
titre.en: '[automatic] excluded cases'
titre.fr: cas exclus
DRI . cas exclus . autres outils:
titre.en: '[automatic] other tools'
titre.fr: autres outils
DRI . cas exclus . désolé:
titre.en: '[automatic] sorry'
titre.fr: désolé
DRI . comptable:
titre.en: '[automatic] accountant'
titre.fr: comptable
DRI . cotisations:
titre.en: '[automatic] contributions'
titre.fr: cotisations
DRI . cotisations . appelées en 2021:
question.en:
'[automatic] What is the amount of provisional contributions called
for in 2021?'
question.fr: Quel est le montant des cotisations provisionnelles appelées en 2021 ?
titre.en: '[automatic] called in 2021'
titre.fr: appelées en 2021
DRI . cotisations . assiette CSG:
titre.en: '[automatic] CSG base'
titre.fr: assiette CSG
DRI . cotisations . assiette des cotisations:
titre.en: '[automatic] basis of assessment'
titre.fr: assiette des cotisations
DRI . cotisations . régularisation:
titre.en: '[automatic] regularization'
titre.fr: régularisation
DRI . déclaration revenus:
question.en: '[automatic] Who is the person concerned?'
question.fr: Quelle est la personne concernée ?
titre.en: '[automatic] income tax return'
titre.fr: déclaration revenus
DRI . déclaration revenus . BIC:
résumé.en: '[automatic] Including professional furnished rentals'
résumé.fr: Y compris locations meublées professionnelles
titre.en: '[automatic] Professional industrial and commercial income'
titre.fr: Revenus industriels et commerciaux professionnels
DRI . déclaration revenus . BIC . Régime du bénéfice réel:
titre.en: '[automatic] Real profit system'
titre.fr: Régime du bénéfice réel
DRI . déclaration revenus . BIC . durée de l'exercice:
titre.en: '[automatic] duration of the exercise'
titre.fr: durée de l'exercice
DRI . déclaration revenus . BIC . déficits:
titre.en: '[automatic] deficits'
titre.fr: déficits
DRI . déclaration revenus . BIC . moins-values:
note.en: '[automatic] of which short-term capital losses'
note.fr: dont moins-values à court terme
titre.en: '[automatic] capital losses'
titre.fr: moins-values
DRI . déclaration revenus . BIC . plus-values:
note.en: '[automatic] of which short-term capital gains, capital grants,
insurance proceeds from loss of assets'
note.fr: dont plus-values à court terme, subventions déquipement, indemnités
dassurance pour perte délément dactif
titre.en: '[automatic] '
titre.fr: ' '
DRI . déclaration revenus . BIC . revenus exonérés:
note.en: '[automatic] zoned regimes article 1417, IV, b of the general tax code'
note.fr: régimes zonés article 1417, IV, b du code général des impôts
titre.en: '[automatic] exempt income'
titre.fr: revenus exonérés
DRI . déclaration revenus . BIC . revenus imposables:
note.en: '[automatic] general case'
note.fr: cas général
titre.en: '[automatic] taxable income'
titre.fr: revenus imposables
DRI . déclaration revenus . BNC:
titre.en: '[automatic] Professional non-commercial income'
titre.fr: Revenus non commerciaux professionnels
DRI . déclaration revenus . BNC . durée de l'exercice:
titre.en: '[automatic] duration of the exercise'
titre.fr: durée de l'exercice
DRI . déclaration revenus . BNC . déficits:
note.en: '[automatic] including non-professional inventors'
note.fr: y compris inventeurs non professionnels
titre.en: '[automatic] deficits'
titre.fr: déficits
DRI . déclaration revenus . BNC . jeunes créateurs:
titre.en: '[automatic] Young creators: 50% deduction'
titre.fr: 'Jeunes créateurs : abattement de 50 %'
DRI . déclaration revenus . BNC . moins-values:
note.en: '[automatic] of which short-term capital losses'
note.fr: dont moins-values à court terme
titre.en: '[automatic] capital losses'
titre.fr: moins-values
DRI . déclaration revenus . BNC . plus-values:
note.en: '[automatic] of which short-term capital gains, capital grants,
insurance proceeds from loss of assets'
note.fr: dont plus-values à court terme, subventions déquipement, indemnités
dassurance pour perte délément dactif
titre.en: '[automatic] '
titre.fr: ' '
DRI . déclaration revenus . BNC . revenus exonérés:
note.en: '[automatic] zoned regimes article 1417, IV, b of the general tax code'
note.fr: régimes zonés article 1417, IV, b du code général des impôts
titre.en: '[automatic] exempt income'
titre.fr: revenus exonérés
DRI . déclaration revenus . BNC . revenus imposables:
note.en: '[automatic] general case'
note.fr: cas général
titre.en: '[automatic] taxable income'
titre.fr: revenus imposables
DRI . déclaration revenus . BNC . régime de la déclaration contrôlée:
titre.en: '[automatic] controlled declaration system'
titre.fr: régime de la déclaration contrôlée
DRI . déclaration revenus . déclarant 1:
titre.en: '[automatic] declarant 1'
titre.fr: déclarant 1
DRI . déclaration revenus . déclarant 2:
titre.en: '[automatic] declarant 2'
titre.fr: déclarant 2
DRI . déclaration revenus . indépendant:
titre.en: '[automatic] Additional data from the income tax return for
self-employed persons'
titre.fr: Données complémentaires de la déclaration de revenu des indépendants
DRI . déclaration revenus . indépendant . cotisations facultatives:
titre.en: '[automatic] optional contributions'
titre.fr: cotisations facultatives
DRI . déclaration revenus . indépendant . cotisations sociales:
titre.en: '[automatic] social contributions'
titre.fr: cotisations sociales
DRI . liasse:
titre.en: '[automatic] bundle'
titre.fr: liasse
DRI . liasse . OGA:
question.en: '[automatic] Are you a member of an OGA?'
question.fr: Êtes-vous adhérant à une OGA ?
titre.en: '[automatic] OGA'
titre.fr: OGA
DRI . liasse . déclaration contrôlée:
titre.en: '[automatic] controlled declaration'
titre.fr: déclaration contrôlée
DRI . liasse . déclaration contrôlée . AW:
résumé.en: '[automatic] of which exemption on "new business" profits'
résumé.fr: dont exonération sur le bénéfice « entreprise nouvelle »
titre.en: '[automatic] AW'
titre.fr: AW
DRI . liasse . déclaration contrôlée . BT:
résumé.en: '[automatic] of which mandatory'
résumé.fr: dont obligatoires
titre.en: '[automatic] BT'
titre.fr: BT
DRI . liasse . déclaration contrôlée . BU:
résumé.en: '[automatic] including optional to new retirement savings plans'
résumé.fr: dont facultatives aux nouveaux plans d'épargne retraite
titre.en: '[automatic] BU'
titre.fr: BU
DRI . liasse . déclaration contrôlée . BV:
résumé.en: '[automatic] deductible generalized social contribution'
résumé.fr: contribution sociale généralisée déductible
titre.en: '[automatic] BV'
titre.fr: BV
DRI . liasse . déclaration contrôlée . BZ:
résumé.en: '[automatic] of which optional Madelin contributions'
résumé.fr: dont cotisations facultatives Madelin
titre.en: '[automatic] BZ'
titre.fr: BZ
DRI . liasse . déclaration contrôlée . CB:
résumé.en: '[automatic] Short-term capital gain'
résumé.fr: Plus-value à court terme
titre.en: '[automatic] CB'
titre.fr: CB
DRI . liasse . déclaration contrôlée . CE:
résumé.en: '[automatic] Total'
résumé.fr: Total
titre.en: '[automatic] CE'
titre.fr: CE
DRI . liasse . déclaration contrôlée . CI:
résumé.en:
'[automatic] of which doctor exemption for "areas with a shortage of
health care".'
résumé.fr: dont exonération médecin « zones déficitaires en offre de soin »
titre.en: '[automatic] CI'
titre.fr: CI
DRI . liasse . déclaration contrôlée . CJ:
résumé.en: '[automatic] of which Covid Solidarity Fund'
résumé.fr: dont aides Fonds de solidarité Covid
titre.en: '[automatic] CJ'
titre.fr: CJ
DRI . liasse . déclaration contrôlée . CK:
résumé.en: '[automatic] Short-term capital loss'
résumé.fr: Moins-value à court terme
titre.en: '[automatic] CK'
titre.fr: CK
DRI . liasse . déclaration contrôlée . CN:
résumé.en: '[automatic] Total'
résumé.fr: Total
titre.en: '[automatic] CN'
titre.fr: CN
DRI . liasse . déclaration contrôlée . CO:
résumé.en: '[automatic] of which exemption on the "young artists" benefit'
résumé.fr: dont exonération sur le bénéfice « jeunes artistes »
titre.en: '[automatic] CO'
titre.fr: CO
DRI . liasse . déclaration contrôlée . CQ:
résumé.en: '[automatic] of which deduction for "sector 1 physicians'
résumé.fr: dont déduction « médecin conventionnés de secteur 1 »
titre.en: '[automatic] CQ'
titre.fr: CQ
DRI . liasse . déclaration contrôlée . CS:
résumé.en: '[automatic] of which exemption on the "urban free zone entrepreneur" profit'
résumé.fr: dont exonération sur le bénéfice « zone franche urbaine entrepreneur »
titre.en: '[automatic] CS'
titre.fr: CS
DRI . liasse . déclaration contrôlée . CT:
résumé.en: '[automatic] including the contribution to employee savings plans'
résumé.fr: dont l'abondement sur l'épargne salariale
titre.en: '[automatic] CT'
titre.fr: CT
DRI . liasse . déclaration contrôlée . CU:
résumé.en: '[automatic] of which exemption on "young innovative companies" profits'
résumé.fr: dont exonération sur le bénéfice « jeunes entreprise innovantes »
titre.en: '[automatic] CU'
titre.fr: CU
DRI . liasse . déclaration contrôlée . charges sociales personnelles:
titre.en: '[automatic] personal social charges'
titre.fr: charges sociales personnelles
DRI . liasse . déclaration contrôlée . divers à déduire:
titre.en: '[automatic] miscellaneous deductible'
titre.fr: divers à déduire
DRI . liasse . déclaration contrôlée . excedents:
titre.en: '[automatic] surpluses'
titre.fr: excedents
DRI . liasse . déclaration contrôlée . impôts et taxe:
titre.en: '[automatic] taxes and duties'
titre.fr: impôts et taxe
DRI . liasse . déclaration contrôlée . insuffisance:
titre.en: '[automatic] insufficiency'
titre.fr: insuffisance
DRI . liasse . remboursement cotisation:
question.en: '[automatic] Did you receive a contribution refund in 2021?'
question.fr: Avez vous reçu un remboursement de cotisation en 2021 ?
titre.en: '[automatic] reimbursement of contribution'
titre.fr: remboursement cotisation
DRI . liasse . réel normal:
titre.en: '[automatic] real normal'
titre.fr: réel normal
DRI . liasse . réel simplifié:
titre.en: '[automatic] simplified real'
titre.fr: réel simplifié
DRI . liasse . réel simplifié . Divers:
titre.en: '[automatic] Various'
titre.fr: Divers
DRI . liasse . réel simplifié . Déductions:
titre.en: '[automatic] Deductions'
titre.fr: Déductions
DRI . liasse . réel simplifié . c326:
résumé.en: '[automatic] of which amount deductible from compulsory social
security contributions'
résumé.fr: dont montant déductible des cotisations sociales obligatoires
titre.en: '[automatic] 326'
titre.fr: '326'
DRI . liasse . réel simplifié . c342:
résumé.en: '[automatic] Deductions'
résumé.fr: Déductions
titre.en: '[automatic] 342'
titre.fr: '342'
DRI . liasse . réel simplifié . c370:
résumé.en: '[automatic] Profit'
résumé.fr: Bénéfice
titre.en: '[automatic] 370'
titre.fr: '370'
DRI . liasse . réel simplifié . c372:
résumé.en: '[automatic] Deficit'
résumé.fr: Déficit
titre.en: '[automatic] 372'
titre.fr: '372'
DRI . liasse . réel simplifié . c381:
résumé.en: '[automatic] Optional premiums and supplementary contributions'
résumé.fr: Primes et cotisations complémentaires facultatives
titre.en: '[automatic] 381'
titre.fr: '381'
DRI . liasse . réel simplifié . c596:
résumé.en: '[automatic] Short term'
résumé.fr: Court terme
titre.en: '[automatic] 596'
titre.fr: '596'
DRI . liasse . réel simplifié . plus-values et moins-values:
titre.en: '[automatic] capital gains and losses'
titre.fr: plus-values et moins-values
DRI . liasse . réel simplifié . résultat:
titre.en: '[automatic] Taxable income after deduction of deficits'
titre.fr: Résultat fiscal après imputation des déficits
DRI . nombre de déclarations:
titre.en: '[automatic] number of declarations'
titre.fr: nombre de déclarations
SMIC horaire:
note.en: >
[automatic] In principle, and unless there is a "boost", the SMIC is
@ -6362,7 +6721,7 @@ dirigeant . rémunération . totale:
résumé.fr: Incluant les cotisations et contributions
titre.en: '[automatic] Total compensation'
titre.fr: Rémunération totale
déclaration indépendants:
déclaration charge sociales:
description.en:
'[automatic] These rules calculate the amounts of social charges
to be reported in the income tax return of the self-employed and in the
@ -6370,9 +6729,9 @@ déclaration indépendants:
description.fr: Ces règles calculent les montants des charges sociales à
reporter dans la déclaration de revenu des indépendants et dans les
déclaration de résultats.
titre.en: '[automatic] assistance declaration independent income 2020'
titre.fr: déclaration indépendants
déclaration indépendants . ACRE:
titre.en: '[automatic] social security declaration'
titre.fr: déclaration charge sociales
déclaration charge sociales . ACRE:
description.en: >-
[automatic] The aid for creating or taking over a business (Acre) consists
of a partial exemption from social security charges, known as the start-up
@ -6429,28 +6788,28 @@ déclaration indépendants . ACRE:
question.fr: Votre entreprise bénéficie-t-elle de l'ACRE ?
titre.en: '[automatic] ACRE'
titre.fr: ACRE
déclaration indépendants . comptabilité:
déclaration charge sociales . comptabilité:
question.en: '[automatic] What method of accounting management is used for the company?'
question.fr: Quel méthode de gestion de la comptabilité est utilisée pour l'entreprise ?
titre.en: '[automatic] controlled declaration regime'
titre.fr: régime de la déclaration contrôlée
déclaration indépendants . comptabilité . engagement:
déclaration charge sociales . comptabilité . engagement:
titre.en: '[automatic] accrual accounting'
titre.fr: comptabilité d'engagement
déclaration indépendants . comptabilité . trésorerie:
déclaration charge sociales . comptabilité . trésorerie:
titre.en: '[automatic] cash accounting'
titre.fr: comptabilité de trésorerie
déclaration indépendants . cotisations obligatoires déductibles:
déclaration charge sociales . cotisations obligatoires déductibles:
description.en: '[automatic] Deductible compulsory contributions, useful for
calculating the CSG/CRDS base'
description.fr: Cotisations obligatoires déductibles, utile pour calculer
l'assiette de la CSG/CRDS
titre.en: '[automatic] deductible mandatory contributions'
titre.fr: cotisations obligatoires déductibles
déclaration indépendants . cotisations payées:
déclaration charge sociales . cotisations payées:
titre.en: '[automatic] contributions paid'
titre.fr: cotisations payées
déclaration indépendants . cotisations payées . CRDS:
déclaration charge sociales . cotisations payées . CRDS:
description.en: >
[automatic] You can find this amount in your personal Urssaf space. Here are
the steps to follow:
@ -6483,7 +6842,7 @@ déclaration indépendants . cotisations payées . CRDS:
question.fr: Quel est le montant total de CRDS payé cette année ?
titre.en: '[automatic] CRDS'
titre.fr: CRDS
déclaration indépendants . cotisations payées . CSG déductible:
déclaration charge sociales . cotisations payées . CSG déductible:
description.en: >
[automatic] You can find this amount in your personal Urssaf space. Here are
the steps to follow:
@ -6516,7 +6875,7 @@ déclaration indépendants . cotisations payées . CSG déductible:
question.fr: Quel est le montant total de CSG déductible payé cette année ?
titre.en: '[automatic] Deductible CSG'
titre.fr: CSG déductible
déclaration indépendants . cotisations payées . CSG non déductible:
déclaration charge sociales . cotisations payées . CSG non déductible:
description.en: >
[automatic] You can find this amount in your personal Urssaf space. Here are
the steps to follow:
@ -6549,10 +6908,10 @@ déclaration indépendants . cotisations payées . CSG non déductible:
question.fr: Quel est le montant total de CSG non déductible payé cette année ?
titre.en: '[automatic] Non-deductible CSG'
titre.fr: CSG non déductible
déclaration indépendants . cotisations payées . cotisations obligatoires déductibles:
déclaration charge sociales . cotisations payées . cotisations obligatoires déductibles:
titre.en: '[automatic] deductible mandatory contributions'
titre.fr: cotisations obligatoires déductibles
déclaration indépendants . cotisations payées . total charges sociales:
déclaration charge sociales . cotisations payées . total charges sociales:
description.en: >
[automatic] You can find this amount in your personal Urssaf space. Here are
the steps to follow:
@ -6585,10 +6944,10 @@ déclaration indépendants . cotisations payées . total charges sociales:
payées pendant l'exercice ?
titre.en: '[automatic] total social charges'
titre.fr: total charges sociales
déclaration indépendants . cotisations payées version simple:
déclaration charge sociales . cotisations payées version simple:
titre.en: '[automatic] dues paid simple version'
titre.fr: cotisations payées version simple
déclaration indépendants . cotisations payées version simple . CSG déductible et CFP:
déclaration charge sociales . cotisations payées version simple . CSG déductible et CFP:
description.en: >
[automatic] Enter the amount of deductible CSG and PSC you paid in 2021
(regardless of the year to which these contributions relate).
@ -6601,7 +6960,7 @@ déclaration indépendants . cotisations payées version simple . CSG déductibl
question.fr: Quel est le montant total de CSG déductible et CFP payées cette année ?
titre.en: '[automatic] Deductible CSG and PSC'
titre.fr: CSG déductible et CFP
déclaration indépendants . cotisations payées version simple . cotisations sociales:
déclaration charge sociales . cotisations payées version simple . cotisations sociales:
description.en: >
[automatic] Indicate the amount of social contributions to the compulsory
schemes (sickness-maternity, old age, disability-death, family) that you
@ -6615,12 +6974,12 @@ déclaration indépendants . cotisations payées version simple . cotisations so
question.fr: Quel est le montant de vos cotisations sociales payées cette année ?
titre.en: '[automatic] social contributions'
titre.fr: cotisations sociales
déclaration indépendants . nature de l'activité:
déclaration charge sociales . nature de l'activité:
question.en: '[automatic] What is the nature of your business?'
question.fr: Quelle est la nature de votre activité ?
titre.en: '[automatic] nature of business'
titre.fr: nature de l'activité
déclaration indépendants . nature de l'activité . artisanale:
déclaration charge sociales . nature de l'activité . artisanale:
description.en: >
[automatic] It is a service, production, transformation, or repair activity
carried out by a qualified professional, and which requires specific skills
@ -6647,7 +7006,7 @@ déclaration indépendants . nature de l'activité . artisanale:
- Les activités artisanales sont répertoriées par un décret
titre.en: '[automatic] artisanal'
titre.fr: artisanale
déclaration indépendants . nature de l'activité . commerciale:
déclaration charge sociales . nature de l'activité . commerciale:
description.en: >
[automatic] - Purchase of goods for resale as is (wholesale or retail trade)
@ -6663,7 +7022,7 @@ déclaration indépendants . nature de l'activité . commerciale:
- Activité de production ou de transformation grâce à l'utilisation d'outils industriels, extraction, industries minières, manutention, magasinage et stockage
titre.en: '[automatic] commercial or industrial'
titre.fr: commerciale
déclaration indépendants . nature de l'activité . libérale:
déclaration charge sociales . nature de l'activité . libérale:
description.en: >
[automatic] These are the "intellectual" professions, which are not attached
to any specific
@ -6682,7 +7041,7 @@ déclaration indépendants . nature de l'activité . libérale:
1er janvier 2021.
titre.en: '[automatic] Liberal attached to the general regime'
titre.fr: Libérale rattachée au régime général
déclaration indépendants . réduction covid:
déclaration charge sociales . réduction covid:
description.en: >-
[automatic] Within the framework of the health crisis, the Government has
implemented several exceptional measures concerning the social contributions
@ -6785,10 +7144,10 @@ déclaration indépendants . réduction covid:
cotisations et contributions sociales 2021 liées à la crise du Covid-19 ?
titre.en: '[automatic] Covid contribution reduction'
titre.fr: Réduction de cotisation Covid
déclaration indépendants . réduction covid . conjoint collaborateur:
déclaration charge sociales . réduction covid . conjoint collaborateur:
titre.en: '[automatic] collaborating spouse'
titre.fr: conjoint collaborateur
déclaration indépendants . réduction covid . montant:
déclaration charge sociales . réduction covid . montant:
description.en: >-
[automatic] To find out the amount of the exemption, you can use the COVID
exemption simulator.
@ -6808,33 +7167,33 @@ déclaration indépendants . réduction covid . montant:
sanitaire pour les cotisations de lannée 2021 ?
titre.en: '[automatic] Covid discount'
titre.fr: Réduction Covid
déclaration indépendants . réduction covid . part CSG:
déclaration charge sociales . réduction covid . part CSG:
titre.en: '[automatic] Covid reduction on CSG'
titre.fr: Part réduction Covid sur CSG
déclaration indépendants . réduction covid . part CSG . déductible:
déclaration charge sociales . réduction covid . part CSG . déductible:
titre.en: '[automatic] Covid reduction on deductible CSG/CRDS'
titre.fr: Part réduction Covid sur CSG/CRDS déductible
déclaration indépendants . réduction covid . part CSG . non déductible:
déclaration charge sociales . réduction covid . part CSG . non déductible:
titre.en: '[automatic] Covid reduction on non-deductible CSG/CRDS'
titre.fr: Part réduction Covid sur CSG/CRDS non déductible
déclaration indépendants . réduction covid . part cotisations:
déclaration charge sociales . réduction covid . part cotisations:
titre.en: '[automatic] Covid reduction on contributions (excluding CSG/CRDS)'
titre.fr: Part réduction Covid sur cotisations (hors CSG/CRDS)
déclaration indépendants . réduction covid . pourcentage cotisations:
déclaration charge sociales . réduction covid . pourcentage cotisations:
titre.en: '[automatic] percentage contributions'
titre.fr: pourcentage cotisations
déclaration indépendants . réduction covid . taux CSG:
déclaration charge sociales . réduction covid . taux CSG:
titre.en: '[automatic] CSG rate'
titre.fr: taux CSG
déclaration indépendants . réduction covid . total:
déclaration charge sociales . réduction covid . total:
description.en: '[automatic] Included in the amount of contributions shown above'
description.fr: Intégrée dans le montant des cotisations affiché ci-dessus
titre.en: '[automatic] Covid discount'
titre.fr: Réduction Covid
déclaration indépendants . régime d'imposition:
déclaration charge sociales . régime d'imposition:
titre.en: '[automatic] tax regime'
titre.fr: régime d'imposition
déclaration indépendants . régime d'imposition . déclaration contrôlée:
déclaration charge sociales . régime d'imposition . déclaration contrôlée:
description.en: >
[automatic] If you have to declare non-commercial profits (BNC), you may be
subject to the controlled declaration regime or the micro-BNC regime; this
@ -6857,7 +7216,7 @@ déclaration indépendants . régime d'imposition . déclaration contrôlée:
Dans le cas de la déclaration contrôlée, le contribuable est imposé sur les bénéfices effectivement réalisés. Dans le cas du régime micro-BNC, un abattement forfaitaire de 34 % est appliqué automatiquement après déclaration du chiffre daffaires.
titre.en: '[automatic] controlled declaration regime'
titre.fr: régime de la déclaration contrôlée
déclaration indépendants . régime d'imposition . réel:
déclaration charge sociales . régime d'imposition . réel:
description.en: >
[automatic] The simplified tax regime (RSI) and the normal tax regime (RN)
apply to profits made during the financial year and to value added tax
@ -6876,7 +7235,7 @@ déclaration indépendants . régime d'imposition . réel:
question.fr: Quel est le régime d'imposition applicable à l'exercice ?
titre.en: '[automatic] real'
titre.fr: réel
déclaration indépendants . régime d'imposition . réel . normal:
déclaration charge sociales . régime d'imposition . réel . normal:
description.en: >
[automatic] The accounting of the company subjected to the normal real
regime must be more precise than for the simplified real regime:
@ -6907,7 +7266,7 @@ déclaration indépendants . régime d'imposition . réel . normal:
- L'entreprise doit tenir un livre journal et un grand livre.
titre.en: '[automatic] standard real estate regime'
titre.fr: régime réel normal
déclaration indépendants . régime d'imposition . réel . simplifié:
déclaration charge sociales . régime d'imposition . réel . simplifié:
description.en: >
[automatic] Companies subject to the simplified real tax regime must keep
standard accounts: a balance sheet, an income statement and annexes. Special
@ -6933,34 +7292,34 @@ déclaration indépendants . régime d'imposition . réel . simplifié:
- le bilan fourni à ladministration fiscale est un bilan simplifié
titre.en: '[automatic] simplified real estate regime'
titre.fr: régime réel simplifié
déclaration indépendants . rémunération déductible:
déclaration charge sociales . rémunération déductible:
titre.en: '[automatic] deductible remuneration'
titre.fr: rémunération déductible
déclaration indépendants . résultat simple:
déclaration charge sociales . résultat simple:
titre.en: '[automatic] simple result'
titre.fr: résultat simple
déclaration indépendants . résultat simple . CFP:
déclaration charge sociales . résultat simple . CFP:
description.en: '[automatic] Contribution to professional training'
description.fr: Contribution à la formation professionnelle
résumé.en: '[automatic] [D]'
résumé.fr: '[D]'
titre.en: '[automatic] PSC'
titre.fr: CFP
déclaration indépendants . résultat simple . CSG déductible:
déclaration charge sociales . résultat simple . CSG déductible:
description.en: '[automatic] Amount of CSG deductible from income tax'
description.fr: Montant de la CSG déductible à l'impôt sur le revenu
résumé.en: '[automatic] [B]'
résumé.fr: '[B]'
titre.en: '[automatic] Deductible CSG'
titre.fr: CSG déductible
déclaration indépendants . résultat simple . assiette sociale:
déclaration charge sociales . résultat simple . assiette sociale:
description.en: '[automatic] Basis for calculating social security contributions'
description.fr: Assiette utilisée pour le calcul des cotisations sociales
résumé.en: '[automatic] [A - (B + C + D)]'
résumé.fr: '[A - (B + C + D)]'
titre.en: '[automatic] social base'
titre.fr: assiette sociale
déclaration indépendants . résultat simple . cotisations obligatoires:
déclaration charge sociales . résultat simple . cotisations obligatoires:
description.en: >
[automatic] To be reported in :
@ -6989,7 +7348,7 @@ déclaration indépendants . résultat simple . cotisations obligatoires:
résumé.fr: '[C]'
titre.en: '[automatic] Deductible mandatory social security contributions'
titre.fr: Cotisations sociales obligatoires déductibles
déclaration indépendants . résultat simple . revenu net fiscal:
déclaration charge sociales . résultat simple . revenu net fiscal:
description.en:
'[automatic] Income before deduction of social security charges
and tax exemptions'
@ -6998,7 +7357,7 @@ déclaration indépendants . résultat simple . revenu net fiscal:
résumé.fr: '[A]'
titre.en: '[automatic] net tax income'
titre.fr: revenu net fiscal
déclaration indépendants . résultat simple . total charges sociales déductible:
déclaration charge sociales . résultat simple . total charges sociales déductible:
description.en: |
[automatic] To be reported in :
- simplified actual system:** item 252 of form 2033-B-SD
@ -7186,6 +7545,8 @@ entreprise . activité . libérale:
Selon la loi, ce sont des personnes exerçant à titre habituel, de manière indépendante et sous leur responsabilité, une activité :
- de nature généralement civile,
- ayant pour objet d'assurer des prestations principalement intellectuelles, techniques ou de soins, mises en œuvre au moyen de qualifications professionnelles appropriées et dans le respect de principes éthiques ou d'une déontologie professionnelle.
question.en: '[automatic] Is your activity a liberal profession?'
question.fr: Votre activité est-elle une profession libérale ?
titre.en: liberal
titre.fr: libérale
entreprise . activité . libérale réglementée:
@ -7312,6 +7673,9 @@ entreprise . activité . service ou vente . vente:
toutes les activités de restauration et d'hébergement.
titre.en: '[automatic] sale of goods, catering or accommodation'
titre.fr: vente de biens, restauration ou hébergement
entreprise . activité principale:
titre.en: '[automatic] main activity'
titre.fr: activité principale
entreprise . association non lucrative:
description.en: The company is a non-profit organisation
description.fr: L'entreprise est une association non lucrative
@ -7345,9 +7709,6 @@ entreprise . catégorie juridique . EI . auto-entrepreneur:
question.fr: Êtes-vous auto-entrepreneur ?
titre.en: '[automatic] auto-entrepreneur'
titre.fr: auto-entrepreneur
entreprise . catégorie juridique . EI . imposition entreprise:
titre.en: '[automatic] taxation company'
titre.fr: imposition entreprise
entreprise . catégorie juridique . EI . responsabilité limité:
question.en: '[automatic] Is your business an EIRL?'
question.fr: Votre entreprise est-elle une EIRL ?
@ -7357,6 +7718,11 @@ entreprise . catégorie juridique . SARL:
titre.en: '[automatic] EURL or SARL'
titre.fr: EURL ou SARL
entreprise . catégorie juridique . SARL . unipersonnelle:
description.en: '[automatic] An EURL is a company with only one partner. This
means that you are the sole owner of the company.'
description.fr:
Une EURL est une entreprise avec un seul associé. Cela signifie
que vous êtes le seul et unique propriétaire de l'entreprise.
question.en: '[automatic] Is your company an EURL?'
question.fr: Votre entreprise est-elle une EURL ?
titre.en: '[automatic] EURL'
@ -7858,27 +8224,67 @@ entreprise . exonérée de TVA:
titre.en: '[automatic] VAT-exempt'
titre.fr: exonérée de TVA
entreprise . imposition:
description.en: >
[automatic] Indicate whether the taxation system of the income related to
the self-employed activity is :
- Income tax: the company's profits are taxed directly to the self-employed person, at the progressive income tax rate.
- corporate tax: the company's profits are taxed in the name of the company, at the corporate tax rate.
description.fr: >
Indiquez si le régime dimposition des revenus liés à lactivité
indépendante relèvent :
- de limpôt sur le revenu : les bénéfices de lentreprise sont imposés directement auprès du travailleur indépendant, au barème progressif de limpôt sur le revenu.
- de limpôt sur les sociétés : les bénéfices de lentreprise sont imposés au nom de la société, au taux de limpôt sur les sociétés.
question.en: '[automatic] How is the company taxed?'
question.fr: Comment l'entreprise est-elle imposée ?
question.en: "[automatic] What is your company's **type of taxation**?"
question.fr: Quel est le **type d'imposition** de votre entreprise ?
titre.en: '[automatic] taxation'
titre.fr: imposition
entreprise . imposition . IR:
titre.en: '[automatic] Income tax'
titre.fr: Impôt sur le revenu
description.en: >
[automatic] The result of your company is taxed at the income tax, like the
other incomes of your household.
your household income.
The result is determined when you fill in the **tax form** (also called
income tax return). This is done by the accountant.
If your company makes money, the result is called **profit**. It is added to the other
It is added to other taxable income (if any): **your income tax is higher**.
If your business loses money, the result is called a **deficit**. It reduces the amount of
your household taxable income: **Your income tax is lower**.
With income tax, there is no tax difference between your household income and your business income.
your business. This means that the amount you pay yourself from your business bank account
to your personal bank account does not change the company's result.
description.fr: >
Le résultat de votre entreprise est imposé à l'impôt sur le revenu, comme
les autres revenus de
votre foyer.
Le résultat est déterminé lors du remplissage de la **liasse fiscale** (aussi appelée
déclaration de résultat). C'est le comptable qui s'en charge.
Si votre entreprise gagne de l'argent, le résultat est appelé **bénéfice**. Il est ajouté aux autres
revenus imposables (s'ils existent) : **votre impôt sur le revenu est plus élevé**.
Si votre entreprise perd de l'argent, le résultat est appelé **déficit**. Il vient réduire le montant du
revenu imposable de votre ménage : **votre impôt sur le revenu est moins élevé**.
Avec l'imposition sur le revenu, il n'y a pas de différence fiscale entre les revenus de votre foyer et ceux de
votre entreprise. Cela veut dire que le montant que vous vous versez depuis le compte bancaire professionnel
vers votre compte bancaire personnel ne change pas le résultat de l'entreprise.
titre.en: '[automatic] Income tax (IR)'
titre.fr: Impôt sur le revenu (IR)
entreprise . imposition . IR . information sur le report de déficit:
description.en: >
[automatic] When your taxable income is negative, it reduces the taxable
@ -7947,13 +8353,89 @@ entreprise . imposition . IR . micro-fiscal . revenu abattu:
Il lui suffit de porter dans la déclaration complémentaire de revenu (n°2042-C Pro) le montant annuel du chiffre d'affaires brut (BIC) ou des recettes (BNC).
titre.en: '[automatic] flat-rate micro-tax deduction'
titre.fr: abattement forfaitaire micro-fiscal
entreprise . imposition . IR . type de bénéfices:
question.en: "[automatic] What is your company's **type of profit**?"
question.fr: Quel est le **type de bénéfices** de votre entreprise ?
titre.en: '[automatic] type of benefits'
titre.fr: type de bénéfices
entreprise . imposition . IR . type de bénéfices . BA:
titre.en: '[automatic] BA'
titre.fr: BA
entreprise . imposition . IR . type de bénéfices . BA possible:
titre.en: '[automatic] BA possible'
titre.fr: BA possible
entreprise . imposition . IR . type de bénéfices . BIC:
titre.en: '[automatic] BIC'
titre.fr: BIC
entreprise . imposition . IR . type de bénéfices . BIC et BNC possibles:
titre.en: '[automatic] BIC and BNC possible'
titre.fr: BIC et BNC possibles
entreprise . imposition . IR . type de bénéfices . BNC:
titre.en: '[automatic] BNC'
titre.fr: BNC
entreprise . imposition . IS:
titre.en: '[automatic] Corporate income tax'
titre.fr: Impôt sur les sociétés
entreprise . imposition . IS . impôt sur les sociétés:
titre.en: '[automatic] corporate tax'
titre.fr: impôt sur les sociétés
entreprise . imposition . IS . impôt sur les sociétés . contribution sociale:
description.en: >-
[automatic]
The **result** of your company is taxed at the **corporate tax**.
If your company loses money, the result is called a **deficit**. It will not have to pay corporate
corporate income tax.
If your company makes money, the result is called **profit**. It will be taxed at a
**fixed rate**.
The taxable result is determined when filling out the **tax return** (also called
income tax return). This is done by the accountant.
Please note: there are **two ways of remunerating yourself** with a company that pays corporate income tax:
- You can pay yourself a remuneration as a director during the year. This remuneration is
deducted (subtracted) from the result to calculate the taxable profit of your company. On the other hand, this
remuneration is added to the taxable income of your household for the calculation of the income tax.
- You can also pay yourself dividends from previous years' profits. You will have to pay
a fixed tax on these dividends: this is called the "flat tax".
In all cases, you will have to pay social security contributions on the income you receive.
description.fr: >-
Le **résultat** de votre entreprise est imposé à l'**impôt sur les sociétés**.
Si votre entreprise perd de l'argent, le résultat est appelé **déficit**. Elle n'aura pas à payer d'impôt
sur les sociétés.
Si votre entreprise gagne de l'argent, le résultat est appelé **bénéfice**. Il sera imposé à un
**taux fixe**.
Le résultat imposable est déterminé lors du remplissage de la **liasse fiscale** (aussi appelée
déclaration de résultat). C'est le comptable qui s'en charge.
À noter : il existe **deux façons de se rémunérer** avec une entreprise à l'impôt sur les sociétés :
- Vous pouvez vous verser une rémunération en tant que dirigeant pendant l'année. Cette rémunération est
déduite (soustraite) du résultat pour calculer le bénéfice imposable de votre entreprise. En revanche, cette
rémunération est ajoutée aux revenus imposables de votre foyer pour le calcul de l'impôt sur le revenu.
- Vous pouvez aussi vous verser des dividendes à partir des bénéfices des années précédentes. Vous aurez à payer
un impôt fixe sur ces derniers : c'est ce que l'on appelle la "flat tax".
Dans tous les cas, vous aurez à payer des **cotisations sociales** sur les revenus que vous touchez.
titre.en: '[automatic] Corporate tax (IS)'
titre.fr: Impôt sur les sociétés (IS)
entreprise . imposition . IS . contribution sociale:
description.en: >
[automatic] The social contribution on profits is a separate tax from the
corporate tax. Its amount is not deductible from the results.
@ -7968,26 +8450,6 @@ entreprise . imposition . IS . impôt sur les sociétés . contribution sociale:
Lassiette bénéficie dun abattement important, et seules les entreprises réalisant plus de 2,3 millions deuros de bénéfices sont concernées par cette contribution.
titre.en: '[automatic] social contribution'
titre.fr: contribution sociale
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 1:
titre.en: '[automatic] ceiling reduced rate 1'
titre.fr: plafond taux réduit 1
entreprise . imposition . IS . impôt sur les sociétés . plafond taux réduit 2:
titre.en: '[automatic] ceiling reduced rate 2'
titre.fr: plafond taux réduit 2
entreprise . imposition . IS . impôt sur les sociétés . prorata temporis:
description.en: >
[automatic] When the duration of the financial year is not equal to one
year, the ceilings used in the
the ceilings used in the corporate tax schedule.
description.fr: |
Lorsque la durée de lexercice n'est pas égale à un an, on pro-ratise les
plafonds utilisés dans le barème de l'impôt sur les sociétés.
titre.en: '[automatic] prorata temporis'
titre.fr: prorata temporis
entreprise . imposition . IS . impôt sur les sociétés . éligible taux réduit:
titre.en: '[automatic] eligible for reduced rate'
titre.fr: éligible taux réduit
entreprise . imposition . IS . information sur le report de déficit:
description.en: >
[automatic] Losses incurred during a fiscal year can be carried forward to
@ -7999,6 +8461,20 @@ entreprise . imposition . IS . information sur le report de déficit:
(report en arrière).
titre.en: '[automatic] information on deficit carryover'
titre.fr: information sur le report de déficit
entreprise . imposition . IS . montant:
titre.en: '[automatic] amount'
titre.fr: montant
entreprise . imposition . IS . prorata temporis:
description.en: >
[automatic] When the duration of the financial year is not equal to one
year, the ceilings used in the
the ceilings used in the corporate tax schedule.
description.fr: |
Lorsque la durée de lexercice n'est pas égale à un an, on pro-ratise les
plafonds utilisés dans le barème de l'impôt sur les sociétés.
titre.en: '[automatic] prorata temporis'
titre.fr: prorata temporis
entreprise . imposition . IS . résultat imposable:
résumé.en: '[automatic] Taxable for corporate income tax purposes'
résumé.fr: Imposable à l'impôt sur les sociétés
@ -8009,6 +8485,26 @@ 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 . éligible taux réduit:
titre.en: '[automatic] eligible for reduced rate'
titre.fr: éligible taux réduit
entreprise . imposition . régime:
question.en: "[automatic] What is your company's **tax regime**?"
question.fr: Quel est le **régime d'imposition** de votre entreprise ?
titre.en: '[automatic] diet'
titre.fr: régime
entreprise . imposition . régime . déclaration contrôlée:
titre.en: '[automatic] controlled declaration'
titre.fr: déclaration contrôlée
entreprise . imposition . régime . micro-entreprise:
titre.en: '[automatic] Micro-enterprise regime'
titre.fr: Régime de la micro-entreprise
entreprise . imposition . régime . réel normal:
titre.en: '[automatic] Normal real tax system'
titre.fr: Régime réel normal d'imposition
entreprise . imposition . régime . réel simplifié:
titre.en: '[automatic] Simplified real tax system'
titre.fr: Régime réel simplifié d'imposition
entreprise . nom:
titre.en: '[automatic] name'
titre.fr: nom

View File

@ -35,6 +35,8 @@
<0>You are not concerned by the exemption of Covid contributions for the
self-employed.</0>
A quoi servent mes cotisations ?: What's included in my contributions?
Accompagnement activé: Accompaniment activated
Accompagnement désactivé: Accompaniment deactivated
Accueil: Home
"Activité exercée en ": "Activity carried out in "
Afficher la description publicodes: Display publicodes description
@ -114,6 +116,7 @@ En incluant l'indemnité de chômage partiel: Including short-time working allow
En savoir plus: Learn more
En-dessous de: Below
Entreprise Individuelle: Sole Proprietorship
Entreprise créée le <2><0></0></2> et domiciliée à <6><0></0></6>: Company created on <2><0></0></2> and domiciled in <6><0></0></6>
Entrez des mots clefs ici: Enter keywords
Entrée: Enter
Envoyer: Send
@ -152,7 +155,9 @@ Liste des statuts juridiques: List of legal statutes
Ma situation: My situation
Mensuel: Monthly
Mes réponses: My answers
Mode accompagnement: Accompanying mode
Modifier: Modify
Modifier l'entreprise: Modify the company
Modifier mes réponses: Change my answers
Mois non concerné: Month not concerned
Mon entreprise: My company
@ -344,6 +349,461 @@ assistant-DRI:
concern you with the amount to fill in</0><1>An estimate of the social
security contributions to be paid to the Urssaf in 2022</1></1></0><1>My
company</1>
imposition:
intro: <0>In this step, we will determine the <2>declarations that concern
you</2> and the <5>list of boxes that you will have to fill in</5>.</0>
mode-accompagnement:
"0": <
"1": "0"
"10": n
"100": o
"101": m
"102": p
"103": a
"104": n
"105": y
"106": .
"107": " "
"108": Y
"109": o
"11": t
"110": u
"111": " "
"112": m
"113": a
"114": y
"115": " "
"116": h
"117": a
"118": v
"119": e
"12": " "
"120": " "
"121": a
"122": " "
"123": g
"124": o
"125": o
"126": d
"127": " "
"128": k
"129": n
"13": i
"130": o
"131": w
"132": l
"133": e
"134": d
"135": g
"136": e
"137": " "
"138": o
"139": f
"14": n
"140": " "
"141": t
"142": h
"143": e
"144": " "
"145": a
"146": s
"147": s
"148": o
"149": c
"15": " "
"150": i
"151": a
"152": t
"153": e
"154": d
"155": " "
"156": c
"157": o
"158": n
"159": c
"16": s
"160": e
"161": p
"162": t
"163": s
"164": " "
"165": (
"166": f
"167": o
"168": r
"169": " "
"17": u
"170": e
"171": x
"172": a
"173": m
"174": p
"175": l
"176": e
"177": ":"
"178": " "
"179": I
"18": p
"180": S
"181": /
"182": I
"183": R
"184": ","
"185": " "
"186": B
"187": I
"188": C
"189": /
"19": p
"190": B
"191": N
"192": C
"193": ","
"194": " "
"195": t
"196": a
"197": x
"198": " "
"199": r
"2": ">"
"20": o
"200": e
"201": t
"202": u
"203": r
"204": n
"205": ","
"206": " "
"207": e
"208": t
"209": c
"21": r
"210": .
"211": )
"212": .
"213": " "
"214": W
"215": e
"216": " "
"217": w
"218": i
"219": l
"22": t
"220": l
"221": " "
"222": g
"223": e
"224": t
"225": " "
"226": s
"227": t
"228": r
"229": a
"23": " "
"230": i
"231": g
"232": h
"233": t
"234": " "
"235": t
"236": o
"237": " "
"238": t
"239": h
"24": m
"240": e
"241": " "
"242": p
"243": o
"244": i
"245": n
"246": t
"247": " "
"248": b
"249": y
"25": o
"250": " "
"251": a
"252": s
"253": k
"254": i
"255": n
"256": g
"257": " "
"258": y
"259": o
"26": d
"260": u
"261": " "
"262": s
"263": i
"264": m
"265": p
"266": l
"267": e
"268": " "
"269": a
"27": e
"270": n
"271": d
"272": " "
"273": p
"274": r
"275": e
"276": c
"277": i
"278": s
"279": e
"28": <
"280": " "
"281": q
"282": u
"283": e
"284": s
"285": t
"286": i
"287": o
"288": n
"289": s
"29": /
"290": " "
"291": t
"292": o
"293": " "
"294": s
"295": a
"296": v
"297": e
"298": " "
"299": y
"3": A
"30": "0"
"300": o
"301": u
"302": " "
"303": t
"304": i
"305": m
"306": e
"307": .
"308": " "
"309": I
"31": ">"
"310": f
"311": " "
"312": y
"313": o
"314": u
"315": " "
"316": w
"317": i
"318": s
"319": h
"32": <
"320": " "
"321": t
"322": o
"323": " "
"324": b
"325": e
"326": " "
"327": a
"328": c
"329": c
"33": "1"
"330": o
"331": m
"332": p
"333": a
"334": n
"335": i
"336": e
"337": d
"338": " "
"339": t
"34": ">"
"340": o
"341": " "
"342": a
"343": n
"344": s
"345": w
"346": e
"347": r
"348": " "
"349": t
"35": T
"350": h
"351": e
"352": " "
"353": q
"354": u
"355": e
"356": s
"357": t
"358": i
"359": o
"36": h
"360": n
"361": s
"362": ","
"363": " "
"364": y
"365": o
"366": u
"367": " "
"368": c
"369": a
"37": i
"370": n
"371": " "
"372": c
"373": h
"374": a
"375": n
"376": g
"377": e
"378": " "
"379": m
"38": s
"380": o
"381": d
"382": e
"383": " "
"384": a
"385": t
"386": " "
"387": a
"388": n
"389": y
"39": " "
"390": " "
"391": t
"392": i
"393": m
"394": e
"395": " "
"396": b
"397": y
"398": " "
"399": u
"4": s
"40": i
"400": s
"401": i
"402": n
"403": g
"404": " "
"405": t
"406": h
"407": e
"408": " "
"409": s
"41": s
"410": w
"411": i
"412": t
"413": c
"414": h
"415": " "
"416": b
"417": e
"418": l
"419": o
"42": " "
"420": w
"421": .
"422": <
"423": /
"424": "1"
"425": ">"
"43": y
"44": o
"45": u
"46": r
"47": " "
"48": "{"
"49": "{"
"5": s
"50": o
"51": r
"52": d
"53": i
"54": n
"55": a
"56": l
"57": " "
"58": "}"
"59": "}"
"6": i
"60": " "
"61": t
"62": a
"63": x
"64": " "
"65": r
"66": e
"67": t
"68": u
"69": r
"7": s
"70": n
"71": " "
"72": s
"73": i
"74": n
"75": c
"76": e
"77": " "
"78": t
"79": h
"8": t
"80": e
"81": " "
"82": c
"83": r
"84": e
"85": a
"86": t
"87": i
"88": o
"89": n
"9": a
"90": " "
"91": o
"92": f
"93": " "
"94": y
"95": o
"96": u
"97": r
"98": " "
"99": c
activé: "<0>Perhaps everything is not yet clear to you. We will guide you step
by step by asking you simple questions. Each time, we will give you
hints on how to find the information to answer them.</0><1>We will also
explain all the key notions related to your declaration (for example:
IS/IR, BIC, BNC, tax return, etc.).</1><2>You can change the mode at any
time by using the switch below. </2>"
désactivé: "<0>You may have a good knowledge of the related concepts (for
example: IS/IR, BIC/BNC, tax returns, etc.). We will get straight to the
point by asking you <2>simple and precise questions</2> to save you
time. </0><1>If you wish to be further assisted in answering the
questions, you can <1>change mode</1> at any time by using the switch
below.</1>"
nombre-déclarations: This is your {{nthDeclaration}} tax return since the
creation of your company.
titre: Assistant in support mode
intro: <0><0>We help you to fill in your tax <2>return</2> on
<5>impot.gouv.fr</5>.<7></7></0><1> Answer a few questions, at the end you
will have :</1><2><0>The forms that concern you</0><1>The list of the boxes
that concern you with the amount to be filled</1><2>An estimate of the
social security contributions to be paid to the Urssaf in 2022</2></2></0>
precision: <0>A few details before continuing</0><1>To file your income tax
return, you will have to log on to <2>impot.gouv.fr</2> from <5>April 8,
2022</5>.</1><2>If you have your accountant complete your income tax return,
this wizard can still be useful to know the <2>amount of social security
contributions to be paid in 2022</2></2>
associés:
choix1: Alone
choix2: Several partners
@ -1189,10 +1649,16 @@ pages:
declaration_charges_sociales_indépendant:
meta:
description: Calculate the amount of social security contributions to be
reported on your 2021 income tax return.
reported on your 2021 income tax return
title: Determination of deductible social charges
shortname: Determination of deductible social charges
title: Assistance in determining deductible social charges
declaration_revenu_indépendant:
meta:
description: Find out which amounts to fill in and get an estimate of your 2022 dues
title: Income tax return assistant for self-employed people
shortname: Income Tax Wizard
title: Income tax return assistant for self-employed people
demande-mobilité:
meta:
description: Interactive form to be filled in if you work abroad
@ -1966,6 +2432,8 @@ une de ces conditions: one of these applies
À quoi servent mes cotisations ?: How are my contributions distributed?
Échap: Esc
Économie collaborative: Collaborative Economy
Étape complétée: Step completed
Étape non complétée: Step not completed
État: State
Êtes vous satisfait de ce guide ?: Are you satisfied with this guide?
Êtes vous satisfait de cet assistant ?: Are you satisfied with this assistant?

View File

@ -39,6 +39,8 @@
<0>Vous n'êtes pas concerné par l'exonération de cotisations Covid pour les indépendants.</0>:
<0>Vous n'êtes pas concerné par l'exonération de cotisations Covid pour les
indépendants.</0>
Accompagnement activé: Accompagnement activé
Accompagnement désactivé: Accompagnement désactivé
"Activité exercée en ": "Activité exercée en "
Assimilé salarié: Assimilé salarié
Assistants à la déclaration de revenu 2021 des indépendants: Assistants à la déclaration de revenu 2021 des indépendants
@ -78,6 +80,7 @@ Découvrir: Découvrir
"Eligibilité LFSS : ": "Eligibilité LFSS : "
En savoir plus: En savoir plus
Entreprise Individuelle: Entreprise Individuelle
Entreprise créée le <2><0></0></2> et domiciliée à <6><0></0></6>: Entreprise créée le <2><0></0></2> et domiciliée à <6><0></0></6>
Exonérations: Exonérations
Explorez notre documentation: Explorez notre documentation
ExportSimulation:
@ -98,7 +101,9 @@ Liste des intégrations: Liste des intégrations
Liste des statuts juridiques: Liste des statuts juridiques
Ma situation: Ma situation
Mes réponses: Mes réponses
Mode accompagnement: Mode accompagnement
Modifier: Modifier
Modifier l'entreprise: Modifier l'entreprise
Mois non concerné: Mois non concerné
Mon entreprise: Mon entreprise
Montant de l'impôt sur les sociétés: Montant de l'impôt sur les sociétés
@ -231,6 +236,37 @@ assistant-DRI:
cases qui vous concernent avec le montant à remplir</0><1>Une estimation des
cotisations sociales à payer à l'Urssaf en 2022</1></1></0><1>Mon
entreprise</1>
imposition:
intro: <0>Dans cette étape, nous allons déterminer les <2>déclarations qui vous
concernent</2> et la <5>liste des cases que vous aurez à remplir</5>.</0>
mode-accompagnement:
activé: "<0>Tout n'est peut-être pas encore très clair pour vous. Nous allons
vous guider pas à pas en vous posant des questions simples. À chaque
fois, nous vous donnerons des pistes sur comment trouver les
informations pour y répondre.</0><1>Nous vous expliquerons aussi toutes
les notions clés reliées à votre déclaration (par exemple : IS/IR, BIC,
BNC, liasse fiscale, etc.)</1><2>Vous pouvez changer de mode à tout
moment en utilisant l'interrupteur ci-dessous. </2>"
désactivé: "<0>Vous avez peut-être une bonne connaissance des notions associées
(par exemple : IS/IR, BIC/BNC, liasse fiscale, etc.). Nous irons droit
au but en vous posant des <2>questions simples et précises</2> pour vous
faire gagner du temps. </0><1>Si vous souhaitez être davantage
accompagné pour répondre aux questions, vous pouvez <1>changer de
mode</1> à tout moment en utilisant l'interrupteur ci-dessous.</1>"
nombre-déclarations: C'est votre {{nthDeclaration}} déclaration de revenu depuis
la création de votre entreprise.
intro: <0><0>Nous vous accompagnons pour remplir votre <2>déclaration de
revenu</2> sur <5>impot.gouv.fr</5>.<7></7></0><1> Répondez à quelques
questions, à la fin vous aurez :</1><2><0>Les formulaires qui vous
concernent</0><1>La liste des cases qui vous concernent avec le montant à
remplir</1><2>Une estimation des cotisations sociales à payer à l'Urssaf en
2022</2></2></0>
precision: <0>Quelques précisions avant de continuer</0><1>Pour faire votre
déclaration de revenu, il faudra vous connecter sur <2>impot.gouv.fr</2> à
partir du <5>8 avril 2022</5>.</1><2>Si vous faites remplir votre
déclaration de revenu par votre expert-comptable, cet assistant peut quand
même vous être utile pour connaître le <2>montant des cotisations sociales à
payer en 2022</2></2>
associés:
choix1: Seul
choix2: Plusieurs personnes
@ -944,10 +980,17 @@ pages:
declaration_charges_sociales_indépendant:
meta:
description: Calculez le montant des cotisations et contributions sociales à
reporter dans votre déclaration de revenu 2021.
reporter dans votre déclaration de revenu 2021
title: Détermination des charges sociales déductibles
shortname: Détermination des charges sociales déductibles
title: Assistant à la détermination des charges sociales déductibles
declaration_revenu_indépendant:
meta:
description: Découvrez quels montants remplir dans quelles cases, et obtenez une
estimation des cotisations à payer en 2022
title: Assistant à la déclaration de revenu pour les indépendants
shortname: Assistant déclaration de revenu
title: Assistant à la déclaration de revenu pour les indépendants
demande-mobilité:
meta:
description: Formulaire interactif à compléter en cas d'exercice d'une activité
@ -1581,6 +1624,8 @@ trouver:
seront automatiquement disponibles pour la suite du parcours sur le site.
titre: Retrouver mon entreprise
À quoi servent mes cotisations ?: À quoi servent mes cotisations ?
Étape complétée: Étape complétée
Étape non complétée: Étape non complétée
Êtes vous satisfait de ce guide ?: Êtes vous satisfait de ce guide ?
Êtes vous satisfait de cet assistant ?: Êtes vous satisfait de cet assistant ?
économieCollaborative:

View File

@ -1,94 +0,0 @@
import { resetCompany } from '@/actions/companyActions'
import { useSetEntreprise } from '@/actions/companyStatusActions'
import { CompanyDetails } from '@/components/company/Details'
import { CompanySearchField } from '@/components/company/SearchField'
import {
Condition,
WhenAlreadyDefined,
WhenNotAlreadyDefined,
} from '@/components/EngineValue'
import PageHeader from '@/components/PageHeader'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Message } from '@/design-system'
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import { Strong } from '@/design-system/typography'
import { H2, H3 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Li, Ul } from '@/design-system/typography/list'
import { Body, Intro } from '@/design-system/typography/paragraphs'
import { Grid } from '@mui/material'
import { useContext } from 'react'
import { Trans } from 'react-i18next'
import { useDispatch } from 'react-redux'
import illustration from './undraw_fill_in_mie5.svg'
export default function AideDéclarationIndépendant() {
const setEntreprise = useSetEntreprise()
const sitePaths = useContext(SitePathsContext)
const dispatch = useDispatch()
return (
<>
<Trans i18nKey="assistant-DRI.description">
<PageHeader picture={illustration}>
<Intro>
Cet outil vous aidera à remplir votre{' '}
<Strong>déclaration de revenu</Strong> sur impot.gouv.fr. Vous aurez
à la fin :
</Intro>
<Ul size="XL">
<Li>
La liste des cases qui vous concernent avec le montant à remplir
</Li>
<Li>
Une estimation des cotisations sociales à payer à l'Urssaf en 2022
</Li>
</Ul>
</PageHeader>
<H2>Mon entreprise</H2>
</Trans>
<Grid container>
<Grid item lg={8}>
<WhenNotAlreadyDefined dottedName="entreprise . SIREN">
<Body>
Cherchez avec votre nom, le nom de votre entreprise, le SIREN ou
le SIRET
</Body>
<CompanySearchField onSubmit={setEntreprise} />
</WhenNotAlreadyDefined>
<WhenAlreadyDefined dottedName="entreprise . SIREN">
<CompanyDetails />
<Button onPress={() => dispatch(resetCompany())}>
<Trans>Modifier</Trans>
</Button>
</WhenAlreadyDefined>
</Grid>
</Grid>
<Condition expression="entreprise . catégorie juridique . SAS">
<Spacing md />
<Message type="info">
<H3>Cet assistant ne gère pas le cas des dirigeants de SAS(U)</H3>
<Body>
Nous sommes désolés. Si vous rencontrez des difficultés à remplir
votre déclaration, rapprochez-vous de votre comptable. Si vous êtes
sans comptable, vous pouvez contacter le service des impôts.
</Body>
<Body>
Si vous souhaitez que cet assistant à la déclaration gère votre cas
dans le futur, laissez-nous message en cliquant sur le bouton "Faire
une suggestion" en bas de la page.
</Body>
<Body>
Ce site propose d'autres outils qui pourraient vous intéresser (par
exemple un simulateur de revenu net après impôt).
</Body>
<Link to={sitePaths.gérer.index}>
Découvrir les outils pour mon entreprise
</Link>
<Spacing md />
</Message>
</Condition>
</>
)
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 10 KiB

View File

@ -4,7 +4,7 @@ import { useEffect } from 'react'
import { Helmet } from 'react-helmet-async'
import { Route, Switch } from 'react-router-dom'
import useSimulatorsData from '../Simulateurs/metadata'
import SimulateurPage from '../Simulateurs/Page'
import SimulateurPage from '../../components/PageData'
import IframeFooter from './IframeFooter'
export default function Iframes() {

View File

@ -1,5 +1,4 @@
import { resetCompany } from '@/actions/companyActions'
import { useSetEntreprise } from '@/actions/companyStatusActions'
import {
FabriqueSocialEntreprise,
searchDenominationOrSiren,
@ -13,6 +12,7 @@ import AnswerGroup from '@/design-system/answer-group'
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import { H3 } from '@/design-system/typography/heading'
import { useSetEntreprise } from '@/hooks/useSetEntreprise'
import { RootState } from '@/reducers/rootReducer'
import { getCookieValue } from '@/storage/readCookie'
import { Grid } from '@mui/material'

View File

@ -91,7 +91,6 @@ const DividendesSimulationGoals = () => (
<Condition expression="entreprise . imposition = 'IS'">
<SimulationGoal
appear={false}
alwaysShow
dottedName="bénéficiaire . dividendes . bruts"
/>
@ -105,7 +104,6 @@ const DividendesSimulationGoals = () => (
<Condition expression="oui">
<SimulationGoal
appear={false}
alwaysShow
dottedName="bénéficiaire . dividendes . nets d'impôt"
/>
</Condition>

View File

@ -98,6 +98,7 @@ export default function Simulateurs() {
</Trans>
</H3>
<Grid container spacing={3}>
<SimulateurCard {...simulators['déclaration-revenu-indépendant']} />
<SimulateurCard
{...simulators['déclaration-charges-sociales-indépendant']}
/>

View File

@ -18,8 +18,7 @@ const ISConfig = {
'unité par défaut': '€/an',
situation: {
'entreprise . imposition': "'IS'",
'entreprise . imposition . IS . impôt sur les sociétés . éligible taux réduit':
'oui',
'entreprise . imposition . IS . éligible taux réduit': 'oui',
"entreprise . chiffre d'affaires . franchise de TVA": 'non',
},
} as SimulationConfig
@ -106,7 +105,7 @@ function Explanations() {
<ExplanationsContainer>
<Intro>
<Value
expression="entreprise . imposition . IS . impôt sur les sociétés"
expression="entreprise . imposition . IS . montant"
displayedUnit="€"
className="payslip__total"
/>

View File

@ -78,7 +78,6 @@ function IndépendantSimulationGoals({
<Condition expression="entreprise . imposition . IR . micro-fiscal = non">
<SimulationGoal
appear={false}
alwaysShow
dottedName="entreprise . chiffre d'affaires"
/>
</Condition>
@ -103,7 +102,6 @@ function IndépendantSimulationGoals({
<SimulationGoal
small
editable={false}
alwaysShow
dottedName="dirigeant . indépendant . cotisations et contributions"
/>
<Condition expression="entreprise . imposition . IR . micro-fiscal">

View File

@ -5,11 +5,11 @@ import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { H2 } from '@/design-system/typography/heading'
import { useContext } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { FAQAutoEntrepreneurArticle } from '../../../pages/Creer/CreationChecklist'
import { GuideURSSAFCard } from '../cards/GuideURSSAFCard'
import { IframeIntegrationCard } from '../cards/IframeIntegrationCard'
import { SimulatorRessourceCard } from '../cards/SimulatorRessourceCard'
import { ExtractFromSimuData } from '../metadata'
import { FAQAutoEntrepreneurArticle } from '@/pages/Creer/CreationChecklist'
import { GuideURSSAFCard } from '@/pages/Simulateurs/cards/GuideURSSAFCard'
import { SimulatorRessourceCard } from '@/pages/Simulateurs/cards/SimulatorRessourceCard'
import { IframeIntegrationCard } from '@/pages/Simulateurs/cards/IframeIntegrationCard'
import { ExtractFromSimuData } from '@/pages/Simulateurs/metadata'
interface NextStepsProps {
iframePath: ExtractFromSimuData<'iframePath'>

View File

@ -8,7 +8,7 @@ import { Trans } from 'react-i18next'
import { Route, Switch, useLocation } from 'react-router-dom'
import Home from './Home'
import useSimulatorsData from './metadata'
import SimulateurPage from './Page'
import SimulateurPage from '../../components/PageData'
export default function Simulateurs() {
const sitePaths = useContext(SitePathsContext)

View File

@ -350,18 +350,18 @@ const metadataSrc = (t: TFunction<'translation', string>) => {
chapter1: 'gerer',
chapter2: 'declaration_charges_sociales_independant',
},
icône: '✍️',
icône: '📑',
meta: {
description: t(
'pages.gérer.declaration_charges_sociales_indépendant.meta.description',
'Calculez le montant des cotisations et contributions sociales à reporter dans votre déclaration de revenu 2021.'
'Calculez le montant des cotisations et contributions sociales à reporter dans votre déclaration de revenu 2021'
),
title: t(
'pages.gérer.declaration_charges_sociales_indépendant.meta.title',
'Détermination des charges sociales déductibles'
),
},
pathId: 'gérer.déclarationIndépendant',
pathId: 'gérer.déclaration-charges-sociales-indépendant',
shortName: t(
'pages.gérer.declaration_charges_sociales_indépendant.shortname',
'Détermination des charges sociales déductibles'
@ -372,6 +372,33 @@ const metadataSrc = (t: TFunction<'translation', string>) => {
'Assistant à la détermination des charges sociales déductibles'
),
},
'déclaration-revenu-indépendant': {
tracking: {
chapter1: 'gerer',
chapter2: 'declaration_revenu_independant',
},
icône: '✍️',
meta: {
description: t(
'pages.gérer.declaration_revenu_indépendant.meta.description',
'Découvrez quels montants remplir dans quelles cases, et obtenez une estimation des cotisations à payer en 2022'
),
title: t(
'pages.gérer.declaration_revenu_indépendant.meta.title',
'Assistant à la déclaration de revenu pour les indépendants'
),
},
pathId: 'gérer.déclarationIndépendant.index',
shortName: t(
'pages.gérer.declaration_revenu_indépendant.shortname',
'Assistant déclaration de revenu'
),
iframePath: 'déclaration-revenu-indépendant',
title: t(
'pages.gérer.declaration_revenu_indépendant.title',
'Assistant à la déclaration de revenu pour les indépendants'
),
},
'demande-mobilité': {
tracking: {
chapter1: 'gerer',

View File

@ -1,16 +1,20 @@
import { PlacesDesEntreprisesButton } from '@/components/PlaceDesEntreprises'
import RuleLink from '@/components/RuleLink'
import Emoji from '@/components/utils/Emoji'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Strong } from '@/design-system/typography'
import { H2 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Li, Ul } from '@/design-system/typography/list'
import { Body } from '@/design-system/typography/paragraphs'
import { SimulationConfig } from '@/reducers/rootReducer'
import React, { createContext, useContext, useMemo } from 'react'
import { TFunction, Trans, useTranslation } from 'react-i18next'
import { constructLocalizedSitePath, SitePathsType } from '../../sitePaths'
import Créer from '../Creer/Home'
import AideDéclarationIndépendant from '../Gerer/AideDéclarationIndépendant/PreviousVersion'
import FormulaireMobilitéIndépendant from '../Gerer/DemandeMobilite'
import DéclarationRevenuIndépendant from '../gerer/declaration-revenu-independants'
import DéclarationChargeSocialeIndépendant from '../gerer/declaration-charges-sociales-independant'
import FormulaireMobilitéIndépendant from '../gerer/demande-mobilité'
import AidesEmbauche from './AidesEmbauche'
import ArtisteAuteur from './ArtisteAuteur'
import AutoEntrepreneur from './AutoEntrepreneur'
@ -43,9 +47,6 @@ import PAMCHome from './PAMCHome'
import SalariéSimulation from './Salarié'
import { SASUSimulation } from './SASU'
import SchemeComparaisonPage from './SchemeComparaison'
import { Li, Ul } from '@/design-system/typography/list'
import { Strong } from '@/design-system/typography'
import { PlacesDesEntreprisesButton } from '@/components/PlaceDesEntreprises'
interface SimulatorsDataParams {
t?: TFunction<'translation', string>
@ -501,8 +502,13 @@ function getSimulatorsData({
},
'déclaration-charges-sociales-indépendant': {
...pureSimulatorsData['déclaration-charges-sociales-indépendant'],
component: AideDéclarationIndépendant,
path: sitePaths.gérer.déclarationIndépendant,
component: DéclarationChargeSocialeIndépendant,
path: sitePaths.gérer['déclaration-charges-sociales-indépendant'],
},
'déclaration-revenu-indépendant': {
...pureSimulatorsData['déclaration-revenu-indépendant'],
component: DéclarationRevenuIndépendant,
path: sitePaths.gérer.déclarationIndépendant.index,
},
'demande-mobilité': {
...pureSimulatorsData['demande-mobilité'],

View File

@ -14,7 +14,7 @@ export function DeclarationIndedependantsCard() {
'Déclaration de revenus (indépendants)'
)}
ctaLabel={t('gérer.choix.déclaration.cta', 'Remplir ma déclaration')}
to={sitePaths.gérer.déclarationIndépendant}
to={sitePaths.gérer.déclarationIndépendant.index}
>
<Trans i18nKey="gérer.choix.déclaration.body">
Calculez facilement les montants des charges sociales à reporter dans

View File

@ -1,19 +1,22 @@
import { updateSituation } from '@/actions/actions'
import { ExplicableRule } from '@/components/conversation/Explicable'
import RuleInput from '@/components/conversation/RuleInput'
import { FromTop } from '@/components/ui/animate'
import { FadeIn } from '@/components/ui/animate'
import { EngineContext } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'
import { useNextQuestions } from '@/components/utils/useNextQuestion'
import { Spacing } from '@/design-system/layout'
import { H3 } from '@/design-system/typography/heading'
import { Intro, SmallBody } from '@/design-system/typography/paragraphs'
import { situationSelector } from '@/selectors/simulationSelectors'
import { evaluateQuestion } from '@/utils'
import {
situationSelector,
targetUnitSelector,
} from '@/selectors/simulationSelectors'
import { useSSRSafeId } from '@react-aria/ssr'
import { DottedName } from 'modele-social'
import { RuleNode } from 'publicodes'
import { useCallback, useContext } from 'react'
import { useDispatch, useSelector } from 'react-redux'
import { Question } from './PreviousVersion'
import styled from 'styled-components'
type SubSectionProp = {
dottedName: DottedName
@ -63,8 +66,9 @@ type SimpleFieldProps = {
export function SimpleField({
dottedName,
question,
summary,
showSuggestions,
showSuggestions = false,
}: SimpleFieldProps) {
const dispatch = useDispatch()
const engine = useContext(EngineContext)
@ -72,35 +76,47 @@ export function SimpleField({
const rule = engine.getRule(dottedName)
const dispatchValue = useCallback(
(value, dottedName) => {
(value, dottedName: DottedName) => {
dispatch(updateSituation(dottedName, value))
},
[dispatch]
)
const displayedQuestion = question ?? rule.rawNode.question
const labelId = useSSRSafeId()
const targetUnit = useSelector(targetUnitSelector)
if (evaluation.nodeValue === null) {
return null
}
return (
<div>
<FromTop>
<Question>
<Intro>
{evaluateQuestion(engine, rule)}&nbsp;
<ExplicableRule dottedName={dottedName} />
</Intro>
<SmallBody>{summary ?? rule.rawNode.résumé}</SmallBody>
<RuleInput
dottedName={dottedName}
onChange={dispatchValue}
showSuggestions={showSuggestions}
displayedUnit=""
/>
</Question>
</FromTop>
<Spacing md />
</div>
<FadeIn>
<StyledQuestion id={labelId}>
{displayedQuestion && (
<Markdown components={{ p: Intro }}>{displayedQuestion}</Markdown>
)}
<ExplicableRule dottedName={dottedName} />
</StyledQuestion>
{summary && <SmallBody>{summary ?? rule.rawNode.résumé}</SmallBody>}
<RuleInput
dottedName={dottedName}
displayedUnit={targetUnit}
aria-labelledby={displayedQuestion ? labelId : undefined}
label={
!displayedQuestion
? rule.title +
(rule.rawNode.résumé ? ` ${rule.rawNode.résumé}` : '')
: undefined
}
onChange={dispatchValue}
showSuggestions={showSuggestions}
/>
</FadeIn>
)
}
const StyledQuestion = styled.div`
display: inline-flex;
align-items: baseline;
margin-bottom: -0.75rem;
`

View File

Before

Width:  |  Height:  |  Size: 733 B

After

Width:  |  Height:  |  Size: 733 B

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -42,8 +42,8 @@ export default function ResultatsSimples() {
</Body>
{(
[
'déclaration indépendants . résultat simple . cotisations obligatoires',
'déclaration indépendants . résultat simple . total charges sociales déductible',
'déclaration charge sociales . résultat simple . cotisations obligatoires',
'déclaration charge sociales . résultat simple . total charges sociales déductible',
] as const
).map((dottedName) => {
const r = engine.getRule(dottedName)
@ -58,7 +58,7 @@ export default function ResultatsSimples() {
<Condition
expression={{
'toutes ces conditions': [
'déclaration indépendants . cotisations payées version simple = non',
'déclaration charge sociales . cotisations payées version simple = non',
'entreprise . imposition . IR . micro-fiscal = non',
],
}}
@ -87,7 +87,7 @@ export default function ResultatsSimples() {
<Condition
expression={{
'toutes ces conditions': [
'déclaration indépendants . cotisations payées version simple = non',
'déclaration charge sociales . cotisations payées version simple = non',
'entreprise . imposition . IR . micro-fiscal = non',
],
}}
@ -98,11 +98,11 @@ export default function ResultatsSimples() {
<Grid container spacing={2}>
{(
[
'déclaration indépendants . réduction covid . total',
'déclaration indépendants . résultat simple . revenu net fiscal',
'déclaration indépendants . résultat simple . CSG déductible',
'déclaration indépendants . résultat simple . CFP',
'déclaration indépendants . résultat simple . assiette sociale',
'déclaration charge sociales . réduction covid . total',
'déclaration charge sociales . résultat simple . revenu net fiscal',
'déclaration charge sociales . résultat simple . CSG déductible',
'déclaration charge sociales . résultat simple . CFP',
'déclaration charge sociales . résultat simple . assiette sociale',
] as const
).map((dottedName) => {
const r = engine.getRule(dottedName)

View File

@ -1,5 +1,5 @@
objectifs:
- déclaration indépendants . cotisations obligatoires déductibles
- déclaration charge sociales . cotisations obligatoires déductibles
- dirigeant . rémunération . totale
- dirigeant . rémunération . nette
@ -10,4 +10,4 @@ situation:
dirigeant . indépendant . PL . CIPAV: non # TODO En attendant la transitivité des remplacements
impôt: non
unité par défaut: '€/an'
unité par défaut: '€'

View File

@ -18,15 +18,14 @@ import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import styled from 'styled-components'
import { TrackPage } from '../../../ATInternetTracking'
import simulationConfig from './config.yaml'
import { ExplicationsResultatFiscal } from './ExplicationResultatFiscal'
import { SimpleField, SubSection } from './Fields'
import ResultatsSimples from './RésultatSimple'
import illustration from './undraw_fill_in_mie5.svg'
import simulationConfig from './_config.yaml'
import { ExplicationsResultatFiscal } from './_components/ExplicationResultatFiscal'
import { SimpleField, SubSection } from '../_components/Fields'
import ResultatsSimples from './_components/RésultatSimple'
import illustration from './_undraw_fill_in_mie5.svg'
export default function AideDéclarationIndépendant() {
useSimulationConfig(simulationConfig)
const situation = useSelector(situationSelector)
return (
@ -86,7 +85,7 @@ export default function AideDéclarationIndépendant() {
<FromTop>
<Grid container>
<Grid item xs={12} sm={10} md={9} lg={8}>
<Condition expression="déclaration indépendants . comptabilité . engagement">
<Condition expression="déclaration charge sociales . comptabilité . engagement">
<Trans i18nKey="aide-déclaration-indépendant.entreprise.titre">
<H2>Entreprise et activité</H2>
</Trans>
@ -105,7 +104,7 @@ export default function AideDéclarationIndépendant() {
</SmallBody>
</Condition>
<SubSection dottedName="déclaration indépendants . nature de l'activité" />
<SubSection dottedName="déclaration charge sociales . nature de l'activité" />
{/* PLNR */}
<SimpleField dottedName="entreprise . activité . débit de tabac" />
<SimpleField dottedName="dirigeant . indépendant . cotisations et contributions . déduction tabac" />
@ -123,9 +122,9 @@ export default function AideDéclarationIndépendant() {
<H2>
<Trans>Exonérations</Trans>
</H2>
<SubSection dottedName="déclaration indépendants . réduction covid" />
<SubSection dottedName="déclaration charge sociales . réduction covid" />
<H3>Autres exonérations</H3>
<SimpleField dottedName="déclaration indépendants . ACRE" />
<SimpleField dottedName="déclaration charge sociales . ACRE" />
<SimpleField dottedName="établissement . ZFU" />
<Condition expression="établissement . ZFU">
<SimpleField dottedName="entreprise . effectif . seuil" />
@ -147,9 +146,9 @@ export default function AideDéclarationIndépendant() {
</Condition>
</Condition>
<Condition expression="déclaration indépendants . cotisations payées">
<SubSection dottedName="déclaration indépendants . cotisations payées" />
<SimpleField dottedName="déclaration indépendants . nature de l'activité" />
<Condition expression="déclaration charge sociales . cotisations payées">
<SubSection dottedName="déclaration charge sociales . cotisations payées" />
<SimpleField dottedName="déclaration charge sociales . nature de l'activité" />
<SimpleField dottedName="dirigeant . indépendant . conjoint collaborateur" />
<SubSection dottedName="dirigeant . indépendant . cotisations facultatives" />
{/* We can't use a subsection here cause revenu étrangers is not missing when CSG is replaced */}
@ -162,15 +161,15 @@ export default function AideDéclarationIndépendant() {
</Condition>
</Condition>
<Condition expression="déclaration indépendants . cotisations payées version simple">
<SimpleField dottedName="déclaration indépendants . cotisations payées version simple . cotisations sociales" />
<SimpleField dottedName="déclaration indépendants . cotisations payées version simple . CSG déductible et CFP" />
<Condition expression="déclaration charge sociales . cotisations payées version simple">
<SimpleField dottedName="déclaration charge sociales . cotisations payées version simple . cotisations sociales" />
<SimpleField dottedName="déclaration charge sociales . cotisations payées version simple . CSG déductible et CFP" />
</Condition>
</Grid>
</Grid>
</FromTop>
<WhenAlreadyDefined dottedName="déclaration indépendants . résultat simple . cotisations obligatoires">
<WhenAlreadyDefined dottedName="déclaration charge sociales . résultat simple . cotisations obligatoires">
<ResultatsSimples />
</WhenAlreadyDefined>
</>
@ -193,12 +192,12 @@ function ImpositionSection() {
<SimpleField dottedName="entreprise . imposition" />
<WhenAlreadyDefined dottedName="entreprise . imposition">
{/* <WhenApplicable dottedName="déclaration indépendants . comptabilité"> */}
<SimpleField dottedName="déclaration indépendants . comptabilité" />
{/* <WhenApplicable dottedName="déclaration charge sociales . comptabilité"> */}
<SimpleField dottedName="déclaration charge sociales . comptabilité" />
{/* </WhenApplicable> */}
<Condition
expression={
'déclaration indépendants . cotisations payées version simple = non'
'déclaration charge sociales . cotisations payées version simple = non'
}
>
<FromTop key={situation['entreprise . imposition']}>

View File

@ -0,0 +1,28 @@
import { SmallBody } from '@/design-system/typography/paragraphs'
import React from 'react'
import styled from 'styled-components'
export default function FormulaireTitle({
formulaire,
children,
}: {
formulaire: string
children: React.ReactNode
}) {
return (
<StyledLiasseTitle>
{children}
<StyledFormulaireReference>{formulaire}</StyledFormulaireReference>
</StyledLiasseTitle>
)
}
const StyledFormulaireReference = styled(SmallBody)`
margin-bottom: -1.5rem;
`
const StyledLiasseTitle = styled.header`
display: flex;
margin-bottom: -1rem;
flex-direction: column-reverse;
`

View File

@ -0,0 +1,128 @@
import { updateSituation } from '@/actions/actions'
import { useEngine } from '@/components/utils/EngineContext'
import { Message } from '@/design-system'
import { Spacing } from '@/design-system/layout'
import { Switch } from '@/design-system/switch'
import { Strong } from '@/design-system/typography'
import { H3 } from '@/design-system/typography/heading'
import { Body, SmallBody } from '@/design-system/typography/paragraphs'
import { useOrdinal } from '@/hooks/useOrdinal'
import { isEmpty } from 'ramda'
import { useCallback } from 'react'
import { Trans } from 'react-i18next'
import { useDispatch } from 'react-redux'
import styled, { css } from 'styled-components'
export default function ModeAccompagnement() {
const engine = useEngine()
const declarationNumber = engine.evaluate('DRI . nombre de déclarations')
.nodeValue as number
const defaultAccompagnementMode = engine.evaluate(
'DRI . accompagnement imposition par défaut'
).nodeValue as boolean
const isSelected = engine.evaluate('DRI . accompagnement imposition')
.nodeValue as boolean
const dispatch = useDispatch()
const imposition = engine.evaluate('entreprise . imposition')
if (isSelected && !isEmpty(imposition.missingVariables)) {
dispatch(
updateSituation(
'entreprise . imposition',
`'${imposition.nodeValue as string}'`
)
)
}
const updateSelected = useCallback(
(isSelected: boolean) =>
dispatch(
updateSituation(
'DRI . accompagnement imposition',
isSelected ? 'oui' : 'non'
)
),
[dispatch]
)
return (
<Message>
<H3>{engine.getRule('DRI . accompagnement imposition').title}</H3>
<Body>
<Strong>
<Trans i18nKey="assistant-DRI.imposition.mode-accompagnement.nombre-déclarations">
C'est votre {{ nthDeclaration: useOrdinal(declarationNumber) }}{' '}
déclaration de revenu depuis la création de votre entreprise.
</Trans>
</Strong>{' '}
</Body>
{defaultAccompagnementMode ? (
<Trans i18nKey="assistant-DRI.imposition.mode-accompagnement.activé">
<Body>
Tout n'est peut-être pas encore très clair pour vous. Nous allons
vous guider pas à pas en vous posant des questions simples. À chaque
fois, nous vous donnerons des pistes sur comment trouver les
informations pour y répondre.
</Body>
<Body>
Nous vous expliquerons aussi toutes les notions clés reliées à votre
déclaration (par exemple : IS/IR, BIC, BNC, liasse fiscale, etc.)
</Body>
<Body>
Vous pouvez changer de mode à tout moment en utilisant
l'interrupteur ci-dessous.{' '}
</Body>
</Trans>
) : (
<Trans i18nKey="assistant-DRI.imposition.mode-accompagnement.désactivé">
<Body>
Vous avez peut-être une bonne connaissance des notions associées
(par exemple : IS/IR, BIC/BNC, liasse fiscale, etc.). Nous irons
droit au but en vous posant des{' '}
<Strong>questions simples et précises</Strong> pour vous faire
gagner du temps.{' '}
</Body>
<Body>
Si vous souhaitez être davantage accompagné pour répondre aux
questions, vous pouvez <Strong>changer de mode</Strong> à tout
moment en utilisant l'interrupteur ci-dessous.
</Body>
</Trans>
)}
<Spacing xs />
<AccompagnementSwitch>
<Switch onChange={updateSelected} defaultSelected={isSelected}>
<Strong>
<Trans>Mode accompagnement</Trans>
</Strong>
</Switch>
<SmallBody>
{isSelected ? (
<Trans>Accompagnement activé</Trans>
) : (
<Trans>Accompagnement désactivé</Trans>
)}
</SmallBody>
</AccompagnementSwitch>
</Message>
)
}
const AccompagnementSwitch = styled.div`
${({ theme }) => css`
background-color: ${theme.colors.extended.grey[100]};
padding: ${theme.spacings.md};
padding-bottom: 0;
display: flex;
flex-direction: column;
border-radius: ${theme.box.borderRadius};
width: fit-content;
margin-bottom: ${theme.spacings.md};
* {
color: ${theme.colors.bases.primary[800]};
}
`}
`

View File

@ -0,0 +1,22 @@
import { DottedName } from '@/../../modele-social'
import { useEngine } from '@/components/utils/EngineContext'
import { isEmpty } from 'ramda'
export function useProgress(objectifs: DottedName[]): number {
const engine = useEngine()
const evaluatedObjectifs = objectifs.map((dottedName) => ({
...engine.evaluate(dottedName),
dottedName,
}))
const objectifsApplicables = evaluatedObjectifs.filter(
(objectif) => objectif.nodeValue !== null
)
const objectifsRemplis = objectifsApplicables.filter((objectif) =>
isEmpty(objectif.missingVariables)
)
if (!objectifsApplicables.length) {
return 0
}
return objectifsRemplis.length / objectifsApplicables.length
}

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 11 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 6.0 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 36 KiB

View File

@ -0,0 +1,14 @@
objectifs:
- DRI . cotisations
questions:
liste noire:
- dirigeant . indépendant . cotisations facultatives
liste:
- DRI . cotisations
- ''
unité par défaut: '€'
situation:
DRI: oui

View File

@ -0,0 +1,105 @@
import Conversation from '@/components/conversation/Conversation'
import Value, { WhenAlreadyDefined } from '@/components/EngineValue'
import { FromBottom, FromTop } from '@/components/ui/animate'
import Progress from '@/components/ui/Progress'
import { useSimulationProgress } from '@/components/utils/useNextQuestion'
import { Message } from '@/design-system'
import { Container, Spacing } from '@/design-system/layout'
import { Strong } from '@/design-system/typography'
import { H2 } from '@/design-system/typography/heading'
import { Body, Intro } from '@/design-system/typography/paragraphs'
import { Grid } from '@mui/material'
export default function Cotisations() {
const progress = useSimulationProgress()
return (
<FromTop>
<Grid container item lg={10} xl={8}>
<Intro>
En 2022, vous paierez des <Strong>cotisations sociales</Strong> à
l'Urssaf. Voici comment elles seront calculées :
</Intro>
</Grid>
<Container
darkMode
backgroundColor={(theme) => theme.colors.bases.primary[600]}
>
<Grid
container
columnSpacing={4}
rowSpacing={2}
justifyContent="center"
>
<Grid item md={6} sm={12}>
<H2>Cotisations provisionnelles</H2>
<Intro>
<Value expression="dirigeant . indépendant . cotisations et contributions" />
</Intro>
<Body>
En 2022, vous allez payer chaque mois une{' '}
<Strong>avance sur le montant des cotisations</Strong> que vous
devrez . C'est ce que l'on appelle{' '}
<Strong>les cotisations provisionnelles</Strong>. Elles sont
calculées à partir de votre revenu de 2021 (déclaré en 2022).
</Body>
<Body>
Ces cotisations seront <Strong>régularisées en 2023</Strong>, une
fois que l'Urssaf connaîtra votre revenu réel de 2022.
</Body>
</Grid>
<Grid item md={6} sm={12}>
<H2>Régularisation des cotisations</H2>
<Intro>
<Value expression="DRI . cotisations . régularisation" />
</Intro>
<Body>
C'est la différence entre les cotisations provisionnelles payées
en 2021 et le montant que vous deviez effectivement payer.
</Body>
<Body>
Ce dernier est calculé à partir de votre revenu de 2021 (déclaré
en 2022).
</Body>
</Grid>
<Grid item lg={10} xl={8}>
<Spacing md />
<Intro as="h2">
Améliorez votre estimation en répondant aux questions suivantes
pour l'année 2021
</Intro>
</Grid>
<Grid item lg={10} xl={8}>
<Message border={false}>
<div
css={`
margin: -0.75rem 0;
`}
>
<Conversation />
</div>
</Message>
</Grid>
<Grid item lg={10} xl={8}>
<WhenAlreadyDefined dottedName="DRI . cotisations">
<FromBottom>
<Message icon type="success" border={false}>
<Intro>
En 2022, vous devrez payer à l'Urssaf{' '}
<Strong>
{' '}
<Value expression="DRI . cotisations" />
</Strong>{' '}
de cotisations sociales.
</Intro>
</Message>
</FromBottom>
</WhenAlreadyDefined>
</Grid>
</Grid>
<Spacing md />
</Container>
<Progress progress={progress} />
</FromTop>
)
}

View File

@ -0,0 +1,382 @@
import { DottedName } from '@/../../modele-social'
import Value, { Condition } from '@/components/EngineValue'
import { FromTop } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Message } from '@/design-system'
import Accordion from '@/design-system/accordion'
import AnswerGroup from '@/design-system/answer-group'
import { Button } from '@/design-system/buttons'
import { Container, Spacing } from '@/design-system/layout'
import { Strong } from '@/design-system/typography'
import { H2, H3, H4 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Li, Ol } from '@/design-system/typography/list'
import { Body, Intro, SmallBody } from '@/design-system/typography/paragraphs'
import { Grid } from '@mui/material'
import { Item } from '@react-stately/collections'
import { RuleNode } from 'publicodes'
import { useContext, useMemo } from 'react'
import { Trans } from 'react-i18next'
import styled, { css } from 'styled-components'
import { SimpleField } from '../_components/Fields'
import { useProgress } from './_components/hooks'
export function useObjectifs(): Array<DottedName> {
return useLiasseFiscaleFields()
.filter(
([, rule]) =>
rule.rawNode.meta?.facultatif !== 'oui' &&
rule.rawNode.meta?.section !== 'oui'
)
.map(([dottedName]) => dottedName)
}
export default function Déclaration() {
const engine = useEngine()
const liasseDottedName = (
[
'DRI . liasse . réel simplifié',
'DRI . liasse . réel normal',
'DRI . liasse . déclaration contrôlée',
] as const
).find((dottedName) => engine.evaluate(dottedName).nodeValue !== null)
if (!liasseDottedName) {
return null // TODO : micro-fiscal
}
const liasse = engine.getRule(liasseDottedName)
return (
<>
<Grid container>
<Grid item lg={10} xl={8}>
<FromTop>
<H2>Aide au remplissage de la déclaration de revenu</H2>
<Trans i18nKey="assistant-DRI.imposition.intro">
<Intro>
Nous allons maintenant vous indiquer comment remplir votre
déclaration de revenu personnelle à partir de la déclaration de
résultat de votre entreprise.
</Intro>
</Trans>
<H3>Où trouver la déclaration de résultat de l'entreprise ?</H3>
<Body>
C'est le comptable qui se charge de remplir la déclaration de
résultat. Il s'occupe également de la transmettre aux impôts en
début d'année.
</Body>
<Accordion>
<Item
title="Récupérer le formulaire complété sur «&nbsp;impot.gouv.fr&nbsp;»"
key="impot.gouv.fr"
hasChildItems={false}
>
<Body>
Si le formulaire de déclaration de résultat de votre
entreprise a déjà été envoyé aux impôts, vous pouvez y accéder
en suivant ces étapes :{' '}
</Body>
<Ol>
<Li>
Connectez-vous à votre espace professionnel sur{' '}
<Link
href="https://cfspro.impots.gouv.fr/mire/accueil.do"
title="Accéder à mon espace professionnel"
>
impot.gouv.fr
</Link>
</Li>
<Li>
Dans le menu «&nbsp;<Strong>consulter</Strong>&nbsp;»,
cliquez sur «&nbsp;<Strong>compte fiscal</Strong>&nbsp;»
</Li>
<Li>
Dans le menu «&nbsp;<Strong>Accès par impôt</Strong>&nbsp;»,
allez sur «&nbsp;
<Strong>
<Condition expression="entreprise . imposition . IR . type de bénéfices . BNC">
Bénéfices non commerciaux
</Condition>
<Condition expression="entreprise . imposition . IR . type de bénéfices . BIC">
Bénéfices industriels et commerciaux
</Condition>
<Condition expression="entreprise . imposition . IS">
Impôt sur les sociétés
</Condition>
</Strong>
&nbsp;», puis sur «&nbsp;
<Strong>Déclarations</Strong>&nbsp;»
</Li>
<Li>
Cliquez sur la première ligne{' '}
<Strong>«&nbsp;Exercice clos le 31/12/2021&nbsp;»</Strong>
</Li>
<Li>
Cliquez sur la <Strong>date en gras</Strong> dans la colonne
« date de dépôt&nbsp;»
</Li>
</Ol>
<Spacing md />
<Message type="info" icon border={false}>
Si votre déclaration n'est pas présente, ou si vous n'avez pas
accès à votre espace professionnel sur impot.gouv.fr, vous
pouvez demander à votre comptable.
</Message>
</Item>
<Item
title="Demander à mon comptable la liste des cases"
key="comptable"
hasChildItems={false}
>
<Body>
Si le formulaire de déclaration de résultat de votre
entreprise n'apparaît pas encore sur le site des impôts, vous
pouvez demander directement à votre comptable les montants
nécessaire.
</Body>
<Body>Voici un modèle de message à transmettre :</Body>
<Message type="secondary">
<Markdown>{ModeleMessageComptable}</Markdown>
</Message>
<Button light size="XS">
Copier le message
</Button>
</Item>
</Accordion>
<H2>{liasse.title}</H2>
<Body>
Pour connaître les cases à remplir dans votre déclaration de
revenu personnelle, copiez les montant renseignés dans la
déclaration de résultat de votre entreprise dans le formulaire
suivant.
</Body>
</FromTop>
</Grid>
<LiasseFiscale />
</Grid>
<Spacing xxl />
<ResultSection />
</>
)
}
const ModeleMessageComptable = `
Bonjour,
Je souhaite procéder à la déclaration de mes revenus
d'indépendant sur impot.gouv.fr. J'aurais besoin pour cela des
informations suivantes contenues dans les cases suivantes de
la déclaration de résultat de l'entreprise :
Case BV BT, BK, BZ, ...
Je vous remercie de m'envoyer ces informations ou directement
un exemplaire de la déclaration déjà remplie.
Bien à vous,`
function useLiasseFiscaleFields(): Array<[DottedName, RuleNode]> {
const engine = useEngine()
const fields = useMemo(
() =>
(Object.entries(engine.getParsedRules()) as Array<[DottedName, RuleNode]>)
.filter(([dottedName]) =>
dottedName.match(/DRI \. liasse \. .* \. .*$/)
)
.filter(
([dottedName]) => engine.evaluate(dottedName).nodeValue !== null
),
[engine.parsedSituation]
)
return fields
}
function LiasseFiscale() {
const fields = useLiasseFiscaleFields()
return (
<>
{fields.map(([dottedName, rule]) =>
rule.rawNode.meta?.section === 'oui' ? (
<Grid xs={12}>
<H3
css={`
margin-bottom: 0rem;
`}
>
{rule.title}
</H3>
</Grid>
) : (
<Grid md={4} sm={6} xs={12}>
<SimpleField dottedName={dottedName} />
</Grid>
)
)}
</>
)
}
function useDéclarationRevenuFields() {
const engine = useEngine()
const fields = useMemo(
() =>
Object.entries(engine.getParsedRules())
.filter(([, rule]) => rule.rawNode.meta?.affichage !== 'non')
.filter(([dottedName]) =>
dottedName.startsWith('DRI . déclaration revenus')
)
.filter(
([dottedName]) => engine.evaluate(dottedName).nodeValue != null
),
[engine.parsedSituation]
)
return fields
}
function ResultSection() {
const objectifs = useObjectifs()
const fields = useDéclarationRevenuFields()
const sitePaths = useContext(SitePathsContext)
const isLiasseFiscaleCompleted = useProgress(objectifs) === 1
if (!isLiasseFiscaleCompleted) {
return null
}
return (
<Container
darkMode
backgroundColor={(theme) => theme.colors.bases.primary[600]}
>
<FromTop>
<H2>Votre déclaration de revenu</H2>
<Grid
container
spacing={3}
alignItems="stretch"
flexWrap={'wrap-reverse'}
>
<Grid item lg={8} xl={7}>
<Message border={false}>
<Grid
container
alignItems="flex-end"
justifyContent={'space-between'}
>
{fields.map(([dottedName, rule]) =>
rule.rawNode.meta?.section === 'oui' ? (
<Grid xs={12}>
{rule.dottedName.split(' . ').length === 3 ? (
<H3>{rule.title}</H3>
) : (
<H4
css={`
margin-top: 0rem;
`}
>
{rule.title}
</H4>
)}
</Grid>
) : (
<>
<Grid item xs={12} sm={8} md={9}>
<Body>
{rule.title} <em>{rule.rawNode.note}</em>
</Body>
</Grid>
<Grid item xs="auto">
<Body>
<Strong>
{
(rule.rawNode.meta?.cases.défaut ??
rule.rawNode.meta?.cases ??
[])[0]
}
</Strong>
<StyledCase>
<Value expression={dottedName} linkToRule={false} />
</StyledCase>
</Body>
</Grid>
</>
)
)}
</Grid>
<Spacing lg />
<AnswerGroup justifyContent={'center'}>
<Button size="XS" light isDisabled>
Imprimer ou sauvegarder en PDF
</Button>
<Button size="XS" light isDisabled>
Obtenir un lien de partage
</Button>
</AnswerGroup>
<Spacing xl />
<Grid
xs={12}
css={`
text-align: center;
`}
item
>
<Button
size="XL"
to={sitePaths.gérer.déclarationIndépendant.cotisations}
>
Continuer vers l'estimation des cotisations pour 2022
</Button>
</Grid>
<Spacing md />
</Message>
</Grid>
<Grid item lg={4} xl={5}>
<div
css={`
position: sticky !important;
top: 1rem;
padding-bottom: 0.001rem;
`}
>
<Message type="info" border={false}>
<Body>Ces informations sont fournies à titre indicatif.</Body>
<SmallBody>
Vous restez entièrement responsable d'éventuels oublis ou
inexactitudes dans votre déclaration.
</SmallBody>
<SmallBody>
En cas de doutes, rapprochez-vous de votre comptable.
</SmallBody>
</Message>
</div>
</Grid>
</Grid>
<Spacing xl />
</FromTop>
</Container>
)
}
const StyledCase = styled.span`
border: 1px solid ${({ theme }) => theme.colors.bases.primary[800]};
border-top: none;
background-color: white;
padding: ${({ theme }) =>
css`
${theme.spacings.xxs} ${theme.spacings.sm}
`};
display: inline-block;
width: 5.5rem;
text-align: right;
margin-left: ${({ theme }) => theme.spacings.sm};
`

View File

@ -0,0 +1,169 @@
import { DottedName } from '@/../../modele-social'
import { resetCompany } from '@/actions/companyActions'
import { useSetEntreprise } from '@/hooks/useSetEntreprise'
import { CompanyDetails } from '@/components/company/Details'
import { CompanySearchField } from '@/components/company/SearchField'
import {
WhenAlreadyDefined,
WhenApplicable,
WhenNotAlreadyDefined,
} from '@/components/EngineValue'
import { FromBottom, FromTop } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Message } from '@/design-system'
import { Button } from '@/design-system/buttons'
import { Spacing } from '@/design-system/layout'
import { Strong } from '@/design-system/typography'
import { H3 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Body, Intro, SmallBody } from '@/design-system/typography/paragraphs'
import { Grid } from '@mui/material'
import { useContext } from 'react'
import { Trans } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { SimpleField } from '../_components/Fields'
import { useProgress } from './_components/hooks'
import notHandled from './_components/undraw_access_denied_re_awnf.svg'
export const OBJECTIFS: DottedName[] = [
'entreprise . SIREN',
'entreprise . catégorie juridique . EI . auto-entrepreneur',
'entreprise . catégorie juridique . SARL . unipersonnelle',
]
export default function Accueil() {
const setEntreprise = useSetEntreprise()
const sitePaths = useContext(SitePathsContext)
const dispatch = useDispatch()
const engine = useEngine()
const progress = useProgress(OBJECTIFS)
const showGoToNextStep =
progress === 1 && engine.evaluate('DRI . cas exclus').nodeValue === null
return (
<>
<Grid container>
<Grid item lg={10} xl={8}>
<Intro>
La première étape est de <Strong>trouver votre entreprise</Strong>.
Nous utiliserons les informations disponibles ouvertement sur
l'INSEE pour mieux vous guider par la suite.
</Intro>
<WhenNotAlreadyDefined dottedName="entreprise . SIREN">
<Body>
Vous pouvez rechercher avec votre nom, le nom de votre entreprise,
le SIREN ou le SIRET
</Body>
<CompanySearchField onSubmit={setEntreprise} />
</WhenNotAlreadyDefined>
<WhenAlreadyDefined dottedName="entreprise . SIREN">
<FromBottom>
<CompanyDetails />
</FromBottom>
<Button size="XS" light onPress={() => dispatch(resetCompany())}>
<Trans>Modifier l'entreprise</Trans>
</Button>
</WhenAlreadyDefined>
<SimpleField dottedName="entreprise . catégorie juridique . EI . auto-entrepreneur" />
<SimpleField dottedName="entreprise . catégorie juridique . SARL . unipersonnelle" />
<Spacing xxl />
</Grid>
</Grid>
<Grid container>
<Grid item lg={10} xl={8}>
<WhenApplicable dottedName="DRI . cas exclus">
<FromTop>
<Message type="info">
<Grid
container
justifyContent="center"
spacing={3}
alignItems="center"
>
<Grid
item
xs={6}
md={3}
sx={{ order: { md: 0, xs: 1, sm: 1 } }}
>
<img
src={notHandled}
alt=""
css={`
width: 100%;
padding: 1rem;
`}
/>
</Grid>
<Grid item md={9}>
<Markdown>
{engine.evaluate('DRI . cas exclus').nodeValue as string}
</Markdown>
</Grid>
<Grid item lg={2} />
<Grid item md="auto">
<Button color="tertiary" to={sitePaths.gérer.index}>
Découvrir les simulateur et assistant pour mon entreprise
</Button>
</Grid>
<Grid item>
<SmallBody>
Si vous souhaitez que cet assistant à la déclaration gère
votre cas dans le futur, laissez-nous message en cliquant
sur le bouton "Faire une suggestion" en bas de la page.
</SmallBody>
</Grid>
</Grid>
</Message>
</FromTop>
</WhenApplicable>
{showGoToNextStep && (
<FromTop>
<Message border={false}>
<Trans i18nKey="assistant-DRI.precision">
<H3>Quelques précisions avant de continuer</H3>
<Body>
Pour faire votre déclaration de revenu, il faudra vous
connecter sur{' '}
<Link href="https://www.impots.gouv.fr/accueil">
impot.gouv.fr
</Link>{' '}
à partir du <Strong>8 avril 2022</Strong>.
</Body>
<Body>
Si vous faites remplir votre déclaration de revenu par votre
expert-comptable, cet assistant peut quand même vous être
utile pour connaître le{' '}
<Strong>
montant des cotisations sociales à payer en 2022
</Strong>
</Body>
</Trans>
<div
css={`
text-align: center;
`}
>
<Spacing lg />
<Button
size="XL"
to={sitePaths.gérer.déclarationIndépendant.imposition}
>
Continuer avec cette entreprise
</Button>
<Spacing lg />
</div>
</Message>
</FromTop>
)}
</Grid>
</Grid>
</>
)
}

View File

@ -0,0 +1,378 @@
import { DottedName } from '@/../../modele-social'
import { Condition, WhenApplicable } from '@/components/EngineValue'
import { FromTop } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'
import { SitePathsContext } from '@/components/utils/SitePathsContext'
import { Message } from '@/design-system'
import Accordion from '@/design-system/accordion'
import { Button } from '@/design-system/buttons'
import { Container, Spacing } from '@/design-system/layout'
import PopoverWithTrigger from '@/design-system/popover/PopoverWithTrigger'
import { Strong } from '@/design-system/typography'
import { H2, H3 } from '@/design-system/typography/heading'
import { Link } from '@/design-system/typography/link'
import { Body, Intro, SmallBody } from '@/design-system/typography/paragraphs'
import { Grid } from '@mui/material'
import { Item } from '@react-stately/collections'
import { formatValue } from 'publicodes'
import { useContext } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { SimpleField } from '../_components/Fields'
import FormulaireTitle from './_components/FormulaireTitle'
import { useProgress } from './_components/hooks'
import ModeAccompagnement from './_components/ModeAccompagnement'
export const OBJECTIFS: Array<DottedName> = [
'entreprise . imposition',
'entreprise . imposition . IR . type de bénéfices',
'entreprise . imposition . régime',
]
export default function Imposition() {
const progress = useProgress(OBJECTIFS)
const engine = useEngine()
const { t } = useTranslation()
return (
<>
<Grid container>
<Grid item lg={10} xl={8}>
<Trans i18nKey="assistant-DRI.imposition.intro">
<Intro>
Dans cette étape, nous allons déterminer les{' '}
<Strong>déclarations qui vous concernent</Strong> et la{' '}
<Strong>liste des cases que vous aurez à remplir</Strong>.
</Intro>
</Trans>
<ModeAccompagnement />
<Condition expression="DRI . accompagnement imposition">
<FromTop>
<H2>Type d'imposition</H2>
<Markdown components={{ p: Intro }}>
{formatValue(
engine.evaluate('DRI . accompagnement imposition . type')
)}
</Markdown>
<Accordion>
<Item
key="explications"
title={t("Qu'est ce que ça veut dire ?")}
hasChildItems={false}
>
<Condition expression="entreprise . imposition . IR">
<Markdown>
{engine.getRule('entreprise . imposition . IR').rawNode
.description ?? ''}
</Markdown>
</Condition>
<Condition expression="entreprise . imposition . IS">
<Markdown>
{engine.getRule('entreprise . imposition . IS').rawNode
.description ?? ''}
</Markdown>
</Condition>
</Item>
<Item
key="exceptions"
title={t(
"Dans quels cas mon entreprise n'est pas imposée à l'impôt sur le revenu ?"
)}
hasChildItems={false}
>
<Markdown>
{formatValue(
engine.evaluate(
'DRI . accompagnement imposition . type . exceptions'
)
)}
</Markdown>
</Item>
</Accordion>
<ModifyInformation dottedName="entreprise . imposition">
Modifier le type d'imposition
</ModifyInformation>
<Condition expression="entreprise . imposition . IR">
<H2>Type de bénéfice</H2>
<Markdown components={{ p: Intro }}>
{formatValue(
engine.evaluate(
'DRI . accompagnement imposition . bénéfice'
)
)}
</Markdown>
<Accordion>
<Item
key="explications"
title={t("Qu'est ce que ça veut dire ?")}
hasChildItems={false}
>
<Markdown>
{formatValue(
engine.evaluate(
'DRI . accompagnement imposition . bénéfice . explications'
)
)}
</Markdown>
</Item>
{engine.evaluate(
'DRI . accompagnement imposition . bénéfice . exceptions'
).nodeValue !== null ? (
<Item
key="exceptions"
title={t(
'Dans quels cas mes bénéfices ne sont pas de type BNC ?'
)}
hasChildItems={false}
>
<Markdown>
{formatValue(
engine.evaluate(
'DRI . accompagnement imposition . bénéfice . exceptions'
)
)}
</Markdown>
</Item>
) : (
(null as any) // Problem with AriaAccordionProps type
)}
</Accordion>
<WhenApplicable dottedName="DRI . accompagnement imposition . bénéfice . exceptions">
<ModifyInformation dottedName="entreprise . imposition . IR . type de bénéfices">
Modifier le type de bénéfice
</ModifyInformation>
</WhenApplicable>
</Condition>
<H2>Régime d'imposition</H2>
<Intro>
Il est possible de retrouver le régime d'imposition de votre
entreprise avec le <Strong>memento fiscal</Strong>. C'est un
document envoyé par le service des impôts qui résume la
situation de votre entreprise.
</Intro>
<Message type="info" icon>
<Body>
<Body></Body>
Si vous ne retrouvez pas ce document, ou si il n'est plus à
jour, vous pouvez{' '}
<Strong>contacter le service des impôt</Strong> pour qu'il
vous transmette à nouveau ces informations.
</Body>
<Body>
<Link href="https://www.impots.gouv.fr/contacts">
Contacter le service des impôts
</Link>
</Body>
<SmallBody>
Vous pouvez également vous rapprocher de votre comptable pour
avoir cette information.
</SmallBody>
</Message>
<SimpleField dottedName="DRI . accompagnement imposition . régime memento fiscal" />
<Spacing lg />
<WhenApplicable dottedName="DRI . accompagnement imposition . régime">
<Markdown components={{ p: Intro }}>
{formatValue(
engine.evaluate('DRI . accompagnement imposition . régime')
)}
</Markdown>
<Accordion>
<Item
key="explications"
title={t("Qu'est ce que ça veut dire ?")}
hasChildItems={false}
>
<Markdown>
{formatValue(
engine.evaluate(
'DRI . accompagnement imposition . explications'
)
)}
</Markdown>
</Item>
</Accordion>
</WhenApplicable>
</FromTop>
</Condition>
<Condition expression="DRI . accompagnement imposition = non">
<FromTop>
{OBJECTIFS.map((dottedName) => (
<SimpleField key={dottedName} dottedName={dottedName} />
))}
</FromTop>
</Condition>
</Grid>
</Grid>
<Spacing xl />
{progress === 1 && <ResultSection />}
</>
)
}
function ModifyInformation(props: {
dottedName: DottedName
children: React.ReactNode
}) {
return (
<PopoverWithTrigger
trigger={(buttonProps) => (
<Button light {...buttonProps}>
{props.children}
</Button>
)}
small
>
{(close) => (
<>
<SimpleField dottedName={props.dottedName} />
<Spacing lg />
<Button onPress={close}>Continuer</Button>
<Spacing md />
</>
)}
</PopoverWithTrigger>
)
}
function ResultSection() {
const sitePaths = useContext(SitePathsContext)
return (
<FromTop>
<Container
darkMode
backgroundColor={(theme) => theme.colors.bases.primary[600]}
>
<H2>Vos déclarations fiscales</H2>
<Grid container spacing={4}>
<Grid item lg={6}>
<H3>Pour vous</H3>
<Message border={false}>
<FormulaireTitle formulaire="Formulaire 2042">
<H3>Déclaration de revenus</H3>
</FormulaireTitle>
<Body>
C'est la déclaration de revenu qui est effectuée chaque année
sur{' '}
<Link href="https://www.impots.gouv.fr/accueil">
impot.gouv.fr
</Link>
. Elle est utilisée pour calculer{' '}
<Strong>
le montant de votre impôt et de vos cotisations sociales
</Strong>
.
</Body>
<Body>
Vous pouvez demander à votre comptable de s'en charger, mais ce
n'est pas automatique.
</Body>
<Body>
En tant qu'indépendant vous aurez à remplir une section spéciale
sur le montant des cotisations.
</Body>
<Spacing md />
<div
css={`
text-align: center;
`}
>
<Button to={sitePaths.gérer.déclarationIndépendant.déclaration}>
Continuer vers l'aide au remplissage
</Button>
</div>
<Spacing sm />
<SmallBody>
Je connais déjà les cases et montants à remplir :{' '}
<Link to={sitePaths.index} isDisabled>
accéder directement à l'estimation de mes cotisations en 2022.
</Link>
</SmallBody>
<Spacing md />
</Message>
</Grid>
<Grid item lg={6}>
<H3>Pour votre entreprise</H3>
<WhenApplicable dottedName="DRI . liasse">
<Message border={false}>
<LiasseFiscaleTitle />
<Body>
C'est le formulaire qui permet de déclarer le{' '}
<Strong>résultat détaillé</Strong> de votre entreprise.
</Body>
<Condition expression="entreprise . imposition . IS">
<Body>
Il permet de calculer le montant de l'impôt sur les
sociétés.
</Body>
</Condition>
<Body>
Si vous avez un comptable, il se chargera de la remplir et de
l'envoyer à l'administration fiscale.
</Body>
<Body>
Si vous n'avez pas de comptable, nous mettons à votre
disposition un assistant pour{' '}
<Strong>
calculer le montant de vos charges sociales déductibles
</Strong>
.
</Body>
<Body
css={`
text-align: center;
`}
>
<Button
light
size="XS"
to={
sitePaths.gérer[
'déclaration-charges-sociales-indépendant'
]
}
>
Accéder à l'assistant
</Button>
</Body>
</Message>
</WhenApplicable>
<Condition expression="entreprise . imposition . régime . micro-entreprise">
<Message border={false} icon type="info">
Comme vous êtes au régime micro-fiscal, il n'y a pas de
formulaire de déclaration spécifique
</Message>
</Condition>
</Grid>
</Grid>
<Spacing lg />
</Container>
</FromTop>
)
}
function LiasseFiscaleTitle() {
const engine = useEngine()
const liasseDottedName = (
[
'DRI . liasse . réel simplifié',
'DRI . liasse . réel normal',
'DRI . liasse . déclaration contrôlée',
] as const
).find((dottedName) => engine.evaluate(dottedName).nodeValue !== null)
if (!liasseDottedName) {
return null
}
const liasse = engine.getRule(liasseDottedName)
return (
<FormulaireTitle formulaire={liasse.rawNode.meta?.formulaire ?? ''}>
<H3>{liasse.title}</H3>
</FormulaireTitle>
)
}

Some files were not shown because too many files have changed in this diff Show More