Ajoute l'ensemble des mécanismes existants

pull/945/head
Johan Girod 2020-03-24 19:09:09 +01:00
parent 0f1ca13b7f
commit dd2db299d6
10 changed files with 96 additions and 145 deletions

View File

@ -52,6 +52,7 @@
"react-redux": "^7.0.3",
"react-router": "^5.1.1",
"react-router-dom": "^5.1.1",
"react-router-hash-link": "^1.2.2",
"react-spring": "=8.0.27",
"react-syntax-highlighter": "^10.1.1",
"react-to-print": "^2.5.1",

View File

@ -222,7 +222,7 @@ prime:
taux: taux du bonus
```
**[Voir la liste des mécanismes existants](/mécanismes)**
> **[Voir la description des mécanismes existants](./mécanismes)**
## Applicabilité

View File

@ -5,11 +5,13 @@ une de ces conditions:
Renvoie vrai si l'une des conditions est applicable.
retourne: Booléen
exemples:
base:
base: >-
age:
formule: 17 ans
mineur émancipé:
formule: oui
peut voter:
formule:
une de ces conditions:
@ -44,18 +46,20 @@ produit:
plafond: Plafond au dessus duquel le taux appliqué est nul
exemples:
base:
base: >-
cotisation:
formule:
produit:
assiette: 2000 €/mois
taux: 5%
assiette plafonnée:
assiette plafonnée: >-
plafond sécurité sociale:
formule: 3000 €/mois
assiette cotisation:
formule: 15000 €/mois
chômage:
formule:
produit:
@ -81,7 +85,7 @@ variations:
- ...
- sinon: consequence évaluée si aucune des conditions précédente n'était applicable
exemples:
base:
base: >-
taux réduit:
formule: oui
@ -92,7 +96,7 @@ variations:
alors: 3.45%
- sinon: 5.25%
dans un produit:
dans un produit: >-
assiette cotisation:
formule: 2300 €/mois
@ -121,17 +125,19 @@ somme:
- ...
exemples:
base:
base: >-
somme:
- 15.89
- 12% * 14 €
- (-30 €)
terme non applicable:
terme non applicable: >-
a:
formule: 50
b:
applicable si: non
formule: 20
somme:
formule:
somme:
@ -158,7 +164,7 @@ arrondi:
description: >-
Arrondi à l'entier le plus proche, ou à une précision donnée.
exemples:
base:
base: >-
arrondi:
formule:
arrondi:
@ -180,7 +186,7 @@ régularisation:
numérique, et avoir une unité `/mois`
exemples:
base:
base: >-
brut:
formule:
somme:

View File

@ -8,6 +8,7 @@ import { getSessionStorage } from '../../utils'
import redirects from '../mon-entreprise.fr/redirects'
import Landing from './Landing'
import Studio from './LazyStudio'
import Mécanismes from './Mécanismes'
function Router({ language }) {
useEffect(() => {
@ -38,7 +39,8 @@ let RouterSwitch = () => {
<>
<Switch>
<Route exact path="/" component={Landing} />
<Route exact path="/Studio" component={Studio} />
<Route exact path="/studio" component={Studio} />
<Route exact path="/mécanismes" component={Mécanismes} />
<Route component={App} />
</Switch>
</>

View File

@ -1,4 +1,5 @@
import { Markdown } from 'Components/utils/markdown'
import { ScrollToTop } from 'Components/utils/Scroll'
import publicodeReadme from 'Engine/README.md'
import React, { useEffect } from 'react'
import { Header } from './Header'
@ -19,6 +20,7 @@ export default function Landing() {
})
return (
<div className="app-content ui__ container" css="margin: 2rem 0">
<ScrollToTop />
<Header />
<br />
<br />

View File

@ -0,0 +1,66 @@
import { Markdown } from 'Components/utils/markdown'
import { ScrollToTop } from 'Components/utils/Scroll'
import mecanisms from 'Engine/mecanisms.yaml'
import React, { useEffect } from 'react'
import { useLocation } from 'react-router'
import { HashLink as Link } from 'react-router-hash-link'
import { capitalise0 } from '../../utils'
import { Header } from './Header'
type MecanismProp = {
name: string
exemples: { base: string }
description: string
arguments: any
}
const Mecanism = ({ name, description, exemples }: MecanismProp) => (
<React.Fragment key={name}>
<h2 id={name}>
<pre>{name}</pre>
</h2>
<Markdown source={description} />
{exemples && (
<>
{Object.entries(exemples).map(([name, exemple]) => (
<React.Fragment key={name}>
<h3>{name === 'base' ? 'Exemple' : capitalise0(name)}</h3>
<Markdown source={`\`\`\`yaml\n${exemple}\n\`\`\``} />
</React.Fragment>
))}{' '}
</>
)}
<Link to={useLocation().pathname + '#top'}>Retour à la liste</Link>
</React.Fragment>
)
export default function Landing() {
useEffect(() => {
var css = document.createElement('style')
css.type = 'text/css'
css.innerHTML = `
#js {
animation: appear 0.5s;
opacity: 1;
}
#loading {
display: none !important;
}`
document.body.appendChild(css)
})
return (
<div className="app-content ui__ container" css="margin: 2rem 0">
<ScrollToTop />
<Header />
<h1 id="top">Mécanismes existants</h1>
<ul>
{Object.entries(mecanisms).map(([name, data]) => (
<li key={name}>
<Link to={useLocation().pathname + '#' + name}>{name}</Link>
</li>
))}
</ul>
{Object.entries(mecanisms).map(([name, data]) => (
<Mecanism {...data} name={name} />
))}
</div>
)
}

