refactor: move EngineValue components to separated files
parent
3dab99daa0
commit
632290c1c9
|
@ -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.
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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}</>
|
||||
}
|
|
@ -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}</>
|
||||
}
|
|
@ -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;
|
||||
`
|
|
@ -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}</>
|
||||
}
|
|
@ -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}</>
|
||||
}
|
|
@ -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}</>
|
||||
}
|
|
@ -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',
|
||||
// })
|
||||
// })
|
||||
// })
|
|
@ -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}</>
|
||||
}
|
|
@ -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}</>
|
||||
}
|
|
@ -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>
|
||||
}
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
||||
|
|
|
@ -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é'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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() {
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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, {
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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, {
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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({
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
import { Condition } from '@/components/EngineValue'
|
||||
import { Condition } from '@/components/EngineValue/Condition'
|
||||
import SimulateurWarning from '@/components/SimulateurWarning'
|
||||
import Simulation, {
|
||||
SimulationGoal,
|
||||
|
|
|
@ -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,
|
||||
|
|
|
@ -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 {
|
||||
|
|
|
@ -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'
|
||||
|
|
|
@ -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'
|
||||
|
|
Loading…
Reference in New Issue