🖋️ ajoute des exemples pour les mécanismes

pull/945/head
Johan Girod 2020-03-24 19:29:57 +01:00
parent dd2db299d6
commit fe235674f5
5 changed files with 137 additions and 66 deletions

View File

@ -1,51 +0,0 @@
// Page listing the engine's currently implemented mecanisms and their tests
import mécanismes from 'Engine/mecanisms.yaml'
import { fromPairs, has, toPairs } from 'ramda'
import React from 'react'
import './Mecanisms.css'
let directoryLoader = require.context('../../test/mécanismes/', true, /.yaml$/),
suites = fromPairs(
directoryLoader
.keys()
.map(key => [
key.replace(/\/|\.|(yaml)/g, '').replace(/-/g, ' '),
directoryLoader(key)
])
)
export default function Mecanisms() {
return (
<div style={{ margin: '1em auto', maxWidth: '45em' }}>
<p>
Cette page liste les mécanismes et indique en rouge ceux qui n'ont pas
de tests. La commande "yarn test" permet de voir ceux qui passent. Ce
serait bien de pouvoir les faire tourner dans le navigateur en
partageant le code de mecanisms.test.js
</p>
<ul id="mecanisms">
{toPairs(mécanismes).map(([name, data]) => (
<li key={name}>
{name}
{suites[name] == null ? (
<p className="warning">Pas de tests !</p>
) : (
<Tests name={name} suites={suites} />
)}
</li>
))}
</ul>
</div>
)
}
function Tests({ suites, name }) {
let suite = suites[name],
tests = suite.filter(has('test'))
return (
<p>
{tests.length} {tests.length == 1 ? 'test' : 'tests'}
</p>
)
}

View File