View File

@ -1,5 +1,3 @@
import baremeIr from '!!raw-loader!./exemples/bareme-ir.yaml'
import douche from '!!raw-loader!./exemples/douche.yaml'
import { ControlledEditor } from '@monaco-editor/react'
import Engine from 'Engine/react'
import { safeLoad } from 'js-yaml'
@ -10,11 +8,6 @@ import { useLocation } from 'react-router'
import styled from 'styled-components'
import { Header } from './Header'
let examples = {
'bareme-ir': baremeIr,
douche
}
let initialInput = `a:
formule: 10
b:
@ -30,15 +23,8 @@ d:
export default function Studio() {
const search = new URLSearchParams(useLocation().search ?? '')
const currentExample = search.get('exemple')
const code = search.get('code')
const [editorValue, setEditorValue] = useState(
code
? code
: currentExample && Object.keys(examples).includes(currentExample)
? examples[currentExample]
: initialInput
)
const [editorValue, setEditorValue] = useState(code ? code : initialInput)
const [targets, setTargets] = useState<string[]>([])
const [rules, setRules] = useState(editorValue)
const handleShare = useCallback(() => {

View File

@ -1,23 +0,0 @@
revenu imposable:
formule: 18000
revenu abattu:
formule:
allègement:
assiette: revenu imposable
abattement: 10%
impôt sur le revenu:
formule:
barème:
assiette: revenu abattu
tranches:
- taux: 0%
plafond: 9807
- taux: 14%
plafond: 27086
- taux: 30%
plafond: 72617
- taux: 41%
plafond: 153783
- taux: 45%

View File

@ -1,96 +0,0 @@
douche:
icônes: 🚿
douche . impact par douche:
titre: Une douche
formule: impact par litre * litres d'eau
douche . impact par litre:
formule: eau . impact par litre froid + chauffage . impact par litre
douche . litres d'eau:
formule: durée de la douche * litres par minute
douche . litres par minute:
unité: l/minute
formule:
variations:
- si: pomme de douche économe
alors: 9
- sinon: 18
références:
- https://www.jeconomiseleau.org/index.php/particuliers/economies-par-usage/la-douche-et-le-bain
douche . pomme de douche économe:
question: Utilisez-vous une pomme de douche économe ?
par défaut: non
douche . durée de la douche:
question: Combien de temps dure votre douche en général (en minutes) ?
par défaut: 5
unité: minute
suggestions:
expresse: 5
moyenne: 10
lente: 20
chauffage:
icônes: 🔥
chauffage . type:
question: Votre eau est chauffée comment ?
formule:
une possibilité:
choix obligatoire: oui
possibilités:
- gaz
- fioul
- électricité
par défaut: gaz
chauffage . impact par kWh:
unité: kgCO₂e/kWh
formule:
variations:
- si: type = 'gaz'
alors: 0.227
- si: type = 'fioul'
alors: 0.324
- si: type = 'électricité'
alors: 0.059
note: |
La base carbone de l'ADEME ne permet malheureusement pas de faire des liens profonds vers les chiffres utilisés.
Pour l'électricité, nous retenons le chiffre de l'ADEME "Electricité - 2016 - usage : Eau Chaude Sanitaire - consommation".
références:
- http://www.bilans-ges.ademe.fr/fr/accueil
- https://www.electricitymap.org/?page=country&solar=false&remote=true&wind=false&countryCode=FR
- https://decrypterlenergie.org/decryptage-quel-est-le-contenu-en-co2-du-kwh-electrique
chauffage . énergie consommée par litre:
formule: 0.0325
unité: kWh
références:
- https://www.econologie.com/forums/plomberie-et-sanitaire/prix-reel-d-un-bain-ou-d-une-douche-pour-l-eau-et-chauffage-t12727.html
chauffage . impact par litre:
titre: impact par litre chauffé
formule: impact par kWh * énergie consommée par litre
eau:
icônes: 🌊
eau . impact par litre froid:
unité: kgCO₂e/l
formule: eau potable + traitement eau usée
références:
- >-
http://www.bilans-ges.ademe.fr/documentation/UPLOAD_DOC_FR/index.htm?boissons.htm
eau . impact par litre froid . eau potable:
unité: kgCO₂e/l
formule: 0.000132
eau . impact par litre froid . traitement eau usée:
unité: kgCO₂e/l
formule: 0.000262

View File

@ -9365,6 +9365,13 @@ react-router-dom@^5.1.1:
tiny-invariant "^1.0.2"
tiny-warning "^1.0.0"
react-router-hash-link@^1.2.2:
version "1.2.2"
resolved "https://registry.yarnpkg.com/react-router-hash-link/-/react-router-hash-link-1.2.2.tgz#7a0ad5e925d49596d19554de8bc6c554ce4f8099"
integrity sha512-LBthLVHdqPeKDVt3+cFRhy15Z7veikOvdKRZRfyBR2vjqIE7rxn+tKLjb6DOmLm6JpoQVemVDnxQ35RVnEHdQA==
dependencies:
prop-types "^15.6.0"
react-router@5.1.2, react-router@^5.1.1:
version "5.1.2"
resolved "https://registry.yarnpkg.com/react-router/-/react-router-5.1.2.tgz#6ea51d789cb36a6be1ba5f7c0d48dd9e817d3418"