refactor: move EngineValue components to separated files

pull/2901/head
Johan Girod 2024-02-16 14:56:14 +01:00
parent 3dab99daa0
commit 632290c1c9
40 changed files with 522 additions and 430 deletions

View File

@ -1,19 +1,23 @@
# Journal des modifications
## Next
- [protection sociale] Ajoute une condition de revenu pour bénéficier de la pension d'invalité pour les salariés
## 2.0.0
- Met à jour la cotisation minimale de retraite à 450 SMIC horaire en 2023 et 2024
- Met à jour le taux de cotisation maladie 2 (indemnités journalières)
- Passage à publicodes 1.0
- Met à jour la cotisation minimale de retraite à 450 SMIC horaire en 2023 et 2024
- Met à jour le taux de cotisation maladie 2 (indemnités journalières)
- Passage à publicodes 1.0
## 2.0.0-rc.5
- Ajoute la CET salarié manquante.
- Ajoute la CET salarié manquante.
## 2.0.0-rc.4
- Mise à jour du taux neutre pour 2024
- Plafond retraite complémentaire CIPAV modifié
- Mise à jour du taux neutre pour 2024
- Plafond retraite complémentaire CIPAV modifié
## 2.0.0-rc.3
@ -21,30 +25,30 @@ Mise à jour taux et barèmes 2024
### Base
- PLFSS
- SMIC
- PLFSS
- SMIC
### Salariés
- Avantage en nature nourriture (base et HCR)
- Titres-restaurant
- Hausse cotisation AGS
- Hausse cotisation vieillesse employeur déplafonnée
- Baisse taux minimum AT/MP
- Changement seuil taux réduit cotisations maladie et allocations familiales
- Changement du barème de la taxe pour les salaires
- Avantage en nature nourriture (base et HCR)
- Titres-restaurant
- Hausse cotisation AGS
- Hausse cotisation vieillesse employeur déplafonnée
- Baisse taux minimum AT/MP
- Changement seuil taux réduit cotisations maladie et allocations familiales
- Changement du barème de la taxe pour les salaires
### Indépendants
- PRCI
- Valeur point retraite rci
- PRCI
- Valeur point retraite rci
### Impôts
- Barème général
- Taux neutre métropole, DOM, COM
- Plafonnement quotient familial
- Décote
- Barème général
- Taux neutre métropole, DOM, COM
- Plafonnement quotient familial
- Décote
## 2.0.0-rc.2
@ -54,11 +58,11 @@ Use publicodes v1.0.0-rc.5
**BREAKING CHANGE**
- Utilise publicodes 1.0.0-rc.4 (cf https://github.com/publicodes/publicodes/blob/master/CHANGELOG.md)
- Utilise publicodes 1.0.0-rc.4 (cf https://github.com/publicodes/publicodes/blob/master/CHANGELOG.md)
## 1.8.3
- Met à jour la valeur du point CNAVPL en 2023
- Met à jour la valeur du point CNAVPL en 2023
## 1.8.2
@ -76,161 +80,161 @@ Exporte les règles au format json pour optimiser le chargement
Corrige des bugs dans limplémentation de la convention collective du sport :
- Enlève la boucle du calcul de la limite déxonération de la prévoyance
- Renomme la règle `salarié . convention collective . sport . exonération cotisation AT . refus` en `salarié . convention collective . sport . refus exonération cotisation AT`
- Correction dunités
- Correction du calcul de la retraite complémenaire AGIRC-ARRCO
- Enlève la boucle du calcul de la limite déxonération de la prévoyance
- Renomme la règle `salarié . convention collective . sport . exonération cotisation AT . refus` en `salarié . convention collective . sport . refus exonération cotisation AT`
- Correction dunités
- Correction du calcul de la retraite complémenaire AGIRC-ARRCO
## 1.7.1
Clarifie le vocabulaire, les référence et limplémentation du calcul de lindemnité dactivité partielle
- Renomme la règle `salarié . activité partielle . rémunération mensuelle minimale` vers `salarié . activité partielle . indemnités . légale . rémunération mensuelle minimale`
- Renomme la règle `salarié . activité partielle . indemnités . base` en `salarié . activité partielle . indemnités . légale . base`
- Renomme la règle `salarié . activité partielle . indemnités . complémentaire` en `salarié . activité partielle . indemnités . légale . allocation complémentaire`
- Crée la règle `salarié . activité partielle . indemnités . légale`
- Renomme la règle `salarié . activité partielle . rémunération mensuelle minimale` vers `salarié . activité partielle . indemnités . légale . rémunération mensuelle minimale`
- Renomme la règle `salarié . activité partielle . indemnités . base` en `salarié . activité partielle . indemnités . légale . base`
- Renomme la règle `salarié . activité partielle . indemnités . complémentaire` en `salarié . activité partielle . indemnités . légale . allocation complémentaire`
- Crée la règle `salarié . activité partielle . indemnités . légale`
## 1.7.0
- Met à jour laide à lembauche dun apprenti (supprime lhistorique : lancienne version était mal implémentée)
- Ajoute la règle `salarié . contrat . ancienneté`
- Ajoute la règle `salarié . contrat . apprentissage . diplôme . niveau 8` pour la nouvelle aide à lembauche des contrat dapprentissage
- Déprécie les règles `salarié . contrat . apprentissage . diplôme préparé` et `salarié . contrat . apprentissage . ancienneté`
- Met à jour le calcul de lindemnité de chômage partiel (y compris indemnité employeur)
- Supprime la règle experimentale `salarié . activité partielle . secteur d'activité restreint`
- Met à jour laide à lembauche dun apprenti (supprime lhistorique : lancienne version était mal implémentée)
- Ajoute la règle `salarié . contrat . ancienneté`
- Ajoute la règle `salarié . contrat . apprentissage . diplôme . niveau 8` pour la nouvelle aide à lembauche des contrat dapprentissage
- Déprécie les règles `salarié . contrat . apprentissage . diplôme préparé` et `salarié . contrat . apprentissage . ancienneté`
- Met à jour le calcul de lindemnité de chômage partiel (y compris indemnité employeur)
- Supprime la règle experimentale `salarié . activité partielle . secteur d'activité restreint`
## 1.6.3
- Mise à jour de la valeur de service et dacquisition du point de retraite complémentaire indépendant (RCI)
- Mise à jour de la valeur de service et dacquisition du point de retraite complémentaire indépendant (RCI)
## 1.6.2
- Mise à jour du SMIC au 1er mai 2023
- Mise à jour du SMIC au 1er mai 2023
## 1.6.1
- Corrige le taux de CPF pour les auto-entrepreneur PLNR (2% depuis 2022)
- Corrige une typo dans les montants de la CARPIMKO
- Corrige le plafond pour le taux réduit de lIS (hausse applicable pour lexercice 2022)
- Mise à jour 2023 des taux et montant de la CARCDSF
- Mise à jour 2023 des taux et montant de la CARMF
- Mise à jour 2023 des taux et montant de la CARPIMKO
- Mise à jour 2023 des taux et montant de la CAVEC
- Mise à jour 2023 des taux et montant de la CAVP
- Mise à jour 2023 des taux et montant de la CNBF
- Corrige le taux de CPF pour les auto-entrepreneur PLNR (2% depuis 2022)
- Corrige une typo dans les montants de la CARPIMKO
- Corrige le plafond pour le taux réduit de lIS (hausse applicable pour lexercice 2022)
- Mise à jour 2023 des taux et montant de la CARCDSF
- Mise à jour 2023 des taux et montant de la CARMF
- Mise à jour 2023 des taux et montant de la CARPIMKO
- Mise à jour 2023 des taux et montant de la CAVEC
- Mise à jour 2023 des taux et montant de la CAVP
- Mise à jour 2023 des taux et montant de la CNBF
## 1.6.0
- Ajoute les règles de coût de création dune entreprise
- Nouvelle implémentation de la nature dactivité pour préparer les entreprises avec activités multiples
- Ajoute les entreprises unipersonnelles dans la catégorie juridique
- Mise à jour des modalités de calcul de la cotisation maladie pour les indépendant, suite à la loi portant les mesures durgence pour la protection du pouvoir dachat daoût 2022.
- Correction des calculs des assiette du conjoint collaborateur
- Mise à jour des modalités de calcul des cotisations CIPAV en 2023 suite au passage du recouvrement à lUrssaf
- Ajoute la question sur les activités saisonnières pour le calcul des cotisations sans assiette minimale pour les indeps
- Réimplémentation des exonérations pour indépendants pour mieux gérer le cumul
- Ajout dune question sur la durée dexonération pour la pension invalidité indépendant
- La notification sur la franchise de TVA saffiche uniquement pour les entreprises qui peuvent en bénéficier
- Ajoute les règles de coût de création dune entreprise
- Nouvelle implémentation de la nature dactivité pour préparer les entreprises avec activités multiples
- Ajoute les entreprises unipersonnelles dans la catégorie juridique
- Mise à jour des modalités de calcul de la cotisation maladie pour les indépendant, suite à la loi portant les mesures durgence pour la protection du pouvoir dachat daoût 2022.
- Correction des calculs des assiette du conjoint collaborateur
- Mise à jour des modalités de calcul des cotisations CIPAV en 2023 suite au passage du recouvrement à lUrssaf
- Ajoute la question sur les activités saisonnières pour le calcul des cotisations sans assiette minimale pour les indeps
- Réimplémentation des exonérations pour indépendants pour mieux gérer le cumul
- Ajout dune question sur la durée dexonération pour la pension invalidité indépendant
- La notification sur la franchise de TVA saffiche uniquement pour les entreprises qui peuvent en bénéficier
### Détails :
#### Règles dépréciées
- `dirigeant . indépendant . cotisations et contributions . maladie . réduction supplémentaire`
- `entreprise . activité`
- `dirigeant . indépendant . PL . métier . avocat`
- `dirigeant . indépendant . PL . CARMF . retraite CNAVPL`
- `dirigeant . indépendant . PL . CIPAV . exonération incapacité`
- `dirigeant . indépendant . PL . CIPAV . retraite complémentaire . option surcotisation`
- `entreprise . TVA . franchise de TVA . seuils dépassés`
- `dirigeant . indépendant . cotisations et contributions . maladie . réduction supplémentaire`
- `entreprise . activité`
- `dirigeant . indépendant . PL . métier . avocat`
- `dirigeant . indépendant . PL . CARMF . retraite CNAVPL`
- `dirigeant . indépendant . PL . CIPAV . exonération incapacité`
- `dirigeant . indépendant . PL . CIPAV . retraite complémentaire . option surcotisation`
- `entreprise . TVA . franchise de TVA . seuils dépassés`
#### Règles supprimées
- `protection sociale . retraite . CNAVPL`
- `protection sociale . retraite . CNAVPL . CIPAV . trimestres auto-entrepreneur`
- `protection sociale . retraite . CNAVPL`
- `protection sociale . retraite . CNAVPL . CIPAV . trimestres auto-entrepreneur`
#### Règles ajoutées
- `entreprise . activités . *`
- `entreprise . associés . `
- `entreprise . catégorie juridique . EI . EI`
- `entreprise . catégorie juridique . SARL . EURL`
- `entreprise . catégorie juridique . SARL . SARL`
- `entreprise . catégorie juridique . SAS . SASU`
- `entreprise . catégorie juridique . SAS . SAS`
- `entreprise . catégorie juridique . SELARL . SELARL`
- `entreprise . catégorie juridique . SELARL . SELARLU`
- `entreprise . catégorie juridique . SELAS . SELAS`
- `entreprise . catégorie juridique . SELAS . SELASU`
- `entreprise . TVA . franchise de TVA . notification`
- `protection sociale . retraite . base . CNAVPL`
- `protection sociale . retraite . complémentaire . CIPAV`
- `protection sociale . retraite . trimestres . auto-entrepreneur CIPAV`
- `dirigeant . indépendant . PL . métier . juridique . *`
- `dirigeant . indépendant . PL . métier . agents généraux d'assurances`
- `dirigeant . indépendant . conjoint collaborateur . notification exonérations non pris en compte`
- `dirigeant . indépendant . cotisations et contributions . exonérations . ACRE . *`
- `dirigeant . indépendant . cotisations et contributions . exonérations . pension invalidité . *`
- `dirigeant . indépendant . cotisations et contributions . exonérations . âge . *`
- `entreprise . activités . *`
- `entreprise . associés . `
- `entreprise . catégorie juridique . EI . EI`
- `entreprise . catégorie juridique . SARL . EURL`
- `entreprise . catégorie juridique . SARL . SARL`
- `entreprise . catégorie juridique . SAS . SASU`
- `entreprise . catégorie juridique . SAS . SAS`
- `entreprise . catégorie juridique . SELARL . SELARL`
- `entreprise . catégorie juridique . SELARL . SELARLU`
- `entreprise . catégorie juridique . SELAS . SELAS`
- `entreprise . catégorie juridique . SELAS . SELASU`
- `entreprise . TVA . franchise de TVA . notification`
- `protection sociale . retraite . base . CNAVPL`
- `protection sociale . retraite . complémentaire . CIPAV`
- `protection sociale . retraite . trimestres . auto-entrepreneur CIPAV`
- `dirigeant . indépendant . PL . métier . juridique . *`
- `dirigeant . indépendant . PL . métier . agents généraux d'assurances`
- `dirigeant . indépendant . conjoint collaborateur . notification exonérations non pris en compte`
- `dirigeant . indépendant . cotisations et contributions . exonérations . ACRE . *`
- `dirigeant . indépendant . cotisations et contributions . exonérations . pension invalidité . *`
- `dirigeant . indépendant . cotisations et contributions . exonérations . âge . *`
#### Divers
- Correction de lexonération incapacité de la CNAVPL
- Met à jour les descriptions des cotisation indépendant
- Met à jour les formules de `dirigeant . indépendant . cotisations et contributions . maladie`, `dirigeant . indépendant . PL . maladie` et `dirigeant . indépendant . cotisations et contributions . indemnités journalières maladie`
- Découpage du fichier `independant.yaml` et `profession libérale.yaml`
- Ajoute des nouveaux métier pour les PLR
- Correction de lexonération incapacité de la CNAVPL
- Met à jour les descriptions des cotisation indépendant
- Met à jour les formules de `dirigeant . indépendant . cotisations et contributions . maladie`, `dirigeant . indépendant . PL . maladie` et `dirigeant . indépendant . cotisations et contributions . indemnités journalières maladie`
- Découpage du fichier `independant.yaml` et `profession libérale.yaml`
- Ajoute des nouveaux métier pour les PLR
## 1.5.0
Ajoute les droits ouverts à la protection sociale pour les régimes suivants :
- indépendants AC/PLNR
- auto-entrepreneur hors CIPAV
- assimilé salarié
- indépendants AC/PLNR
- auto-entrepreneur hors CIPAV
- assimilé salarié
Les droits suivants ont été implémentés :
- Indemnités journalières et délai dattente en cad darrêt maladie
- Indemnités journalières pour les accidents du travail et maladie professionnelle
- Indemnités journalières et forfaitaire pour les congés maternité paternité adoption
- Rentes, capital décès, pension de reversion et dinvalidité
- Indemnités journalières et délai dattente en cad darrêt maladie
- Indemnités journalières pour les accidents du travail et maladie professionnelle
- Indemnités journalières et forfaitaire pour les congés maternité paternité adoption
- Rentes, capital décès, pension de reversion et dinvalidité
### Détails
Ajout des règles suivantes :
- dirigeant . indépendant . cotisations et contributions . invalidité et décès
- protection sociale . maladie . raam
- protection sociale . maladie . maternité paternité adoption . \*
- protection sociale . maladie . arrêt maladie . \*
- protection sociale . invalidité et décès . \*
- dirigeant . indépendant . cotisations et contributions . invalidité et décès
- protection sociale . maladie . raam
- protection sociale . maladie . maternité paternité adoption . \*
- protection sociale . maladie . arrêt maladie . \*
- protection sociale . invalidité et décès . \*
Renomme les règles suivantes :
- protection sociale . retraite . base . cotisée . revenu salarié -> protection sociale . retraite . base . cotisée . salarié
- protection sociale . retraite . base . cotisée . revenu indépendant -> protection sociale . retraite . base . cotisée . indépendant
- protection sociale . accidents du travail et maladies professionnelles -> protection sociale . maladie . accidents du travail et maladies professionnelles
- protection sociale . retraite . base . cotisée . revenu salarié -> protection sociale . retraite . base . cotisée . salarié
- protection sociale . retraite . base . cotisée . revenu indépendant -> protection sociale . retraite . base . cotisée . indépendant
- protection sociale . accidents du travail et maladies professionnelles -> protection sociale . maladie . accidents du travail et maladies professionnelles
Supression des règles suivantes :
- protection sociale . maladie . ATMP
- protection sociale . maladie . ATMP
\*Note : lespace de nom `protection social` étant taggué comme « experimental », ces changements cassants ne provoquent pas de montée de version majeure.
## 1.4.2
- Augmentation du plafond de taux réduit pour limpôt sur les sociétés (merci @fmata)
- Augmentation du plafond de taux réduit pour limpôt sur les sociétés (merci @fmata)
## 1.4.1
Mise à jour des montants qui changent au 1ᵉʳ janvier 2023 :
- SMIC
- plafond sécurité sociale
- tranches de limpôt sur le revenu
- plafonds et planchers de labattement forfaitaire
- plafonds de la décote de limpôt sur le revenu
- SMIC
- plafond sécurité sociale
- tranches de limpôt sur le revenu
- plafonds et planchers de labattement forfaitaire
- plafonds de la décote de limpôt sur le revenu
Mise à jour de `période . début d'année`, `période . fin d'année` et de `date`.
@ -240,99 +244,99 @@ Implémente les nouveaux taux de cotisation pour les auto-entrepreneurs à parti
### Ajoute les nouvelles règles suivantes :
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . CIPAV
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux vente restauration hébergement
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BNC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . vente restauration hébergement
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . service BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . service BNC
- dirigeant . auto-entrepreneur . affiliation CIPAV
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . CIPAV
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux vente restauration hébergement
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BNC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . vente restauration hébergement
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . service BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . service BNC
- dirigeant . auto-entrepreneur . affiliation CIPAV
### Déprécie les règles suivantes :
- dirigeant . auto-entrepreneur . cotisations et contributions . CFP . revenus BNC
- dirigeant . auto-entrepreneur . cotisations et contributions . CFP . revenus BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux prestation de service
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . prestation de service
- dirigeant . auto-entrepreneur . cotisations et contributions . CFP . revenus BNC
- dirigeant . auto-entrepreneur . cotisations et contributions . CFP . revenus BIC
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux prestation de service
- dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . prestation de service
## 1.3.0
- Déprécie `salarié . temps de travail . durée légale` au profit de `durée légale du travail` au même niveau que SMIC. Cela permet de désactiver lespace de nom salarié tout en pouvant utiliser la durée légale dans dautres règles (comme pour le SMIC)
- Répare les bugs darrondi dans le calcul des rémunération mensuelle / annuelles chez les indeps
- Déprécie `dirigeant . indépendant . PL . CARMF . retraite CNAVPL` au profit de `dirigeant . indépendant . PL . CARMF . participation CPAM retraite`
- Modifie le calcul du taux de retraite des PL PAMC (aligné sur celui des autres PLR à partir de 2022)
- Ajoute une notice dinformation pour loffre simplifié médecin remplaçant quand les conditions sont remplies
- Enlève la question RSA pour les PAMC (non concernées)
- Actualise les liens morts dans les références
- Déprécie `salarié . temps de travail . durée légale` au profit de `durée légale du travail` au même niveau que SMIC. Cela permet de désactiver lespace de nom salarié tout en pouvant utiliser la durée légale dans dautres règles (comme pour le SMIC)
- Répare les bugs darrondi dans le calcul des rémunération mensuelle / annuelles chez les indeps
- Déprécie `dirigeant . indépendant . PL . CARMF . retraite CNAVPL` au profit de `dirigeant . indépendant . PL . CARMF . participation CPAM retraite`
- Modifie le calcul du taux de retraite des PL PAMC (aligné sur celui des autres PLR à partir de 2022)
- Ajoute une notice dinformation pour loffre simplifié médecin remplaçant quand les conditions sont remplies
- Enlève la question RSA pour les PAMC (non concernées)
- Actualise les liens morts dans les références
## 1.2.0
### Fix et réecritures
- Répare lACRE qui ne fonctionnait plus pour les SASU, en ajoutant une règle `dirigeant . assimilé salarié . cotisations`
- La règle `dirigeant . auto-entrepreneur . impôt . revenu imposable` est maintenant une simple indirection vers `entreprise . imposition . régime . micro-entreprise . revenu abattu` (auparavant, elle réimplémentait la même logique)
- La règles `dirigeant . auto-entrepreneur . chiffres d'affaires` ne remplace plus `entreprise . chiffre d'affaires`. On peut donc utiliser de manière indiférenciée `entreprise . chiffre d'affaires` ou `dirigeant . auto-entrepreneur . chiffres d'affaires` pour spécifier le chiffre daffaires de lauto-entrepreneur
- Répare lACRE qui ne fonctionnait plus pour les SASU, en ajoutant une règle `dirigeant . assimilé salarié . cotisations`
- La règle `dirigeant . auto-entrepreneur . impôt . revenu imposable` est maintenant une simple indirection vers `entreprise . imposition . régime . micro-entreprise . revenu abattu` (auparavant, elle réimplémentait la même logique)
- La règles `dirigeant . auto-entrepreneur . chiffres d'affaires` ne remplace plus `entreprise . chiffre d'affaires`. On peut donc utiliser de manière indiférenciée `entreprise . chiffre d'affaires` ou `dirigeant . auto-entrepreneur . chiffres d'affaires` pour spécifier le chiffre daffaires de lauto-entrepreneur
### Nouveautés legislatives
- Lassiette minimale retraite pour les indépendant a été modifiée courant de lannée pour pouvoir assurer 3 trimestres validés (ce nétait pas le cas avec la valeur par défaut). Création de la règle `dirigeant . indépendant . assiette minimale . retraite . en 2022`
- Le taux de cotisation indemnité maladie des conjoints collaborateur AC/PLNR est de 0,50% desormais (au lieu dêtre aligné sur celui du gérant)
- Lassiette minimale retraite pour les indépendant a été modifiée courant de lannée pour pouvoir assurer 3 trimestres validés (ce nétait pas le cas avec la valeur par défaut). Création de la règle `dirigeant . indépendant . assiette minimale . retraite . en 2022`
- Le taux de cotisation indemnité maladie des conjoints collaborateur AC/PLNR est de 0,50% desormais (au lieu dêtre aligné sur celui du gérant)
### Protection sociale : implémentation de la retraite et des IJSS en `experimental`
- Suppression du montant estimé de la retraite, au profit de deux nouvelles règles, plus representative :
- `protection sociale . retraite . base` qui correspond au revenu pris en compte pour les 25 meilleures années dans le calcul de la pension de la retraite de base
- `protection sociale . retraite . complémentaire` qui correspond au supplément de pension de retraite acquis grâce à une année complète de cotisation retraite complémentaire
- Uniformisation du calcul de `protection sociale . retraite . trimestres` entre les salariés et les indépendants
- Renommage de `protection sociale . santé` en `protection sociale . maladie` qui est le nom « officiel » de la branche
- Ajout de `protection sociale . maladie . arrêt maladie` pour le montant des indemnités journalière versées par la CPAM en cas darrêt maladie.
- Suppression du montant estimé de la retraite, au profit de deux nouvelles règles, plus representative :
- `protection sociale . retraite . base` qui correspond au revenu pris en compte pour les 25 meilleures années dans le calcul de la pension de la retraite de base
- `protection sociale . retraite . complémentaire` qui correspond au supplément de pension de retraite acquis grâce à une année complète de cotisation retraite complémentaire
- Uniformisation du calcul de `protection sociale . retraite . trimestres` entre les salariés et les indépendants
- Renommage de `protection sociale . santé` en `protection sociale . maladie` qui est le nom « officiel » de la branche
- Ajout de `protection sociale . maladie . arrêt maladie` pour le montant des indemnités journalière versées par la CPAM en cas darrêt maladie.
## 1.1.0
### Loi du 16 août 2022 portant mesures durgence pour la protection du pouvoir dachat
- Ajoute la possibilité de spécifier un taux de participation employeur pour le remboursement des frais dabonnement de transport en commun. La participation employeur est déductible jusquà 75% maintenant
- Augmente les plafonds de déductibilité de remboursement des frais de trajet domicile/travail
- Augmente le plafond de déductibilité des titres-restaurants
- Ajoute lextension de la déduction forfaitaire pour heures supplémentaires aux entreprises de plus de 20 salariés
- Ajoute la possibilité de spécifier un taux de participation employeur pour le remboursement des frais dabonnement de transport en commun. La participation employeur est déductible jusquà 75% maintenant
- Augmente les plafonds de déductibilité de remboursement des frais de trajet domicile/travail
- Augmente le plafond de déductibilité des titres-restaurants
- Ajoute lextension de la déduction forfaitaire pour heures supplémentaires aux entreprises de plus de 20 salariés
## 1.0.0
- Déplace la question ACRE sur le dirigeant plutôt que lentreprise
- Sépare `activité` et `activité . nature`
- Déplace la question ACRE sur le dirigeant plutôt que lentreprise
- Sépare `activité` et `activité . nature`
## 1.0.0-beta.2
- Réécrit les règles de la cotisation AT/MP
- Supprime le recours au mécanisme synchronisation pour la localisation de létablissement
- Ajoute le tag `experimental` à de nouvelles règles
- Réécrit les règles de la cotisation AT/MP
- Supprime le recours au mécanisme synchronisation pour la localisation de létablissement
- Ajoute le tag `experimental` à de nouvelles règles
## 1.0.0-beta.1
- Passage du paquet en semver (voir le README)
- Sépare le fichier salarié en plusieurs fichiers séparés
- Ajoute un tag experimental sur les règles susceptible de casser
- Passage du paquet en semver (voir le README)
- Sépare le fichier salarié en plusieurs fichiers séparés
- Ajoute un tag experimental sur les règles susceptible de casser
Les changements suivants sont cassants :
- renomme lespace de nom `contrat salarié` en `salarié`
- réécrit les règles liées au remboursement des frais domicile/travail
- réécrit les règles liées aux CDD
- déplace les éléments relatif au contrat dans `salarié . contrat`. Il sagit de `temps partiel`, `salaire brut` ou encore le `statut cadre`
- tous les éléments relatifs à la rémunération sont déplacés dans `salarié . rémunération`
- `salarié . régimes spécifiques` : les règles liées aux régimes spéciaux (DFS, cadre, impatriés, etc)
- `plafond sécurité sociale temps plein` devient `plafond sécurité sociale`
- toutes les cotisations sont déplacées dans lespace de nom `salarié . cotisations`, et utilisent les acronymes comme nom tant que possible.
- renomme lespace de nom `contrat salarié` en `salarié`
- réécrit les règles liées au remboursement des frais domicile/travail
- réécrit les règles liées aux CDD
- déplace les éléments relatif au contrat dans `salarié . contrat`. Il sagit de `temps partiel`, `salaire brut` ou encore le `statut cadre`
- tous les éléments relatifs à la rémunération sont déplacés dans `salarié . rémunération`
- `salarié . régimes spécifiques` : les règles liées aux régimes spéciaux (DFS, cadre, impatriés, etc)
- `plafond sécurité sociale temps plein` devient `plafond sécurité sociale`
- toutes les cotisations sont déplacées dans lespace de nom `salarié . cotisations`, et utilisent les acronymes comme nom tant que possible.
**Corrections de bugs**
- Ajoute la limite de déduction sur la part employeur des prévoyances
- Enlève la CSA de lexonération JEI
- Réecrit les règles de déductions des frais de transport domicile / travail pour coller à la réglementation
- Réecrit les règles sur le CDD pour une meilleure expérience question par question
- Précise le calcul de lassiette de la CSG
- Corrige le calcul de la rémunération brut avec prévoyance
- Ajoute la limite de déduction sur la part employeur des prévoyances
- Enlève la CSA de lexonération JEI
- Réecrit les règles de déductions des frais de transport domicile / travail pour coller à la réglementation
- Réecrit les règles sur le CDD pour une meilleure expérience question par question
- Précise le calcul de lassiette de la CSG
- Corrige le calcul de la rémunération brut avec prévoyance
**Note sur lupgrade**
Pour les utilisateur des version précédente, la mise à jour risque dêtre longue et fastidieuse. Nous nous en excusons. Le but de cette refacto est de prévenir les changement cassants au maximum à lavenir.

View File

@ -11,7 +11,8 @@ import { situationSelector } from '@/store/selectors/simulationSelectors'
import { catchDivideByZeroError } from '@/utils'
import { ExplicableRule } from './conversation/Explicable'
import { Condition, WhenApplicable } from './EngineValue'
import { Condition } from './EngineValue/Condition'
import { WhenApplicable } from './EngineValue/WhenApplicable'
import { SimulationGoal } from './Simulation'
import { FromTop } from './ui/animate'
import { useEngine } from './utils/EngineContext'

View File

@ -1,211 +0,0 @@
import { DottedName } from 'modele-social'
import Engine, { ASTNode, formatValue, PublicodesExpression } from 'publicodes'
import React from 'react'
import { useTranslation } from 'react-i18next'
import { keyframes, styled } from 'styled-components'
import RuleLink from './RuleLink'
import { useEngine } from './utils/EngineContext'
export type ValueProps<Names extends string> = {
expression: PublicodesExpression
unit?: string
engine?: Engine<Names>
displayedUnit?: string
precision?: number
documentationPath?: string
linkToRule?: boolean
flashOnChange?: boolean
} & React.HTMLAttributes<HTMLSpanElement>
export default function Value<Names extends string>({
expression,
unit,
engine,
displayedUnit,
flashOnChange = false,
precision,
documentationPath,
linkToRule = true,
...props
}: ValueProps<Names>) {
const { language } = useTranslation().i18n
if (expression === null) {
throw new TypeError('expression cannot be null')
}
const defaultEngine = useEngine()
const e = engine ?? defaultEngine
const isRule =
typeof expression === 'string' && expression in e.getParsedRules()
const evaluation = e.evaluate({
valeur: expression,
...(unit && { unité: unit }),
})
const value = formatValue(evaluation, {
displayedUnit,
language,
precision,
}) as string
if (isRule && linkToRule) {
const ruleEvaluation = e.evaluate(expression)
let dottedName = expression as DottedName
if (ruleEvaluation.sourceMap?.mecanismName === 'replacement') {
dottedName = (
ruleEvaluation.sourceMap.args.originalNode as ASTNode<'reference'>
).dottedName as DottedName
}
return (
<RuleLink dottedName={dottedName} documentationPath={documentationPath}>
<StyledValue {...props} key={value} $flashOnChange={flashOnChange}>
{value}
</StyledValue>
</RuleLink>
)
}
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
children: React.ReactNode
engine?: Engine<DottedName>
}
export function Condition({
expression,
children,
engine: engineFromProps,
}: ConditionProps) {
const defaultEngine = useEngine()
const engine = engineFromProps ?? defaultEngine
const nodeValue = engine.evaluate({ '!=': [expression, 'non'] }).nodeValue
if (!nodeValue) {
return null
}
return <>{children}</>
}
export function WhenValueEquals({
expression,
value,
children,
engine: engineFromProps,
}: ConditionProps & { value: string | number }) {
const defaultEngine = useEngine()
const engine = engineFromProps ?? defaultEngine
const nodeValue = engine.evaluate(expression).nodeValue
if (nodeValue !== value) {
return null
}
return <>{children}</>
}
export function WhenApplicable({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (
engineValue.evaluate({ 'est applicable': dottedName }).nodeValue !== true
) {
return null
}
return <>{children}</>
}
export function WhenNotApplicable({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (
engineValue.evaluate({ 'est non applicable': dottedName }).nodeValue !==
true
) {
return null
}
return <>{children}</>
}
export function WhenAlreadyDefined({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (engineValue.evaluate({ 'est non défini': dottedName }).nodeValue) {
return null
}
return <>{children}</>
}
export function WhenNotAlreadyDefined({
dottedName,
children,
}: {
dottedName: DottedName
children: React.ReactNode
}) {
const engine = useEngine()
if (engine.evaluate({ 'est défini': dottedName }).nodeValue) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,18 @@
import { useEngine } from '../utils/EngineContext'
import { ConditionProps } from './types'
export function Condition({
expression,
children,
engine: engineFromProps,
}: ConditionProps) {
const defaultEngine = useEngine()
const engine = engineFromProps ?? defaultEngine
const nodeValue = engine.evaluate({ '!=': [expression, 'non'] }).nodeValue
if (!nodeValue) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,82 @@
import { DottedName } from 'modele-social'
import { ASTNode, formatValue } from 'publicodes'
import { useTranslation } from 'react-i18next'
import { keyframes, styled } from 'styled-components'
import RuleLink from '../RuleLink'
import { useEngine } from '../utils/EngineContext'
import { ValueProps } from './types'
export default function Value<Names extends string>({
expression,
unit,
engine,
displayedUnit,
flashOnChange = false,
precision,
documentationPath,
linkToRule = true,
...props
}: ValueProps<Names>) {
const { language } = useTranslation().i18n
if (expression === null) {
throw new TypeError('expression cannot be null')
}
const defaultEngine = useEngine()
const e = engine ?? defaultEngine
const isRule =
typeof expression === 'string' && expression in e.getParsedRules()
const evaluation = e.evaluate({
valeur: expression,
...(unit && { unité: unit }),
})
const value = formatValue(evaluation, {
displayedUnit,
language,
precision,
}) as string
if (isRule && linkToRule) {
const ruleEvaluation = e.evaluate(expression)
let dottedName = expression as DottedName
if (ruleEvaluation.sourceMap?.mecanismName === 'replacement') {
dottedName = (
ruleEvaluation.sourceMap.args.originalNode as ASTNode<'reference'>
).dottedName as DottedName
}
return (
<RuleLink dottedName={dottedName} documentationPath={documentationPath}>
<StyledValue {...props} key={value} $flashOnChange={flashOnChange}>
{value}
</StyledValue>
</RuleLink>
)
}
return (
<StyledValue {...props} key={value} $flashOnChange={flashOnChange}>
{value}
</StyledValue>
)
}
const flash = keyframes`
from {
background-color: white;
opacity: 0.8;
}
to {
background-color: transparent;
}
`
export const StyledValue = styled.span<{ $flashOnChange: boolean }>`
animation: ${flash} 0.2s 1;
will-change: background-color, opacity;
`

View File

@ -0,0 +1,25 @@
import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import React from 'react'
import { useEngine } from '../utils/EngineContext'
export function WhenAlreadyDefined({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (engineValue.evaluate({ 'est non défini': dottedName }).nodeValue) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,27 @@
import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import React from 'react'
import { useEngine } from '../utils/EngineContext'
export function WhenApplicable({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (
engineValue.evaluate({ 'est applicable': dottedName }).nodeValue !== true
) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,19 @@
import { DottedName } from 'modele-social'
import React from 'react'
import { useEngine } from '../utils/EngineContext'
export function WhenNotAlreadyDefined({
dottedName,
children,
}: {
dottedName: DottedName
children: React.ReactNode
}) {
const engine = useEngine()
if (engine.evaluate({ 'est défini': dottedName }).nodeValue) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,56 @@
// import { render } from '@testing-library/react'
// import { vi } from 'vitest'
// import { WhenNotApplicable } from '@/components/EngineValue/WhenNotApplicable'
// describe('WhenNotApplicable', () => {
// const mockEngine = {
// evaluate: vi.fn(),
// }
// beforeEach(() => {
// vi.clearAllMocks()
// })
// it('should render children when the condition is true', () => {
// mockEngine.evaluate.mockReturnValueOnce({ nodeValue: true })
// const { getByText } = render(
// <WhenNotApplicable dottedName="example" engine={mockEngine as }>
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
// expect(getByText('Rendered when not applicable')).
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
// it('should not render children when the condition is false', () => {
// mockEngine.evaluate.mockReturnValueOnce({ nodeValue: false })
// const { queryByText } = render(
// <WhenNotApplicable dottedName="example" engine={mockEngine}>
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
// expect(queryByText('Rendered when not applicable')).toBeNull()
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
// it('should use the default engine when no engine is provided', () => {
// const { getByText } = render(
// <WhenNotApplicable dottedName="example">
// <div>Rendered when not applicable</div>
// </WhenNotApplicable>
// )
// expect(getByText('Rendered when not applicable')).toBeInTheDocument()
// expect(mockEngine.evaluate).toHaveBeenCalledWith({
// 'est non applicable': 'example',
// })
// })
// })

View File

@ -0,0 +1,28 @@
import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import React from 'react'
import { useEngine } from '../utils/EngineContext'
export function WhenNotApplicable({
dottedName,
children,
engine,
}: {
dottedName: DottedName
children: React.ReactNode
engine?: Engine<DottedName>
}) {
const defaultEngine = useEngine()
const engineValue = engine ?? defaultEngine
if (
engineValue.evaluate({ 'est non applicable': dottedName }).nodeValue !==
true
) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,19 @@
import { useEngine } from '../utils/EngineContext'
import { ConditionProps } from './types'
export function WhenValueEquals({
expression,
value,
children,
engine: engineFromProps,
}: ConditionProps & { value: string | number }) {
const defaultEngine = useEngine()
const engine = engineFromProps ?? defaultEngine
const nodeValue = engine.evaluate(expression).nodeValue
if (nodeValue !== value) {
return null
}
return <>{children}</>
}

View File

@ -0,0 +1,20 @@
import { DottedName } from 'modele-social'
import Engine, { ASTNode, PublicodesExpression } from 'publicodes'
import React from 'react'
export type ValueProps<Names extends string> = {
expression: PublicodesExpression
unit?: string
engine?: Engine<Names>
displayedUnit?: string
precision?: number
documentationPath?: string
linkToRule?: boolean
flashOnChange?: boolean
} & React.HTMLAttributes<HTMLSpanElement>
export type ConditionProps = {
expression: PublicodesExpression | ASTNode
children: React.ReactNode
engine?: Engine<DottedName>
}

View File

@ -10,7 +10,6 @@ import {
import { Fragment, useContext } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import Value from '@/components/EngineValue'
import RuleLink from '@/components/RuleLink'
import { EngineContext, useEngine } from '@/components/utils/EngineContext'
import { Strong } from '@/design-system/typography'
@ -18,6 +17,7 @@ import { H4, H5 } from '@/design-system/typography/heading'
import { Body } from '@/design-system/typography/paragraphs'
import { ExplicableRule } from './conversation/Explicable'
import Value from './EngineValue/Value'
import './PaySlip.css'

View File

@ -1,15 +1,15 @@
import { DottedName } from 'modele-social'
import { Trans, useTranslation } from 'react-i18next'
import Value, {
Condition,
ValueProps,
WhenAlreadyDefined,
WhenApplicable,
} from '@/components/EngineValue'
import { ValueProps } from '@/components/EngineValue/types'
import RuleLink from '@/components/RuleLink'
import { H4 } from '@/design-system/typography/heading'
import { Condition } from './EngineValue/Condition'
import Value from './EngineValue/Value'
import { WhenAlreadyDefined } from './EngineValue/WhenAlreadyDefined'
import { WhenApplicable } from './EngineValue/WhenApplicable'
export const SalaireBrutSection = () => {
return (
<div className="payslip__salarySection">

View File

@ -9,7 +9,7 @@ import { H4 } from '@/design-system/typography/heading'
import { Body } from '@/design-system/typography/paragraphs'
import SeeAnswersButton from '../conversation/SeeAnswersButton'
import Value from '../EngineValue'
import Value from '../EngineValue/Value'
export function CompanyDetails({
showSituation = false,

View File

@ -27,7 +27,7 @@ import {
} from '@/store/selectors/simulationSelectors'
import { evaluateQuestion } from '@/utils'
import Value from '../EngineValue'
import Value from '../EngineValue/Value'
import { JeDonneMonAvis } from '../JeDonneMonAvis'
import { ExplicableRule } from './Explicable'
import RuleInput from './RuleInput'

View File

@ -6,7 +6,7 @@ import { Strong } from '@/design-system/typography'
import { SmallBody } from '@/design-system/typography/paragraphs'
import { situationSelector } from '@/store/selectors/simulationSelectors'
import Value from '../EngineValue'
import Value from '../EngineValue/Value'
import { Appear } from '../ui/animate'
import { useEngine } from '../utils/EngineContext'

View File

@ -1,6 +1,5 @@
import { Trans } from 'react-i18next'
import Value from '@/components/EngineValue'
import { FromBottom } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'
@ -10,6 +9,8 @@ import { Spacing } from '@/design-system/layout'
import { H3 } from '@/design-system/typography/heading'
import { Intro } from '@/design-system/typography/paragraphs'
import Value from '../EngineValue/Value'
export default function CotisationsForfaitaires() {
const rule = useEngine().getRule(
'dirigeant . indépendant . cotisations et contributions . début activité'

View File

@ -7,11 +7,6 @@ import { Trans, useTranslation } from 'react-i18next'
import { useSelector } from 'react-redux'
import { useTheme } from 'styled-components'
import Value, {
Condition,
WhenApplicable,
WhenNotApplicable,
} from '@/components/EngineValue'
import RuleLink from '@/components/RuleLink'
import StackedBarChart from '@/components/StackedBarChart'
import { useEngine } from '@/components/utils/EngineContext'
@ -23,6 +18,10 @@ import { Li, Ul } from '@/design-system/typography/list'
import { SmallBody } from '@/design-system/typography/paragraphs'
import { targetUnitSelector } from '@/store/selectors/simulationSelectors'
import { Condition } from '../EngineValue/Condition'
import Value from '../EngineValue/Value'
import { WhenApplicable } from '../EngineValue/WhenApplicable'
import { WhenNotApplicable } from '../EngineValue/WhenNotApplicable'
import CotisationsForfaitaires from './IndépendantCotisationsForfaitaires'
import CotisationsRégularisation from './IndépendantCotisationsRégularisation'
import InstitutionsPartenaires from './InstitutionsPartenaires'

View File

@ -6,11 +6,6 @@ import { styled } from 'styled-components'
import assuranceMaladieSrc from '@/assets/images/assurance-maladie.svg'
import dgfipSrc from '@/assets/images/logo-dgfip.svg'
import urssafSrc from '@/assets/images/Urssaf.svg'
import Value, {
Condition,
WhenApplicable,
WhenNotApplicable,
} from '@/components/EngineValue'
import RuleLink from '@/components/RuleLink'
import { FromBottom } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
@ -21,6 +16,10 @@ import { H2, H3 } from '@/design-system/typography/heading'
import { Body, SmallBody } from '@/design-system/typography/paragraphs'
import { targetUnitSelector } from '@/store/selectors/simulationSelectors'
import { Condition } from '../EngineValue/Condition'
import Value from '../EngineValue/Value'
import { WhenApplicable } from '../EngineValue/WhenApplicable'
import { WhenNotApplicable } from '../EngineValue/WhenNotApplicable'
import * as logosSrc from './logos'
export default function InstitutionsPartenaires() {

View File

@ -2,7 +2,8 @@ import { utils } from 'publicodes'
import { Trans, useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
import Value, { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import Value from '@/components/EngineValue/Value'
import { FromTop } from '@/components/ui/animate'
import { useEngine } from '@/components/utils/EngineContext'
import { Markdown } from '@/components/utils/markdown'

View File

@ -7,7 +7,8 @@ import { styled } from 'styled-components'
import { TrackPage } from '@/components/ATInternetTracking'
import RuleInput from '@/components/conversation/RuleInput'
import { Condition, WhenAlreadyDefined } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import { WhenAlreadyDefined } from '@/components/EngineValue/WhenAlreadyDefined'
import PageHeader from '@/components/PageHeader'
import { FromTop } from '@/components/ui/animate'
import Warning from '@/components/ui/WarningBlock'

View File

@ -5,7 +5,7 @@ import SignaturePad from 'react-signature-pad-wrapper'
import { useTheme } from 'styled-components'
import { TrackingContext, TrackPage } from '@/components/ATInternetTracking'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import { EngineContext, EngineProvider } from '@/components/utils/EngineContext'
import { Message, PopoverWithTrigger } from '@/design-system'
import { Button } from '@/design-system/buttons'

View File

@ -5,7 +5,8 @@ import { Trans, useTranslation } from 'react-i18next'
import { TrackPage } from '@/components/ATInternetTracking'
import RuleInput from '@/components/conversation/RuleInput'
import { WhenApplicable, WhenNotApplicable } from '@/components/EngineValue'
import { WhenApplicable } from '@/components/EngineValue/WhenApplicable'
import { WhenNotApplicable } from '@/components/EngineValue/WhenNotApplicable'
import { Appear } from '@/components/ui/animate'
import BrowserOnly from '@/components/utils/BrowserOnly'
import { EngineContext, EngineProvider } from '@/components/utils/EngineContext'

View File

@ -22,7 +22,7 @@ import { TrackPage } from '@/components/ATInternetTracking'
import { CompanyDetails } from '@/components/company/Details'
import RuleInput from '@/components/conversation/RuleInput'
import { CurrentSimulatorCard } from '@/components/CurrentSimulatorCard'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import PageHeader from '@/components/PageHeader'
import { PlaceDesEntreprisesButton } from '@/components/PlaceDesEntreprises'
import { SimulateurCard } from '@/components/SimulateurCard'

View File

@ -1,6 +1,7 @@
import { Trans, useTranslation } from 'react-i18next'
import { Condition, WhenAlreadyDefined } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import { WhenAlreadyDefined } from '@/components/EngineValue/WhenAlreadyDefined'
import { useEngine } from '@/components/utils/EngineContext'
// import { Article } from '@/design-system/card'
// import { Emoji } from '@/design-system/emoji'

View File

@ -2,7 +2,7 @@ import { useContext } from 'react'
import { Trans } from 'react-i18next'
import { DistributionBranch } from '@/components/Distribution'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import PeriodSwitch from '@/components/PeriodSwitch'
import SimulateurWarning from '@/components/SimulateurWarning'
import Simulation, {

View File

@ -2,7 +2,7 @@ import { Trans, useTranslation } from 'react-i18next'
import { useTheme } from 'styled-components'
import ChiffreAffairesActivitéMixte from '@/components/ChiffreAffairesActivitéMixte'
import { WhenAlreadyDefined } from '@/components/EngineValue'
import { WhenAlreadyDefined } from '@/components/EngineValue/WhenAlreadyDefined'
import PeriodSwitch from '@/components/PeriodSwitch'
import RuleLink from '@/components/RuleLink'
import { SelectSimulationYear } from '@/components/SelectSimulationYear'

View File

@ -4,7 +4,7 @@ import React, { useState } from 'react'
import { Trans, useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
import Value from '@/components/EngineValue'
import Value from '@/components/EngineValue/Value'
import { PlaceDesEntreprisesButton } from '@/components/PlaceDesEntreprises'
import RuleLink from '@/components/RuleLink'
import Simulation, {

View File

@ -3,7 +3,7 @@ import Engine from 'publicodes'
import { Trans, useTranslation } from 'react-i18next'
import { EngineDocumentationRoutes } from '@/components/EngineDocumentationRoutes'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import PeriodSwitch from '@/components/PeriodSwitch'
import Simulation, {
SimulationGoal,

View File

@ -4,7 +4,9 @@ import { ReactNode } from 'react'
import { Trans } from 'react-i18next'
import { styled } from 'styled-components'
import Value, { Condition, WhenNotApplicable } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import Value from '@/components/EngineValue/Value'
import { WhenNotApplicable } from '@/components/EngineValue/WhenNotApplicable'
import RuleLink from '@/components/RuleLink'
import { HelpIcon } from '@/design-system/icons'
import { Grid } from '@/design-system/layout'

View File

@ -2,7 +2,8 @@ import { Trans, useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
import { ExplicableRule } from '@/components/conversation/Explicable'
import Value, { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import Value from '@/components/EngineValue/Value'
import { Accordion, Item } from '@/design-system'
import { HelpButtonWithPopover } from '@/design-system/buttons'
import { Emoji } from '@/design-system/emoji'

View File

@ -1,10 +1,9 @@
import { Trans } from 'react-i18next'
import { styled } from 'styled-components'
import Value, {
WhenAlreadyDefined,
WhenNotAlreadyDefined,
} from '@/components/EngineValue'
import Value from '@/components/EngineValue/Value'
import { WhenAlreadyDefined } from '@/components/EngineValue/WhenAlreadyDefined'
import { WhenNotAlreadyDefined } from '@/components/EngineValue/WhenNotAlreadyDefined'
import { CardContainer } from '@/design-system/card/Card'
import { EditIcon } from '@/design-system/icons'
import { Grid } from '@/design-system/layout'

View File

@ -1,7 +1,7 @@
import { Trans, useTranslation } from 'react-i18next'
import { styled } from 'styled-components'
import Value from '@/components/EngineValue'
import Value from '@/components/EngineValue/Value'
import { StatutTag } from '@/components/StatutTag'
import { Tag } from '@/design-system/tag'
import { Strong } from '@/design-system/typography'

View File

@ -2,7 +2,7 @@ import { DottedName } from 'modele-social'
import Engine from 'publicodes'
import { ComponentProps } from 'react'
import Value from '@/components/EngineValue'
import Value from '@/components/EngineValue/Value'
import { H3 } from '@/design-system/typography/heading'
function TableRow({

View File

@ -1,4 +1,4 @@
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import SimulateurWarning from '@/components/SimulateurWarning'
import Simulation, {
SimulationGoal,

View File

@ -4,7 +4,7 @@ import { Trans, useTranslation } from 'react-i18next'
import { useDispatch } from 'react-redux'
import { useTheme } from 'styled-components'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import Notifications from '@/components/Notifications'
import Simulation, {
SimulationGoal,

View File

@ -5,7 +5,7 @@ import { styled } from 'styled-components'
import { TrackPage } from '@/components/ATInternetTracking'
import { StyledInputSuggestion } from '@/components/conversation/InputSuggestions'
import RuleInput from '@/components/conversation/RuleInput'
import Value from '@/components/EngineValue'
import Value from '@/components/EngineValue/Value'
import Notifications from '@/components/Notifications'
import ShareOrSaveSimulationBanner from '@/components/ShareSimulationBanner'
import {

View File

@ -3,7 +3,7 @@ import { useDispatch } from 'react-redux'
import ChiffreAffairesActivitéMixte from '@/components/ChiffreAffairesActivitéMixte'
import RuleInput from '@/components/conversation/RuleInput'
import { Condition } from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import PeriodSwitch from '@/components/PeriodSwitch'
import RuleLink from '@/components/RuleLink'
import { SelectSimulationYear } from '@/components/SelectSimulationYear'

View File

@ -5,10 +5,9 @@ import { useSelector } from 'react-redux'
import { css, styled } from 'styled-components'
import Banner from '@/components/Banner'
import Value, {
Condition,
WhenNotAlreadyDefined,
} from '@/components/EngineValue'
import { Condition } from '@/components/EngineValue/Condition'
import Value from '@/components/EngineValue/Value'
import { WhenNotAlreadyDefined } from '@/components/EngineValue/WhenNotAlreadyDefined'
import PeriodSwitch from '@/components/PeriodSwitch'
import { PlaceDesEntreprisesButton } from '@/components/PlaceDesEntreprises'
import RuleLink from '@/components/RuleLink'