⚙️ Première implémentation du mécanisme de composantes
Seulement au sein de barèmes. TODO: A ajouter dans les multiplications, directement dans la formule. Doivent pouvoir être imbriquéspull/6/head
parent
e182ccde72
commit
fa1e2c0107
|
@ -17,7 +17,7 @@ formule:
|
|||
2016: 2%
|
||||
```
|
||||
|
||||
Etant donné que le statut cadre est une exception, on pourrait aussi utiliser cette syntaxe bien plus succinte.
|
||||
Etant donné que le statut cadre est une exception, on pourrait aussi utiliser cette syntaxe bien plus succincte.
|
||||
|
||||
```yaml
|
||||
formule:
|
||||
|
@ -33,6 +33,8 @@ formule:
|
|||
|
||||
Dans le cas d'une variable de type énumération, il peut être commode de factoriser le sujet comparé et de parler de 'cas'.
|
||||
|
||||
> Mais la variable devient alors une clé, alors qu'elles sont normalement des valeurs, ça peut être perturbant
|
||||
|
||||
```yaml
|
||||
formule:
|
||||
assiette: assiette cotisations sociales
|
||||
|
@ -46,9 +48,8 @@ formule:
|
|||
2016: 2%
|
||||
```
|
||||
|
||||
|
||||
Celle-ci est identique à la précédente, mais ne contient pas de 'si' et est donc plus brève.
|
||||
On peut la voit comme une alternative adaptée à certains endroits (?).
|
||||
Celle-ci est similaire à `variations` mais ne contient pas de `si` et est donc plus brève.
|
||||
On peut la voir comme une alternative adaptée à certains endroits (?).
|
||||
|
||||
```yaml
|
||||
formule:
|
||||
|
|
|
@ -80,7 +80,8 @@
|
|||
C'est, en gros, le salaire brut moins les cotisations sociales. Ce salaire est plus important que le brut car c'est ce que le salrié reçoit sur son compte bancaire, et pourtant, le brut est très utilisé lors des négociations salariales.
|
||||
formule:
|
||||
somme: #TODO à l'avenir, exprimer une somme sous forme de requête
|
||||
- AGIRC simple
|
||||
- APEC
|
||||
- AGIRC
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
- Cotisation: AGIRC
|
||||
attache: Salariat
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: AGIRC
|
||||
description: |
|
||||
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO, gérée par l'AGIRC (Association Générale des Institutions de Retraite des Cadres)
|
||||
références:
|
||||
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
|
||||
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
|
||||
|
||||
formule:
|
||||
barème:
|
||||
assiette: salaire de base #TODO assiette cotisations sociales
|
||||
multiplicateur des tranches: plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
dû par: employeur
|
||||
tranches:
|
||||
- en-dessous de: 1
|
||||
taux: 0%
|
||||
- de: 1
|
||||
à: 8
|
||||
taux: 12.75%
|
||||
# 2016: 12.75%
|
||||
# 2015: 12.75%
|
||||
# 2014: 12.68%
|
||||
# 2006: 12.6%
|
||||
# 1999: 12.5%
|
||||
# 1998: 11.875%
|
||||
# 1997: 11.25%
|
||||
# 1996: 10.625%
|
||||
# 1995: 10.%
|
||||
# 1994: 8.47%
|
||||
# 1993: 7.02%
|
||||
- au-dessus de: 8
|
||||
taux: 0%
|
||||
|
||||
|
||||
- attributs:
|
||||
dû par: salarié
|
||||
tranches:
|
||||
- en-dessous de: 1
|
||||
taux: 0%
|
||||
- de: 1
|
||||
à: 8
|
||||
taux: 7.8%
|
||||
# 2016: 7.8%
|
||||
# 2015: 7.8%
|
||||
# 2014: 7.75%
|
||||
# 2006: 7.7%
|
||||
# 1999: 7.5%
|
||||
# 1998: 6.875%
|
||||
# 1997: 6.25%
|
||||
# 1996: 5.625%
|
||||
# 1995: 5%
|
||||
# 1994: 3.63%
|
||||
# 1993-07: 2.34%
|
||||
- au-dessus de: 8
|
||||
taux: 0%
|
||||
|
||||
notes: |
|
||||
Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de l’entreprise jusqu’à 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour l’employeur.
|
|
@ -0,0 +1,42 @@
|
|||
- Cotisation: APEC
|
||||
attache: Salariat
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: APEC
|
||||
description: |
|
||||
Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC
|
||||
(Association Pour l’Emploi des Cadres)
|
||||
références:
|
||||
chiffres clés: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
|
||||
notes: |
|
||||
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
|
||||
|
||||
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
|
||||
|
||||
formule:
|
||||
barème:
|
||||
assiette: salaire de base #TODO assiette cotisations sociales
|
||||
multiplicateur des tranches: plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
dû par: employeur
|
||||
tranches:
|
||||
- en-dessous de: 4
|
||||
taux: 0.036%
|
||||
# 2016-01: 0.036%
|
||||
# 2011-01: 0.036%
|
||||
# 1993-07: 0%
|
||||
- au-dessus de: 4
|
||||
taux: 0%
|
||||
|
||||
- attributs:
|
||||
dû par: salarié
|
||||
tranches:
|
||||
- en-dessous de: 4
|
||||
taux: 0.024%
|
||||
# 2016-01: 0.024%
|
||||
# 2011-01: 0.024%
|
||||
# 1993-07: 0%
|
||||
- au-dessus de: 4
|
||||
taux: 0%
|
|
@ -1,42 +0,0 @@
|
|||
- Cotisation: AGIRC simple
|
||||
attache: Salariat
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: AGIRC
|
||||
description: |
|
||||
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO
|
||||
(Association Générale des Institutions de Retraite des Cadres)
|
||||
références:
|
||||
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
|
||||
# concerne:
|
||||
# - statut cadre = oui
|
||||
|
||||
formule:
|
||||
barème:
|
||||
assiette: salaire de base
|
||||
multiplicateur des tranches: plafond sécurité sociale
|
||||
tranches:
|
||||
- en-dessous de: 1
|
||||
taux: 0%
|
||||
- de: 1
|
||||
à: 8
|
||||
taux: 7.8%
|
||||
# 2016: 7.8%
|
||||
# 2015: 7.8%
|
||||
# 2014: 7.75%
|
||||
# 2006: 7.7%
|
||||
# 1999: 7.5%
|
||||
# 1998: 6.875%
|
||||
# 1997: 6.25%
|
||||
# 1996: 5.625%
|
||||
# 1995: 5%
|
||||
# 1994: 3.63%
|
||||
# 1993-07: 2.34%
|
||||
- au-dessus de: 8
|
||||
taux: 0%
|
||||
|
||||
|
||||
notes: |
|
||||
Il éxiste une tranche C, de 4 à 8 fois la base, sur laquelle la répartition des cotisations est décidée au sein de l’entreprise jusqu’à 20 %. De 20 % à 20,30 %, la répartition est la suivante : 66,67 % à la charge du salarié et 33,33 % pour l’employeur.
|
|
@ -1,16 +1,16 @@
|
|||
- Cotisation: AGIRC
|
||||
attache: Salariat
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: AGIRC
|
||||
description: |
|
||||
Cotisation de retraite complémentaire cadre, complémentant le régime ARRCO
|
||||
(pour l'Association Générale des Institutions de Retraite des Cadres)
|
||||
Cotisation de retraite complémentaire cadre. Complète le régime ARRCO
|
||||
(Association Générale des Institutions de Retraite des Cadres)
|
||||
références:
|
||||
- http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
- http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
|
||||
concerne:
|
||||
- statut cadre = oui
|
||||
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
garantie minimale de points: http://www.journaldunet.com/management/pratique/primes-et-avantages/5079/gmp-2016-la-garantie-minimale-de-points-calcul-et-montant.html
|
||||
non applicable si: statut cadre # TODO l'inverse ! Vérifier le fonctionnnement de la négation !statut cadre OU statut cadre = non OU applicable si: statut cadre
|
||||
|
||||
formule:
|
||||
barème:
|
||||
|
@ -19,44 +19,46 @@
|
|||
- attributs:
|
||||
dû par: employeur
|
||||
tranches:
|
||||
- taux: 0%
|
||||
|
||||
- seuil: 1 * plafond sécurité sociale
|
||||
taux:
|
||||
2016: 12.75%
|
||||
2015: 12.75%
|
||||
2014: 12.68%
|
||||
2006: 12.6%
|
||||
1999: 12.5%
|
||||
1998: 11.875%
|
||||
1997: 11.25%
|
||||
1996: 10.625%
|
||||
1995: 10.%
|
||||
1994: 8.47%
|
||||
1993: 7.02%
|
||||
- seuil: 8 * plafond sécurité sociale
|
||||
- en-dessous de: 1
|
||||
taux: 0%
|
||||
- de: 1
|
||||
à: 8
|
||||
taux: 12.75%
|
||||
# 2016: 12.75%
|
||||
# 2015: 12.75%
|
||||
# 2014: 12.68%
|
||||
# 2006: 12.6%
|
||||
# 1999: 12.5%
|
||||
# 1998: 11.875%
|
||||
# 1997: 11.25%
|
||||
# 1996: 10.625%
|
||||
# 1995: 10.%
|
||||
# 1994: 8.47%
|
||||
# 1993: 7.02%
|
||||
- au-dessus de: 8
|
||||
taux: 0%
|
||||
|
||||
|
||||
- attributs:
|
||||
dû par: salarié
|
||||
tranches:
|
||||
- taux: 0%
|
||||
|
||||
- seuil: 1 * plafond sécurité sociale
|
||||
taux:
|
||||
2016: 7.8%
|
||||
2015: 7.8%
|
||||
2014: 7.75%
|
||||
2006: 7.7%
|
||||
1999: 7.5%
|
||||
1998: 6.875%
|
||||
1997: 6.25%
|
||||
1996: 5.625%
|
||||
1995: 5%
|
||||
1994: 3.63%
|
||||
1993-07: 2.34%
|
||||
- seuil: 8 * plafond sécurité sociale
|
||||
- en-dessous de: 1
|
||||
taux: 0%
|
||||
- de: 1
|
||||
à: 8
|
||||
taux: 7.8%
|
||||
# 2016: 7.8%
|
||||
# 2015: 7.8%
|
||||
# 2014: 7.75%
|
||||
# 2006: 7.7%
|
||||
# 1999: 7.5%
|
||||
# 1998: 6.875%
|
||||
# 1997: 6.25%
|
||||
# 1996: 5.625%
|
||||
# 1995: 5%
|
||||
# 1994: 3.63%
|
||||
# 1993-07: 2.34%
|
||||
- au-dessus de: 8
|
||||
taux: 0%
|
||||
|
||||
notes: |
|
||||
|
|
|
@ -1,47 +0,0 @@
|
|||
- Cotisation: APEC
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: APEC
|
||||
description: |
|
||||
Cotisation de retraite complémentaire cadre, pour le fonctionnement de l'APEC
|
||||
(Association Pour l’Emploi des Cadres)
|
||||
référence: http://www.agirc-arrco.fr/l-agirc-et-larrco/chiffres-cles
|
||||
notes: |
|
||||
Avant 2011, il y avait une cotisation forfaitaire au lieu de la tranche A
|
||||
|
||||
formule:
|
||||
barème:
|
||||
assiette: assiette cotisations sociales
|
||||
multiplicateur: plafond sécurité sociale
|
||||
composantes:
|
||||
|
||||
- attributs:
|
||||
dû par: employeur
|
||||
tranches:
|
||||
- taux:
|
||||
2016-01: 0.036%
|
||||
2011-01: 0.036%
|
||||
1993-07: 0%
|
||||
- seuil: 0 #TODO erreur ?
|
||||
taux:
|
||||
2016-01: 0.036%
|
||||
1993-07: 0.036%
|
||||
- seuil: 4
|
||||
taux: 0%
|
||||
|
||||
- attributs:
|
||||
dû par: salarié
|
||||
tranches:
|
||||
- taux:
|
||||
historique:
|
||||
2016-01: 0.024%
|
||||
2011-01: 0.024%
|
||||
1993-07: 0
|
||||
- seuil: 0 #TODO erreur ?
|
||||
taux:
|
||||
historique:
|
||||
2016-01: 0.024%
|
||||
1993-07: 0.024%
|
||||
- seuil: 4
|
||||
taux: 0
|
|
@ -1,63 +1,68 @@
|
|||
- Cotisation: ARRCO
|
||||
attache: Salariat
|
||||
attributs:
|
||||
branche: retraite
|
||||
type de retraite: complémentaire
|
||||
destinataire: ARRCO
|
||||
description: >
|
||||
Cotisation de retraite complémentaire pour tous les salariés du secteur privé,
|
||||
(pour l'Association pour le Régime de Retraite Complémentaire des salariés)
|
||||
référence: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
Cotisation de retraite complémentaire pour tous les salariés du secteur privé, gérée par l'Association pour le Régime de Retraite Complémentaire des salariés
|
||||
références:
|
||||
calcul des cotisations: http://www.agirc-arrco.fr/entreprises/gerer-les-salaries/calcul-des-cotisations/
|
||||
|
||||
formule:
|
||||
barème:
|
||||
assiette: assiette cotisations sociales
|
||||
multiplicateur: plafond sécurité sociale
|
||||
assiette: salaire de base #TODO assiette cotisations sociales
|
||||
multiplicateur des tranches: plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
dû par: employeur
|
||||
variations:
|
||||
- si: categorie salarié = privé cadre
|
||||
tranches:
|
||||
- taux:
|
||||
2016: 4.65%
|
||||
2015: 4.65%
|
||||
2014: 4.58%
|
||||
1999: 4.5%
|
||||
1998: 4.125%
|
||||
1997: 3.75%
|
||||
1996: 3.375%
|
||||
1993: 2.952%
|
||||
- seuil: 1
|
||||
taux: 0%
|
||||
- si: categorie salarié = privé non cadre
|
||||
tranches:
|
||||
- taux:
|
||||
2016-01: 4.65%
|
||||
2015-01: 4.65%
|
||||
2014-01: 4.58%
|
||||
1999-01: 4.5%
|
||||
1998-01: 4.125%
|
||||
1997-01: 3.75%
|
||||
1996-01: 3.375%
|
||||
1993-07: 2.952%
|
||||
- seuil: 1
|
||||
taux:
|
||||
2016: 12.15%
|
||||
2015: 12.15%
|
||||
2014: 12.08%
|
||||
2005: 12.%
|
||||
2004: 10.5%
|
||||
2002: 9%
|
||||
2000: 7.5%
|
||||
- seuil: 3
|
||||
taux: 0%
|
||||
variations:
|
||||
- si: categorie salarié = privé cadre
|
||||
tranches:
|
||||
- en-dessous de: 1
|
||||
taux:
|
||||
2016: 4.65%
|
||||
2015: 4.65%
|
||||
2014: 4.58%
|
||||
1999: 4.5%
|
||||
1998: 4.125%
|
||||
1997: 3.75%
|
||||
1996: 3.375%
|
||||
1993: 2.952%
|
||||
- au-dessus de: 1
|
||||
taux: 0%
|
||||
- si: categorie salarié = privé non cadre
|
||||
tranches:
|
||||
- en-dessous de: 1
|
||||
taux:
|
||||
2016-01: 4.65%
|
||||
2015-01: 4.65%
|
||||
2014-01: 4.58%
|
||||
1999-01: 4.5%
|
||||
1998-01: 4.125%
|
||||
1997-01: 3.75%
|
||||
1996-01: 3.375%
|
||||
1993-07: 2.952%
|
||||
- de: 1
|
||||
à: 3
|
||||
taux:
|
||||
2016: 12.15%
|
||||
2015: 12.15%
|
||||
2014: 12.08%
|
||||
2005: 12.%
|
||||
2004: 10.5%
|
||||
2002: 9%
|
||||
2000: 7.5%
|
||||
- au-dessus de: 3
|
||||
taux: 0%
|
||||
|
||||
- Cotisation:
|
||||
dû par: salarié
|
||||
variations:
|
||||
- si: categorie salarié = privé cadre
|
||||
tranches:
|
||||
- taux:
|
||||
- en-dessous de: 1
|
||||
taux:
|
||||
2016: 3.1%
|
||||
2015: 3.1%
|
||||
2014: 3.05%
|
||||
|
@ -66,11 +71,12 @@
|
|||
1997: 2.5%
|
||||
1996: 2.25%
|
||||
1993: 1.968%
|
||||
- seuil: 1
|
||||
- au-dessus de: 1
|
||||
taux: 0%
|
||||
- si: catégorie salarié = privé non cadre
|
||||
tranches:
|
||||
- taux:
|
||||
- en-dessous de: 1
|
||||
taux:
|
||||
2016: 3.1%
|
||||
2015: 3.1%
|
||||
2014: 3.05%
|
||||
|
@ -79,7 +85,8 @@
|
|||
1997: 2.5%
|
||||
1996: 2.25%
|
||||
1993: 1.968%
|
||||
- seuil: 1
|
||||
- de: 1
|
||||
à: 3
|
||||
taux:
|
||||
2016: 8.1%
|
||||
2015: 8.1%
|
||||
|
@ -88,5 +95,5 @@
|
|||
2004: 7%
|
||||
2002: 6%
|
||||
1993: 5%
|
||||
- seuil: 3
|
||||
- au-dessus de: 3
|
||||
taux: 0%
|
||||
|
|
|
@ -24,3 +24,33 @@
|
|||
- si: Salariat . exposition pénibilité multiple
|
||||
2017: 0.4%
|
||||
2015: 0.2%
|
||||
|
||||
- Cotisation: pénibilité
|
||||
attributs:
|
||||
branche: santé # ou vieillesse car ouvrant droit à une retraite anticipée ?
|
||||
description: Les dépenses liées à l'utilisation du compte pénibilité par le salarié sont prises en charge par un fonds financé par l'employeur
|
||||
références:
|
||||
- https://www.service-public.fr/professionnels-entreprises/vosdroits/F33777
|
||||
- https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/les-cotisations-patronales-au-ti/cotisations-dues.html
|
||||
- Code du travail - Article L4162-19
|
||||
|
||||
formule:
|
||||
composantes:
|
||||
- nom: base
|
||||
multiplication:
|
||||
assiette: assiette cotisations sociales
|
||||
taux:
|
||||
2017: 0.01%
|
||||
|
||||
- nom: additionnelle
|
||||
applicable si: Activité . durée >= 1 mois
|
||||
multiplication:
|
||||
assiette: assiette cotisations sociales
|
||||
taux:
|
||||
variations:
|
||||
- si: Salariat . exposition pénibilité simple
|
||||
2017: 0.2%
|
||||
2015: 0.1%
|
||||
- si: Salariat . exposition pénibilité multiple
|
||||
2017: 0.4%
|
||||
2015: 0.2%
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#rule {
|
||||
font-size: 120%;
|
||||
font-size: 110%;
|
||||
}
|
||||
|
||||
#rule pre {
|
||||
|
@ -35,6 +35,10 @@
|
|||
padding-right: .6em;
|
||||
}
|
||||
|
||||
#rule ul {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
#rule .rule-type {
|
||||
font-size: 35%;
|
||||
}
|
||||
|
@ -130,7 +134,6 @@
|
|||
display: inline-flex;
|
||||
justify-content: start;
|
||||
min-height: 5em;
|
||||
width: 80%;
|
||||
}
|
||||
|
||||
#rule-rules .situationValue {
|
||||
|
@ -156,7 +159,7 @@
|
|||
|
||||
#algorithm {
|
||||
margin-top: 3em;
|
||||
width: 60%;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.dictionaryWrapper {
|
||||
|
@ -192,7 +195,7 @@
|
|||
}
|
||||
|
||||
#rule-rules section {
|
||||
margin: 1em 3em;
|
||||
margin: 1em 0 1em 3em;
|
||||
font-weight: 500;
|
||||
font-size: 90%;
|
||||
color: #444
|
||||
|
@ -205,7 +208,7 @@
|
|||
color: #4B4B66
|
||||
}
|
||||
|
||||
.nodeHead {
|
||||
.mecanism > .nodeHead {
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
|
@ -223,24 +226,27 @@
|
|||
opacity: .8
|
||||
}
|
||||
.ruleProp > .nodeHead .name {
|
||||
background: #df5320
|
||||
background: #9b59b6;
|
||||
}
|
||||
.mecanism li {
|
||||
}
|
||||
.mecanism ul {
|
||||
.mecanism .properties, .mecanism.list ul {
|
||||
margin-top: 0;
|
||||
padding-left: 1em;
|
||||
list-style-type: none;
|
||||
border-left: 1px dashed #ccc;
|
||||
}
|
||||
.mecanism ul .key {
|
||||
color: #d5911a;
|
||||
.mecanism .properties .key {
|
||||
font-weight: 600;
|
||||
display: inline-block;
|
||||
margin-bottom: 1em;
|
||||
margin-bottom: .6em;
|
||||
margin-right: 0.8em;
|
||||
}
|
||||
|
||||
.multiplication > .nodeHead .name {
|
||||
background: #2ecc71;
|
||||
}
|
||||
|
||||
.multiplication li .key {
|
||||
margin-right: .6em;
|
||||
}
|
||||
|
@ -292,7 +298,7 @@
|
|||
color: #5B5B73;
|
||||
text-align: center;
|
||||
margin-top: 1em;
|
||||
padding: .05em 1em;
|
||||
padding: .05em .6em;
|
||||
line-height: 1.8em;
|
||||
border-radius: .4em;
|
||||
font-weight: 600;
|
||||
|
@ -318,7 +324,16 @@
|
|||
font-size: 60%;
|
||||
}
|
||||
|
||||
.barème > .nodeHead .name {
|
||||
background: #1abc9c;
|
||||
}
|
||||
|
||||
.barème .key {
|
||||
color: #1abc9c
|
||||
}
|
||||
|
||||
.barème table {
|
||||
margin-top: 1em;
|
||||
width: 80%;
|
||||
text-align: left;
|
||||
}
|
||||
|
@ -329,3 +344,32 @@
|
|||
.barème table tr:nth-child(2n) {
|
||||
background: #f1f1f1
|
||||
}
|
||||
|
||||
.composantes > .nodeHead .name {
|
||||
background: #3498db;
|
||||
}
|
||||
|
||||
.composantes > ul > li {
|
||||
display: inline-block;
|
||||
}
|
||||
.composantes .composante {
|
||||
width: 45%;
|
||||
}
|
||||
.composantes .composante .content {
|
||||
border-top: 1px solid #3498db;
|
||||
padding: 1em;
|
||||
margin-right: 2em;
|
||||
}
|
||||
.composantes .composanteAttributes {
|
||||
list-style-type: none;
|
||||
padding: .2em;
|
||||
color: #3498db;
|
||||
}
|
||||
.composantes .composanteAttributes span:last-child {
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.composantes .composantesSymbol {
|
||||
font-size: 160%;
|
||||
color: #3498db;
|
||||
}
|
||||
|
|
|
@ -26,13 +26,13 @@ let testingSituationGate = v => // eslint-disable-line no-unused-vars
|
|||
form: state.form
|
||||
}),
|
||||
dispatch => ({
|
||||
startConversation: () => dispatch({type: START_CONVERSATION}),
|
||||
startConversation: rootVariable => dispatch({type: START_CONVERSATION, rootVariable}),
|
||||
})
|
||||
)
|
||||
export default class Rule extends Component {
|
||||
componentDidMount() {
|
||||
// C'est ici que la génération du formulaire, et donc la traversée des variables commence
|
||||
this.props.startConversation()
|
||||
this.props.startConversation('salaire net')
|
||||
}
|
||||
render() {
|
||||
let {
|
||||
|
|
|
@ -2,7 +2,7 @@ import React, {Component} from 'react'
|
|||
|
||||
import { Provider } from 'react-redux'
|
||||
import routes from '../routes'
|
||||
import Router from 'react-router'
|
||||
import {Router} from 'react-router'
|
||||
|
||||
export default class App extends Component {
|
||||
render() {
|
||||
|
|
|
@ -75,3 +75,15 @@ barème:
|
|||
C'est un barème en taux marginaux, mécanisme de calcul connu son utilisation dans le calcul de l'impôt sur le revenu.
|
||||
L'assiette est décomposée en plusieurs tranches, qui sont multipliées par un taux spécifique.
|
||||
Les tranches sont très souvent exprimées sous forme de facteurs (par exemple [1, 2, 4]) d'une variable que l'on appelle multiplicateur, par exemple le plafond de la sécurité sociale.
|
||||
|
||||
composantes:
|
||||
description: |
|
||||
Beaucoup de cotisations sont composées de deux parties qui partage la méthode de calcul mais diffèrent par des paramètres différents.
|
||||
|
||||
Pour ne pas définir deux variables presque redondantes, on utilise le mécanisme de composante. Il se comportera comme une somme dans les calculs, mais son affichage sur les pages /règle sera adapté.
|
||||
|
||||
Il est même possible, pour les mécanismes `barème` et `multiplication` de garder en commun un paramètre comme l'assiette, puis de déclarer des composantes pour le taux.
|
||||
|
||||
> L'example le plus courant de composantes, c'est la distinction part employeur, part salarié (ex. retraite AGIRC).
|
||||
|
||||
> On peut aussi citer la composante de base de la cotisation pénibilité, et la composante additionnelle.
|
||||
|
|
|
@ -101,21 +101,25 @@ export let findGroup = R.pipe(
|
|||
/*********************************
|
||||
Autres */
|
||||
|
||||
let collectNodeMissingVariables = target => (root, source=root, results=[]) => {
|
||||
let collectNodeMissingVariables = (root, source=root, results=[]) => {
|
||||
if (
|
||||
source.nodeValue != null ||
|
||||
source.shortCircuit && source.shortCircuit(root)
|
||||
) return []
|
||||
) {
|
||||
// console.log('nodev or shortcircuit root, source', root, source)
|
||||
return []
|
||||
}
|
||||
|
||||
if (source[target]) {
|
||||
results.push(source[target])
|
||||
if (source['missingVariables']) {
|
||||
// console.log('root, source', root, source)
|
||||
results.push(source['missingVariables'])
|
||||
}
|
||||
|
||||
for (var prop in source) {
|
||||
if (R.is(Object)(source[prop]))
|
||||
collectNodeMissingVariables(target)(root, source[prop], results)
|
||||
if (R.is(Object)(source[prop])) {
|
||||
collectNodeMissingVariables(root, source[prop], results)
|
||||
}
|
||||
}
|
||||
|
||||
return results
|
||||
}
|
||||
|
||||
|
@ -125,7 +129,7 @@ export let collectMissingVariables = (groupMethod='groupByMissingVariable') => a
|
|||
R.unless(R.is(Array), R.of),
|
||||
R.chain( v =>
|
||||
R.pipe(
|
||||
collectNodeMissingVariables('missingVariables'),
|
||||
collectNodeMissingVariables,
|
||||
R.flatten,
|
||||
R.map(mv => [v.variableName, mv])
|
||||
)(v)
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
import R from 'ramda'
|
||||
|
||||
export let val = node => node.nodeValue
|
||||
|
||||
export let anyNull = R.any(R.pipe(val, R.equals(null)))
|
|
@ -6,7 +6,7 @@ import knownMecanisms from './known-mecanisms.yaml'
|
|||
import { Parser } from 'nearley'
|
||||
import Grammar from './grammar.ne'
|
||||
import {Node, Leaf} from './traverse-common-jsx'
|
||||
|
||||
import {anyNull, val} from './traverse-common-functions'
|
||||
|
||||
|
||||
let nearley = () => new Parser(Grammar.ParserRules, Grammar.ParserStart)
|
||||
|
@ -215,8 +215,8 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
|
||||
|
||||
if (!R.is(Object)(rawNode)) {
|
||||
console.log('Cette donnée : ', rawNode) // eslint-disable-line no-console
|
||||
throw ' doit être un Number, String ou Object'
|
||||
console.log() // eslint-disable-line no-console
|
||||
throw 'Cette donnée : ' + rawNode + ' doit être un Number, String ou Object'
|
||||
}
|
||||
|
||||
let mecanisms = R.intersection(R.keys(rawNode), R.keys(knownMecanisms))
|
||||
|
@ -437,11 +437,9 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
|
||||
if (k === 'multiplication') {
|
||||
let
|
||||
val = node => node.nodeValue,
|
||||
mult = (base, rate, facteur, plafond) =>
|
||||
Math.min(base, plafond) * rate * facteur,
|
||||
constantNode = constant => ({nodeValue: constant}),
|
||||
anyNull = R.any(R.pipe(val, R.equals(null))),
|
||||
assiette = reTreat(v['assiette']),
|
||||
//TODO parser le taux dans le parser ?
|
||||
taux = v['taux'] ? reTreat({taux: v['taux']}) : constantNode(1),
|
||||
|
@ -498,9 +496,68 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
}
|
||||
|
||||
if (k === 'barème') {
|
||||
// Sous entendu : barème en taux marginaux. A étendre (avec une propriété type ?) quand les règles en contiendront d'autres.
|
||||
// Sous entendu : barème en taux marginaux.
|
||||
// A étendre (avec une propriété type ?) quand les règles en contiendront d'autres.
|
||||
if (v.composantes) { //mécanisme de composantes. Voir known-mecanisms.md/composantes
|
||||
let
|
||||
baremeProps = R.dissoc('composantes')(v),
|
||||
composantes = v.composantes.map(c =>
|
||||
({
|
||||
... reTreat(
|
||||
{
|
||||
barème: {
|
||||
... baremeProps,
|
||||
... R.dissoc('attributs')(c)
|
||||
}
|
||||
}
|
||||
),
|
||||
composante: c.nom ? {nom: c.nom} : c.attributs
|
||||
})
|
||||
),
|
||||
l = console.log('composantes', composantes.map(val)),
|
||||
nodeValue = anyNull(composantes) ? null
|
||||
: R.reduce(R.add, 0, composantes.map(val))
|
||||
|
||||
return {
|
||||
nodeValue,
|
||||
category: 'mecanism',
|
||||
name: 'composantes',
|
||||
type: 'numeric',
|
||||
explanation: composantes,
|
||||
jsx: <Node
|
||||
classes="mecanism composantes"
|
||||
name="composantes"
|
||||
value={nodeValue}
|
||||
child={
|
||||
<ul>
|
||||
{ composantes.map((c, i) =>
|
||||
[<li className="composante" key={JSON.stringify(c.composante)}>
|
||||
<ul className="composanteAttributes">
|
||||
{R.toPairs(c.composante).map(([k,v]) =>
|
||||
<li>
|
||||
<span>{k}: </span>
|
||||
<span>{v}</span>
|
||||
</li>
|
||||
)}
|
||||
</ul>
|
||||
<div className="content">
|
||||
{c.jsx}
|
||||
</div>
|
||||
</li>,
|
||||
i < (composantes.length - 1) && <li className="composantesSymbol"><i className="fa fa-plus-circle" aria-hidden="true"></i></li>
|
||||
]
|
||||
)
|
||||
}
|
||||
</ul>
|
||||
}
|
||||
/>
|
||||
}
|
||||
}
|
||||
|
||||
if (v['multiplicateur des tranches'] == null)
|
||||
throw "un barème nécessite pour l'instant une propriété 'multiplicateur des tranches'"
|
||||
|
||||
let
|
||||
val = node => node.nodeValue,
|
||||
assiette = reTreat(v['assiette']),
|
||||
multiplicateur = reTreat(v['multiplicateur des tranches']),
|
||||
|
||||
|
@ -555,7 +612,7 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
name="barème"
|
||||
value={nodeValue}
|
||||
child={
|
||||
<ul>
|
||||
<ul className="properties">
|
||||
<li key="assiette">
|
||||
<span className="key">assiette: </span>
|
||||
<span className="value">{assiette.jsx}</span>
|
||||
|
@ -567,7 +624,7 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
<table className="tranches">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>Tranche de l'assiette</th>
|
||||
<th>Tranches de l'assiette</th>
|
||||
<th>Taux</th>
|
||||
</tr>
|
||||
{v['tranches'].map(({'en-dessous de': maxOnly, 'au-dessus de': minOnly, de: min, 'à': max, taux}) =>
|
||||
|
@ -619,7 +676,7 @@ let treat = (situationGate, rule) => rawNode => {
|
|||
}
|
||||
}
|
||||
|
||||
throw "Le mécanisme qui vient d'être loggué est inconnu !"
|
||||
throw "Le mécanisme est inconnu !"
|
||||
|
||||
}
|
||||
|
||||
|
@ -633,6 +690,7 @@ let treatRuleRoot = (situationGate, rule) => R.pipe(
|
|||
let
|
||||
child = treat(situationGate, rule)(value),
|
||||
nodeValue = child.nodeValue
|
||||
|
||||
return {
|
||||
category: 'ruleProp',
|
||||
rulePropType: 'cond',
|
||||
|
@ -645,7 +703,8 @@ let treatRuleRoot = (situationGate, rule) => R.pipe(
|
|||
name="non applicable si"
|
||||
value={nodeValue}
|
||||
child={
|
||||
child.jsx
|
||||
child.category === 'variable' ? <div className="node">{child.jsx}</div>
|
||||
: child.jsx
|
||||
}
|
||||
/>
|
||||
}
|
||||
|
|
|
@ -105,10 +105,12 @@ let buildNextSteps = R.pipe(
|
|||
*/
|
||||
R.path(['formule', 'explanation', 'explanation']),
|
||||
analysedSituation => {
|
||||
// console.log('analysedSituation', analysedSituation)
|
||||
//TODO temporary fix
|
||||
missingVariables = collectMissingVariables('groupByMissingVariable')(analysedSituation)
|
||||
return missingVariables
|
||||
},
|
||||
// mv => console.log('l', mv),
|
||||
R.keys,
|
||||
/*
|
||||
Certaines variables manquantes peuvent être factorisées dans des groupes.
|
||||
|
|
Loading…
Reference in New Issue