From 632290c1c9ab10e873932384973f025bd35fa608 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Fri, 16 Feb 2024 14:56:14 +0100 Subject: [PATCH] refactor: move EngineValue components to separated files --- modele-social/CHANGELOG.md | 346 +++++++++--------- .../ChiffreAffairesActivitéMixte.tsx | 3 +- site/source/components/EngineValue.tsx | 211 ----------- .../components/EngineValue/Condition.tsx | 18 + site/source/components/EngineValue/Value.tsx | 82 +++++ .../EngineValue/WhenAlreadyDefined.tsx | 25 ++ .../components/EngineValue/WhenApplicable.tsx | 27 ++ .../EngineValue/WhenNotAlreadyDefined.tsx | 19 + .../EngineValue/WhenNotApplicable.test.tsx | 56 +++ .../EngineValue/WhenNotApplicable.tsx | 28 ++ .../EngineValue/WhenValueEquals.tsx | 19 + site/source/components/EngineValue/types.ts | 20 + site/source/components/PaySlip.tsx | 2 +- site/source/components/PaySlipSections.tsx | 12 +- site/source/components/company/Details.tsx | 2 +- .../components/conversation/AnswerList.tsx | 2 +- .../components/conversation/DefaultValue.tsx | 2 +- .../IndépendantCotisationsForfaitaires.tsx | 3 +- .../IndépendantExplanation.tsx | 9 +- .../InstitutionsPartenaires.tsx | 9 +- .../components/RésultatSimple.tsx | 3 +- .../index.tsx | 3 +- .../assistants/demande-mobilité/EndBlock.tsx | 2 +- .../assistants/demande-mobilité/index.tsx | 3 +- .../assistants/pour-mon-entreprise/index.tsx | 2 +- site/source/pages/simulateurs/NextSteps.tsx | 3 +- .../artiste-auteur/ArtisteAuteur.tsx | 2 +- .../auto-entrepreneur/AutoEntrepreneur.tsx | 2 +- .../chômage-partiel/ChômagePartiel.tsx | 2 +- .../components/Comparateur.tsx | 2 +- .../components/DetailsRowCards.tsx | 4 +- .../components/Détails.tsx | 3 +- .../components/RevenuEstimé.tsx | 7 +- .../components/RevenuTable.tsx | 2 +- .../components/TableRow.tsx | 2 +- .../cout-creation-entreprise/index.tsx | 2 +- .../simulateurs/dividendes/Dividendes.tsx | 2 +- .../pages/simulateurs/impot-societe/index.tsx | 2 +- .../simulateurs/indépendant/Indépendant.tsx | 2 +- .../pages/simulateurs/salarié/Salarié.tsx | 7 +- 40 files changed, 522 insertions(+), 430 deletions(-) delete mode 100644 site/source/components/EngineValue.tsx create mode 100644 site/source/components/EngineValue/Condition.tsx create mode 100644 site/source/components/EngineValue/Value.tsx create mode 100644 site/source/components/EngineValue/WhenAlreadyDefined.tsx create mode 100644 site/source/components/EngineValue/WhenApplicable.tsx create mode 100644 site/source/components/EngineValue/WhenNotAlreadyDefined.tsx create mode 100644 site/source/components/EngineValue/WhenNotApplicable.test.tsx create mode 100644 site/source/components/EngineValue/WhenNotApplicable.tsx create mode 100644 site/source/components/EngineValue/WhenValueEquals.tsx create mode 100644 site/source/components/EngineValue/types.ts diff --git a/modele-social/CHANGELOG.md b/modele-social/CHANGELOG.md index d659ef17b..bdc846017 100644 --- a/modele-social/CHANGELOG.md +++ b/modele-social/CHANGELOG.md @@ -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 l’implé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 d’unité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 d’unités +- Correction du calcul de la retraite complémenaire AGIRC-ARRCO ## 1.7.1 Clarifie le vocabulaire, les référence et l’implémentation du calcul de l’indemnité d’activité 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 l’aide à l’embauche d’un apprenti (supprime l’historique : l’ancienne 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 à l’embauche des contrat d’apprentissage -- Déprécie les règles `salarié . contrat . apprentissage . diplôme préparé` et `salarié . contrat . apprentissage . ancienneté` -- Met à jour le calcul de l’indemnité de chômage partiel (y compris indemnité employeur) -- Supprime la règle experimentale `salarié . activité partielle . secteur d'activité restreint` +- Met à jour l’aide à l’embauche d’un apprenti (supprime l’historique : l’ancienne 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 à l’embauche des contrat d’apprentissage +- Déprécie les règles `salarié . contrat . apprentissage . diplôme préparé` et `salarié . contrat . apprentissage . ancienneté` +- Met à jour le calcul de l’indemnité 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 d’acquisition du point de retraite complémentaire indépendant (RCI) +- Mise à jour de la valeur de service et d’acquisition 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 l’IS (hausse applicable pour l’exercice 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 l’IS (hausse applicable pour l’exercice 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 d’une entreprise -- Nouvelle implémentation de la nature d’activité 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 d’urgence pour la protection du pouvoir d’achat d’aoû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 à l’Urssaf -- 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 d’une question sur la durée d’exonération pour la pension invalidité indépendant -- La notification sur la franchise de TVA s’affiche uniquement pour les entreprises qui peuvent en bénéficier +- Ajoute les règles de coût de création d’une entreprise +- Nouvelle implémentation de la nature d’activité 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 d’urgence pour la protection du pouvoir d’achat d’aoû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 à l’Urssaf +- 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 d’une question sur la durée d’exonération pour la pension invalidité indépendant +- La notification sur la franchise de TVA s’affiche 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 l’exoné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 l’exoné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 d’attente en cad d’arrê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 d’invalidité +- Indemnités journalières et délai d’attente en cad d’arrê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 d’invalidité ### 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 : l’espace 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 l’impôt sur les sociétés (merci @fmata) +- Augmentation du plafond de taux réduit pour l’impô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 l’impôt sur le revenu -- plafonds et planchers de l’abattement forfaitaire -- plafonds de la décote de l’impôt sur le revenu +- SMIC +- plafond sécurité sociale +- tranches de l’impôt sur le revenu +- plafonds et planchers de l’abattement forfaitaire +- plafonds de la décote de l’impô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 l’espace de nom salarié tout en pouvant utiliser la durée légale dans d’autres règles (comme pour le SMIC) -- Répare les bugs d’arrondi 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 d’information pour l’offre 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 l’espace de nom salarié tout en pouvant utiliser la durée légale dans d’autres règles (comme pour le SMIC) +- Répare les bugs d’arrondi 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 d’information pour l’offre 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 l’ACRE 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 d’affaires de l’auto-entrepreneur +- Répare l’ACRE 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 d’affaires de l’auto-entrepreneur ### Nouveautés legislatives -- L’assiette minimale retraite pour les indépendant a été modifiée courant de l’anné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) +- L’assiette minimale retraite pour les indépendant a été modifiée courant de l’anné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 d’arrê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 d’arrêt maladie. ## 1.1.0 ### Loi du 16 août 2022 portant mesures d’urgence pour la protection du pouvoir d’achat -- Ajoute la possibilité de spécifier un taux de participation employeur pour le remboursement des frais d’abonnement 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 l’extension 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 d’abonnement 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 l’extension 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 l’entreprise -- Sépare `activité` et `activité . nature` +- Déplace la question ACRE sur le dirigeant plutôt que l’entreprise +- 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 l’espace 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 s’agit 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 l’espace de nom `salarié . cotisations`, et utilisent les acronymes comme nom tant que possible. +- renomme l’espace 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 s’agit 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 l’espace 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 l’exoné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 l’assiette 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 l’exoné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 l’assiette de la CSG +- Corrige le calcul de la rémunération brut avec prévoyance **Note sur l’upgrade** 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 à l’avenir. diff --git a/site/source/components/ChiffreAffairesActivitéMixte.tsx b/site/source/components/ChiffreAffairesActivitéMixte.tsx index 293ff24cf..76f502d19 100644 --- a/site/source/components/ChiffreAffairesActivitéMixte.tsx +++ b/site/source/components/ChiffreAffairesActivitéMixte.tsx @@ -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' diff --git a/site/source/components/EngineValue.tsx b/site/source/components/EngineValue.tsx deleted file mode 100644 index c8dcab9a6..000000000 --- a/site/source/components/EngineValue.tsx +++ /dev/null @@ -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 = { - expression: PublicodesExpression - unit?: string - engine?: Engine - displayedUnit?: string - precision?: number - documentationPath?: string - linkToRule?: boolean - flashOnChange?: boolean -} & React.HTMLAttributes - -export default function Value({ - expression, - unit, - engine, - displayedUnit, - flashOnChange = false, - precision, - documentationPath, - linkToRule = true, - ...props -}: ValueProps) { - 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 ( - - - {value} - - - ) - } - - return ( - - {value} - - ) -} -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 -} - -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 -}) { - 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 -}) { - 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 -}) { - 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} -} diff --git a/site/source/components/EngineValue/Condition.tsx b/site/source/components/EngineValue/Condition.tsx new file mode 100644 index 000000000..2a5f163f7 --- /dev/null +++ b/site/source/components/EngineValue/Condition.tsx @@ -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} +} diff --git a/site/source/components/EngineValue/Value.tsx b/site/source/components/EngineValue/Value.tsx new file mode 100644 index 000000000..025e90417 --- /dev/null +++ b/site/source/components/EngineValue/Value.tsx @@ -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({ + expression, + unit, + engine, + displayedUnit, + flashOnChange = false, + precision, + documentationPath, + linkToRule = true, + ...props +}: ValueProps) { + 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 ( + + + {value} + + + ) + } + + return ( + + {value} + + ) +} + +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; +` diff --git a/site/source/components/EngineValue/WhenAlreadyDefined.tsx b/site/source/components/EngineValue/WhenAlreadyDefined.tsx new file mode 100644 index 000000000..6b4761881 --- /dev/null +++ b/site/source/components/EngineValue/WhenAlreadyDefined.tsx @@ -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 +}) { + const defaultEngine = useEngine() + + const engineValue = engine ?? defaultEngine + + if (engineValue.evaluate({ 'est non défini': dottedName }).nodeValue) { + return null + } + + return <>{children} +} diff --git a/site/source/components/EngineValue/WhenApplicable.tsx b/site/source/components/EngineValue/WhenApplicable.tsx new file mode 100644 index 000000000..83b5f86bd --- /dev/null +++ b/site/source/components/EngineValue/WhenApplicable.tsx @@ -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 +}) { + const defaultEngine = useEngine() + + const engineValue = engine ?? defaultEngine + + if ( + engineValue.evaluate({ 'est applicable': dottedName }).nodeValue !== true + ) { + return null + } + + return <>{children} +} diff --git a/site/source/components/EngineValue/WhenNotAlreadyDefined.tsx b/site/source/components/EngineValue/WhenNotAlreadyDefined.tsx new file mode 100644 index 000000000..e61773d81 --- /dev/null +++ b/site/source/components/EngineValue/WhenNotAlreadyDefined.tsx @@ -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} +} diff --git a/site/source/components/EngineValue/WhenNotApplicable.test.tsx b/site/source/components/EngineValue/WhenNotApplicable.test.tsx new file mode 100644 index 000000000..96ada3380 --- /dev/null +++ b/site/source/components/EngineValue/WhenNotApplicable.test.tsx @@ -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( +// +//
Rendered when not applicable
+//
+// ) + +// 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( +// +//
Rendered when not applicable
+//
+// ) + +// 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( +// +//
Rendered when not applicable
+//
+// ) + +// expect(getByText('Rendered when not applicable')).toBeInTheDocument() +// expect(mockEngine.evaluate).toHaveBeenCalledWith({ +// 'est non applicable': 'example', +// }) +// }) +// }) diff --git a/site/source/components/EngineValue/WhenNotApplicable.tsx b/site/source/components/EngineValue/WhenNotApplicable.tsx new file mode 100644 index 000000000..03a52bd10 --- /dev/null +++ b/site/source/components/EngineValue/WhenNotApplicable.tsx @@ -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 +}) { + const defaultEngine = useEngine() + + const engineValue = engine ?? defaultEngine + + if ( + engineValue.evaluate({ 'est non applicable': dottedName }).nodeValue !== + true + ) { + return null + } + + return <>{children} +} diff --git a/site/source/components/EngineValue/WhenValueEquals.tsx b/site/source/components/EngineValue/WhenValueEquals.tsx new file mode 100644 index 000000000..a9979c6f1 --- /dev/null +++ b/site/source/components/EngineValue/WhenValueEquals.tsx @@ -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} +} diff --git a/site/source/components/EngineValue/types.ts b/site/source/components/EngineValue/types.ts new file mode 100644 index 000000000..3c96c90d2 --- /dev/null +++ b/site/source/components/EngineValue/types.ts @@ -0,0 +1,20 @@ +import { DottedName } from 'modele-social' +import Engine, { ASTNode, PublicodesExpression } from 'publicodes' +import React from 'react' + +export type ValueProps = { + expression: PublicodesExpression + unit?: string + engine?: Engine + displayedUnit?: string + precision?: number + documentationPath?: string + linkToRule?: boolean + flashOnChange?: boolean +} & React.HTMLAttributes + +export type ConditionProps = { + expression: PublicodesExpression | ASTNode + children: React.ReactNode + engine?: Engine +} diff --git a/site/source/components/PaySlip.tsx b/site/source/components/PaySlip.tsx index e197d7ba4..d9706ee66 100644 --- a/site/source/components/PaySlip.tsx +++ b/site/source/components/PaySlip.tsx @@ -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' diff --git a/site/source/components/PaySlipSections.tsx b/site/source/components/PaySlipSections.tsx index c8a9c3c6d..d20c4a999 100644 --- a/site/source/components/PaySlipSections.tsx +++ b/site/source/components/PaySlipSections.tsx @@ -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 (
diff --git a/site/source/components/company/Details.tsx b/site/source/components/company/Details.tsx index 8c8d76abe..887e28289 100644 --- a/site/source/components/company/Details.tsx +++ b/site/source/components/company/Details.tsx @@ -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, diff --git a/site/source/components/conversation/AnswerList.tsx b/site/source/components/conversation/AnswerList.tsx index ff0a3de04..9339daea0 100644 --- a/site/source/components/conversation/AnswerList.tsx +++ b/site/source/components/conversation/AnswerList.tsx @@ -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' diff --git a/site/source/components/conversation/DefaultValue.tsx b/site/source/components/conversation/DefaultValue.tsx index c3755e2d7..ad6f0b2f9 100644 --- a/site/source/components/conversation/DefaultValue.tsx +++ b/site/source/components/conversation/DefaultValue.tsx @@ -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' diff --git a/site/source/components/simulationExplanation/IndépendantCotisationsForfaitaires.tsx b/site/source/components/simulationExplanation/IndépendantCotisationsForfaitaires.tsx index fc1461296..9137aac7b 100644 --- a/site/source/components/simulationExplanation/IndépendantCotisationsForfaitaires.tsx +++ b/site/source/components/simulationExplanation/IndépendantCotisationsForfaitaires.tsx @@ -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é' diff --git a/site/source/components/simulationExplanation/IndépendantExplanation.tsx b/site/source/components/simulationExplanation/IndépendantExplanation.tsx index cc7428bd3..98a14e67c 100644 --- a/site/source/components/simulationExplanation/IndépendantExplanation.tsx +++ b/site/source/components/simulationExplanation/IndépendantExplanation.tsx @@ -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' diff --git a/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx b/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx index 0e4c5e8e7..09f27095c 100644 --- a/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx +++ b/site/source/components/simulationExplanation/InstitutionsPartenaires.tsx @@ -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() { diff --git a/site/source/pages/assistants/declaration-charges-sociales-independant/components/RésultatSimple.tsx b/site/source/pages/assistants/declaration-charges-sociales-independant/components/RésultatSimple.tsx index 5eb613bb8..de6bc88e8 100644 --- a/site/source/pages/assistants/declaration-charges-sociales-independant/components/RésultatSimple.tsx +++ b/site/source/pages/assistants/declaration-charges-sociales-independant/components/RésultatSimple.tsx @@ -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' diff --git a/site/source/pages/assistants/declaration-charges-sociales-independant/index.tsx b/site/source/pages/assistants/declaration-charges-sociales-independant/index.tsx index 17ce85b32..dfc246d18 100644 --- a/site/source/pages/assistants/declaration-charges-sociales-independant/index.tsx +++ b/site/source/pages/assistants/declaration-charges-sociales-independant/index.tsx @@ -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' diff --git a/site/source/pages/assistants/demande-mobilité/EndBlock.tsx b/site/source/pages/assistants/demande-mobilité/EndBlock.tsx index 9984f6e32..2fba843e0 100644 --- a/site/source/pages/assistants/demande-mobilité/EndBlock.tsx +++ b/site/source/pages/assistants/demande-mobilité/EndBlock.tsx @@ -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' diff --git a/site/source/pages/assistants/demande-mobilité/index.tsx b/site/source/pages/assistants/demande-mobilité/index.tsx index c43c259e8..a19548ae7 100644 --- a/site/source/pages/assistants/demande-mobilité/index.tsx +++ b/site/source/pages/assistants/demande-mobilité/index.tsx @@ -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' diff --git a/site/source/pages/assistants/pour-mon-entreprise/index.tsx b/site/source/pages/assistants/pour-mon-entreprise/index.tsx index 0f662444e..ce971404e 100644 --- a/site/source/pages/assistants/pour-mon-entreprise/index.tsx +++ b/site/source/pages/assistants/pour-mon-entreprise/index.tsx @@ -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' diff --git a/site/source/pages/simulateurs/NextSteps.tsx b/site/source/pages/simulateurs/NextSteps.tsx index 996f458b9..0cbc56c35 100644 --- a/site/source/pages/simulateurs/NextSteps.tsx +++ b/site/source/pages/simulateurs/NextSteps.tsx @@ -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' diff --git a/site/source/pages/simulateurs/artiste-auteur/ArtisteAuteur.tsx b/site/source/pages/simulateurs/artiste-auteur/ArtisteAuteur.tsx index 299b37292..25df24d3e 100644 --- a/site/source/pages/simulateurs/artiste-auteur/ArtisteAuteur.tsx +++ b/site/source/pages/simulateurs/artiste-auteur/ArtisteAuteur.tsx @@ -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, { diff --git a/site/source/pages/simulateurs/auto-entrepreneur/AutoEntrepreneur.tsx b/site/source/pages/simulateurs/auto-entrepreneur/AutoEntrepreneur.tsx index 8e2eda387..4eb62a3ac 100644 --- a/site/source/pages/simulateurs/auto-entrepreneur/AutoEntrepreneur.tsx +++ b/site/source/pages/simulateurs/auto-entrepreneur/AutoEntrepreneur.tsx @@ -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' diff --git a/site/source/pages/simulateurs/chômage-partiel/ChômagePartiel.tsx b/site/source/pages/simulateurs/chômage-partiel/ChômagePartiel.tsx index 8bf452af5..73f89315f 100644 --- a/site/source/pages/simulateurs/chômage-partiel/ChômagePartiel.tsx +++ b/site/source/pages/simulateurs/chômage-partiel/ChômagePartiel.tsx @@ -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, { diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/Comparateur.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/Comparateur.tsx index 03cb6a4a3..9dcc0b5b7 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/Comparateur.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/Comparateur.tsx @@ -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, diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/DetailsRowCards.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/DetailsRowCards.tsx index fe01ee179..ba1f2ac88 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/DetailsRowCards.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/DetailsRowCards.tsx @@ -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' diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/Détails.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/Détails.tsx index bf268e9d5..996a8e6da 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/Détails.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/Détails.tsx @@ -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' diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/RevenuEstimé.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/RevenuEstimé.tsx index b4e68454f..195852dc9 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/RevenuEstimé.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/RevenuEstimé.tsx @@ -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' diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/RevenuTable.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/RevenuTable.tsx index 006297906..38c36ac2a 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/RevenuTable.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/RevenuTable.tsx @@ -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' diff --git a/site/source/pages/simulateurs/comparaison-statuts/components/TableRow.tsx b/site/source/pages/simulateurs/comparaison-statuts/components/TableRow.tsx index 1ddb023b1..0976b5e0c 100644 --- a/site/source/pages/simulateurs/comparaison-statuts/components/TableRow.tsx +++ b/site/source/pages/simulateurs/comparaison-statuts/components/TableRow.tsx @@ -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({ diff --git a/site/source/pages/simulateurs/cout-creation-entreprise/index.tsx b/site/source/pages/simulateurs/cout-creation-entreprise/index.tsx index 9c381dce1..58fc512b5 100644 --- a/site/source/pages/simulateurs/cout-creation-entreprise/index.tsx +++ b/site/source/pages/simulateurs/cout-creation-entreprise/index.tsx @@ -1,4 +1,4 @@ -import { Condition } from '@/components/EngineValue' +import { Condition } from '@/components/EngineValue/Condition' import SimulateurWarning from '@/components/SimulateurWarning' import Simulation, { SimulationGoal, diff --git a/site/source/pages/simulateurs/dividendes/Dividendes.tsx b/site/source/pages/simulateurs/dividendes/Dividendes.tsx index 57d0d9cb3..283f05e5e 100644 --- a/site/source/pages/simulateurs/dividendes/Dividendes.tsx +++ b/site/source/pages/simulateurs/dividendes/Dividendes.tsx @@ -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, diff --git a/site/source/pages/simulateurs/impot-societe/index.tsx b/site/source/pages/simulateurs/impot-societe/index.tsx index 2c6b18bcf..1e3bf879d 100644 --- a/site/source/pages/simulateurs/impot-societe/index.tsx +++ b/site/source/pages/simulateurs/impot-societe/index.tsx @@ -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 { diff --git a/site/source/pages/simulateurs/indépendant/Indépendant.tsx b/site/source/pages/simulateurs/indépendant/Indépendant.tsx index 5cd70d9e8..b426971fc 100644 --- a/site/source/pages/simulateurs/indépendant/Indépendant.tsx +++ b/site/source/pages/simulateurs/indépendant/Indépendant.tsx @@ -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' diff --git a/site/source/pages/simulateurs/salarié/Salarié.tsx b/site/source/pages/simulateurs/salarié/Salarié.tsx index 22407b65c..82ec26e3d 100644 --- a/site/source/pages/simulateurs/salarié/Salarié.tsx +++ b/site/source/pages/simulateurs/salarié/Salarié.tsx @@ -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'