@ -21,7 +21,7 @@ progressivement le résultat affiché, et explorer une documentation du calcul.
[bibliothèque de calcul autonome](https://mon-entreprise.fr/intégration/bibliothèque-de-calcul), libre de droit.
- [futur.eco](https://futur.eco/) utilise publicode pour calculer les bilans
carbone d'un grand nombre d'activité, plats, transport ou biens.
carbone d'un grand nombre d'activités, plats, transports ou biens.
## Principe de base
@ -31,7 +31,7 @@ liste de règles identifiées par leur nom et possédant une formule de calcul :
```yaml
prix d'un repas:
formule: 10
formule: 10
```
Une formule de calcul peut référencer d'autres variables. Dans l'exemple suivant
@ -39,7 +39,7 @@ la règle `prix total` aura pour valeur 50 (= 5 \* 10)
```yaml
prix d'un repas:
formule: 10
formule: 10
prix total:
formule: 5 * prix d'un repas
@ -104,7 +104,7 @@ prix total:
### Conversion
Publicode converti automatiquement les unités si besoin.
Publicode convertit automatiquement les unités si besoin.
```yaml
salaire:
@ -222,7 +222,7 @@ prime:
taux: taux du bonus
```
> **[Voir la description des mécanismes existants](./mécanismes)**
> **[Aller à la liste des mécanismes existants](./mécanismes)**
## Applicabilité

View File

@ -2,11 +2,11 @@ une de ces conditions:
description: >-
C'est un `ou` logique.
Contient une liste de conditions.
Renvoie vrai si l'une des conditions est applicable.
Renvoie `oui` si l'une des conditions est applicable.
retourne: Booléen
exemples:
base: >-
age:
âge:
formule: 17 ans
mineur émancipé:
@ -15,17 +15,30 @@ une de ces conditions:
peut voter:
formule:
une de ces conditions:
- age > 18 ans
- âge > 18 ans
- mineur émancipé
toutes ces conditions:
description: >-
C'est un `et` logique.
Contient une liste de conditions.
Renvoie vrai si toutes les conditions sont applicables.
Renvoie `oui` si toutes les conditions sont applicables.
argument:
- '*'
- ...
exemples:
base: >-
âge:
formule: 17 ans
citoyenneté française:
formule: oui
peut voter:
formule:
toutes ces conditions:
- citoyenneté française
- âge > 18 ans
produit:
description: >-
@ -133,7 +146,7 @@ somme:
terme non applicable: >-
a:
formule: 50
b:
applicable si: non
formule: 20
@ -152,6 +165,13 @@ le maximum de:
Pour ajouter un plancher à une valeur, préférer l'utilisation du
mécanisme `encadrement`.
exemples:
base: >-
max:
formule:
le maximum de:
- 50
- 100
le minimum de:
description: >-
@ -159,6 +179,13 @@ le minimum de:
plus petite.
Pour plafonner une valeur, préférer l'utilisation du mécanisme `encadrement`.
exemples:
base: >-
min:
formule:
le minimum de:
- 50
- 100
arrondi:
description: >-
@ -222,6 +249,23 @@ recalcul:
courante. Permet par exemple de calculer le montant des cotisations au niveau du
SMIC, même si le salaire est plus élevé dans la situation actuelle.
exemples:
base: >-
brut:
formule: 2000
cotisations:
formule:
produit:
assiette: brut
taux: 20%
cotisations pour un SMIC:
recalcul:
règle: cotisations
avec:
- brut: 1500
barème:
description: 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.
@ -232,6 +276,25 @@ barème:
Les tranches sont souvent exprimées sous forme de facteurs d'une variable
que l'on appelle `multiplicateur`, par exemple `1 x le plafond de la
sécurité sociale`.
exemples:
base: >-
revenu imposable:
formule: 54126
impôt sur le revenu:
formule:
barème:
assiette: revenu imposable
tranches:
- taux: 0%
plafond: 9807
- taux: 14%
plafond: 27086
- taux: 30%
plafond: 72617
- taux: 41%
plafond: 153783
- taux: 45%
grille:
description: >-
@ -241,6 +304,31 @@ grille:
Il est composé de tranches qui se suivent. Il suffit de trouver l'assiette
qui correspond à la tranche, et de selectionner le montant associé à
l'assiette.
exemples:
grille avec multiplicateur et unité: >-
SMIC horaire:
formule: 10 €/heure
revenu moyen:
formule:
2000 €/mois
trimestres validés:
formule:
grille:
unité: trimestres validés/an
assiette: revenu moyen
multiplicateur: SMIC horaire
tranches:
- montant: 0
plafond: 150 heures/an
- montant: 1
plafond: 300 heures/an
- montant: 2
plafond: 450 heures/an
- montant: 3
plafond: 600 heures/an
- montant: 4
taux progressif:
description: >-
@ -256,7 +344,24 @@ taux progressif:
> Pour une assiette de 500, le taux retourné sera 75%, car il correspond au
> taux situé à la moitié de la tranche correspondante.
exemples:
base: >-
chiffre d'affaires:
formule: 30000 €/an
plafond:
formule: 3000 €/mois
taux réduction de cotisation:
formule:
taux progressif:
assiette: chiffre d'affaires
multiplicateur: plafond
tranches:
- taux: 100%
plafond: 75%
- taux: 0%
plafond: 100%
composantes:
description: >-
Beaucoup de cotisations sont composées de deux parties qui partagent la
@ -280,9 +385,27 @@ allègement:
encadrement:
description: Permet d'ajouter un plafond et/ou un plancher à une valeur.
exemples:
base: >-
assiette plafonnée:
formule:
encadrement:
plancher: 0
valeur: 2000
plafond: 1500
durée:
description: Permet d'obtenir le nombre de jours entre deux dates
exemples:
base: >-
date d'embauche: 14/04/2008
ancienneté en fin d'année:
unité: an
formule:
durée:
depuis: date d'embauche
jusqu'à: 31/12/2020
synchronisation:
description: Pour éviter trop de saisies à l'utilisateur, certaines informations sont

View File

@ -1,6 +1,6 @@
import React from 'react'
import { Link } from 'react-router-dom'
export const Header = ({ noSubtitle, sectionName = '' }) => (
export const Header = ({ noSubtitle = false, sectionName = '' }) => (
<header css="text-align: center; a {text-decoration: none}">
<Link to="/">
<h1>

View File

@ -8,10 +8,9 @@ import { capitalise0 } from '../../utils'
import { Header } from './Header'
type MecanismProp = {
name: string
exemples: { base: string }
description: string
arguments: any
name: string
}
const Mecanism = ({ name, description, exemples }: MecanismProp) => (
<React.Fragment key={name}>
@ -52,14 +51,14 @@ export default function Landing() {
<Header />
<h1 id="top">Mécanismes existants</h1>
<ul>
{Object.entries(mecanisms).map(([name, data]) => (
{Object.keys(mecanisms).map(name => (
<li key={name}>
<Link to={useLocation().pathname + '#' + name}>{name}</Link>
</li>
))}
</ul>
{Object.entries(mecanisms).map(([name, data]) => (
<Mecanism {...data} name={name} />
<Mecanism {...(data as any)} name={name} />
))}
</div>
)