✨ Reformat files
* Prettier upgrade to 2.3.0. * Run prettier on yaml files. * Trim trailing whitespaces in yaml files (via editorconfig plugin). * Translate rules again.pull/1667/head
parent
d3c866daa5
commit
04d8c01243
|
@ -28,7 +28,8 @@ jobs:
|
|||
- id: deploy-env
|
||||
run: echo "::set-output name=name::${{ github.event.number || '${GITHUB_REF#refs/*/}' }}"
|
||||
- id: base-urls
|
||||
run: echo "::set-output name=fr::${{ steps.deploy-env.outputs.name == 'master' && 'https://mon-entreprise.fr' || format('https://{0}--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
|
||||
run:
|
||||
echo "::set-output name=fr::${{ steps.deploy-env.outputs.name == 'master' && 'https://mon-entreprise.fr' || format('https://{0}--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
|
||||
echo "::set-output name=en::${{ steps.deploy-env.outputs.name == 'master' && 'https://mycompanyinfrance.fr' || format('https://{0}-en--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
|
||||
echo "::set-output name=publicodes::${{ steps.deploy-env.outputs.name == 'master' && 'https://publi.codes' || format('https://{0}-publicodes--mon-entreprise.netlify.app', steps.deploy-env.outputs.name) }}";
|
||||
|
||||
|
@ -145,7 +146,7 @@ jobs:
|
|||
issue-number: ${{ github.event.pull_request.number }}
|
||||
edit-mode: replace
|
||||
body: |
|
||||
🚀 La branche est déployée !
|
||||
🚀 La branche est déployée !
|
||||
|
||||
- mon-entreprise : ${{ needs.deploy-context.outputs.fr_url }}
|
||||
- mycompanyinfrance : ${{ needs.deploy-context.outputs.en_url }}
|
||||
|
@ -164,7 +165,7 @@ jobs:
|
|||
fail-fast: false
|
||||
matrix:
|
||||
site: ['fr', 'en', 'publicodes']
|
||||
browser: [electron] # Firefox is very slow…
|
||||
browser: [electron] # Firefox is very slow…
|
||||
viewport: [default]
|
||||
container: [1, 2, 3, 4]
|
||||
include:
|
||||
|
@ -203,7 +204,7 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
|
||||
- uses: actions/cache@v2
|
||||
# Custom cache as we do not care about installing all the other dependancies
|
||||
with:
|
||||
|
@ -211,9 +212,9 @@ jobs:
|
|||
~/.cache/Cypress
|
||||
node_modules
|
||||
key: cypress-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
|
||||
- run: node mon-entreprise/scripts/get-cypress-packages.js | xargs npm i
|
||||
|
||||
|
||||
- name: Test e2e mon-entreprise on preview (site=${{ matrix.site }}, browser=${{ matrix.browser}}, viewport=${{ matrix.viewport }})
|
||||
uses: cypress-io/github-action@v2
|
||||
with:
|
||||
|
@ -243,7 +244,7 @@ jobs:
|
|||
fail-fast: false
|
||||
matrix:
|
||||
site: ['fr', 'en', 'publicodes']
|
||||
browser: [chrome] # Firefox is very slow…
|
||||
browser: [chrome] # Firefox is very slow…
|
||||
viewport: [default, small]
|
||||
container: [1, 2, 3, 4]
|
||||
include:
|
||||
|
@ -282,7 +283,7 @@ jobs:
|
|||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
|
||||
|
||||
- uses: actions/cache@v2
|
||||
# Custom cache as we do not care about installing all the other dependancies
|
||||
with:
|
||||
|
@ -290,9 +291,9 @@ jobs:
|
|||
~/.cache/Cypress
|
||||
node_modules
|
||||
key: cypress-cache-${{ runner.os }}-${{ hashFiles('package-lock.json') }}
|
||||
|
||||
|
||||
- run: node mon-entreprise/scripts/get-cypress-packages.js | xargs npm i
|
||||
|
||||
|
||||
- name: Test e2e mon-entreprise on production (site=${{ matrix.site }}, browser=${{ matrix.browser}}, viewport=${{ matrix.viewport }})
|
||||
uses: cypress-io/github-action@v2
|
||||
with:
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
name: Règles (non-regression)
|
||||
on:
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- modele-social/règles/**
|
||||
|
@ -9,10 +9,10 @@ jobs:
|
|||
test:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn test:regressions
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn test:regressions
|
||||
|
|
|
@ -5,55 +5,51 @@ jobs:
|
|||
lint:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn lint
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn lint
|
||||
|
||||
typecheck:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
env:
|
||||
# Secrets of all kinds for fetching stats & releases
|
||||
GITHUB_API_SECRET: ${{ secrets.GITHUB_TOKEN }}
|
||||
ZAMMAD_API_SECRET_KEY: ${{ secrets.ZAMMAD_API_SECRET_KEY }}
|
||||
ATINTERNET_API_SECRET_KEY: ${{ secrets.ATINTERNET_API_SECRET_KEY }}
|
||||
ATINTERNET_API_ACCESS_KEY: ${{ secrets.ATINTERNET_API_ACCESS_KEY }}
|
||||
- run: yarn test:type
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
env:
|
||||
# Secrets of all kinds for fetching stats & releases
|
||||
GITHUB_API_SECRET: ${{ secrets.GITHUB_TOKEN }}
|
||||
ZAMMAD_API_SECRET_KEY: ${{ secrets.ZAMMAD_API_SECRET_KEY }}
|
||||
ATINTERNET_API_SECRET_KEY: ${{ secrets.ATINTERNET_API_SECRET_KEY }}
|
||||
ATINTERNET_API_ACCESS_KEY: ${{ secrets.ATINTERNET_API_ACCESS_KEY }}
|
||||
- run: yarn test:type
|
||||
|
||||
unit:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn test
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- run: yarn test
|
||||
|
||||
i18n:
|
||||
runs-on: ubuntu-18.04
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- working-directory: mon-entreprise
|
||||
run:
|
||||
yarn run i18n:rules:check;
|
||||
yarn run i18n:ui:check
|
||||
|
||||
|
||||
|
||||
- uses: actions/checkout@v2
|
||||
- uses: actions/cache@v2
|
||||
with:
|
||||
path: '**/node_modules'
|
||||
key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}-v2
|
||||
- run: yarn install --frozen-lockfile
|
||||
- working-directory: mon-entreprise
|
||||
run: yarn run i18n:rules:check;
|
||||
yarn run i18n:ui:check
|
||||
|
|
|
@ -18,7 +18,7 @@ jobs:
|
|||
body: |
|
||||
Ce ticket vient d'être fermé 🎉
|
||||
|
||||
Il est temps de prévenir les utilisateurs qui nous ont fait ce retour :
|
||||
Il est temps de prévenir les utilisateurs qui nous ont fait ce retour :
|
||||
https://mon-entreprise.zammad.com/#search/tags%3A%23${{ github.event.issue.number }}
|
||||
|
||||
Laissez un 👍 quand c'est fait !
|
||||
|
|
|
@ -75,7 +75,7 @@ artiste-auteur . cotisations . option surcotisation:
|
|||
dans: vieillesse
|
||||
par: assiette surcotisation
|
||||
question: Souhaitez-vous surcotiser pour augmenter vos droits à retraite ?
|
||||
description: |
|
||||
description: |
|
||||
Vos revenus sont en dessous des seuils vous permettant de valider l'ensemble
|
||||
de vos droits sociaux. Vous pouvez choisir de surcotiser pour augmenter vos
|
||||
droits.
|
||||
|
@ -88,12 +88,12 @@ artiste-auteur . cotisations . assiette surcotisation: 900 heures/an * SMIC hora
|
|||
artiste-auteur . cotisations . avertissement trimestres retraite:
|
||||
type: notification
|
||||
sévérité: avertissement
|
||||
formule:
|
||||
formule:
|
||||
toutes ces conditions:
|
||||
- assiette > 0 €/an
|
||||
- assiette < 600 heures/an * SMIC horaire
|
||||
- option surcotisation = non
|
||||
description: |
|
||||
description: |
|
||||
Vos revenus ne vous permettent pas de valider 4 trimestres pour la retraite
|
||||
de base. Vous pouvez décider de « surcotiser » pour valider 4 trimestres et
|
||||
bénéficier d'indemnités journalières.
|
||||
|
@ -182,7 +182,7 @@ artiste-auteur . cotisations . IRCEC . cotisation RAAP:
|
|||
assiette: assiette
|
||||
tranches:
|
||||
- taux: 4%
|
||||
plafond:
|
||||
plafond:
|
||||
variations:
|
||||
- si: profession . RACD
|
||||
alors: cotisation RACD . plafond
|
||||
|
@ -237,7 +237,7 @@ artiste-auteur . cotisations . IRCEC . profession . RACL:
|
|||
titre: auteur ou compositeur lyrique, dialoguiste de doublage
|
||||
description: Les auteurs et compositeurs d’œuvres musicales et les dialoguistes de doublage cotisent au RACL.
|
||||
formule: profession = 'RACL'
|
||||
|
||||
|
||||
artiste-auteur . cotisations . IRCEC . régime RACL:
|
||||
question: Cotisez-vous au RACL ?
|
||||
par défaut: non
|
||||
|
@ -247,9 +247,9 @@ artiste-auteur . cotisations . IRCEC . cotisation RACD:
|
|||
formule:
|
||||
produit:
|
||||
assiette: assiette
|
||||
plafond:
|
||||
plafond:
|
||||
nom: plafond
|
||||
valeur: 496250 €/an
|
||||
valeur: 496250 €/an
|
||||
taux: 8%
|
||||
arrondi: oui
|
||||
|
||||
|
@ -262,10 +262,10 @@ artiste-auteur . cotisations . IRCEC . cotisation RACL:
|
|||
- taux: 0%
|
||||
plafond: 2739 €/an
|
||||
- taux: 6.5%
|
||||
plafond:
|
||||
plafond:
|
||||
nom: plafond
|
||||
valeur: 376665 €/an
|
||||
- taux:
|
||||
- taux:
|
||||
nom: cotisation de solidarité
|
||||
valeur: 1.5%
|
||||
arrondi: oui
|
||||
|
|
|
@ -41,7 +41,7 @@ plafond journalier sécurité sociale:
|
|||
Article D242-17 du code de la sécurité sociale: https://www.legifrance.gouv.fr/affichCodeArticle.do?cidTexte=LEGITEXT000006073189&idArticle=LEGIARTI000006736124
|
||||
|
||||
SMIC horaire:
|
||||
formule:
|
||||
formule:
|
||||
variations:
|
||||
- si: établissement . localisation . département = 'Mayotte'
|
||||
alors: 7.74 €/heure
|
||||
|
|
|
@ -29,11 +29,11 @@ contrat salarié . convention collective . BTP . catégorie . ouvrier . prévoya
|
|||
assiette: rémunération . brut de base
|
||||
plafond: 3 * plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: employeur
|
||||
remplace: prévoyance . employeur
|
||||
taux: 1.72%
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: salarié
|
||||
remplace: prévoyance . salarié
|
||||
taux: 0.87%
|
||||
|
@ -60,11 +60,11 @@ contrat salarié . convention collective . BTP . catégorie . etam . prévoyance
|
|||
assiette: rémunération . brut de base
|
||||
plafond: 3 * plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: employeur
|
||||
remplace: prévoyance . employeur
|
||||
taux: 1.25%
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: salarié
|
||||
remplace: prévoyance . salarié
|
||||
taux: 0.60%
|
||||
|
@ -77,7 +77,6 @@ contrat salarié . convention collective . BTP . catégorie . cadre:
|
|||
- règle: statut cadre
|
||||
par: oui
|
||||
|
||||
|
||||
contrat salarié . convention collective . BTP . catégorie . cadre . prévoyance complémentaire:
|
||||
barème:
|
||||
assiette: rémunération . brut de base
|
||||
|
@ -104,7 +103,6 @@ contrat salarié . convention collective . BTP . catégorie . cadre . prévoyanc
|
|||
- taux: 50% * 3.60%
|
||||
plafond: 8
|
||||
|
||||
|
||||
contrat salarié . convention collective . BTP . cotisations conventionnelles:
|
||||
remplace: cotisations . patronales . conventionnelles
|
||||
formule:
|
||||
|
|
|
@ -27,11 +27,11 @@ contrat salarié . convention collective . HCR . prévoyance conventionnelle:
|
|||
assiette: rémunération . brut de base
|
||||
plafond: plafond sécurité sociale
|
||||
composantes:
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: employeur
|
||||
remplace: prévoyance . employeur
|
||||
taux: 0.40%
|
||||
- attributs:
|
||||
- attributs:
|
||||
nom: salarié
|
||||
remplace: prévoyance . salarié
|
||||
taux: 0.40%
|
||||
|
|
|
@ -12,16 +12,16 @@ dirigeant:
|
|||
dirigeant . rémunération: oui
|
||||
dirigeant . rémunération . totale:
|
||||
question: Quel montant total pensez-vous dégager pour votre rémunération ?
|
||||
description: |
|
||||
description: |
|
||||
C'est ce que l'entreprise dépense en tout pour la rémunération du dirigeant. Cette rémunération "super-brute" inclut toutes les cotisations sociales à payer. On peut aussi considérer que c'est la valeur monétaire du travail du dirigeant.
|
||||
titre: Rémunération totale
|
||||
titre: Rémunération totale
|
||||
unité: €/an
|
||||
résumé: Incluant les cotisations et contributions
|
||||
variations:
|
||||
variations:
|
||||
- si: assimilé salarié
|
||||
alors: contrat salarié . rémunération . total
|
||||
- si: entreprise . imposition . IS
|
||||
alors:
|
||||
alors:
|
||||
somme:
|
||||
- nette après impôt
|
||||
- impôt
|
||||
|
@ -40,7 +40,7 @@ dirigeant . rémunération . nette:
|
|||
|
||||
dirigeant . rémunération . cotisations:
|
||||
variations:
|
||||
- si: assimilé salarié
|
||||
- si: assimilé salarié
|
||||
alors: contrat salarié . cotisations
|
||||
- si: indépendant
|
||||
alors: indépendant . cotisations et contributions
|
||||
|
@ -50,13 +50,13 @@ dirigeant . rémunération . cotisations:
|
|||
dirigeant . rémunération . imposable:
|
||||
titre: revenu imposable
|
||||
variations:
|
||||
- si: assimilé salarié
|
||||
- si: assimilé salarié
|
||||
alors: contrat salarié . rémunération . net imposable
|
||||
- si: indépendant
|
||||
alors: indépendant . revenu professionnel
|
||||
- si: auto-entrepreneur
|
||||
alors: auto-entrepreneur . impôt . revenu imposable
|
||||
|
||||
|
||||
dirigeant . rémunération . impôt:
|
||||
titre: impôt sur le revenu
|
||||
somme:
|
||||
|
@ -72,11 +72,11 @@ dirigeant . rémunération . nette après impôt:
|
|||
arrondi: oui
|
||||
question: Quel est le revenu net après impôt souhaité ?
|
||||
description: >-
|
||||
Le revenu net après déduction de l'impôt
|
||||
Le revenu net après déduction de l'impôt
|
||||
sur le revenu et des cotisations sociales.
|
||||
valeur: rémunération . nette - impôt
|
||||
résumé: Ce que vous rapporte cette activité
|
||||
|
||||
|
||||
dirigeant . assimilé salarié:
|
||||
description: |
|
||||
Certains dirigeants d'entreprise (c'est notamment le cas pour les SASU) sont considérés par la sécurité sociale comme assimilés aux salariés. Ils sont alors au régime général de la sécurité sociale, avec quelques contraintes cependant. Par exemple, ils ne cotisent pas au chômage, et n'y ont donc pas droit.
|
||||
|
@ -86,7 +86,7 @@ dirigeant . assimilé salarié:
|
|||
par: "'CDI'"
|
||||
- règle: contrat salarié . statut cadre
|
||||
par: oui
|
||||
- règle: entreprise . imposition
|
||||
- règle: entreprise . imposition
|
||||
par: "'IS'"
|
||||
rend non applicable:
|
||||
- contrat salarié . convention collective
|
||||
|
@ -113,7 +113,7 @@ dirigeant . assimilé salarié:
|
|||
références:
|
||||
Le régime des dirigeants: https://www.urssaf.fr/portail/home/employeur/creer/choisir-une-forme-juridique/le-statut-du-dirigeant/les-dirigeants-rattaches-au-regi.html
|
||||
note: Nous ne gérons pas le cas des SAS(U) à l'IR pour l'instant
|
||||
|
||||
|
||||
dirigeant . assimilé salarié . réduction ACRE:
|
||||
applicable si: entreprise . ACRE
|
||||
formule:
|
||||
|
@ -136,7 +136,7 @@ dirigeant . assimilé salarié . réduction ACRE . taux:
|
|||
taux: 100%
|
||||
- plafond: 100%
|
||||
taux: 0%
|
||||
|
||||
|
||||
dirigeant . assimilé salarié . réduction ACRE . notification taux annuel:
|
||||
formule: oui
|
||||
type: notification
|
||||
|
@ -278,7 +278,6 @@ dirigeant . auto-entrepreneur . cotisations et contributions . contribution form
|
|||
- sinon: 0.1%
|
||||
|
||||
dirigeant . auto-entrepreneur . cotisations et contributions . cotisations:
|
||||
|
||||
description: |
|
||||
Les cotisations sociales donnent à l'auto-entrepreneur accès à une
|
||||
protection sociale minimale : une retraite, des soins de santé, des
|
||||
|
@ -304,7 +303,6 @@ dirigeant . auto-entrepreneur . cotisations et contributions . cotisations:
|
|||
economie.gouv.fr: https://www.economie.gouv.fr/entreprises/micro-entreprise-auto-entreprise-charges-sociales
|
||||
actualité urssaf.fr (2019): https://www.autoentrepreneur.urssaf.fr/portail/accueil/sinformer-sur-le-statut/toutes-les-actualites/nouveautes-2019--ce-qui-change-e.html
|
||||
|
||||
|
||||
dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE:
|
||||
titre: taux ACRE auto-entrepreneur
|
||||
applicable si: entreprise . ACRE
|
||||
|
@ -342,10 +340,10 @@ dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . tau
|
|||
plafond: 2 ans
|
||||
- montant: 90%
|
||||
plafond: 3 ans
|
||||
- sinon:
|
||||
- sinon:
|
||||
applicable si: entreprise . durée d'activité < 1 an
|
||||
valeur: 50%
|
||||
|
||||
|
||||
références:
|
||||
FAQ Urssaf depuis 04/2020: https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html#jai-cree-mon-auto-entreprise-en
|
||||
FAQ Urssaf avant 04/2020: https://www.autoentrepreneur.urssaf.fr/portail/accueil/une-question/questions-frequentes.html#quest-ce-qui-change-pour-moi-si
|
||||
|
@ -354,9 +352,9 @@ dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . tau
|
|||
dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux ACRE . prestation de service:
|
||||
remplace: taux prestation de service
|
||||
titre: taux prestation de service avec ACRE
|
||||
variations:
|
||||
- si:
|
||||
toutes ces conditions:
|
||||
variations:
|
||||
- si:
|
||||
toutes ces conditions:
|
||||
- entreprise . activité . libérale réglementée
|
||||
- entreprise . date de création >= 01/04/2020
|
||||
alors: 12.10%
|
||||
|
@ -391,9 +389,9 @@ dirigeant . auto-entrepreneur . impôt . revenu imposable:
|
|||
taux: 50%
|
||||
- assiette: entreprise . chiffre d'affaires . service BNC
|
||||
taux: 34%
|
||||
plancher:
|
||||
variations:
|
||||
- si: entreprise . activité . mixte
|
||||
plancher:
|
||||
variations:
|
||||
- si: entreprise . activité . mixte
|
||||
alors: 610 €/an
|
||||
- sinon: 305 €/an
|
||||
|
||||
|
@ -440,13 +438,13 @@ dirigeant . auto-entrepreneur . net après impôt:
|
|||
arrondi: oui
|
||||
question: Quel est le revenu net après impôt souhaité ?
|
||||
description: >-
|
||||
Le revenu net de l'auto-entrepreneur après déduction de l'impôt
|
||||
Le revenu net de l'auto-entrepreneur après déduction de l'impôt
|
||||
sur le revenu et des cotisations sociales.
|
||||
|
||||
|
||||
**Attention :** Pour bien évaluer la rentabilité de l'entreprise, il ne faut pas
|
||||
oublier de retrancher à ce montant les dépenses engagées dans le cadre de
|
||||
l'activité. Cela peut inclure par exemple :
|
||||
l'activité. Cela peut inclure par exemple :
|
||||
|
||||
- L'achat des matière premières
|
||||
|
||||
|
@ -454,7 +452,7 @@ dirigeant . auto-entrepreneur . net après impôt:
|
|||
|
||||
- L'abonnement à des services payants
|
||||
|
||||
- La location d'un local
|
||||
- La location d'un local
|
||||
|
||||
- etc...
|
||||
valeur: net de cotisations - rémunération . impôt
|
||||
|
@ -463,8 +461,8 @@ dirigeant . auto-entrepreneur . chiffre d'affaires:
|
|||
question: Quel est votre chiffre d'affaires ?
|
||||
résumé: Montant total des recettes (hors taxe)
|
||||
remplace: entreprise . chiffre d'affaires
|
||||
inversion numérique:
|
||||
avec:
|
||||
inversion numérique:
|
||||
avec:
|
||||
- rémunération . totale
|
||||
- net après impôt
|
||||
- net de cotisations
|
||||
|
@ -480,19 +478,18 @@ dirigeant . indépendant . revenu professionnel:
|
|||
résoudre la référence circulaire: oui
|
||||
variations:
|
||||
- si: entreprise . imposition = 'IS'
|
||||
alors:
|
||||
somme:
|
||||
alors:
|
||||
somme:
|
||||
- rémunération . nette
|
||||
- cotisations et contributions . non déductibles
|
||||
- sinon: entreprise . résultat fiscal
|
||||
|
||||
|
||||
dirigeant . indépendant . assiette des cotisations:
|
||||
unité: €/an
|
||||
description: Il s'agit de l'assiette des cotisations sociales, nombre forcément positif
|
||||
valeur:
|
||||
nom: sans plancher
|
||||
somme:
|
||||
somme:
|
||||
- revenu professionnel
|
||||
- cotisations facultatives . déductibles
|
||||
plancher: 0
|
||||
|
@ -500,11 +497,11 @@ dirigeant . indépendant . assiette des cotisations:
|
|||
dirigeant . indépendant . conjoint collaborateur:
|
||||
question: Avez-vous un conjoint collaborateur ?
|
||||
description: |
|
||||
Permet au conjoint du dirigeant d'être couvert par la protection sociale moyennant le paiement de cotisations sociales supplémentaires.
|
||||
Permet au conjoint du dirigeant d'être couvert par la protection sociale moyennant le paiement de cotisations sociales supplémentaires.
|
||||
Pour en bénéficier, l'époux(se) ou partenaire de Pacs du dirigeant doit:
|
||||
- exercer une activité professionnelle régulière et habituelle dans l'entreprise
|
||||
- faire l'objet d'une mention au RCS pour les commerçants ou au répertoire des métiers (RM) pour les artisans
|
||||
- ne pas être rémunéré
|
||||
- exercer une activité professionnelle régulière et habituelle dans l'entreprise
|
||||
- faire l'objet d'une mention au RCS pour les commerçants ou au répertoire des métiers (RM) pour les artisans
|
||||
- ne pas être rémunéré
|
||||
- ne pas être associé de la société.
|
||||
par défaut: non
|
||||
références:
|
||||
|
@ -513,7 +510,7 @@ dirigeant . indépendant . conjoint collaborateur:
|
|||
|
||||
dirigeant . indépendant . cotisations et contributions . non déductibles:
|
||||
titre: Cotisations et contributions non déductibles fiscalement
|
||||
somme:
|
||||
somme:
|
||||
- CSG et CRDS . non déductible
|
||||
- cotisations facultatives . non déductibles
|
||||
|
||||
|
@ -551,7 +548,7 @@ dirigeant . indépendant . cotisations et contributions . PSS proratisé:
|
|||
|
||||
dirigeant . indépendant . cotisations et contributions . exonérations . ACRE . prorata sur l'année:
|
||||
description: |
|
||||
Comme le calcul des cotisations indépendants s'effectue sur l'année entière,
|
||||
Comme le calcul des cotisations indépendants s'effectue sur l'année entière,
|
||||
l'exonération est proratisée en fonction de la durée effective de l'ACRE sur l'année courante.
|
||||
|
||||
Par exemple, pour une entreprise crée le 1 fevrier 2018, le calcul du prorata pour les
|
||||
|
@ -591,8 +588,8 @@ dirigeant . indépendant . conjoint collaborateur . assiette:
|
|||
dirigeant . indépendant . conjoint collaborateur . assiette . forfaitaire:
|
||||
titre: assiette forfaitaire
|
||||
description: |
|
||||
Le conjoint collaborateur paiera des cotisations équivalentes à un revenu
|
||||
professionnel forfaitaire, fixé à 1/3 du plafond de la sécurité sociale,
|
||||
Le conjoint collaborateur paiera des cotisations équivalentes à un revenu
|
||||
professionnel forfaitaire, fixé à 1/3 du plafond de la sécurité sociale,
|
||||
à l’exception de la cotisation indemnités journalières qui est calculée sur
|
||||
une assiette équivalente à 40% du PASS.
|
||||
formule: assiette = 'forfaitaire'
|
||||
|
@ -712,7 +709,7 @@ dirigeant . indépendant . conjoint collaborateur . cotisations . invalidité et
|
|||
|
||||
dirigeant . indépendant . conjoint collaborateur . cotisations . indemnités journalières maladie:
|
||||
produit:
|
||||
assiette:
|
||||
assiette:
|
||||
valeur: 40% * plafond sécurité sociale temps plein
|
||||
unité: €/an
|
||||
taux: cotisations et contributions . indemnités journalières maladie . taux
|
||||
|
@ -750,7 +747,7 @@ dirigeant . indépendant . cotisations et contributions:
|
|||
À la différence des cotisations, les contributions ne sont pas réintroduites
|
||||
pour le calcul de la CSG/CRDS. Elles ne bénéficient pas non plus de la
|
||||
réduction ACRE.
|
||||
|
||||
|
||||
dirigeant . indépendant . assiette minimale:
|
||||
non applicable si: situation personnelle . RSA
|
||||
valeur: oui
|
||||
|
@ -761,7 +758,7 @@ dirigeant . indépendant . assiette minimale:
|
|||
Les cotisations minimales ne s'appliquent pas si vous bénéficiez du RSA ou de la prime d’activité.
|
||||
références:
|
||||
cotisations minimales: https://www.secu-independants.fr/cotisations/calcul-cotisations/cotisations-minimales/
|
||||
|
||||
|
||||
dirigeant . indépendant . assiette minimale . maladie:
|
||||
titre: assiette minimale maladie
|
||||
description: |
|
||||
|
@ -773,7 +770,6 @@ dirigeant . indépendant . assiette minimale . maladie:
|
|||
arrondi: oui
|
||||
références:
|
||||
cotisations minimales: https://www.secu-independants.fr/cotisations/calcul-cotisations/cotisations-minimales/
|
||||
|
||||
|
||||
dirigeant . indépendant . assiette minimale . retraite:
|
||||
titre: assiette minimale retraite
|
||||
|
@ -785,8 +781,6 @@ dirigeant . indépendant . assiette minimale . retraite:
|
|||
arrondi: oui
|
||||
références:
|
||||
cotisations minimales: https://www.secu-independants.fr/cotisations/calcul-cotisations/cotisations-minimales/
|
||||
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . contributions spéciales:
|
||||
description: |
|
||||
|
@ -829,12 +823,11 @@ dirigeant . indépendant . cotisations et contributions . déduction tabac . rev
|
|||
valeur: assiette des cotisations
|
||||
abattement: déduction tabac
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations facultatives:
|
||||
question: Avez-vous souscrit à des contrats de prévoyance et / ou de retraite complémentaire privés (contrats Madelin, plans d'épargne retraite) ?
|
||||
description: |
|
||||
Il est possible pour l'indépendant de souscrire à des contrats privés pour la complémentaire santé, ou un plan d'épargne retraite.
|
||||
Les versements à ces contrats sont désigné par l'appellation "cotisations facultative" par l'administration fiscale.
|
||||
description: |
|
||||
Il est possible pour l'indépendant de souscrire à des contrats privés pour la complémentaire santé, ou un plan d'épargne retraite.
|
||||
Les versements à ces contrats sont désigné par l'appellation "cotisations facultative" par l'administration fiscale.
|
||||
|
||||
Ils sont déductible d'impôts (dans la limite d'un plafond), mais non déductible pour l'assiette des cotisations et contributions sociales.
|
||||
par défaut: non
|
||||
|
@ -854,7 +847,7 @@ dirigeant . indépendant . cotisations facultatives . déductibles:
|
|||
somme:
|
||||
- valeur: contrats madelin . prévoyance
|
||||
plafond: plafond prévoyance
|
||||
- somme:
|
||||
- somme:
|
||||
- PER
|
||||
- contrats madelin . retraite
|
||||
plafond: plafond retraite complémentaire
|
||||
|
@ -864,17 +857,15 @@ dirigeant . indépendant . cotisations facultatives . non déductibles:
|
|||
formule: total - déductibles
|
||||
|
||||
dirigeant . indépendant . cotisations facultatives . PER:
|
||||
description:
|
||||
Le PER individuel est ouvert à tous. Vous pouvez le souscrire auprès d'un établissement financier ou d'un organisme d'assurance. Ce nouveau plan succède au PERP et au contrat Madelin, qui ne seront plus proposés à partir du 1er octobre 2020. Votre épargne accumulée sur le Perp et le Madelin peut être à votre demande transférée sur le PER individuel. Ce contrat donne droit à des avantages fiscaux et vos droits sont transférables vers les autres PER. Il y a des cas de déblocage anticipé.
|
||||
titre: Plan d'épargne retraite
|
||||
description: Le PER individuel est ouvert à tous. Vous pouvez le souscrire auprès d'un établissement financier ou d'un organisme d'assurance. Ce nouveau plan succède au PERP et au contrat Madelin, qui ne seront plus proposés à partir du 1er octobre 2020. Votre épargne accumulée sur le Perp et le Madelin peut être à votre demande transférée sur le PER individuel. Ce contrat donne droit à des avantages fiscaux et vos droits sont transférables vers les autres PER. Il y a des cas de déblocage anticipé.
|
||||
titre: Plan d'épargne retraite
|
||||
unité: €/an
|
||||
question: Quel est le montant des cotisations que vous versez dans le cadre d'un PER (nouveau plan épargne retraite, depuis le 1er octobre 2019) ?
|
||||
par défaut: 0 €/mois
|
||||
références:
|
||||
références:
|
||||
Fiche service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F34982
|
||||
Fiche economie.gouv.fr: https://www.economie.gouv.fr/PER-epargne-retraite
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin:
|
||||
titre: Somme des cotisations à contrats Madelin
|
||||
somme:
|
||||
|
@ -886,7 +877,7 @@ dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoy
|
|||
question: Quel est le montant que vous versez pour vos contrats Madelin de prévoyance complémentaire (santé, perte d'emploi subie) ?
|
||||
unité: €/an
|
||||
description: |
|
||||
Si vous cotisez au titre d'un contrat de prévoyance complémentaire (santé, perte d'emploi subie)
|
||||
Si vous cotisez au titre d'un contrat de prévoyance complémentaire (santé, perte d'emploi subie)
|
||||
de type loi Madelin, vous pouvez déduire ces cotisations des bénéfices
|
||||
imposables que vous déclarez pour votre activité non salariée.
|
||||
références:
|
||||
|
@ -895,7 +886,7 @@ dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoy
|
|||
Article de loi: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000029042287&cidTexte=LEGITEXT000006069577&dateTexte=20140530&fastReqId=1900907951&nbResultRech=1
|
||||
par défaut: 50 €/mois
|
||||
|
||||
dirigeant . indépendant . cotisations facultatives . plafond prévoyance :
|
||||
dirigeant . indépendant . cotisations facultatives . plafond prévoyance:
|
||||
unité: €/an
|
||||
formule:
|
||||
somme:
|
||||
|
@ -956,35 +947,35 @@ dirigeant . indépendant . cotisations et contributions . début activité:
|
|||
années sont calculées sur une **base forfaitaire**.
|
||||
|
||||
|
||||
Ces cotisations seront ajustées et régularisées en fonction de vos revenus réels de
|
||||
Ces cotisations seront ajustées et régularisées en fonction de vos revenus réels de
|
||||
l’année d’exercice. Si votre revenu est supérieur à la base forfaitaire prise en compte
|
||||
pour le calcul des cotisations provisionnelles alors vous serez redevable d’un **complément
|
||||
de cotisations**.
|
||||
|
||||
|
||||
Ce simulateur calcule les cotisations dites définitives sur la base des revenus réels de votre
|
||||
activité. Il vous permet donc de pouvoir anticiper le montant de cette régularisation et de
|
||||
activité. Il vous permet donc de pouvoir anticiper le montant de cette régularisation et de
|
||||
**planifier votre trésorerie** en conséquence.
|
||||
|
||||
note:
|
||||
La base forfaitaire s’élève à **19 % du plafond annuel de la Sécurité sociale** au titre de
|
||||
la première et de la deuxième année d’activité (à l’exception de la cotisation Maladie
|
||||
et indemnités journalières pour lesquelles l’assiette forfaitaire est égale à 40% du
|
||||
la première et de la deuxième année d’activité (à l’exception de la cotisation Maladie
|
||||
et indemnités journalières pour lesquelles l’assiette forfaitaire est égale à 40% du
|
||||
plafond annuel de la Sécurité sociale).
|
||||
applicable si: entreprise . date de création >= 01/01/2020
|
||||
unité: €/an
|
||||
recalcul:
|
||||
recalcul:
|
||||
règle: cotisations et contributions
|
||||
avec:
|
||||
maladie . taux progressif . assiette: 40% * plafond sécurité sociale temps plein
|
||||
avec:
|
||||
maladie . taux progressif . assiette: 40% * plafond sécurité sociale temps plein
|
||||
assiette des cotisations: assiette forfaitaire
|
||||
CSG et CRDS . assiette: assiette forfaitaire
|
||||
CSG et CRDS . assiette: assiette forfaitaire
|
||||
dirigeant . indépendant . cotisations facultatives: non
|
||||
références:
|
||||
Fiche Urssaf: https://www.urssaf.fr/portail/home/independant/mes-cotisations/les-etapes-de-calcul/le-mode-de-calcul/lajustement-et-la-regularisation.html
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . début activité . assiette forfaitaire:
|
||||
produit:
|
||||
produit:
|
||||
assiette: PSS proratisé
|
||||
taux: 19%
|
||||
unité: €/an
|
||||
|
@ -1002,8 +993,8 @@ dirigeant . indépendant . cotisations et contributions . régularisation:
|
|||
les cotisations et contributions sont régularisées.
|
||||
|
||||
|
||||
Ce simulateur calcule les cotisations **après régularisation**.
|
||||
Il vous permet donc d'anticiper le montant de cette régularisation et de planifier votre
|
||||
Ce simulateur calcule les cotisations **après régularisation**.
|
||||
Il vous permet donc d'anticiper le montant de cette régularisation et de planifier votre
|
||||
trésorerie en conséquence.
|
||||
|
||||
|
||||
|
@ -1030,7 +1021,7 @@ dirigeant . indépendant . cotisations et contributions . indemnités journaliè
|
|||
valeur: assiette des cotisations
|
||||
plancher: assiette minimale . maladie
|
||||
plafond: 5 * plafond sécurité sociale temps plein
|
||||
taux:
|
||||
taux:
|
||||
nom: taux
|
||||
valeur: 0.85%
|
||||
arrondi: oui
|
||||
|
@ -1045,7 +1036,7 @@ dirigeant . indépendant . cotisations et contributions . maladie:
|
|||
plancher: assiette minimale . maladie
|
||||
multiplicateur: plafond sécurité sociale temps plein
|
||||
tranches:
|
||||
- taux:
|
||||
- taux:
|
||||
valeur: taux progressif
|
||||
arrondi: 2 décimales
|
||||
plafond: 110%
|
||||
|
@ -1063,18 +1054,17 @@ dirigeant . indépendant . cotisations et contributions . maladie:
|
|||
|
||||
Le terme "lorsque" laisse entendre qu'en cas de dépassement du seuil 5xPSS, tout le revenu est soumis à 6.5%. Il semblerait qu'une interprétation inverse soit à privilégier : seule la part supérieure à ce seuil est soumise à ce taux, et c'est cette implémentation que nous avons retenue.
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . maladie . taux progressif . réduction supplémentaire:
|
||||
description: |
|
||||
dirigeant . indépendant . cotisations et contributions . maladie . taux progressif . réduction supplémentaire:
|
||||
description: |
|
||||
La réduction supplémentaire du taux maladie pour les revenu inférieurs à 40% du plafond de la sécurité sociale
|
||||
non applicable si: situation personnelle . RSA
|
||||
remplace:
|
||||
règle: taux progressif
|
||||
remplace:
|
||||
règle: taux progressif
|
||||
par: taux progressif - réduction supplémentaire
|
||||
taux progressif:
|
||||
assiette: assiette
|
||||
multiplicateur: plafond sécurité sociale temps plein
|
||||
tranches:
|
||||
tranches:
|
||||
- plafond: 0%
|
||||
taux: 1.35%
|
||||
- plafond: 40%
|
||||
|
@ -1085,7 +1075,7 @@ dirigeant . indépendant . cotisations et contributions . maladie . taux progres
|
|||
|
||||
dirigeant . indépendant . cotisations et contributions . maladie . taux progressif:
|
||||
taux progressif:
|
||||
assiette:
|
||||
assiette:
|
||||
nom: assiette
|
||||
valeur: assiette des cotisations
|
||||
multiplicateur: plafond sécurité sociale temps plein
|
||||
|
@ -1098,10 +1088,9 @@ dirigeant . indépendant . cotisations et contributions . maladie . taux progres
|
|||
Taux de cotisations: https://www.secu-independants.fr/cotisations/calcul-cotisations/taux-de-cotisations/
|
||||
décret formule de calcul: https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000036342439&categorieLien=id
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . retraite de base:
|
||||
barème:
|
||||
assiette:
|
||||
assiette:
|
||||
valeur: assiette des cotisations
|
||||
plancher: assiette minimale . retraite
|
||||
multiplicateur: plafond sécurité sociale temps plein
|
||||
|
@ -1119,7 +1108,7 @@ dirigeant . indépendant . cotisations et contributions . retraite complémentai
|
|||
assiette: assiette des cotisations
|
||||
tranches:
|
||||
- taux: 7%
|
||||
plafond:
|
||||
plafond:
|
||||
nom: plafond
|
||||
acronyme: PRCI
|
||||
titre: plafond retraite complémentaire des indépendants
|
||||
|
@ -1128,11 +1117,10 @@ dirigeant . indépendant . cotisations et contributions . retraite complémentai
|
|||
plafond: 4 * plafond sécurité sociale temps plein
|
||||
arrondi: oui
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . invalidité et décès:
|
||||
formule:
|
||||
produit:
|
||||
assiette:
|
||||
assiette:
|
||||
valeur: assiette des cotisations
|
||||
plancher: assiette minimale . retraite
|
||||
plafond: plafond sécurité sociale temps plein
|
||||
|
@ -1141,7 +1129,6 @@ dirigeant . indépendant . cotisations et contributions . invalidité et décès
|
|||
références:
|
||||
Cotisation minimale: https://www.secu-independants.fr/cotisations/calcul-des-cotisations/cotisations-minimales/
|
||||
|
||||
|
||||
dirigeant . indépendant . cotisations et contributions . CSG et CRDS:
|
||||
formule:
|
||||
produit:
|
||||
|
@ -1151,7 +1138,7 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS:
|
|||
nom: non déductible
|
||||
arrondi: oui
|
||||
composantes:
|
||||
- taux:
|
||||
- taux:
|
||||
nom: taux
|
||||
valeur: 2.9%
|
||||
- attributs:
|
||||
|
@ -1162,7 +1149,7 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS:
|
|||
nom: déductible
|
||||
arrondi: oui
|
||||
composantes:
|
||||
- taux:
|
||||
- taux:
|
||||
nom: taux
|
||||
valeur: 6.8%
|
||||
- attributs:
|
||||
|
@ -1177,8 +1164,8 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS:
|
|||
|
||||
dirigeant . indépendant . revenus étrangers:
|
||||
description: |
|
||||
Les revenus étrangers sont des revenus déclarés par les travailleurs indépendants pour des revenus perçus au titre de l’exercice d’une activité non salariée dans un autre Etat de l’UE, EEE ou en Suisse à l’étranger.
|
||||
Ces revenus ne sont soumis qu’aux cotisations et sont intégrés à l’assiette sociale. Par contre, ces revenus sont identifiés spécifiquement afin de les déduire de l’assiette de la CSG/CRDS.
|
||||
Les revenus étrangers sont des revenus déclarés par les travailleurs indépendants pour des revenus perçus au titre de l’exercice d’une activité non salariée dans un autre Etat de l’UE, EEE ou en Suisse à l’étranger.
|
||||
Ces revenus ne sont soumis qu’aux cotisations et sont intégrés à l’assiette sociale. Par contre, ces revenus sont identifiés spécifiquement afin de les déduire de l’assiette de la CSG/CRDS.
|
||||
Pour savoir si ces revenus sont soumis à l'impôt sur le revenu, référez-vous à la notice explicative sur le site [impots.gouv.fr](https://www.impots.gouv.fr/portail/international-particulier/imposition-des-revenus-de-source-etrangere)
|
||||
|
||||
question: Avez-vous perçu des revenus à l'étranger dans le cadre de votre activité ?
|
||||
|
@ -1332,14 +1319,14 @@ dirigeant . indépendant . IJSS:
|
|||
description: >-
|
||||
En cas de maladie, maternité, ou accident, y compris suite à un arrêt de travail ou un arrêt
|
||||
pour garde d’enfant en lien avec l’épidémie du Covid-19, le régime général de Sécurité
|
||||
sociale assure le versement de prestations « en espèces ».
|
||||
sociale assure le versement de prestations « en espèces ».
|
||||
|
||||
Ce sont les indemnités journalières de Sécurité sociale (IJSS).
|
||||
|
||||
Les indemnités complémentaires aux indemnités journalières de la Sécurité
|
||||
sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas
|
||||
des revenus de remplacement.
|
||||
|
||||
|
||||
Note: Les prestations d’invalidité versées par les régimes
|
||||
d’invalidité-décès ne sont pas concernées
|
||||
|
||||
|
@ -1368,7 +1355,7 @@ dirigeant . indépendant . IJSS . imposable:
|
|||
description: >-
|
||||
Indiquez uniquement les revenus de remplacement imposables perçus, donc tous
|
||||
les revenus de remplacement perçus **sauf les indemnités journalières en
|
||||
lien avec une Affection de Longue Durée (ALD)**.
|
||||
lien avec une Affection de Longue Durée (ALD)**.
|
||||
|
||||
|
||||
Ces revenus seront déduits de votre assiette des contributions, afin de ne
|
||||
|
|
|
@ -63,7 +63,7 @@ aide déclaration revenu indépendant 2020 . cotisations payées . total charges
|
|||
unité: €/an
|
||||
question: Quel est le montant total des cotisations et contributions sociales payées pendant l'exercice ?
|
||||
description: |
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
|
||||
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
|
||||
2. Allez dans l'onglet "Document"
|
||||
|
@ -75,7 +75,7 @@ aide déclaration revenu indépendant 2020 . cotisations payées . CSG déductib
|
|||
remplace: dirigeant . indépendant . cotisations et contributions . CSG et CRDS . déductible
|
||||
unité: €/an
|
||||
description: |
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
|
||||
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
|
||||
2. Allez dans l'onglet "Document"
|
||||
|
@ -87,7 +87,7 @@ aide déclaration revenu indépendant 2020 . cotisations payées . CSG non dédu
|
|||
question: Quel est le montant total de CSG non déductible payé cette année ?
|
||||
unité: €/an
|
||||
description: |
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
|
||||
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
|
||||
2. Allez dans l'onglet "Document"
|
||||
|
@ -99,7 +99,7 @@ aide déclaration revenu indépendant 2020 . cotisations payées . CRDS:
|
|||
question: Quel est le montant total de CRDS payé cette année ?
|
||||
unité: €/an
|
||||
description: |
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
Vous pouvez retrouver ce montant dans votre espace personnel Urssaf. Voici la marche à suivre :
|
||||
|
||||
1. Connectez-vous à votre [espace personnel Urssaf](https://www.urssaf.fr/portail/home.html)
|
||||
2. Allez dans l'onglet "Document"
|
||||
|
@ -856,7 +856,7 @@ aide déclaration revenu indépendant 2020 . résultat simple . cotisations obli
|
|||
description: |
|
||||
À reporter dans :
|
||||
- **la case DSCA/DSCB** dans le formulaire de donnée complémentaire à la déclaration de revenus des indépendant (formulaire 2042)
|
||||
- **régime réel simplifié :** la rubrique 326 du formulaire 2033-D-SD
|
||||
- **régime réel simplifié :** la rubrique 326 du formulaire 2033-D-SD
|
||||
- **régime réel normal :** la rubrique A5 du formulaire 2053-SD
|
||||
- **déclaration contrôlée :** la rubrique BT du formulaire 2035-A-SD
|
||||
- **régime micro fiscal :** pas de liasse professionnelle fiscale à souscrire
|
||||
|
@ -891,7 +891,7 @@ aide déclaration revenu indépendant 2020 . résultat simple . total charges so
|
|||
- CFP
|
||||
description: |
|
||||
À reporter dans :
|
||||
- **régime réel simplifié :** la rubrique 252 du formulaire 2033-B-SD
|
||||
- **régime réel simplifié :** la rubrique 252 du formulaire 2033-B-SD
|
||||
- **régime réel normal :** la rubrique FZ du formulaire 2052-SD
|
||||
- **déclaration contrôlée :** la rubrique BK du formulaire 2035-A-SD
|
||||
- **régime micro fiscal :** pas de liasse professionnelle fiscale à souscrire
|
||||
|
|
|
@ -8,7 +8,7 @@ entreprise . date de création:
|
|||
par défaut: 01/01/2020
|
||||
description: |
|
||||
La date de début d'activité (ou date de création) est fixée lors de la
|
||||
déclaration de votre entreprise.
|
||||
déclaration de votre entreprise.
|
||||
|
||||
Vous pouvez [renseigner votre entreprise](/gérer), pour préremplir
|
||||
automatiquement cette information.
|
||||
|
@ -41,12 +41,12 @@ entreprise . durée d'activité:
|
|||
entreprise . durée d'activité . en fin d'année:
|
||||
titre: durée d'activité à la fin de l'année
|
||||
formule:
|
||||
somme:
|
||||
somme:
|
||||
- durée:
|
||||
depuis: date de création
|
||||
jusqu'à: période . fin d'année
|
||||
- 1 jour # Le mécanisme durée n'inclue pas le dernier jour
|
||||
|
||||
|
||||
entreprise . durée d'activité . en début d'année:
|
||||
titre: durée d'activité au début de l'année
|
||||
formule:
|
||||
|
@ -56,7 +56,7 @@ entreprise . durée d'activité . en début d'année:
|
|||
|
||||
entreprise . chiffre d'affaires:
|
||||
question: Quel est votre chiffre d'affaires envisagé ?
|
||||
|
||||
|
||||
résumé: Montant total des recettes brutes (hors taxe)
|
||||
unité: €/an
|
||||
somme:
|
||||
|
@ -65,35 +65,34 @@ entreprise . chiffre d'affaires:
|
|||
- dirigeant . rémunération . cotisations
|
||||
- charges
|
||||
- applicable si: entreprise . imposition . IS
|
||||
somme:
|
||||
- imposition . IS . résultat net
|
||||
- imposition . IS . impôt sur les sociétés
|
||||
somme:
|
||||
- imposition . IS . résultat net
|
||||
- imposition . IS . impôt sur les sociétés
|
||||
plancher: 0€/an
|
||||
arrondi: oui
|
||||
identifiant court: CA
|
||||
|
||||
|
||||
entreprise . chiffre d'affaires . vente restauration hébergement:
|
||||
titre: Vente de biens, restauration, hébergement (BIC)
|
||||
résumé: Chiffre d'affaires hors taxe
|
||||
question: Quel est le chiffre d'affaires issu de la vente de biens, restauration ou hébergement ?
|
||||
unité: €/an
|
||||
variations:
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . vente restauration hébergement
|
||||
- sinon:
|
||||
- sinon:
|
||||
applicable si: activité . service ou vente = 'vente'
|
||||
valeur: chiffre d'affaires
|
||||
arrondi: oui
|
||||
plancher: 0€/an
|
||||
description: |
|
||||
### Vente de biens
|
||||
### Vente de biens
|
||||
Il s’agit du chiffre d'affaires de toutes les opérations comportant
|
||||
transfert de propriété d'un bien corporel, c'est-à-dire un bien ayant une
|
||||
existence matérielle.
|
||||
existence matérielle.
|
||||
|
||||
### Restauration et hébergement
|
||||
Il s’agit du chiffre d'affaires de toutes les opérations de restauration
|
||||
|
@ -106,7 +105,6 @@ entreprise . chiffre d'affaires . vente restauration hébergement:
|
|||
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919
|
||||
définition vente de bien (impots.gouv): https://www.impots.gouv.fr/portail/professionnel/achatvente-de-biens
|
||||
|
||||
|
||||
entreprise . chiffre d'affaires . service BIC:
|
||||
unité: €/an
|
||||
plancher: 0€/an
|
||||
|
@ -123,19 +121,17 @@ entreprise . chiffre d'affaires . service BIC:
|
|||
services qui nécessite plus qu'un ordinateur pour être effectuées.
|
||||
|
||||
**Exemples** : transports, service à la personne, réparation etc.
|
||||
variations:
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . service BIC
|
||||
- sinon:
|
||||
- sinon:
|
||||
applicable si: activité . service ou vente = 'service'
|
||||
valeur: chiffre d'affaires
|
||||
références:
|
||||
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919
|
||||
|
||||
|
||||
|
||||
entreprise . chiffre d'affaires . service BNC:
|
||||
titre: Autres prestations de service et activités libérales (BNC)
|
||||
|
@ -145,22 +141,22 @@ entreprise . chiffre d'affaires . service BNC:
|
|||
plancher: 0€/an
|
||||
description: |
|
||||
Ce sont toutes les opérations dont l'activité intellectuelle tient
|
||||
un rôle essentiel.
|
||||
un rôle essentiel.
|
||||
|
||||
**Exemples** : conseil, accompagnement, traduction, développement,
|
||||
formation, enseignement, sportif
|
||||
|
||||
Les revenus tirés de ce chiffre d'affaires sont imposable au régime BNC (bénéfices non commerciaux)
|
||||
variations:
|
||||
variations:
|
||||
- si: activité . mixte
|
||||
alors:
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
produit:
|
||||
assiette: chiffre d'affaires
|
||||
taux: activité . mixte . proportions . service BNC
|
||||
- sinon:
|
||||
- sinon:
|
||||
applicable si: activité = 'libérale'
|
||||
valeur: chiffre d'affaires
|
||||
|
||||
|
||||
références:
|
||||
liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales
|
||||
|
||||
|
@ -179,9 +175,9 @@ entreprise . chiffre d'affaires . BIC:
|
|||
Le chiffre d'affaires correspondant au revenus imposable au titre des bénéfice industriels et commerciaux (BIC ou micro-BIC).
|
||||
unité: €/an
|
||||
somme:
|
||||
- service BIC
|
||||
- service BIC
|
||||
- vente restauration hébergement
|
||||
|
||||
|
||||
entreprise . chiffre d'affaires . franchise de TVA: oui
|
||||
|
||||
entreprise . chiffre d'affaires . franchise de TVA . seuil vente:
|
||||
|
@ -226,11 +222,10 @@ entreprise . chiffre d'affaires . franchise de TVA . dépassement:
|
|||
|
||||
entreprise . résultat fiscal:
|
||||
unité: €/an
|
||||
somme:
|
||||
somme:
|
||||
- chiffre d'affaires
|
||||
- (- charges)
|
||||
- (- charges . dirigeant)
|
||||
|
||||
|
||||
entreprise . imposition:
|
||||
question: Comment l'entreprise est-elle imposée ?
|
||||
|
@ -255,8 +250,8 @@ entreprise . imposition . IR . micro-fiscal:
|
|||
|
||||
question: Avez-vous opté pour le régime micro-fiscal ?
|
||||
description: |
|
||||
Avec le régime micro fiscal, les charges déductibles sont estimées forfaitairement,en fonction d’un pourcentage du chiffre d’affaires. Ce pourcentage dépend du type d’activité : 71% pour les activités de vente, restauration et hébergement (location de meublé de tourisme classé et chambre d’hôte), 50% pour les prestations de service commerciales ou artisanales, 34% pour les activités libérales.
|
||||
|
||||
Avec le régime micro fiscal, les charges déductibles sont estimées forfaitairement,en fonction d’un pourcentage du chiffre d’affaires. Ce pourcentage dépend du type d’activité : 71% pour les activités de vente, restauration et hébergement (location de meublé de tourisme classé et chambre d’hôte), 50% pour les prestations de service commerciales ou artisanales, 34% pour les activités libérales.
|
||||
|
||||
Cette option permet de simplifier votre comptabilité et peut être avantageuse en termes de revenu imposable et soumis à cotisations et contributions sociales dans le cas où vos charges de fonctionnement sont faibles.
|
||||
par défaut: non
|
||||
|
||||
|
@ -268,7 +263,7 @@ entreprise . imposition . IR . micro-fiscal . revenu abattu:
|
|||
Le micro-entrepreneur est dispensé d'établir une déclaration professionnelle de bénéfices au titre des BNC ou BIC.
|
||||
|
||||
Il lui suffit de porter dans la déclaration complémentaire de revenu (n°2042-C Pro) le montant annuel du chiffre d'affaires brut (BIC) ou des recettes (BNC).
|
||||
somme:
|
||||
somme:
|
||||
- entreprise . chiffre d'affaires . vente restauration hébergement
|
||||
- entreprise . chiffre d'affaires . service BIC
|
||||
- entreprise . chiffre d'affaires . service BNC
|
||||
|
@ -281,39 +276,38 @@ entreprise . imposition . IR . micro-fiscal . revenu abattu:
|
|||
taux: 50%
|
||||
- assiette: entreprise . chiffre d'affaires . service BNC
|
||||
taux: 34%
|
||||
plancher:
|
||||
variations:
|
||||
- si: entreprise . activité . mixte
|
||||
plancher:
|
||||
variations:
|
||||
- si: entreprise . activité . mixte
|
||||
alors: 610 €/an
|
||||
- sinon: 305 €/an
|
||||
|
||||
|
||||
entreprise . imposition . IR . micro-fiscal . alerte seuil dépassés:
|
||||
type: notification
|
||||
sévérité: avertissement
|
||||
formule: chiffre d'affaires . seuil micro dépassé
|
||||
description: Le seuil annuel de chiffre d'affaires pour le régime micro-fiscal est dépassé. [En savoir plus](/documentation/entreprise/chiffre-d'affaires/seuil-micro-dépassé)
|
||||
|
||||
|
||||
entreprise . chiffre d'affaires . seuil micro dépassé:
|
||||
applicable si: imposition . IR
|
||||
description: |
|
||||
Le statut de micro-entreprise s'applique tant que le chiffre d'affaires annuel (effectivement encaissé au cours de l'année civile) ne dépasse pas les seuils du régime fiscal de la micro-entreprise.
|
||||
Le statut de micro-entreprise s'applique tant que le chiffre d'affaires annuel (effectivement encaissé au cours de l'année civile) ne dépasse pas les seuils du régime fiscal de la micro-entreprise.
|
||||
|
||||
En cas de dépassement **sur deux années consécutives**, l'entreprise bascule automatiquement dans le régime de [l'entreprise individuelle](/simulateurs/indépendant).
|
||||
|
||||
À la fin de la première année d'activité, le CA est proratisé par rapport à la durée d'activité.
|
||||
À la fin de la première année d'activité, le CA est proratisé par rapport à la durée d'activité.
|
||||
|
||||
Exemple :
|
||||
> Un contribuable crée une entreprise le 1er août et encaisse des recettes HT de `50 000 €` au cours des cinq mois d'activité de sa première année civile d'exploitation.
|
||||
> Un contribuable crée une entreprise le 1er août et encaisse des recettes HT de `50 000 €` au cours des cinq mois d'activité de sa première année civile d'exploitation.
|
||||
> Les recettes de cette première année civile sont ajustées *prorata temporis* pour les comparer au plafond :
|
||||
>
|
||||
>
|
||||
> `50 000€ x (365/153) = 119 280 €`
|
||||
|
||||
|
||||
Les charges ne sont pas déductibles pour le calcul du plafond (comme pour le calcul des cotisations)
|
||||
|
||||
|
||||
### Multi-activité
|
||||
### Multi-activité
|
||||
|
||||
Lorsqu'un entrepreneur exerce 2 activités au sein de sa micro-entreprise, le
|
||||
seuil de chiffre d’affaires à respecter n’est pas pour autant doublé. En
|
||||
|
@ -335,7 +329,6 @@ entreprise . chiffre d'affaires . seuil micro dépassé:
|
|||
- entreprise . chiffre d'affaires > 176200 €/an
|
||||
- entreprise . chiffre d'affaires . service > 72600 €/an
|
||||
|
||||
|
||||
entreprise . imposition . IR . information sur le report de déficit:
|
||||
non applicable si: micro-fiscal
|
||||
type: notification
|
||||
|
@ -346,7 +339,7 @@ entreprise . imposition . IR . information sur le report de déficit:
|
|||
|
||||
[Voir les règles fiscales détaillées](https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301)
|
||||
références:
|
||||
bofip: https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301
|
||||
bofip: https://bofip.impots.gouv.fr/bofip/2003-PGP.html/identifiant%3DBOI-BIC-DEF-20-10-20170301
|
||||
|
||||
entreprise . exercice: oui
|
||||
entreprise . exercice . début:
|
||||
|
@ -392,7 +385,6 @@ entreprise . imposition . IS:
|
|||
valeur: imposition = 'IS'
|
||||
titre: Impôt sur les sociétés
|
||||
|
||||
|
||||
entreprise . imposition . IS . résultat imposable:
|
||||
titre: Résultat de l'exercice
|
||||
résumé: Imposable à l'impôt sur les sociétés
|
||||
|
@ -405,7 +397,6 @@ entreprise . imposition . IS . information sur le report de déficit:
|
|||
description: |
|
||||
Les déficits subits au cours d'un exercice peuvent être reportés sur les exercices suivants (report en avant), ou sur le seul exercice précédent (report en arrière).
|
||||
|
||||
|
||||
entreprise . imposition . IS . résultat net:
|
||||
résumé: Après déduction des charges et de l'impôt sur les société
|
||||
somme:
|
||||
|
@ -414,7 +405,7 @@ entreprise . imposition . IS . résultat net:
|
|||
- (- dirigeant . rémunération . totale)
|
||||
- (- impôt sur les sociétés)
|
||||
par défaut: 0€
|
||||
|
||||
|
||||
entreprise . imposition . IS . impôt sur les sociétés:
|
||||
unité: €/an
|
||||
formule:
|
||||
|
@ -535,16 +526,14 @@ entreprise . charges:
|
|||
Charges déductibles ou non du résultat fiscal d'une entreprise: https://www.service-public.fr/professionnels-entreprises/vosdroits/F31973
|
||||
par défaut: 0 €/an
|
||||
|
||||
|
||||
|
||||
entreprise . charges . dirigeant:
|
||||
titre: Charges déductibles dirigeant
|
||||
description: Les montants liés à la rémunération du dirigeant qui sont déductibles d'impôt.
|
||||
variations:
|
||||
- si: imposition . IS
|
||||
variations:
|
||||
- si: imposition . IS
|
||||
alors: dirigeant . rémunération . totale
|
||||
# Note : le cas de dirigeant AS à l'IR n'est pas géré
|
||||
# - si: dirigeant . assimilé salarié
|
||||
# - si: dirigeant . assimilé salarié
|
||||
# alors: 0€/an
|
||||
- sinon: # TNS dans entreprise à l'IR
|
||||
valeur: dirigeant . indépendant . cotisations et contributions
|
||||
|
@ -554,7 +543,7 @@ entreprise . ACRE:
|
|||
description: >-
|
||||
L'aide à la création ou à la reprise d'une entreprise (Acre) consiste en une
|
||||
exonération partielle de charges sociales, dite exonération de début
|
||||
d'activité pendant 12 mois.
|
||||
d'activité pendant 12 mois.
|
||||
|
||||
|
||||
Elle est **automatique** pour les **sociétés et les entreprises individuelles**
|
||||
|
@ -563,7 +552,7 @@ entreprise . ACRE:
|
|||
|
||||
|
||||
Pour les **auto-entrepreneurs** en revanche, elle doit être demandée et est réservée aux
|
||||
bénéficiaires suivants:
|
||||
bénéficiaires suivants:
|
||||
|
||||
- Les demandeurs d'emplois (indemnisés ou non indemnisés mais ayant au moins 6 mois d’inscription à Pôle Emploi au cours des 18 derniers mois).
|
||||
|
||||
|
@ -684,7 +673,7 @@ entreprise . exonérée de TVA:
|
|||
question: L'entreprise est-elle exonérée de TVA (hors franchise de base) ?
|
||||
par défaut: non
|
||||
description: |
|
||||
Certains types d'entreprises ne sont pas assujetties à la TVA.
|
||||
Certains types d'entreprises ne sont pas assujetties à la TVA.
|
||||
Ces dernières payent la taxe sur les salaires en contrepartie.
|
||||
|
||||
C'est le cas par exemple des établissements bancaires, financiers ou d'assurance.
|
||||
|
@ -705,7 +694,8 @@ entreprise . taxe sur les salaires:
|
|||
une de ces conditions:
|
||||
- association non lucrative
|
||||
- entreprise . exonérée de TVA
|
||||
description: Lorsque le montant de la taxe sur les salaires est inférieur à 1200 €/an, il
|
||||
description:
|
||||
Lorsque le montant de la taxe sur les salaires est inférieur à 1200 €/an, il
|
||||
n'y a pas besoin de faire de déclaration et la taxe n'est pas recouvré.
|
||||
Entre 1200 €/an et 2400 €/an une décote s'applique.
|
||||
formule:
|
||||
|
@ -807,7 +797,7 @@ entreprise . activité . mixte:
|
|||
par défaut: non
|
||||
description: |
|
||||
Il est possible d'avoir plusieurs activités avec des types de revenus
|
||||
différents pour une même entreprise.
|
||||
différents pour une même entreprise.
|
||||
|
||||
Par exemple, une entreprise de plomberie qui facture l'achat et la pose d'un
|
||||
robinet a une partie de son chiffre d'affaires en vente de materiel (le robinet)
|
||||
|
@ -826,7 +816,7 @@ entreprise . activité . mixte . proportions:
|
|||
description: Part des différentes activités dans le chiffre d'affaires
|
||||
titre: proportion activité
|
||||
unité: '%'
|
||||
somme:
|
||||
somme:
|
||||
- nom: service BIC
|
||||
variations:
|
||||
- si: activité = 'libérale'
|
||||
|
@ -843,7 +833,6 @@ entreprise . activité . mixte . proportions:
|
|||
alors: 1 / 3
|
||||
- sinon: 50%
|
||||
note: Il appartient à l'utilisateur de bien vérifier que la somme des trois pourcentages renseignés vaut 100%.
|
||||
|
||||
|
||||
entreprise . activité . libérale réglementée:
|
||||
question: Est-ce une activité libérale réglementée ?
|
||||
|
@ -901,7 +890,7 @@ entreprise . activité . débit de tabac:
|
|||
chemin: nom
|
||||
|
||||
établissement . taux du versement transport:
|
||||
unité: "%"
|
||||
unité: '%'
|
||||
formule:
|
||||
synchronisation:
|
||||
data: localisation
|
||||
|
|
|
@ -32,7 +32,7 @@ impôt . méthode de calcul:
|
|||
# applicable si: revenu imposable > 0
|
||||
# bizarrement, cette condition ne semble pas marcher, on se résout donc à utiliser une version plus "hacky" et moins proche de la loi. Elle posera problème le jour où l'on aura a calculer l'impot avec plusieurs sources de revenu
|
||||
non applicable si: dirigeant . auto-entrepreneur . impôt . versement libératoire
|
||||
par défaut:
|
||||
par défaut:
|
||||
nom: par défaut
|
||||
valeur: "'barème standard'"
|
||||
formule:
|
||||
|
@ -70,11 +70,11 @@ impôt . méthode de calcul . prélèvement à la source:
|
|||
impôt . revenu imposable:
|
||||
description: |
|
||||
C'est le revenu à prendre en compte pour calculer l'impôt avec un taux moyen d'imposition (neutre ou personnalisé).
|
||||
variations:
|
||||
variations:
|
||||
- si: dirigeant
|
||||
alors: dirigeant . rémunération . imposable
|
||||
- sinon:
|
||||
valeur: contrat salarié . rémunération . net imposable
|
||||
- sinon:
|
||||
valeur: contrat salarié . rémunération . net imposable
|
||||
abattement: abattement contrat court
|
||||
|
||||
impôt . revenu imposable . abattement contrat court:
|
||||
|
@ -254,7 +254,6 @@ impôt . taux personnalisé:
|
|||
- votre espace personnel [impots.gouv.fr](https://impots.gouv.fr)
|
||||
unité: '%'
|
||||
|
||||
|
||||
# TODO: "foyer fiscal" should be in its own top level namespace, but we put it
|
||||
# in the "impôt" namespace to have a better questions ordering
|
||||
impôt . foyer fiscal:
|
||||
|
@ -339,18 +338,17 @@ impôt . foyer fiscal . nombre de parts . majoration personne veuve avec enfant:
|
|||
|
||||
impôt . foyer fiscal . taux effectif:
|
||||
unité: '%'
|
||||
variations:
|
||||
variations:
|
||||
- si: impôt à payer = 0
|
||||
alors: 0%
|
||||
- sinon: impôt à payer / revenu imposable
|
||||
|
||||
alors: 0%
|
||||
- sinon: impôt à payer / revenu imposable
|
||||
|
||||
impôt . foyer fiscal . revenu imposable:
|
||||
formule:
|
||||
somme:
|
||||
- revenu d'activité abattu
|
||||
- applicable si:
|
||||
toutes ces conditions:
|
||||
- applicable si:
|
||||
toutes ces conditions:
|
||||
- dirigeant . rémunération . imposable
|
||||
- entreprise . imposition . IR
|
||||
valeur: dirigeant . rémunération . imposable
|
||||
|
@ -366,7 +364,7 @@ impôt . foyer fiscal . revenu imposable . revenu d'activité abattu:
|
|||
alors: contrat salarié . rémunération . net imposable
|
||||
- si: entreprise . imposition = 'IS'
|
||||
alors: dirigeant . rémunération . imposable
|
||||
abattement:
|
||||
abattement:
|
||||
valeur: 10% * assiette
|
||||
# A VÉRIFIER: calculé à la main en revalorisant le taux 2020
|
||||
# HISTORIQUE 2020: 12627€
|
||||
|
@ -524,5 +522,5 @@ impôt . domiciliation étranger non implémentée:
|
|||
formule: situation personnelle . domiciliation fiscale à l'étranger
|
||||
type: notification
|
||||
niveau: avertissement
|
||||
description: |
|
||||
description: |
|
||||
La retenue à la source pour les non-résident n'est pas encore implémentée. Pour en savoir plus, se référer à la [documentation fiscale](https://www.impots.gouv.fr/portail/international-particulier/je-suis-non-resident-dois-je-declarer-des-revenus-et-payer-des-impots-en)
|
||||
|
|
|
@ -21,7 +21,7 @@ dirigeant . indépendant . PL . métier:
|
|||
dirigeant . indépendant . PL . métier . rattaché CIPAV:
|
||||
titre: Autre métier rattaché à la CIPAV
|
||||
description: |
|
||||
Vous exercez un métier réglementé rattaché à la CIPAV. La liste de ces métiers est :
|
||||
Vous exercez un métier réglementé rattaché à la CIPAV. La liste de ces métiers est :
|
||||
|
||||
- Architecte (architecte, architecte d’intérieur, économiste de la construction, maître d’œuvre, géomètre expert)
|
||||
- Guide-montage (moniteur de ski, guide de haute montagne, accompagnateur de moyenne montagne)
|
||||
|
@ -113,7 +113,7 @@ dirigeant . indépendant . PL . option régime général:
|
|||
Les personnes exerçant déjà une profession libérale non réglementée avant
|
||||
2019 peuvent opter entre 2019 et 2023 pour la Sécurité sociale pour les
|
||||
indépendants, à condition d’être à jour dans le paiement de toutes leurs
|
||||
cotisations à la CIPAV.
|
||||
cotisations à la CIPAV.
|
||||
|
||||
Cette option leur permettra de bénéficier des mêmes droits que les artisans
|
||||
et commerçants (indemnités journalières, retraite, invalidité, etc.).
|
||||
|
@ -311,11 +311,11 @@ dirigeant . indépendant . PL . retraite CNAVPL:
|
|||
ont les mêmes taux de cotisations pour leur retraite de base.
|
||||
|
||||
La caisse nationale d'assurance vieillesse des professions
|
||||
libérales est l'organisme qui fédère les différentes caisses
|
||||
libérales est l'organisme qui fédère les différentes caisses
|
||||
existantes (CIPAV, CARPIMKO, CARCDSF, CAVEC etc..)
|
||||
|
||||
produit:
|
||||
assiette:
|
||||
assiette:
|
||||
valeur: assiette des cotisations
|
||||
plancher: assiette minimale . retraite
|
||||
composantes:
|
||||
|
@ -370,8 +370,8 @@ dirigeant . indépendant . PL . PAMC . proportion recette activité non conventi
|
|||
30%: 30%
|
||||
description: |
|
||||
Les recettes non conventionnées sont toutes celles qui ne rentrent pas dans
|
||||
les catégories suivantes :
|
||||
|
||||
les catégories suivantes :
|
||||
|
||||
- Honoraires tirés des actes remboursables (y compris les
|
||||
dépassements d’honoraires et les frais de déplacement figurant sur le relevé
|
||||
SNIR)
|
||||
|
@ -471,30 +471,31 @@ dirigeant . indépendant . PL . PAMC . revenus activité conventionnée:
|
|||
plancher: 0%
|
||||
|
||||
dirigeant . indépendant . PL . PAMC . assiette participation CPAM:
|
||||
description: Aussi appelé revenu conventionnel, il s'agit du revenu des honoraires nets
|
||||
description:
|
||||
Aussi appelé revenu conventionnel, il s'agit du revenu des honoraires nets
|
||||
de dépassement.
|
||||
formule: revenus activité conventionnée / (100% + dépassement d'honoraire moyen)
|
||||
note: |
|
||||
La formule référencée dans les textes Urssaf est la suivante :
|
||||
> (revenu de l’activité conventionnée) x (total des honoraires - total des dépassements d’honoraires) / montant total des honoraires.
|
||||
La formule référencée dans les textes Urssaf est la suivante :
|
||||
> (revenu de l’activité conventionnée) x (total des honoraires - total des dépassements d’honoraires) / montant total des honoraires.
|
||||
|
||||
On peut simplififer cette formule en :
|
||||
On peut simplififer cette formule en :
|
||||
> (revenu de l’activité conventionnée) / (100% + dépassement d'honoraire moyen)
|
||||
|
||||
### Preuve
|
||||
Si on prends les variables suivantes,
|
||||
Si on prends les variables suivantes,
|
||||
> `h+` : total des honoraires (avec dépassement)
|
||||
`h` : honoraires sans dépassement
|
||||
`d%`: pourcentage de dépassement d'honoraire moyen
|
||||
|
||||
On a :
|
||||
>
|
||||
On a :
|
||||
>
|
||||
`h+ = h + h * d%`
|
||||
`h+ = h * (100% + d%)`
|
||||
|
||||
Si on remplace dans la formule de l'assiette participation CPAM, on a :
|
||||
> 1. `(revenu de l’activité conventionnée) * h / h+`
|
||||
> 2. `(revenu de l’activité conventionnée) * h / (h * (100% + d%))
|
||||
> 2. `(revenu de l’activité conventionnée) * h / (h * (100% + d%))
|
||||
> 3. `(revenu de l’activité conventionnée) / (100% + d%)`
|
||||
|
||||
références:
|
||||
|
@ -560,7 +561,7 @@ dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentist
|
|||
dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentiste . taux Urssaf:
|
||||
description: |
|
||||
Le « taux Urssaf » (taux UR) permet de calculer la part de votre
|
||||
cotisation d’assurance maladie-maternité prise en charge par la CPAM.
|
||||
cotisation d’assurance maladie-maternité prise en charge par la CPAM.
|
||||
|
||||
Ce taux est pré-rempli sur votre déclaration de revenus professionnels. Il
|
||||
est issu des données de votre Relevé individuel d’activité et de
|
||||
|
@ -571,7 +572,7 @@ dirigeant . indépendant . PL . PAMC . assiette participation chirurgien-dentist
|
|||
|
||||
## Calcul du taux
|
||||
|
||||
La formule de calcul du taux de dépassement est la suivante :
|
||||
La formule de calcul du taux de dépassement est la suivante :
|
||||
> Taux Urssaf = (dépassements - montants remboursés forfaits CMU) / (montants remboursables actes + montants remboursés forfaits CMU)
|
||||
question: Quel est votre "taux Urssaf" ?
|
||||
unité: ''
|
||||
|
@ -615,7 +616,7 @@ dirigeant . indépendant . PL . PAMC . IJSS:
|
|||
Les indemnités complémentaires aux indemnités journalières de la Sécurité
|
||||
sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas
|
||||
des revenus de remplacement.
|
||||
|
||||
|
||||
Note: Les prestations d’invalidité versées par les régimes
|
||||
d’invalidité-décès ne sont pas concernées.
|
||||
|
||||
|
@ -737,7 +738,7 @@ dirigeant . indépendant . PL . CARMF . retraite CNAVPL . participation CPAM:
|
|||
dirigeant . indépendant . PL . CARMF . retraite complémentaire:
|
||||
remplace: cotisations et contributions . retraite complémentaire
|
||||
description: >-
|
||||
La CARMF gère le régime de retraite complémentaire.
|
||||
La CARMF gère le régime de retraite complémentaire.
|
||||
|
||||
Le montant des cotisations est déterminé en fonction des revenus
|
||||
nets d’activité indépendante de l’avant-dernière année.
|
||||
|
@ -767,7 +768,7 @@ dirigeant . indépendant . PL . CARMF . invalidité décès:
|
|||
description: >-
|
||||
La CARMF gère un régime de prévoyance versant une pension en cas
|
||||
d'invalidité permanente et un capital décès ainsi qu’une rente pour les
|
||||
conjoints et enfants survivants en cas de décès de l'assuré.
|
||||
conjoints et enfants survivants en cas de décès de l'assuré.
|
||||
|
||||
La cotisation comporte trois classes forfaitaires dont le montant est
|
||||
déterminé en fonction de vos revenus nets d'activité indépendante de
|
||||
|
@ -909,7 +910,8 @@ dirigeant . indépendant . PL . CARCDSF . chirurgien-dentiste . PCV:
|
|||
titre: Prestation complémentaire vieillesse (CARCDSF chirurgien-dentiste)
|
||||
remplace: cotisations et contributions . PCV
|
||||
non applicable si: exonération PCV
|
||||
note: Une dispense peut être accordée lorsque les revenus professionnels 2019 sont
|
||||
note:
|
||||
Une dispense peut être accordée lorsque les revenus professionnels 2019 sont
|
||||
inférieurs ou égaux à 500 C (valeur au 1er janvier de l’année considérée),
|
||||
soit 11 500 €.
|
||||
|
||||
|
|
|
@ -44,9 +44,9 @@ protection sociale . retraite:
|
|||
- On ne prend pas en compte les caisses de retraite des professions libérales réglementées (les 10 sections de la Cnavpl et la Cnbf)
|
||||
- On ne calcule pas le nombre de trimestres validés par année
|
||||
|
||||
protection sociale . retraite . plr:
|
||||
protection sociale . retraite . plr:
|
||||
applicable si:
|
||||
toutes ces conditions:
|
||||
toutes ces conditions:
|
||||
- entreprise . activité . libérale réglementée
|
||||
- dirigeant . indépendant . PL . option régime général = non
|
||||
remplace: retraite
|
||||
|
|
|
@ -91,7 +91,7 @@ contrat salarié . frais professionnels . titres-restaurant:
|
|||
- d’un repas,
|
||||
|
||||
- de préparations alimentaires directement consommables,
|
||||
|
||||
|
||||
- de fruits et légumes.
|
||||
|
||||
Ce titre peut être émis sur support papier ou sous forme dématérialisée.
|
||||
|
@ -126,14 +126,13 @@ contrat salarié . frais professionnels . titres-restaurant . part déductible:
|
|||
contrat salarié . frais professionnels . titres-restaurant . nombre:
|
||||
question: Combien de titres-restaurant sont distribués au salarié ?
|
||||
arrondi: oui
|
||||
par défaut:
|
||||
produit:
|
||||
assiette: 19 titres-restaurant/mois
|
||||
par défaut:
|
||||
produit:
|
||||
assiette: 19 titres-restaurant/mois
|
||||
facteur: temps de travail . quotité de travail
|
||||
suggestions:
|
||||
5 repas/semaines: 5 titres-restaurant/semaines * période . semaines par mois
|
||||
3 repas/semaine: 3 titres-restaurant/semaines * période . semaines par mois
|
||||
|
||||
5 repas/semaines: 5 titres-restaurant/semaines * période . semaines par mois
|
||||
3 repas/semaine: 3 titres-restaurant/semaines * période . semaines par mois
|
||||
|
||||
contrat salarié . frais professionnels . titres-restaurant . montant unitaire:
|
||||
question: Quelle est la valeur unitaire du titre-restaurant ?
|
||||
|
@ -180,7 +179,7 @@ contrat salarié . frais professionnels . abonnement transports publics . montan
|
|||
par défaut: 0 €/mois
|
||||
description: |
|
||||
L'employeur doit prendre en charge 50% du montant dépensé par le salarié pour les transports publics lui permettant de se rendre sur son lieu de travail.
|
||||
|
||||
|
||||
Cette prise en charge (dans la limite des 50% du montant) est exonérée de cotisations sociales et d'impôt sur le revenu.
|
||||
|
||||
Dans le cas d'un temps partiel, le taux de prise en charge sera le même pour un mi-temps ou plus. En dessous, le taux de prise en charge sera proportionnel.
|
||||
|
@ -191,11 +190,9 @@ contrat salarié . frais professionnels . abonnement transports publics . montan
|
|||
Navigo: 75 €/mois
|
||||
Técély: 65 €/mois
|
||||
RTM: 40 €/mois
|
||||
Tisséo: 42.50 €/mois
|
||||
Tisséo: 42.50 €/mois
|
||||
TBM: 42.20 €/mois
|
||||
|
||||
|
||||
|
||||
contrat salarié . frais professionnels . abonnement transports publics . taux de participation employeur:
|
||||
valeur: 50%
|
||||
|
||||
|
@ -203,7 +200,7 @@ contrat salarié . frais professionnels . abonnement transports publics . taux d
|
|||
titre: Taux de prise en charge
|
||||
valeur:
|
||||
produit:
|
||||
assiette:
|
||||
assiette:
|
||||
le minimum de:
|
||||
- temps de travail . quotité de travail
|
||||
- 50%
|
||||
|
@ -275,9 +272,9 @@ contrat salarié . frais professionnels . transports personnels . carburant faib
|
|||
valeur: montant
|
||||
plafond:
|
||||
le minimum de:
|
||||
- proportion déduction * 200€/an
|
||||
- valeur: proportion déduction * 500€/an
|
||||
abattement: abonnement transports publics . prise en charge
|
||||
- proportion déduction * 200€/an
|
||||
- valeur: proportion déduction * 500€/an
|
||||
abattement: abonnement transports publics . prise en charge
|
||||
|
||||
contrat salarié . frais professionnels . transports personnels . forfait mobilités durables:
|
||||
valeur: oui
|
||||
|
@ -510,17 +507,17 @@ contrat salarié . activité partielle . indemnisation entreprise . taux d'indem
|
|||
formule:
|
||||
variations:
|
||||
- si: secteur d'activité restreint
|
||||
# Historique:
|
||||
# - avant le 01/07/2021: 70%
|
||||
# - avant le 01/08/2021: 60%
|
||||
# - avant le 01/09/2021: 52%
|
||||
# - à partir du 01/09/2021: 36%
|
||||
# Historique:
|
||||
# - avant le 01/07/2021: 70%
|
||||
# - avant le 01/08/2021: 60%
|
||||
# - avant le 01/09/2021: 52%
|
||||
# - à partir du 01/09/2021: 36%
|
||||
alors: 70%
|
||||
# Historique:
|
||||
# Historique:
|
||||
# - avant le 01/06/2021: 60%
|
||||
# - avant le 01/07/2021: 52%
|
||||
# - à partir du 01/07/2021: 36%
|
||||
- sinon: 52%
|
||||
- sinon: 52%
|
||||
|
||||
contrat salarié . activité partielle . secteur d'activité restreint:
|
||||
question: >-
|
||||
|
@ -686,7 +683,7 @@ contrat salarié . CDD . CPF:
|
|||
taux: 1%
|
||||
références:
|
||||
Code du travail - Article L6322-37: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000022234996&cidTexte=LEGITEXT000006072050
|
||||
|
||||
|
||||
contrat salarié . CDD . congés pris:
|
||||
question: Combien de jours de congés seront pris sur la durée du CDD (en jours ouvrés) ?
|
||||
description: |
|
||||
|
@ -697,10 +694,10 @@ contrat salarié . CDD . congés pris:
|
|||
la totalité: congés dus sur la durée du contrat
|
||||
la moitié: 50% * congés dus sur la durée du contrat
|
||||
par défaut: 0 jours ouvrés
|
||||
|
||||
contrat salarié . CDD . jours ouvrés sur la durée du contrat:
|
||||
|
||||
contrat salarié . CDD . jours ouvrés sur la durée du contrat:
|
||||
produit:
|
||||
assiette: 253 jours ouvrés/an
|
||||
assiette: 253 jours ouvrés/an
|
||||
facteur: durée contrat
|
||||
|
||||
contrat salarié . CDD . congés dus sur la durée du contrat:
|
||||
|
@ -737,7 +734,7 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
|
|||
rémunération brute totale perçue par le salarié au cours de la période de
|
||||
référence.
|
||||
|
||||
### Méthode "maintien du salaire"
|
||||
### Méthode "maintien du salaire"
|
||||
|
||||
Cette méthode sera le plus souvent favorable au salarié lorsque celui-ci a
|
||||
bénéficié d’une augmentation de salaire.
|
||||
|
@ -754,7 +751,7 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
|
|||
produit:
|
||||
assiette: rémunération . assiette congés payés
|
||||
taux: 10%
|
||||
abattement:
|
||||
abattement:
|
||||
nom: proportion congés pris
|
||||
unité: '%'
|
||||
valeur: congés pris / congés dus sur la durée du contrat
|
||||
|
@ -762,15 +759,14 @@ contrat salarié . CDD . indemnité compensatrice de congés payés:
|
|||
- nom: Méthode du maintien de salaire
|
||||
produit:
|
||||
assiette: rémunération . assiette congés payés / jours ouvrés sur la durée du contrat
|
||||
facteur:
|
||||
facteur:
|
||||
nom: congés non pris
|
||||
valeur: congés dus sur la durée du contrat - congés pris
|
||||
|
||||
|
||||
|
||||
note: |
|
||||
L'indemnité est versée à la fin du contrat, sauf si le CDD se poursuit par un CDI.
|
||||
À noter, la loi El Khomri modifie l'article L3141-12:
|
||||
- avant : Les congés peuvent être pris dès l'ouverture des droits
|
||||
- avant : Les congés peuvent être pris dès l'ouverture des droits
|
||||
- maintenant : Les congés peuvent être pris dès l’embauche
|
||||
références:
|
||||
Fiche service-public.gouv.fr: https://www.service-public.fr/particuliers/vosdroits/F2931
|
||||
|
@ -1347,7 +1343,6 @@ contrat salarié . rémunération . brut de base:
|
|||
- équivalent temps plein
|
||||
- dirigeant . rémunération . totale
|
||||
|
||||
|
||||
références:
|
||||
Le salaire. Fixation et paiement: http://travail-emploi.gouv.fr/droit-du-travail/remuneration-et-participation-financiere/remuneration/article/le-salaire-fixation-et-paiement
|
||||
|
||||
|
@ -1825,7 +1820,7 @@ contrat salarié . rémunération . net imposable:
|
|||
description: |
|
||||
C'est la base utilisée pour calculer l'impôt sur le revenu.
|
||||
valeur:
|
||||
nom: base
|
||||
nom: base
|
||||
description: Le net imposable avant les exonérations et déductions
|
||||
somme:
|
||||
- net avec revenus de remplacement
|
||||
|
@ -1842,8 +1837,6 @@ contrat salarié . rémunération . net imposable:
|
|||
références:
|
||||
DSN: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
|
||||
|
||||
|
||||
|
||||
contrat salarié . rémunération . net imposable . heures supplémentaires et complémentaires défiscalisées:
|
||||
unité: €/mois
|
||||
formule:
|
||||
|
@ -1950,11 +1943,11 @@ contrat salarié . cotisations . salariales . réductions de cotisations:
|
|||
contrat salarié . cotisations . patronales . réductions de cotisations:
|
||||
titre: réductions patronales
|
||||
description: >-
|
||||
À l'exception de la déduction heure supplémentaire, les
|
||||
dispositifs de réduction de cotisations patronales sont
|
||||
À l'exception de la déduction heure supplémentaire, les
|
||||
dispositifs de réduction de cotisations patronales sont
|
||||
mutuellement exclusif.
|
||||
|
||||
Le formule ci dessous selectionne donc automatiquement
|
||||
Le formule ci dessous selectionne donc automatiquement
|
||||
le plus avantageux pour l'employeur.
|
||||
formule:
|
||||
somme:
|
||||
|
@ -2205,7 +2198,7 @@ contrat salarié . aides employeur . emploi franc . éligible:
|
|||
- CDD . durée contrat >= 6
|
||||
question: Cette embauche est-elle éligible à l'aide emploi-franc ?
|
||||
description: |
|
||||
Conditions :
|
||||
Conditions :
|
||||
- Le salarié recruté est un demandeur d'emploi inscrit à Pôle Emploi et réside dans un quartier prioritaire de la ville (QPV) [vérifier l'éligibilité d'un quartier](https://sig.ville.gouv.fr/recherche-adresses-qp-polville)
|
||||
- L'employeur est à jour de ses cotisations et n'a pas procédé à un licenciement économique pour le poste pourvu dans les 6 mois précédents le recrutement
|
||||
- Le salarié recruté ne doit pas avoir appartenu à l'effectif de l'entreprise dans les 6 mois précédent l'embauche
|
||||
|
@ -2825,7 +2818,7 @@ contrat salarié . complémentaire santé . forfait:
|
|||
titre: Forfait de complémentaire santé entreprise
|
||||
description: >-
|
||||
L'employeur a l'obligation de proposer une offre de complémentaire santé. Il
|
||||
doit prendre à sa charge au moins la moitié de son coût.
|
||||
doit prendre à sa charge au moins la moitié de son coût.
|
||||
|
||||
Le montant peut varier, mais la prévoyance doit couvrir un panier minimum
|
||||
légal de soins.
|
||||
|
|
|
@ -1,2 +1,2 @@
|
|||
ignorePatterns:
|
||||
- smarttag.js
|
||||
ignorePatterns:
|
||||
- smarttag.js
|
||||
|
|
|
@ -73,9 +73,8 @@ export function createTracker(siteId?: string, doNotTrack = false) {
|
|||
}
|
||||
constructor(options: { language: 'fr' | 'en' }) {
|
||||
super({ site })
|
||||
this.site[
|
||||
INDICATOR.SITE.LANGAGE
|
||||
] = `[${options.language}]` as CustomSiteIndicator[1]
|
||||
this.site[INDICATOR.SITE.LANGAGE] =
|
||||
`[${options.language}]` as CustomSiteIndicator[1]
|
||||
if (process.env.NODE_ENV === 'production' && doNotTrack) {
|
||||
this.privacy.setVisitorOptout()
|
||||
} else {
|
||||
|
|
|
@ -82,7 +82,8 @@
|
|||
: null
|
||||
}
|
||||
var c = this,
|
||||
b = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g,
|
||||
b =
|
||||
/(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g,
|
||||
d = RegExp(
|
||||
'^[\\x20\\t\\r\\n\\f]+|((?:^|[^\\\\])(?:\\\\.)*)[\\x20\\t\\r\\n\\f]+$',
|
||||
'g'
|
||||
|
@ -1506,12 +1507,13 @@
|
|||
'undefined' !== typeof window &&
|
||||
'undefined' !== typeof window.location
|
||||
) {
|
||||
h = (c.getConfig('urlPropertyQueryString')
|
||||
? window.location.href
|
||||
: window.location.protocol +
|
||||
'//' +
|
||||
window.location.host +
|
||||
window.location.pathname
|
||||
h = (
|
||||
c.getConfig('urlPropertyQueryString')
|
||||
? window.location.href
|
||||
: window.location.protocol +
|
||||
'//' +
|
||||
window.location.host +
|
||||
window.location.pathname
|
||||
)
|
||||
.replace(/[<>]/g, '')
|
||||
.substring(0, 1600)
|
||||
|
@ -1521,9 +1523,10 @@
|
|||
c.setContext('page', l)
|
||||
c.setParam('page_url', h, {
|
||||
permanent: !0,
|
||||
hitType: 'page click publisher selfPromotion onSiteAdsClick onSiteAdsImpression InternalSearch mvtesting richmedia'.split(
|
||||
' '
|
||||
),
|
||||
hitType:
|
||||
'page click publisher selfPromotion onSiteAdsClick onSiteAdsImpression InternalSearch mvtesting richmedia'.split(
|
||||
' '
|
||||
),
|
||||
})
|
||||
}
|
||||
c.plugins.init()
|
||||
|
@ -1641,8 +1644,13 @@
|
|||
},
|
||||
c = { search: 's', content: 'c' }
|
||||
this.atMedium = 'sl'
|
||||
this.atTerm = this.atNetwork = this.atVariant = this.atCreation = this.atPlatform = this.atCampaign =
|
||||
''
|
||||
this.atTerm =
|
||||
this.atNetwork =
|
||||
this.atVariant =
|
||||
this.atCreation =
|
||||
this.atPlatform =
|
||||
this.atCampaign =
|
||||
''
|
||||
this.format = function () {
|
||||
var a = 'sec',
|
||||
h = b(this.atCampaign),
|
||||
|
@ -1693,8 +1701,15 @@
|
|||
this.Email = function () {
|
||||
var e = { acquisition: 'erec', retention: 'epr', promotion: 'es' }
|
||||
this.atMedium = 'email'
|
||||
this.atSendTime = this.atRecipientList = this.atRecipientId = this.atLink = this.atSendDate = this.atCreation = this.atCampaign = this.atEmailtype =
|
||||
''
|
||||
this.atSendTime =
|
||||
this.atRecipientList =
|
||||
this.atRecipientId =
|
||||
this.atLink =
|
||||
this.atSendDate =
|
||||
this.atCreation =
|
||||
this.atCampaign =
|
||||
this.atEmailtype =
|
||||
''
|
||||
this.format = function () {
|
||||
var a = e[this.atEmailtype] || e.promotion,
|
||||
c = b(this.atCampaign),
|
||||
|
@ -1762,8 +1777,13 @@
|
|||
}
|
||||
this.Affiliate = function () {
|
||||
this.atMedium = 'affiliate'
|
||||
this.atVariant = this.atCreation = this.atFormat = this.atIdentifier = this.atType = this.atCampaign =
|
||||
''
|
||||
this.atVariant =
|
||||
this.atCreation =
|
||||
this.atFormat =
|
||||
this.atIdentifier =
|
||||
this.atType =
|
||||
this.atCampaign =
|
||||
''
|
||||
this.format = function () {
|
||||
var a = 'al',
|
||||
f = b(this.atCampaign),
|
||||
|
@ -1813,8 +1833,14 @@
|
|||
}
|
||||
this.Display = function () {
|
||||
this.atMedium = 'display'
|
||||
this.atDetailPlacement = this.atGeneralPlacement = this.atChannel = this.atFormat = this.atVariant = this.atCreation = this.atCampaign =
|
||||
''
|
||||
this.atDetailPlacement =
|
||||
this.atGeneralPlacement =
|
||||
this.atChannel =
|
||||
this.atFormat =
|
||||
this.atVariant =
|
||||
this.atCreation =
|
||||
this.atCampaign =
|
||||
''
|
||||
this.format = function () {
|
||||
var a = 'ad',
|
||||
f = b(this.atCampaign),
|
||||
|
@ -1885,8 +1911,13 @@
|
|||
}
|
||||
}
|
||||
this.Custom = function () {
|
||||
this.atCustom4 = this.atCustom3 = this.atCustom2 = this.atCustom1 = this.atCampaign = this.atMedium =
|
||||
''
|
||||
this.atCustom4 =
|
||||
this.atCustom3 =
|
||||
this.atCustom2 =
|
||||
this.atCustom1 =
|
||||
this.atCampaign =
|
||||
this.atMedium =
|
||||
''
|
||||
this.format = function () {
|
||||
var a = ''
|
||||
;/\d+$/.test(this.atMedium) && (a = /\d+$/.exec(this.atMedium)[0])
|
||||
|
|
|
@ -66,11 +66,8 @@ export default function CurrencyInput({
|
|||
onChangeDebounced?.(event)
|
||||
}
|
||||
|
||||
const {
|
||||
isCurrencyPrefixed,
|
||||
thousandSeparator,
|
||||
decimalSeparator,
|
||||
} = currencyFormat(language)
|
||||
const { isCurrencyPrefixed, thousandSeparator, decimalSeparator } =
|
||||
currencyFormat(language)
|
||||
// Autogrow the input
|
||||
const valueLength = currentValue.toString().length
|
||||
const width = `${5 + (valueLength - 5) * 0.75}em`
|
||||
|
|
|
@ -13,17 +13,19 @@ import RuleLink from './RuleLink'
|
|||
export default function Distribution() {
|
||||
const targetUnit = useSelector(targetUnitSelector)
|
||||
const engine = useContext(EngineContext)
|
||||
const distribution = (getCotisationsBySection(
|
||||
useEngine().getParsedRules()
|
||||
).map(([section, cotisations]) => [
|
||||
section,
|
||||
cotisations
|
||||
.map((c) => engine.evaluate({ valeur: c, unité: targetUnit }))
|
||||
.reduce(
|
||||
(acc, evaluation) => acc + ((evaluation?.nodeValue as number) || 0),
|
||||
0
|
||||
),
|
||||
]) as Array<[DottedName, number]>)
|
||||
const distribution = (
|
||||
getCotisationsBySection(useEngine().getParsedRules()).map(
|
||||
([section, cotisations]) => [
|
||||
section,
|
||||
cotisations
|
||||
.map((c) => engine.evaluate({ valeur: c, unité: targetUnit }))
|
||||
.reduce(
|
||||
(acc, evaluation) => acc + ((evaluation?.nodeValue as number) || 0),
|
||||
0
|
||||
),
|
||||
]
|
||||
) as Array<[DottedName, number]>
|
||||
)
|
||||
.filter(([, value]) => value > 0)
|
||||
.sort(([, a], [, b]) => b - a)
|
||||
|
||||
|
|
|
@ -6,10 +6,8 @@ import { Etablissement, searchDenominationOrSiren } from '../api/sirene'
|
|||
import { debounce } from '../utils'
|
||||
|
||||
export default function Search() {
|
||||
const [
|
||||
searchResults,
|
||||
setSearchResults,
|
||||
] = useState<Array<Etablissement> | null>()
|
||||
const [searchResults, setSearchResults] =
|
||||
useState<Array<Etablissement> | null>()
|
||||
const [isLoading, setLoadingState] = useState(false)
|
||||
|
||||
const handleSearch = useCallback(
|
||||
|
@ -21,9 +19,10 @@ export default function Search() {
|
|||
},
|
||||
[setSearchResults, setLoadingState]
|
||||
)
|
||||
const debouncedHandleSearch = useMemo(() => debounce(300, handleSearch), [
|
||||
handleSearch,
|
||||
])
|
||||
const debouncedHandleSearch = useMemo(
|
||||
() => debounce(300, handleSearch),
|
||||
[handleSearch]
|
||||
)
|
||||
const setEntreprise = useSetEntreprise()
|
||||
|
||||
return (
|
||||
|
|
|
@ -52,10 +52,12 @@ export function getCotisationsBySection(
|
|||
)
|
||||
}
|
||||
|
||||
const cotisations = ([
|
||||
...findCotisations('contrat salarié . cotisations . patronales'),
|
||||
...findCotisations('contrat salarié . cotisations . salariales'),
|
||||
] as Array<ASTNode & { dottedName: DottedName } & { nodeKind: 'reference' }>)
|
||||
const cotisations = (
|
||||
[
|
||||
...findCotisations('contrat salarié . cotisations . patronales'),
|
||||
...findCotisations('contrat salarié . cotisations . salariales'),
|
||||
] as Array<ASTNode & { dottedName: DottedName } & { nodeKind: 'reference' }>
|
||||
)
|
||||
.map((cotisation) => cotisation.dottedName)
|
||||
.filter(Boolean)
|
||||
.map(
|
||||
|
|
|
@ -39,9 +39,10 @@ export default function SchemeComparaison({
|
|||
const [conversationStarted, setConversationStarted] = useState(
|
||||
!!Object.keys(useSelector(situationSelector)).length
|
||||
)
|
||||
const startConversation = useCallback(() => setConversationStarted(true), [
|
||||
setConversationStarted,
|
||||
])
|
||||
const startConversation = useCallback(
|
||||
() => setConversationStarted(true),
|
||||
[setConversationStarted]
|
||||
)
|
||||
|
||||
const situation = useSelector(situationSelector)
|
||||
const displayResult =
|
||||
|
|
|
@ -41,13 +41,15 @@ export default function TargetSelection({ showPeriodSwitch = true }) {
|
|||
)
|
||||
return (
|
||||
<div id="targetSelection">
|
||||
{((typeof objectifs[0] === 'string'
|
||||
? [{ objectifs }]
|
||||
: objectifs) as Array<{
|
||||
icône?: string
|
||||
nom?: string
|
||||
objectifs: Array<DottedName>
|
||||
}>).map(({ icône, objectifs: targets, nom }, index: number) => (
|
||||
{(
|
||||
(typeof objectifs[0] === 'string'
|
||||
? [{ objectifs }]
|
||||
: objectifs) as Array<{
|
||||
icône?: string
|
||||
nom?: string
|
||||
objectifs: Array<DottedName>
|
||||
}>
|
||||
).map(({ icône, objectifs: targets, nom }, index: number) => (
|
||||
<Fragment key={nom || '0'}>
|
||||
<div style={{ display: 'flex', alignItems: 'end' }}>
|
||||
<div style={{ flex: 1 }}>
|
||||
|
|
|
@ -17,11 +17,9 @@ type AnswerListProps = {
|
|||
export default function AnswerList({ onClose }: AnswerListProps) {
|
||||
const dispatch = useDispatch()
|
||||
const engine = useEngine()
|
||||
const answeredQuestions = (Object.keys(
|
||||
useSelector(situationSelector)
|
||||
) as Array<DottedName>).map((dottedName) =>
|
||||
engine.evaluate(engine.getRule(dottedName))
|
||||
)
|
||||
const answeredQuestions = (
|
||||
Object.keys(useSelector(situationSelector)) as Array<DottedName>
|
||||
).map((dottedName) => engine.evaluate(engine.getRule(dottedName)))
|
||||
|
||||
const nextSteps = useNextQuestions().map((dottedName) =>
|
||||
engine.evaluate(engine.getRule(dottedName))
|
||||
|
|
|
@ -175,7 +175,7 @@ export default function Question({
|
|||
}
|
||||
|
||||
const choiceElements = Array.isArray(choices)
|
||||
? renderBinaryQuestion((choices as unknown) as typeof binaryQuestion)
|
||||
? renderBinaryQuestion(choices as unknown as typeof binaryQuestion)
|
||||
: renderChildren(choices as Choice)
|
||||
|
||||
return (
|
||||
|
|
|
@ -225,9 +225,11 @@ export const buildVariantTree = <Name extends string>(
|
|||
variant
|
||||
? {
|
||||
canGiveUp,
|
||||
children: (variant.explanation as (ASTNode & {
|
||||
nodeKind: 'reference'
|
||||
})[]).map(({ dottedName }) =>
|
||||
children: (
|
||||
variant.explanation as (ASTNode & {
|
||||
nodeKind: 'reference'
|
||||
})[]
|
||||
).map(({ dottedName }) =>
|
||||
buildVariantTree(engine, dottedName as Name)
|
||||
),
|
||||
}
|
||||
|
|
|
@ -95,9 +95,10 @@ export default function Select({ onChange, value, id, missing }: InputProps) {
|
|||
},
|
||||
[setSearchResults, setLoadingState]
|
||||
)
|
||||
const debouncedHandleSearch = useMemo(() => debounce(300, handleSearch), [
|
||||
handleSearch,
|
||||
])
|
||||
const debouncedHandleSearch = useMemo(
|
||||
() => debounce(300, handleSearch),
|
||||
[handleSearch]
|
||||
)
|
||||
|
||||
const handleSubmit = useCallback(
|
||||
async (commune: Commune) => {
|
||||
|
|
|
@ -133,17 +133,17 @@ const CotisationsSection: Partial<Record<DottedName, Array<string>>> = {
|
|||
function Distribution() {
|
||||
const targetUnit = useSelector(targetUnitSelector)
|
||||
const engine = useEngine()
|
||||
const distribution = (Object.entries(
|
||||
CotisationsSection
|
||||
).map(([section, cotisations]) => [
|
||||
section,
|
||||
(cotisations as string[])
|
||||
.map((c) => engine.evaluate({ valeur: c, unité: targetUnit }))
|
||||
.reduce(
|
||||
(acc, evaluation) => acc + ((evaluation?.nodeValue as number) || 0),
|
||||
0
|
||||
),
|
||||
]) as Array<[DottedName, number]>)
|
||||
const distribution = (
|
||||
Object.entries(CotisationsSection).map(([section, cotisations]) => [
|
||||
section,
|
||||
(cotisations as string[])
|
||||
.map((c) => engine.evaluate({ valeur: c, unité: targetUnit }))
|
||||
.reduce(
|
||||
(acc, evaluation) => acc + ((evaluation?.nodeValue as number) || 0),
|
||||
0
|
||||
),
|
||||
]) as Array<[DottedName, number]>
|
||||
)
|
||||
.filter(([, value]) => value > 0)
|
||||
.sort(([, a], [, b]) => b - a)
|
||||
|
||||
|
|
|
@ -92,7 +92,8 @@ function CaisseRetraite() {
|
|||
return (
|
||||
<>
|
||||
{caisses.map((caisse) => {
|
||||
const dottedName = `dirigeant . indépendant . PL . ${caisse}` as DottedName
|
||||
const dottedName =
|
||||
`dirigeant . indépendant . PL . ${caisse}` as DottedName
|
||||
const { description, références } = engine.getRule(dottedName).rawNode
|
||||
return (
|
||||
<Condition expression={dottedName} key={caisse}>
|
||||
|
|
|
@ -3,34 +3,24 @@ import { useContext } from 'react'
|
|||
|
||||
export const icons = {
|
||||
facebook: {
|
||||
icon:
|
||||
'M34.1,47V33.3h4.6l0.7-5.3h-5.3v-3.4c0-1.5,0.4-2.6,2.6-2.6l2.8,0v-4.8c-0.5-0.1-2.2-0.2-4.1-0.2 c-4.1,0-6.9,2.5-6.9,7V28H24v5.3h4.6V47H34.1z',
|
||||
mask:
|
||||
'M0,0v64h64V0H0z M39.6,22l-2.8,0c-2.2,0-2.6,1.1-2.6,2.6V28h5.3l-0.7,5.3h-4.6V47h-5.5V33.3H24V28h4.6V24 c0-4.6,2.8-7,6.9-7c2,0,3.6,0.1,4.1,0.2V22z',
|
||||
icon: 'M34.1,47V33.3h4.6l0.7-5.3h-5.3v-3.4c0-1.5,0.4-2.6,2.6-2.6l2.8,0v-4.8c-0.5-0.1-2.2-0.2-4.1-0.2 c-4.1,0-6.9,2.5-6.9,7V28H24v5.3h4.6V47H34.1z',
|
||||
mask: 'M0,0v64h64V0H0z M39.6,22l-2.8,0c-2.2,0-2.6,1.1-2.6,2.6V28h5.3l-0.7,5.3h-4.6V47h-5.5V33.3H24V28h4.6V24 c0-4.6,2.8-7,6.9-7c2,0,3.6,0.1,4.1,0.2V22z',
|
||||
},
|
||||
twitter: {
|
||||
icon:
|
||||
'M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z',
|
||||
mask:
|
||||
'M0,0v64h64V0H0z M44.7,25.5c0,0.3,0,0.6,0,0.8C44.7,35,38.1,45,26.1,45c-3.7,0-7.2-1.1-10.1-2.9 c0.5,0.1,1,0.1,1.6,0.1c3.1,0,5.9-1,8.2-2.8c-2.9-0.1-5.3-2-6.1-4.6c0.4,0.1,0.8,0.1,1.2,0.1c0.6,0,1.2-0.1,1.7-0.2 c-3-0.6-5.3-3.3-5.3-6.4c0,0,0-0.1,0-0.1c0.9,0.5,1.9,0.8,3,0.8c-1.8-1.2-2.9-3.2-2.9-5.5c0-1.2,0.3-2.3,0.9-3.3 c3.2,4,8.1,6.6,13.5,6.9c-0.1-0.5-0.2-1-0.2-1.5c0-3.6,2.9-6.6,6.6-6.6c1.9,0,3.6,0.8,4.8,2.1c1.5-0.3,2.9-0.8,4.2-1.6 c-0.5,1.5-1.5,2.8-2.9,3.6c1.3-0.2,2.6-0.5,3.8-1C47.1,23.4,46,24.5,44.7,25.5z',
|
||||
icon: 'M48,22.1c-1.2,0.5-2.4,0.9-3.8,1c1.4-0.8,2.4-2.1,2.9-3.6c-1.3,0.8-2.7,1.3-4.2,1.6 C41.7,19.8,40,19,38.2,19c-3.6,0-6.6,2.9-6.6,6.6c0,0.5,0.1,1,0.2,1.5c-5.5-0.3-10.3-2.9-13.5-6.9c-0.6,1-0.9,2.1-0.9,3.3 c0,2.3,1.2,4.3,2.9,5.5c-1.1,0-2.1-0.3-3-0.8c0,0,0,0.1,0,0.1c0,3.2,2.3,5.8,5.3,6.4c-0.6,0.1-1.1,0.2-1.7,0.2c-0.4,0-0.8,0-1.2-0.1 c0.8,2.6,3.3,4.5,6.1,4.6c-2.2,1.8-5.1,2.8-8.2,2.8c-0.5,0-1.1,0-1.6-0.1c2.9,1.9,6.4,2.9,10.1,2.9c12.1,0,18.7-10,18.7-18.7 c0-0.3,0-0.6,0-0.8C46,24.5,47.1,23.4,48,22.1z',
|
||||
mask: 'M0,0v64h64V0H0z M44.7,25.5c0,0.3,0,0.6,0,0.8C44.7,35,38.1,45,26.1,45c-3.7,0-7.2-1.1-10.1-2.9 c0.5,0.1,1,0.1,1.6,0.1c3.1,0,5.9-1,8.2-2.8c-2.9-0.1-5.3-2-6.1-4.6c0.4,0.1,0.8,0.1,1.2,0.1c0.6,0,1.2-0.1,1.7-0.2 c-3-0.6-5.3-3.3-5.3-6.4c0,0,0-0.1,0-0.1c0.9,0.5,1.9,0.8,3,0.8c-1.8-1.2-2.9-3.2-2.9-5.5c0-1.2,0.3-2.3,0.9-3.3 c3.2,4,8.1,6.6,13.5,6.9c-0.1-0.5-0.2-1-0.2-1.5c0-3.6,2.9-6.6,6.6-6.6c1.9,0,3.6,0.8,4.8,2.1c1.5-0.3,2.9-0.8,4.2-1.6 c-0.5,1.5-1.5,2.8-2.9,3.6c1.3-0.2,2.6-0.5,3.8-1C47.1,23.4,46,24.5,44.7,25.5z',
|
||||
},
|
||||
linkedin: {
|
||||
icon:
|
||||
'M20.4,44h5.4V26.6h-5.4V44z M23.1,18c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1 c1.7,0,3.1-1.4,3.1-3.1C26.2,19.4,24.8,18,23.1,18z M39.5,26.2c-2.6,0-4.4,1.4-5.1,2.8h-0.1v-2.4h-5.2V44h5.4v-8.6 c0-2.3,0.4-4.5,3.2-4.5c2.8,0,2.8,2.6,2.8,4.6V44H46v-9.5C46,29.8,45,26.2,39.5,26.2z',
|
||||
mask:
|
||||
'M0,0v64h64V0H0z M25.8,44h-5.4V26.6h5.4V44z M23.1,24.3c-1.7,0-3.1-1.4-3.1-3.1c0-1.7,1.4-3.1,3.1-3.1 c1.7,0,3.1,1.4,3.1,3.1C26.2,22.9,24.8,24.3,23.1,24.3z M46,44h-5.4v-8.4c0-2,0-4.6-2.8-4.6c-2.8,0-3.2,2.2-3.2,4.5V44h-5.4V26.6 h5.2V29h0.1c0.7-1.4,2.5-2.8,5.1-2.8c5.5,0,6.5,3.6,6.5,8.3V44z',
|
||||
icon: 'M20.4,44h5.4V26.6h-5.4V44z M23.1,18c-1.7,0-3.1,1.4-3.1,3.1c0,1.7,1.4,3.1,3.1,3.1 c1.7,0,3.1-1.4,3.1-3.1C26.2,19.4,24.8,18,23.1,18z M39.5,26.2c-2.6,0-4.4,1.4-5.1,2.8h-0.1v-2.4h-5.2V44h5.4v-8.6 c0-2.3,0.4-4.5,3.2-4.5c2.8,0,2.8,2.6,2.8,4.6V44H46v-9.5C46,29.8,45,26.2,39.5,26.2z',
|
||||
mask: 'M0,0v64h64V0H0z M25.8,44h-5.4V26.6h5.4V44z M23.1,24.3c-1.7,0-3.1-1.4-3.1-3.1c0-1.7,1.4-3.1,3.1-3.1 c1.7,0,3.1,1.4,3.1,3.1C26.2,22.9,24.8,24.3,23.1,24.3z M46,44h-5.4v-8.4c0-2,0-4.6-2.8-4.6c-2.8,0-3.2,2.2-3.2,4.5V44h-5.4V26.6 h5.2V29h0.1c0.7-1.4,2.5-2.8,5.1-2.8c5.5,0,6.5,3.6,6.5,8.3V44z',
|
||||
},
|
||||
github: {
|
||||
icon:
|
||||
'M32,16c-8.8,0-16,7.2-16,16c0,7.1,4.6,13.1,10.9,15.2 c0.8,0.1,1.1-0.3,1.1-0.8c0-0.4,0-1.4,0-2.7c-4.5,1-5.4-2.1-5.4-2.1c-0.7-1.8-1.8-2.3-1.8-2.3c-1.5-1,0.1-1,0.1-1 c1.6,0.1,2.5,1.6,2.5,1.6c1.4,2.4,3.7,1.7,4.7,1.3c0.1-1,0.6-1.7,1-2.1c-3.6-0.4-7.3-1.8-7.3-7.9c0-1.7,0.6-3.2,1.6-4.3 c-0.2-0.4-0.7-2,0.2-4.2c0,0,1.3-0.4,4.4,1.6c1.3-0.4,2.6-0.5,4-0.5c1.4,0,2.7,0.2,4,0.5c3.1-2.1,4.4-1.6,4.4-1.6 c0.9,2.2,0.3,3.8,0.2,4.2c1,1.1,1.6,2.5,1.6,4.3c0,6.1-3.7,7.5-7.3,7.9c0.6,0.5,1.1,1.5,1.1,3c0,2.1,0,3.9,0,4.4 c0,0.4,0.3,0.9,1.1,0.8C43.4,45.1,48,39.1,48,32C48,23.2,40.8,16,32,16z',
|
||||
mask:
|
||||
'M0,0v64h64V0H0z M37.1,47.2c-0.8,0.2-1.1-0.3-1.1-0.8c0-0.5,0-2.3,0-4.4c0-1.5-0.5-2.5-1.1-3 c3.6-0.4,7.3-1.7,7.3-7.9c0-1.7-0.6-3.2-1.6-4.3c0.2-0.4,0.7-2-0.2-4.2c0,0-1.3-0.4-4.4,1.6c-1.3-0.4-2.6-0.5-4-0.5 c-1.4,0-2.7,0.2-4,0.5c-3.1-2.1-4.4-1.6-4.4-1.6c-0.9,2.2-0.3,3.8-0.2,4.2c-1,1.1-1.6,2.5-1.6,4.3c0,6.1,3.7,7.5,7.3,7.9 c-0.5,0.4-0.9,1.1-1,2.1c-0.9,0.4-3.2,1.1-4.7-1.3c0,0-0.8-1.5-2.5-1.6c0,0-1.6,0-0.1,1c0,0,1,0.5,1.8,2.3c0,0,0.9,3.1,5.4,2.1 c0,1.3,0,2.3,0,2.7c0,0.4-0.3,0.9-1.1,0.8C20.6,45.1,16,39.1,16,32c0-8.8,7.2-16,16-16c8.8,0,16,7.2,16,16 C48,39.1,43.4,45.1,37.1,47.2z',
|
||||
icon: 'M32,16c-8.8,0-16,7.2-16,16c0,7.1,4.6,13.1,10.9,15.2 c0.8,0.1,1.1-0.3,1.1-0.8c0-0.4,0-1.4,0-2.7c-4.5,1-5.4-2.1-5.4-2.1c-0.7-1.8-1.8-2.3-1.8-2.3c-1.5-1,0.1-1,0.1-1 c1.6,0.1,2.5,1.6,2.5,1.6c1.4,2.4,3.7,1.7,4.7,1.3c0.1-1,0.6-1.7,1-2.1c-3.6-0.4-7.3-1.8-7.3-7.9c0-1.7,0.6-3.2,1.6-4.3 c-0.2-0.4-0.7-2,0.2-4.2c0,0,1.3-0.4,4.4,1.6c1.3-0.4,2.6-0.5,4-0.5c1.4,0,2.7,0.2,4,0.5c3.1-2.1,4.4-1.6,4.4-1.6 c0.9,2.2,0.3,3.8,0.2,4.2c1,1.1,1.6,2.5,1.6,4.3c0,6.1-3.7,7.5-7.3,7.9c0.6,0.5,1.1,1.5,1.1,3c0,2.1,0,3.9,0,4.4 c0,0.4,0.3,0.9,1.1,0.8C43.4,45.1,48,39.1,48,32C48,23.2,40.8,16,32,16z',
|
||||
mask: 'M0,0v64h64V0H0z M37.1,47.2c-0.8,0.2-1.1-0.3-1.1-0.8c0-0.5,0-2.3,0-4.4c0-1.5-0.5-2.5-1.1-3 c3.6-0.4,7.3-1.7,7.3-7.9c0-1.7-0.6-3.2-1.6-4.3c0.2-0.4,0.7-2-0.2-4.2c0,0-1.3-0.4-4.4,1.6c-1.3-0.4-2.6-0.5-4-0.5 c-1.4,0-2.7,0.2-4,0.5c-3.1-2.1-4.4-1.6-4.4-1.6c-0.9,2.2-0.3,3.8-0.2,4.2c-1,1.1-1.6,2.5-1.6,4.3c0,6.1,3.7,7.5,7.3,7.9 c-0.5,0.4-0.9,1.1-1,2.1c-0.9,0.4-3.2,1.1-4.7-1.3c0,0-0.8-1.5-2.5-1.6c0,0-1.6,0-0.1,1c0,0,1,0.5,1.8,2.3c0,0,0.9,3.1,5.4,2.1 c0,1.3,0,2.3,0,2.7c0,0.4-0.3,0.9-1.1,0.8C20.6,45.1,16,39.1,16,32c0-8.8,7.2-16,16-16c8.8,0,16,7.2,16,16 C48,39.1,43.4,45.1,37.1,47.2z',
|
||||
},
|
||||
email: {
|
||||
icon:
|
||||
'M17,22v20h30V22H17z M41.1,25L32,32.1L22.9,25H41.1z M20,39V26.6l12,9.3l12-9.3V39H20z',
|
||||
mask:
|
||||
'M41.1,25H22.9l9.1,7.1L41.1,25z M44,26.6l-12,9.3l-12-9.3V39h24V26.6z M0,0v64h64V0H0z M47,42H17V22h30V42z',
|
||||
icon: 'M17,22v20h30V22H17z M41.1,25L32,32.1L22.9,25H41.1z M20,39V26.6l12,9.3l12-9.3V39H20z',
|
||||
mask: 'M41.1,25H22.9l9.1,7.1L41.1,25z M44,26.6l-12,9.3l-12-9.3V39h24V26.6z M0,0v64h64V0H0z M47,42H17V22h30V42z',
|
||||
},
|
||||
}
|
||||
|
||||
|
|
|
@ -33,19 +33,21 @@ export const fromBottom = ({
|
|||
to={{ opacity: 1, y: 0 }}
|
||||
items={children}
|
||||
>
|
||||
{(item) => ({ y, ...style }) => (
|
||||
<animated.div
|
||||
style={{
|
||||
transform: interpolate([y], (y) =>
|
||||
y !== 0 ? `translate3d(0, ${y}px,0)` : 'none'
|
||||
),
|
||||
...style,
|
||||
...inheritedStyle,
|
||||
}}
|
||||
>
|
||||
{item}
|
||||
</animated.div>
|
||||
)}
|
||||
{(item) =>
|
||||
({ y, ...style }) =>
|
||||
(
|
||||
<animated.div
|
||||
style={{
|
||||
transform: interpolate([y], (y) =>
|
||||
y !== 0 ? `translate3d(0, ${y}px,0)` : 'none'
|
||||
),
|
||||
...style,
|
||||
...inheritedStyle,
|
||||
}}
|
||||
>
|
||||
{item}
|
||||
</animated.div>
|
||||
)}
|
||||
</Trail>
|
||||
)
|
||||
export const fromTop = ({
|
||||
|
@ -63,19 +65,21 @@ export const fromTop = ({
|
|||
to={{ opacity: 1, y: 0 }}
|
||||
items={children}
|
||||
>
|
||||
{(item) => ({ y, ...style }) => (
|
||||
<animated.div
|
||||
style={{
|
||||
transform: interpolate([y], (y) =>
|
||||
y !== 0 ? `translate3d(0, ${y}px,0)` : 'none'
|
||||
),
|
||||
...style,
|
||||
...inheritedStyle,
|
||||
}}
|
||||
>
|
||||
{item}
|
||||
</animated.div>
|
||||
)}
|
||||
{(item) =>
|
||||
({ y, ...style }) =>
|
||||
(
|
||||
<animated.div
|
||||
style={{
|
||||
transform: interpolate([y], (y) =>
|
||||
y !== 0 ? `translate3d(0, ${y}px,0)` : 'none'
|
||||
),
|
||||
...style,
|
||||
...inheritedStyle,
|
||||
}}
|
||||
>
|
||||
{item}
|
||||
</animated.div>
|
||||
)}
|
||||
</Trail>
|
||||
)
|
||||
|
||||
|
|
|
@ -115,10 +115,12 @@ export const cleanSearchParams = (
|
|||
export const getRulesParamNames = (
|
||||
parsedRules: ParsedRules<DottedName>
|
||||
): [DottedName, ParamName][] =>
|
||||
(Object.entries(parsedRules) as [
|
||||
DottedName,
|
||||
{ rawNode: { 'identifiant court'?: ShortName } }
|
||||
][]).map(([dottedName, ruleNode]) => [
|
||||
(
|
||||
Object.entries(parsedRules) as [
|
||||
DottedName,
|
||||
{ rawNode: { 'identifiant court'?: ShortName } }
|
||||
][]
|
||||
).map(([dottedName, ruleNode]) => [
|
||||
dottedName,
|
||||
ruleNode.rawNode['identifiant court'] || dottedName,
|
||||
])
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -41,17 +41,15 @@ export const attributesToTranslate = [
|
|||
'identifiant court',
|
||||
]
|
||||
|
||||
const translateProp = (lang: string, translation: Translation) => (
|
||||
rule: Rule,
|
||||
prop: string
|
||||
) => {
|
||||
if (prop === 'suggestions' && rule?.suggestions) {
|
||||
return translateSuggestion(prop, rule, translation, lang)
|
||||
const translateProp =
|
||||
(lang: string, translation: Translation) => (rule: Rule, prop: string) => {
|
||||
if (prop === 'suggestions' && rule?.suggestions) {
|
||||
return translateSuggestion(prop, rule, translation, lang)
|
||||
}
|
||||
let propTrans = translation[prop + '.' + lang]
|
||||
propTrans = propTrans?.replace(/^\[automatic\] /, '')
|
||||
return propTrans ? assoc(prop, propTrans, rule) : rule
|
||||
}
|
||||
let propTrans = translation[prop + '.' + lang]
|
||||
propTrans = propTrans?.replace(/^\[automatic\] /, '')
|
||||
return propTrans ? assoc(prop, propTrans, rule) : rule
|
||||
}
|
||||
|
||||
function translateRule<Names extends string>(
|
||||
lang: string,
|
||||
|
|
|
@ -45,10 +45,12 @@ export default function ResultatsSimples() {
|
|||
Vous pouvez reporter les montants suivants dans votre déclaration,
|
||||
calculés à partir des informations saisies.
|
||||
</p>
|
||||
{([
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . cotisations obligatoires',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . total charges sociales déductible',
|
||||
] as const).map((dottedName) => {
|
||||
{(
|
||||
[
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . cotisations obligatoires',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . total charges sociales déductible',
|
||||
] as const
|
||||
).map((dottedName) => {
|
||||
const r = engine.getRule(dottedName)
|
||||
if (engine.evaluate(dottedName).nodeValue === false) {
|
||||
return null
|
||||
|
@ -114,13 +116,15 @@ export default function ResultatsSimples() {
|
|||
grid-template-columns: repeat(3, auto);
|
||||
`}
|
||||
>
|
||||
{([
|
||||
'aide déclaration revenu indépendant 2020 . réduction covid . total',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . revenu net fiscal',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . CSG déductible',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . CFP',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . assiette sociale',
|
||||
] as const).map((dottedName) => {
|
||||
{(
|
||||
[
|
||||
'aide déclaration revenu indépendant 2020 . réduction covid . total',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . revenu net fiscal',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . CSG déductible',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . CFP',
|
||||
'aide déclaration revenu indépendant 2020 . résultat simple . assiette sociale',
|
||||
] as const
|
||||
).map((dottedName) => {
|
||||
const r = engine.getRule(dottedName)
|
||||
if (engine.evaluate(dottedName).nodeValue === false) {
|
||||
return null
|
||||
|
|
|
@ -46,13 +46,15 @@ export default function ResultatsParFormulaire() {
|
|||
déclaration correcte.{' '}
|
||||
</p>
|
||||
<p>En cas de doute, référez-vous à votre expert comptable.</p>
|
||||
{([
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2035',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2033',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2050',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2042',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C',
|
||||
] as const).map((dottedName) => (
|
||||
{(
|
||||
[
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2035',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2033',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2050',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2042',
|
||||
'aide déclaration revenu indépendant 2020 . formulaire 2042 PRO C',
|
||||
] as const
|
||||
).map((dottedName) => (
|
||||
<DeclarationForm key={dottedName} dottedName={dottedName} />
|
||||
))}
|
||||
<Condition expression="aide déclaration revenu indépendant 2020 . informations résultat par formulaire">
|
||||
|
|
|
@ -6,7 +6,7 @@ objectifs:
|
|||
- aide déclaration revenu indépendant 2020 . formulaire 2050
|
||||
- aide déclaration revenu indépendant 2020 . formulaire 2042
|
||||
- aide déclaration revenu indépendant 2020 . formulaire 2035
|
||||
|
||||
|
||||
situation:
|
||||
dirigeant: "'indépendant'"
|
||||
aide déclaration revenu indépendant 2020: oui
|
||||
|
|
|
@ -32,9 +32,8 @@ import illustration from './undraw_fill_in_mie5.svg'
|
|||
*
|
||||
* Le but est de faire valider la version plus complète pour la déclaration de revenu 2021.
|
||||
*/
|
||||
const FEATURE_FLAG_RESULTATS_COMPLETS = document.location.search.includes(
|
||||
'next'
|
||||
)
|
||||
const FEATURE_FLAG_RESULTATS_COMPLETS =
|
||||
document.location.search.includes('next')
|
||||
|
||||
export default function AideDéclarationIndépendant() {
|
||||
useSimulationConfig(simulationConfig)
|
||||
|
|
|
@ -34,10 +34,12 @@ export default function FieldsPDF({ fields }: FieldsPDFProps) {
|
|||
{formatValue(engine.evaluate(dottedName)) +
|
||||
(API === 'commune'
|
||||
? ` (${
|
||||
(engine.evaluate(dottedName).nodeValue as Record<
|
||||
string,
|
||||
unknown
|
||||
>)?.codePostal as string
|
||||
(
|
||||
engine.evaluate(dottedName).nodeValue as Record<
|
||||
string,
|
||||
unknown
|
||||
>
|
||||
)?.codePostal as string
|
||||
})`
|
||||
: '')}{' '}
|
||||
</Text>
|
||||
|
|
|
@ -25,7 +25,7 @@ coordonnées assuré . date de naissance:
|
|||
type: date
|
||||
note: 1.5
|
||||
|
||||
coordonnées assuré . commune de naissance:
|
||||
coordonnées assuré . commune de naissance:
|
||||
type: groupe
|
||||
formule: oui
|
||||
note: 1.7
|
||||
|
@ -51,7 +51,7 @@ coordonnées assuré . domicile personnel . commune . étranger:
|
|||
coordonnées assuré . domicile personnel . adresse:
|
||||
type: texte
|
||||
note: 1.9.1
|
||||
coordonnées assuré . domicile personnel . commune:
|
||||
coordonnées assuré . domicile personnel . commune:
|
||||
formule: oui
|
||||
note: 1.9.2 / 1.9.3
|
||||
coordonnées assuré . domicile personnel . commune . commune:
|
||||
|
@ -64,8 +64,6 @@ coordonnées assuré . domicile personnel . commune . étranger . code postal:
|
|||
coordonnées assuré . domicile personnel . commune . étranger . pays:
|
||||
type: texte
|
||||
|
||||
|
||||
|
||||
coordonnées assuré . contact:
|
||||
type: groupe
|
||||
formule: oui
|
||||
|
@ -90,7 +88,7 @@ activité france . adresse:
|
|||
activité france . commune:
|
||||
API: commune
|
||||
note: 4.4.3 / 4.4.4
|
||||
|
||||
|
||||
activité france . organisme urssaf:
|
||||
type: texte
|
||||
titre: Organisme Urssaf
|
||||
|
@ -153,7 +151,6 @@ détachement . pays . autre:
|
|||
titre: Nom du pays
|
||||
type: texte
|
||||
|
||||
|
||||
détachement . date de début:
|
||||
type: date
|
||||
note: 2.2
|
||||
|
@ -199,7 +196,7 @@ activité transfrontalière simultanée:
|
|||
formule: oui
|
||||
titre: Demande d'activité transfrontalière simultanée
|
||||
type: groupe
|
||||
|
||||
|
||||
activité transfrontalière simultanée . salarié hors France:
|
||||
question: >
|
||||
Travaillez-vous en tant que salarié dans un autre pays ?
|
||||
|
@ -262,11 +259,11 @@ activité transfrontalière simultanée . activité salariée . lieu d'exercice
|
|||
description: Votre activité salariée peut-être exercé depuis un autre pays que celui de l'employeur par exemple en cas de télétravail.
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . lieu d'exercice . lieu de résidence:
|
||||
question: Exercerez-vous cette activité salariée dans votre pays de résidence ?
|
||||
question: Exercerez-vous cette activité salariée dans votre pays de résidence ?
|
||||
non applicable si: employeur
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . lieu d'exercice . pays:
|
||||
non applicable si:
|
||||
non applicable si:
|
||||
une de ces conditions:
|
||||
- lieu de résidence
|
||||
- employeur
|
||||
|
@ -278,7 +275,6 @@ activité transfrontalière simultanée . activité salariée . lieu d'exercice
|
|||
titre: Nom du pays
|
||||
type: texte
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . revenus:
|
||||
titre: Revenus salariés
|
||||
type: groupe
|
||||
|
@ -293,7 +289,6 @@ activité transfrontalière simultanée . activité salariée . revenus . nombre
|
|||
unité: heures/semaine
|
||||
question: Quel est le temps de travail hebdomadaire inscrit au contrat de travail ?
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . revenus . revenu:
|
||||
question: Quel revenu estimez-vous obtenir pour cette activité salariée pour les 12 prochains mois (environ) ?
|
||||
type: nombre
|
||||
|
@ -303,13 +298,10 @@ activité transfrontalière simultanée . activité salariée . revenus . activi
|
|||
question: >
|
||||
Considérez-vous que votre activité salariée représentera plus de 5% de votre activité professionnelle pour les 12 prochains mois ?
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . revenus . articulation activité indépendante:
|
||||
question: Comment votre activité salariée s'articulera-t-elle avec votre activité indépendante au cours des 12 prochains mois (périodes, revenu, etc.) ?
|
||||
type: paragraphe
|
||||
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité salariée . activité indépendante additionnelle:
|
||||
question: >
|
||||
Exercez-vous également une activité non salariée à l'étranger ?
|
||||
|
@ -337,7 +329,6 @@ activité transfrontalière simultanée . activité non salariée . nombre:
|
|||
plancher: 1
|
||||
plafond: 3
|
||||
|
||||
|
||||
activité transfrontalière simultanée . activité non salariée . n°1:
|
||||
titre: activité non salarié n°1
|
||||
type: groupe
|
||||
|
|
|
@ -290,9 +290,8 @@ type CompanySectionProps = {
|
|||
export const CompanySection = ({ company }: CompanySectionProps) => {
|
||||
const [searchModal, showSearchModal] = useState(false)
|
||||
const [autoEntrepreneurModal, showAutoEntrepreneurModal] = useState(false)
|
||||
const [DirigeantMajoritaireModal, showDirigeantMajoritaireModal] = useState(
|
||||
false
|
||||
)
|
||||
const [DirigeantMajoritaireModal, showDirigeantMajoritaireModal] =
|
||||
useState(false)
|
||||
|
||||
const companyRef = useRef<Company | null>(null)
|
||||
useEffect(() => {
|
||||
|
|
|
@ -196,32 +196,27 @@ export function SimulatorRessourceCard({
|
|||
|
||||
const guidesUrssaf = [
|
||||
{
|
||||
url:
|
||||
'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_Medecins.pdf',
|
||||
url: 'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_Medecins.pdf',
|
||||
associatedRule: "dirigeant . indépendant . PL . métier = 'santé . médecin'",
|
||||
title: 'Guide Urssaf pour les médecins libéraux',
|
||||
},
|
||||
{
|
||||
url:
|
||||
'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_PL_statuts_hors_AE_et_PAM.pdf',
|
||||
url: 'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_PL_statuts_hors_AE_et_PAM.pdf',
|
||||
associatedRule: 'entreprise . activité . libérale réglementée',
|
||||
title: 'Guide Urssaf pour les professions libérales réglementées',
|
||||
},
|
||||
{
|
||||
url:
|
||||
'https://www.autoentrepreneur.urssaf.fr/portail/files/Guides/Metropole/Presentation_AE.pdf',
|
||||
url: 'https://www.autoentrepreneur.urssaf.fr/portail/files/Guides/Metropole/Presentation_AE.pdf',
|
||||
associatedRule: 'dirigeant . auto-entrepreneur',
|
||||
title: 'Guide Urssaf pour les auto-entrepreneurs',
|
||||
},
|
||||
{
|
||||
url:
|
||||
'http://www.secu-artistes-auteurs.fr/sites/default/files/pdf/Guide%20pratique%20de%20d%C3%A9but%20d%27activit%C3%A9.pdf',
|
||||
url: 'http://www.secu-artistes-auteurs.fr/sites/default/files/pdf/Guide%20pratique%20de%20d%C3%A9but%20d%27activit%C3%A9.pdf',
|
||||
associatedRule: "dirigeant = 'artiste-auteur'",
|
||||
title: 'Guide Urssaf pour les artistes-auteurs',
|
||||
},
|
||||
{
|
||||
url:
|
||||
'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_TI_statuts_hors_AE.pdf',
|
||||
url: 'https://www.urssaf.fr/portail/files/live/sites/urssaf/files/documents/Diaporama_TI_statuts_hors_AE.pdf',
|
||||
associatedRule: 'dirigeant',
|
||||
title: 'Guide Urssaf pour les indépendants',
|
||||
},
|
||||
|
|
|
@ -4,7 +4,6 @@ objectifs:
|
|||
objectifs cachés:
|
||||
- contrat salarié . rémunération . net
|
||||
- contrat salarié . prix du travail
|
||||
|
||||
|
||||
questions:
|
||||
liste:
|
||||
|
|
|
@ -1,18 +1,17 @@
|
|||
objectifs:
|
||||
- dirigeant . rémunération . totale
|
||||
- dirigeant . rémunération . totale
|
||||
- contrat salarié . cotisations
|
||||
- contrat salarié . rémunération . net
|
||||
- impôt
|
||||
- contrat salarié . rémunération . net après impôt
|
||||
|
||||
|
||||
questions:
|
||||
à l'affiche:
|
||||
ACRE: entreprise . ACRE
|
||||
Commune: établissement . localisation
|
||||
Avantages en nature: contrat salarié . rémunération . avantages en nature
|
||||
Impôt sur le revenu: impôt . méthode de calcul
|
||||
|
||||
|
||||
liste noire:
|
||||
- entreprise . charges
|
||||
- entreprise . imposition
|
||||
|
|
|
@ -3,7 +3,7 @@ objectifs:
|
|||
- dirigeant . rémunération . totale
|
||||
- dirigeant . rémunération . nette
|
||||
- dirigeant . rémunération . nette après impôt
|
||||
|
||||
|
||||
questions:
|
||||
à l'affiche:
|
||||
Type d'activité: entreprise . activité
|
||||
|
|
|
@ -41,9 +41,9 @@ export default function VotreSituation() {
|
|||
}
|
||||
|
||||
const déclarations = déclarationsSelector(state)
|
||||
const régimeGénéralDisponible = activitésEffectuéesSelector(
|
||||
state
|
||||
).some((activité) => régimeGénéralDisponibleSelector(state, activité))
|
||||
const régimeGénéralDisponible = activitésEffectuéesSelector(state).some(
|
||||
(activité) => régimeGénéralDisponibleSelector(state, activité)
|
||||
)
|
||||
|
||||
return (
|
||||
<Animate.fromBottom>
|
||||
|
|
|
@ -6,8 +6,8 @@ Location meublée:
|
|||
- Abritel
|
||||
- Guest room
|
||||
- classified tourism
|
||||
|
||||
Location meublée standard:
|
||||
|
||||
Location meublée standard:
|
||||
titre: Standard furnished rental
|
||||
explication: You have rented furnished accommodation for short periods of time to a visiting clientele who do not elect domicile there (excluding guest rooms or furnished tourist accommodation)
|
||||
exonérations:
|
||||
|
@ -21,7 +21,7 @@ Location meublée de tourisme classé:
|
|||
titre: Furnished rental of classified tourism
|
||||
explication: The property must have previously been declared to the municipality where it is located. At the end of this procedure, a declaration number (13 characters) is issued. Any change is subject to a new declaration.
|
||||
|
||||
Location de chambre d'hôtes:
|
||||
Location de chambre d'hôtes:
|
||||
titre: Rental of guest rooms
|
||||
explication: You are a B&B rental company and meet the requirements of the Tourism Code
|
||||
|
||||
|
@ -52,7 +52,7 @@ Vente de biens occasionnelle:
|
|||
exonérée sauf si:
|
||||
- titre: You sell precious metals (gold, silver, ingots)
|
||||
explication: For the transfer of precious metals, you are subject to the flat-rate tax on precious metals, which you must pay within one month of the transfer.
|
||||
|
||||
|
||||
Vente de biens professionnelle:
|
||||
titre: Sale of professional goods
|
||||
explication: |
|
||||
|
@ -74,5 +74,3 @@ Co-consommation:
|
|||
- titre: You exceed the limit of the kilometric scale (for carpooling)
|
||||
explication: |
|
||||
When it comes to carpooling, there is a third condition: the full fare must not exceed the current kilometric rate and must be divided by the number of people transported, including the car owner.
|
||||
|
||||
|
||||
|
|
|
@ -24,7 +24,7 @@
|
|||
> Vous louez à Paris, dans votre résidence principale, une chambre de 18 m² à un étudiant. Pour être exonéré d'impôt, le loyer mensuel hors charges ne doit pas dépasser en 2019 (187 x 18) / 12 = 280 €.
|
||||
- titre: Location meublée de longue durée
|
||||
icônes: 🏠 📆
|
||||
explication: Vous avez loué un logement meublé de longue durée
|
||||
explication: Vous avez loué un logement meublé de longue durée
|
||||
plateformes:
|
||||
- Leboncoin
|
||||
- pap.fr
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
import { hasConditions } from './activitésData'
|
||||
|
||||
const filterActivités = (filter = () => true) => (state) =>
|
||||
Object.entries(state)
|
||||
.filter(
|
||||
([activitéTitle, activitéData]) =>
|
||||
activitéData.effectuée && filter(activitéData, activitéTitle)
|
||||
)
|
||||
.map(([activité]) => activité)
|
||||
const filterActivités =
|
||||
(filter = () => true) =>
|
||||
(state) =>
|
||||
Object.entries(state)
|
||||
.filter(
|
||||
([activitéTitle, activitéData]) =>
|
||||
activitéData.effectuée && filter(activitéData, activitéTitle)
|
||||
)
|
||||
.map(([activité]) => activité)
|
||||
|
||||
export const nextActivitéSelector = (state, currentActivité) =>
|
||||
filterActivités(
|
||||
|
|
|
@ -22,7 +22,7 @@ import { formatDay, formatMonth, Indicators, Indicator } from './utils'
|
|||
import SatisfactionChart from './SatisfactionChart'
|
||||
import { StatsStruct, PageChapter2, Page, PageSatisfaction } from './types'
|
||||
|
||||
const stats = (statsJson as unknown) as StatsStruct
|
||||
const stats = statsJson as unknown as StatsStruct
|
||||
|
||||
type Period = 'mois' | 'jours'
|
||||
type Chapter2 = PageChapter2 | 'PAM'
|
||||
|
|
|
@ -103,9 +103,9 @@ function simulation(
|
|||
unfoldedStep: null,
|
||||
}
|
||||
case 'BATCH_UPDATE_SITUATION': {
|
||||
return (Object.entries(action.situation as any) as Array<
|
||||
[Names, unknown]
|
||||
>).reduce<Simulation | null>(
|
||||
return (
|
||||
Object.entries(action.situation as any) as Array<[Names, unknown]>
|
||||
).reduce<Simulation | null>(
|
||||
(newState, [fieldName, value]) =>
|
||||
simulation(newState, {
|
||||
type: 'UPDATE_SITUATION',
|
||||
|
|
|
@ -97,21 +97,21 @@ const QUESTION_LIST: Array<Question> = keys(
|
|||
mergeAll(flatten(Object.values(LEGAL_STATUS_DETAILS)))
|
||||
)
|
||||
|
||||
const isCompatibleStatusWith = (answers: any) => (
|
||||
statusRequirements: LegalStatusRequirements
|
||||
): boolean => {
|
||||
const stringify = map((x) => (!isNil(x) ? JSON.stringify(x) : x))
|
||||
const answerCompatibility = Object.values(
|
||||
mergeWith(
|
||||
(answer, statusValue) =>
|
||||
isNil(answer) || isNil(statusValue) || answer === statusValue,
|
||||
stringify(statusRequirements as any),
|
||||
stringify(answers)
|
||||
const isCompatibleStatusWith =
|
||||
(answers: any) =>
|
||||
(statusRequirements: LegalStatusRequirements): boolean => {
|
||||
const stringify = map((x) => (!isNil(x) ? JSON.stringify(x) : x))
|
||||
const answerCompatibility = Object.values(
|
||||
mergeWith(
|
||||
(answer, statusValue) =>
|
||||
isNil(answer) || isNil(statusValue) || answer === statusValue,
|
||||
stringify(statusRequirements as any),
|
||||
stringify(answers)
|
||||
)
|
||||
)
|
||||
)
|
||||
const isCompatibleStatus = answerCompatibility.every((x) => x !== false)
|
||||
return isCompatibleStatus
|
||||
}
|
||||
const isCompatibleStatus = answerCompatibility.every((x) => x !== false)
|
||||
return isCompatibleStatus
|
||||
}
|
||||
const possibleStatus = (
|
||||
answers: Array<LegalStatusRequirements> | LegalStatusRequirements
|
||||
): Record<LegalStatus, boolean> =>
|
||||
|
@ -140,24 +140,23 @@ export const nextQuestionSelector = (state: RootState): Question | null => {
|
|||
).filter(isCompatibleStatusWith(legalStatusRequirements) as any)
|
||||
|
||||
const unansweredQuestions = difference(QUESTION_LIST, questionAnswered)
|
||||
const shannonEntropyByQuestion = unansweredQuestions.map((question): [
|
||||
typeof question,
|
||||
number
|
||||
] => {
|
||||
const answerPopulation = Object.values(possibleStatusList).map(
|
||||
(status: any) => status[question]
|
||||
)
|
||||
const frequencyOfAnswers = Object.values(
|
||||
countBy(
|
||||
(x) => x,
|
||||
answerPopulation.filter((x) => x !== undefined)
|
||||
const shannonEntropyByQuestion = unansweredQuestions.map(
|
||||
(question): [typeof question, number] => {
|
||||
const answerPopulation = Object.values(possibleStatusList).map(
|
||||
(status: any) => status[question]
|
||||
)
|
||||
).map((numOccurrence) => numOccurrence / answerPopulation.length)
|
||||
const shannonEntropy = -frequencyOfAnswers
|
||||
.map((p) => p * Math.log2(p))
|
||||
.reduce(add, 0)
|
||||
return [question, shannonEntropy]
|
||||
})
|
||||
const frequencyOfAnswers = Object.values(
|
||||
countBy(
|
||||
(x) => x,
|
||||
answerPopulation.filter((x) => x !== undefined)
|
||||
)
|
||||
).map((numOccurrence) => numOccurrence / answerPopulation.length)
|
||||
const shannonEntropy = -frequencyOfAnswers
|
||||
.map((p) => p * Math.log2(p))
|
||||
.reduce(add, 0)
|
||||
return [question, shannonEntropy]
|
||||
}
|
||||
)
|
||||
|
||||
const sortedPossibleNextQuestions = sortBy(
|
||||
([, entropy]) => -entropy,
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
import * as Sentry from '@sentry/react'
|
||||
import { Integrations } from '@sentry/tracing'
|
||||
|
||||
let branch: string | undefined = process.env.GITHUB_REF?.split('/')?.slice(
|
||||
-1
|
||||
)?.[0]
|
||||
let branch: string | undefined =
|
||||
process.env.GITHUB_REF?.split('/')?.slice(-1)?.[0]
|
||||
|
||||
if (branch === 'merge') {
|
||||
branch = process.env.GITHUB_HEAD_REF
|
||||
|
@ -28,8 +27,7 @@ export const productionMode = ['master', 'next'].includes(branch ?? '')
|
|||
|
||||
if (productionMode) {
|
||||
Sentry.init({
|
||||
dsn:
|
||||
'https://92bbc21937b24136a2fe1b1d922b000f@o548798.ingest.sentry.io/5745615',
|
||||
dsn: 'https://92bbc21937b24136a2fe1b1d922b000f@o548798.ingest.sentry.io/5745615',
|
||||
integrations: [new Integrations.BrowserTracing()],
|
||||
release,
|
||||
// Set tracesSampleRate to 1.0 to capture 100%
|
||||
|
|
|
@ -15,5 +15,4 @@ AGFF:
|
|||
lien: http://www.agff-info.fr/
|
||||
CNAV:
|
||||
image: cnav.png
|
||||
lien:
|
||||
https://fr.wikipedia.org/wiki/Caisse_nationale_de_l%27assurance_vieillesse_des_travailleurs_salari%C3%A9s
|
||||
lien: https://fr.wikipedia.org/wiki/Caisse_nationale_de_l%27assurance_vieillesse_des_travailleurs_salari%C3%A9s
|
||||
|
|
|
@ -1,3 +1,3 @@
|
|||
env:
|
||||
mocha: true
|
||||
jest: true
|
||||
jest: true
|
||||
|
|
|
@ -13,11 +13,8 @@ let runExamples = (examples, rule) =>
|
|||
const situation = Object.entries(ex.situation).reduce(
|
||||
(acc, [name, value]) => ({
|
||||
...acc,
|
||||
[disambiguateRuleReference(
|
||||
engine.parsedRules,
|
||||
rule.dottedName,
|
||||
name
|
||||
)]: value,
|
||||
[disambiguateRuleReference(engine.parsedRules, rule.dottedName, name)]:
|
||||
value,
|
||||
}),
|
||||
{}
|
||||
)
|
||||
|
|
|
@ -35,7 +35,6 @@ ACRE:
|
|||
entreprise . date de création: 01/06/2019
|
||||
entreprise . ACRE: oui
|
||||
|
||||
|
||||
activité mixte:
|
||||
- dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an
|
||||
entreprise . activité . mixte: oui
|
||||
|
@ -45,4 +44,3 @@ activité mixte:
|
|||
- dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an
|
||||
entreprise . activité . mixte: oui
|
||||
entreprise . activité: "'artisanale'"
|
||||
|
|
@ -49,19 +49,18 @@ conjoint collaborateur:
|
|||
dirigeant . rémunération . nette: 50000 €/an
|
||||
dirigeant . indépendant . conjoint collaborateur: oui
|
||||
- <<: *conjoint-collab
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
- <<: *conjoint-collab
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette . pourcentage: "'moitié'"
|
||||
- <<: *conjoint-collab
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
|
||||
- <<: *conjoint-collab
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu avec partage'"
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette . pourcentage: "'moitié'"
|
||||
- <<: *conjoint-collab
|
||||
dirigeant . rémunération . nette: 500000 €/an
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
|
||||
dirigeant . indépendant . conjoint collaborateur . assiette: "'revenu sans partage'"
|
||||
|
||||
cotisations facultatives:
|
||||
# Cas retraite: la cotisation Madelin est inferieure au plafond => le revenu net de
|
||||
|
@ -69,12 +68,12 @@ cotisations facultatives:
|
|||
# cotisations ne change pas:
|
||||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 3800 €/an # plafond: 10% PSS donc environ 4100
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 3800 €/an # plafond: 10% PSS donc environ 4100
|
||||
# Cas retraite: la cotisation Madelin est supérieure au plafond => le revenu net de
|
||||
# cotisations est affecté car l'assiette des cotisations est plus élevée
|
||||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 5000 €/an # plafond: 10% PSS donc environ 4100
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 5000 €/an # plafond: 10% PSS donc environ 4100
|
||||
# Cas mutuelle
|
||||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
|
@ -89,18 +88,16 @@ cotisations facultatives:
|
|||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 1500 €/an
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . retraite: 5000 €/an
|
||||
# Cas madelin + PER grand
|
||||
# Cas madelin + PER grand
|
||||
- dirigeant . rémunération . totale: 300000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . PER: 3500 €/an
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 1500 €/an
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . retraite: 5000 €/an
|
||||
|
||||
|
||||
imposition à l'IS :
|
||||
imposition à l'IS:
|
||||
- entreprise . chiffre d'affaires: 100000 €/an
|
||||
entreprise . imposition: "'IS'"
|
||||
entreprise . imposition: "'IS'"
|
||||
- entreprise . chiffre d'affaires: 100000 €/an
|
||||
entreprise . imposition: "'IS'"
|
||||
entreprise . imposition: "'IS'"
|
||||
impôt . méthode de calcul: "'barème standard'"
|
||||
|
|
@ -47,13 +47,13 @@ Contrats Madelin:
|
|||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
entreprise . charges: 10000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 3800 €/an # plafond: 10% PSS donc environ 4100
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 3800 €/an # plafond: 10% PSS donc environ 4100
|
||||
# Cas retraite: la cotisation Madelin est supérieure au plafond => le revenu net de
|
||||
# cotisations est affecté car l'assiette des cotisations est plus élevée
|
||||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
entreprise . charges: 10000 €/an
|
||||
dirigeant . indépendant . cotisations facultatives: oui
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 5000 €/an # plafond: 10% PSS donc environ 4100
|
||||
dirigeant . indépendant . cotisations facultatives . contrats madelin . prévoyance: 5000 €/an # plafond: 10% PSS donc environ 4100
|
||||
# Cas mutuelle
|
||||
- dirigeant . rémunération . totale: 30000 €/an
|
||||
entreprise . charges: 10000 €/an
|
||||
|
|
|
@ -119,7 +119,6 @@ aides:
|
|||
contrat salarié . ancienneté . date d'embauche: 01/03/2021
|
||||
contrat salarié . aides employeur . aide à l'embauche des travailleurs handicapés . situation de handicap: oui
|
||||
|
||||
|
||||
aides embauche covid:
|
||||
- contrat salarié . ancienneté . date d'embauche: 01/08/2020
|
||||
contrat salarié . jeune de moins de 26 ans: oui
|
||||
|
@ -316,7 +315,6 @@ frais pro - transports personnels seul:
|
|||
contrat salarié . déduction forfaitaire spécifique: oui
|
||||
contrat salarié . déduction forfaitaire spécifique . taux: 20%
|
||||
|
||||
|
||||
frais pro - abo transports + transports personnels:
|
||||
- contrat salarié . rémunération . brut de base: 3200 €/mois
|
||||
contrat salarié . frais professionnels . abonnement transports publics . montant: 80€/an
|
||||
|
|
|
@ -295,16 +295,14 @@ const traversePlancherNode: TraverseFunction<'plancher'> = (fn, node) => ({
|
|||
},
|
||||
})
|
||||
|
||||
const traverseRésoudreRéférenceCirculaireNode: TraverseFunction<'résoudre référence circulaire'> = (
|
||||
fn,
|
||||
node
|
||||
) => ({
|
||||
...node,
|
||||
explanation: {
|
||||
...node.explanation,
|
||||
valeur: fn(node.explanation.valeur),
|
||||
},
|
||||
})
|
||||
const traverseRésoudreRéférenceCirculaireNode: TraverseFunction<'résoudre référence circulaire'> =
|
||||
(fn, node) => ({
|
||||
...node,
|
||||
explanation: {
|
||||
...node.explanation,
|
||||
valeur: fn(node.explanation.valeur),
|
||||
},
|
||||
})
|
||||
|
||||
const traversePlafondNode: TraverseFunction<'plafond'> = (fn, node) => ({
|
||||
...node,
|
||||
|
|
|
@ -2,33 +2,35 @@ import { Evaluation, Unit } from './AST/types'
|
|||
import { simplifyNodeUnit } from './nodeUnits'
|
||||
import { formatUnit, serializeUnit } from './units'
|
||||
|
||||
export const numberFormatter = ({
|
||||
style,
|
||||
maximumFractionDigits = 2,
|
||||
minimumFractionDigits = 0,
|
||||
language,
|
||||
}: {
|
||||
style?: string
|
||||
maximumFractionDigits?: number
|
||||
minimumFractionDigits?: number
|
||||
language?: string
|
||||
}) => (value: number) => {
|
||||
// When we format currency we don't want to display a single decimal digit
|
||||
// ie 8,1€ but we want to display 8,10€
|
||||
const adaptedMinimumFractionDigits =
|
||||
style === 'currency' &&
|
||||
maximumFractionDigits >= 2 &&
|
||||
minimumFractionDigits === 0 &&
|
||||
!Number.isInteger(value)
|
||||
? 2
|
||||
: minimumFractionDigits
|
||||
return Intl.NumberFormat(language, {
|
||||
export const numberFormatter =
|
||||
({
|
||||
style,
|
||||
currency: 'EUR',
|
||||
maximumFractionDigits,
|
||||
minimumFractionDigits: adaptedMinimumFractionDigits,
|
||||
}).format(value)
|
||||
}
|
||||
maximumFractionDigits = 2,
|
||||
minimumFractionDigits = 0,
|
||||
language,
|
||||
}: {
|
||||
style?: string
|
||||
maximumFractionDigits?: number
|
||||
minimumFractionDigits?: number
|
||||
language?: string
|
||||
}) =>
|
||||
(value: number) => {
|
||||
// When we format currency we don't want to display a single decimal digit
|
||||
// ie 8,1€ but we want to display 8,10€
|
||||
const adaptedMinimumFractionDigits =
|
||||
style === 'currency' &&
|
||||
maximumFractionDigits >= 2 &&
|
||||
minimumFractionDigits === 0 &&
|
||||
!Number.isInteger(value)
|
||||
? 2
|
||||
: minimumFractionDigits
|
||||
return Intl.NumberFormat(language, {
|
||||
style,
|
||||
currency: 'EUR',
|
||||
maximumFractionDigits,
|
||||
minimumFractionDigits: adaptedMinimumFractionDigits,
|
||||
}).format(value)
|
||||
}
|
||||
|
||||
export const formatCurrency = (
|
||||
nodeValue: number | undefined,
|
||||
|
@ -168,9 +170,10 @@ export function serializeValue(
|
|||
{ nodeValue, unit }: { nodeValue: Evaluation; unit?: Unit },
|
||||
{ format }: { format: formatUnit }
|
||||
) {
|
||||
const serializedUnit = (unit && typeof nodeValue === 'number'
|
||||
? serializeUnit(unit, nodeValue, format)
|
||||
: ''
|
||||
const serializedUnit = (
|
||||
unit && typeof nodeValue === 'number'
|
||||
? serializeUnit(unit, nodeValue, format)
|
||||
: ''
|
||||
)?.replace(/\s*\/\s*/g, '/')
|
||||
return `${nodeValue} ${serializedUnit}`.trim()
|
||||
}
|
||||
|
|
|
@ -2,19 +2,23 @@
|
|||
The advantage of putting them here is to get prettier's JS formatting, since Nealrey doesn't support it https://github.com/kach/nearley/issues/310 */
|
||||
import { normalizeDateString } from './date'
|
||||
|
||||
export let binaryOperation = (operationType) => ([A, , operator, , B]) => ({
|
||||
[operator]: {
|
||||
operationType,
|
||||
explanation: [A, B],
|
||||
},
|
||||
})
|
||||
export let binaryOperation =
|
||||
(operationType) =>
|
||||
([A, , operator, , B]) => ({
|
||||
[operator]: {
|
||||
operationType,
|
||||
explanation: [A, B],
|
||||
},
|
||||
})
|
||||
|
||||
export let unaryOperation = (operationType) => ([operator, , A]) => ({
|
||||
[operator]: {
|
||||
operationType,
|
||||
explanation: [number([{ value: '0' }]), A],
|
||||
},
|
||||
})
|
||||
export let unaryOperation =
|
||||
(operationType) =>
|
||||
([operator, , A]) => ({
|
||||
[operator]: {
|
||||
operationType,
|
||||
explanation: [number([{ value: '0' }]), A],
|
||||
},
|
||||
})
|
||||
|
||||
export let variable = ([firstFragment, nextFragment], _, reject) => {
|
||||
const fragments = [firstFragment, ...nextFragment].map(({ value }) => value)
|
||||
|
|
|
@ -18,7 +18,7 @@ export type RecalculNode = {
|
|||
|
||||
const evaluateRecalcul: EvaluationFunction<'recalcul'> = function (node) {
|
||||
if (this.cache._meta.inRecalcul) {
|
||||
return (defaultNode(null) as any) as RecalculNode & EvaluatedNode
|
||||
return defaultNode(null) as any as RecalculNode & EvaluatedNode
|
||||
}
|
||||
|
||||
const amendedSituation = node.explanation.amendedSituation
|
||||
|
|
|
@ -14,83 +14,82 @@ export type RésoudreRéférenceCirculaireNode = {
|
|||
nodeKind: 'résoudre référence circulaire'
|
||||
}
|
||||
|
||||
export const evaluateRésoudreRéférenceCirculaire: EvaluationFunction<'résoudre référence circulaire'> = function (
|
||||
node
|
||||
) {
|
||||
const originalCache = this.cache
|
||||
let inversionNumberOfIterations = 0
|
||||
export const evaluateRésoudreRéférenceCirculaire: EvaluationFunction<'résoudre référence circulaire'> =
|
||||
function (node) {
|
||||
const originalCache = this.cache
|
||||
let inversionNumberOfIterations = 0
|
||||
|
||||
const evaluateWithValue = (
|
||||
n: number,
|
||||
unit: Unit = { numerators: [], denominators: [] }
|
||||
) => {
|
||||
inversionNumberOfIterations++
|
||||
this.resetCache()
|
||||
const evaluateWithValue = (
|
||||
n: number,
|
||||
unit: Unit = { numerators: [], denominators: [] }
|
||||
) => {
|
||||
inversionNumberOfIterations++
|
||||
this.resetCache()
|
||||
|
||||
this.parsedSituation[node.explanation.ruleToSolve] = {
|
||||
unit: unit,
|
||||
nodeKind: 'unité',
|
||||
explanation: {
|
||||
nodeKind: 'constant',
|
||||
nodeValue: n,
|
||||
type: 'number',
|
||||
} as ConstantNode,
|
||||
} as UnitéNode
|
||||
return this.evaluate(node.explanation.valeur)
|
||||
}
|
||||
|
||||
let nodeValue: number | null | undefined = null
|
||||
|
||||
const x0 = 0
|
||||
let valeur = evaluateWithValue(x0)
|
||||
|
||||
const y0 = valeur.nodeValue as number
|
||||
const unit = valeur.unit
|
||||
const missingVariables = valeur.missingVariables
|
||||
let i = 0
|
||||
if (y0 !== null) {
|
||||
// The `uniroot` function parameter. It will be called with its `min` and
|
||||
// `max` arguments, so we can use our cached nodes if the function is called
|
||||
// with the already computed x1 or x2.
|
||||
const test = (x: number): number => {
|
||||
if (x === x0) {
|
||||
return y0 - x0
|
||||
}
|
||||
valeur = evaluateWithValue(x, unit)
|
||||
const y = valeur.nodeValue
|
||||
i++
|
||||
return (y as number) - x
|
||||
this.parsedSituation[node.explanation.ruleToSolve] = {
|
||||
unit: unit,
|
||||
nodeKind: 'unité',
|
||||
explanation: {
|
||||
nodeKind: 'constant',
|
||||
nodeValue: n,
|
||||
type: 'number',
|
||||
} as ConstantNode,
|
||||
} as UnitéNode
|
||||
return this.evaluate(node.explanation.valeur)
|
||||
}
|
||||
|
||||
const defaultMin = -1_000_000
|
||||
const defaultMax = 100_000_000
|
||||
let nodeValue: number | null | undefined = null
|
||||
|
||||
nodeValue = uniroot(test, defaultMin, defaultMax, 0.5, 30, 2)
|
||||
}
|
||||
const x0 = 0
|
||||
let valeur = evaluateWithValue(x0)
|
||||
|
||||
this.cache = originalCache
|
||||
const y0 = valeur.nodeValue as number
|
||||
const unit = valeur.unit
|
||||
const missingVariables = valeur.missingVariables
|
||||
let i = 0
|
||||
if (y0 !== null) {
|
||||
// The `uniroot` function parameter. It will be called with its `min` and
|
||||
// `max` arguments, so we can use our cached nodes if the function is called
|
||||
// with the already computed x1 or x2.
|
||||
const test = (x: number): number => {
|
||||
if (x === x0) {
|
||||
return y0 - x0
|
||||
}
|
||||
valeur = evaluateWithValue(x, unit)
|
||||
const y = valeur.nodeValue
|
||||
i++
|
||||
return (y as number) - x
|
||||
}
|
||||
|
||||
if (nodeValue === undefined) {
|
||||
nodeValue = null
|
||||
this.cache._meta.inversionFail = true
|
||||
}
|
||||
if (nodeValue !== null) {
|
||||
valeur = evaluateWithValue(nodeValue, unit)
|
||||
}
|
||||
delete this.parsedSituation[node.explanation.ruleToSolve]
|
||||
const defaultMin = -1_000_000
|
||||
const defaultMax = 100_000_000
|
||||
|
||||
return {
|
||||
...node,
|
||||
unit,
|
||||
nodeValue,
|
||||
explanation: {
|
||||
...node.explanation,
|
||||
valeur,
|
||||
inversionNumberOfIterations,
|
||||
},
|
||||
missingVariables,
|
||||
nodeValue = uniroot(test, defaultMin, defaultMax, 0.5, 30, 2)
|
||||
}
|
||||
|
||||
this.cache = originalCache
|
||||
|
||||
if (nodeValue === undefined) {
|
||||
nodeValue = null
|
||||
this.cache._meta.inversionFail = true
|
||||
}
|
||||
if (nodeValue !== null) {
|
||||
valeur = evaluateWithValue(nodeValue, unit)
|
||||
}
|
||||
delete this.parsedSituation[node.explanation.ruleToSolve]
|
||||
|
||||
return {
|
||||
...node,
|
||||
unit,
|
||||
nodeValue,
|
||||
explanation: {
|
||||
...node.explanation,
|
||||
valeur,
|
||||
inversionNumberOfIterations,
|
||||
},
|
||||
missingVariables,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export default function parseRésoudreRéférenceCirculaire(v, context: Context) {
|
||||
return {
|
||||
|
|
|
@ -101,13 +101,12 @@ const equals = <T>(a: T, b: T) => {
|
|||
}
|
||||
}
|
||||
|
||||
export const removeOnce = <T>(
|
||||
element: T,
|
||||
eqFn: (a: T, b: T) => boolean = equals
|
||||
) => (list: Array<T>): Array<T> => {
|
||||
const index = list.findIndex((e) => eqFn(e, element))
|
||||
return list.filter((_, i) => i !== index)
|
||||
}
|
||||
export const removeOnce =
|
||||
<T>(element: T, eqFn: (a: T, b: T) => boolean = equals) =>
|
||||
(list: Array<T>): Array<T> => {
|
||||
const index = list.findIndex((e) => eqFn(e, element))
|
||||
return list.filter((_, i) => i !== index)
|
||||
}
|
||||
|
||||
const simplify = (
|
||||
unit: Unit,
|
||||
|
|
|
@ -16,7 +16,6 @@ prévoyance obligatoire cadre:
|
|||
statut cadre: non
|
||||
valeur attendue: false
|
||||
|
||||
|
||||
variable:
|
||||
par défaut: oui
|
||||
applicable comme mécanisme chainé:
|
||||
|
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
arrondi oui:
|
||||
formule:
|
||||
valeur: 30.4167 jours
|
||||
|
@ -24,7 +23,7 @@ arrondi décimales:
|
|||
demie part:
|
||||
formule:
|
||||
valeur: 0.5 * 100.2€
|
||||
arrondi: oui
|
||||
arrondi: oui
|
||||
exemples:
|
||||
- valeur attendue: 50
|
||||
|
||||
|
@ -48,7 +47,7 @@ cotisation retraite:
|
|||
Arrondi:
|
||||
formule:
|
||||
valeur: cotisation retraite
|
||||
arrondi: oui
|
||||
arrondi: oui
|
||||
|
||||
exemples:
|
||||
- nom: arrondi en dessous
|
||||
|
|
|
@ -27,7 +27,6 @@ Conversion de variable:
|
|||
douches par mois: 30
|
||||
valeur attendue: 45
|
||||
unité attendue: kCo2/mois
|
||||
|
||||
|
||||
Conversion de variable et expressions:
|
||||
unité: kCo2/an
|
||||
|
|
|
@ -47,10 +47,9 @@ plancher:
|
|||
exemples:
|
||||
- valeur attendue: 2500
|
||||
|
||||
|
||||
encadrement inférieur et supérieur:
|
||||
formule:
|
||||
somme:
|
||||
somme:
|
||||
- 500
|
||||
- 400
|
||||
plafond: 800
|
||||
|
|
|
@ -306,17 +306,16 @@ chaine de charactère:
|
|||
chaine de charactère: "'je t'y vois'"
|
||||
valeur attendue: je t'y vois
|
||||
|
||||
|
||||
a: oui
|
||||
b: 5
|
||||
a . b: b + 5
|
||||
a . c: b + 5
|
||||
désambiguation du nom de règle 1:
|
||||
formule: a . b
|
||||
exemples:
|
||||
exemples:
|
||||
- valeur attendue: 10
|
||||
|
||||
désambiguation du nom de règle 2:
|
||||
formule: a . c
|
||||
exemples:
|
||||
- valeur attendue: 15
|
||||
exemples:
|
||||
- valeur attendue: 15
|
||||
|
|
|
@ -9,13 +9,13 @@ test:
|
|||
paramètre nommés:
|
||||
formule: test
|
||||
exemples:
|
||||
- situation:
|
||||
- situation:
|
||||
test: cotisation . assiette
|
||||
valeur attendue: 1000
|
||||
- situation:
|
||||
test: cotisation . taux employeur
|
||||
valeur attendue: 4
|
||||
|
||||
|
||||
cotisation 2:
|
||||
formule:
|
||||
multiplication:
|
||||
|
@ -28,12 +28,11 @@ paramètre nommés imbriqués:
|
|||
formule: cotisation 2 . assiette . plafond
|
||||
exemples:
|
||||
- valeur attendue: 100
|
||||
|
||||
|
||||
paramètre nommé utilisé dans la règle:
|
||||
formule:
|
||||
valeur [ref assiette] : 500€
|
||||
abattement:
|
||||
valeur [ref assiette]: 500€
|
||||
abattement:
|
||||
valeur: assiette * 10%
|
||||
plancher: 100€
|
||||
exemples:
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
fx:
|
||||
fx:
|
||||
x:
|
||||
résoudre la référence circulaire: oui
|
||||
valeur: fx
|
||||
exemples:
|
||||
- nom: affine
|
||||
situation:
|
||||
fx: 200 - x
|
||||
situation:
|
||||
fx: 200 - x
|
||||
valeur attendue: 100
|
||||
- nom: quadratique
|
||||
situation:
|
||||
situation:
|
||||
fx: 0.2 * x * x - 400 * x + 500
|
||||
valeur attendue: 2003.743
|
||||
valeur attendue: 2003.743
|
||||
# CF https://www.wolframalpha.com/input/?i=x%3D0.2x%C2%B2-400x%2B500
|
||||
|
||||
CA:
|
||||
|
@ -18,17 +18,16 @@ CA:
|
|||
plancher: 0€
|
||||
formule:
|
||||
inversion numérique:
|
||||
avec:
|
||||
avec:
|
||||
- net
|
||||
|
||||
net:
|
||||
résoudre la référence circulaire: oui
|
||||
unité: €
|
||||
formule: CA - 50% * net
|
||||
formule: CA - 50% * net
|
||||
|
||||
|
||||
net après impôt:
|
||||
formule: 80% * net
|
||||
net après impôt:
|
||||
formule: 80% * net
|
||||
unité: €
|
||||
|
||||
cycle avec inversion et situation vide:
|
||||
|
@ -59,7 +58,6 @@ cycle avec la règle du cycle fixée dans la situation:
|
|||
- situation:
|
||||
net: 1000
|
||||
valeur attendue: 1500
|
||||
|
||||
# TODO : à corriger
|
||||
# cycle avec une règle reliée fixée dans la situation:
|
||||
# valeur: net
|
||||
|
|
|
@ -3,11 +3,10 @@ cotisation retraite:
|
|||
valeur sans unité:
|
||||
formule:
|
||||
valeur: 100
|
||||
unité: €
|
||||
unité: €
|
||||
exemples:
|
||||
- unité attendue: €
|
||||
|
||||
|
||||
conversion d'unité:
|
||||
formule:
|
||||
valeur: 12 mois
|
||||
|
@ -18,7 +17,7 @@ conversion d'unité:
|
|||
|
||||
unité chainée:
|
||||
formule:
|
||||
produit:
|
||||
produit:
|
||||
assiette: 10 €/mois
|
||||
taux: 50%
|
||||
unité: €/an
|
||||
|
|
|
@ -166,7 +166,7 @@ variations sans unité:
|
|||
exemples:
|
||||
- valeur attendue: 7
|
||||
unité attendue: '%'
|
||||
|
||||
|
||||
taux réduit:
|
||||
variations dans un produit:
|
||||
formule:
|
||||
|
@ -184,4 +184,4 @@ variations dans un produit:
|
|||
valeur attendue: 79.35
|
||||
- situation:
|
||||
taux réduit: non
|
||||
valeur attendue: 120.75
|
||||
valeur attendue: 120.75
|
||||
|
|
|
@ -3,8 +3,8 @@ applicable si:
|
|||
description: >-
|
||||
Renvoie `non` si la condition est égale à `non`. Renvoie la valeur sinon.
|
||||
|
||||
Permet de désactiver une règle ou une valeur.
|
||||
|
||||
Permet de désactiver une règle ou une valeur.
|
||||
|
||||
retourne: Valeur | non
|
||||
exemples:
|
||||
base: >-
|
||||
|
@ -18,8 +18,8 @@ non applicable si:
|
|||
description: >-
|
||||
Renvoit `non` si la condition n'est pas égale à `non`
|
||||
|
||||
Permet de désactiver une règle ou une valeur.
|
||||
|
||||
Permet de désactiver une règle ou une valeur.
|
||||
|
||||
retourne: Valeur | non
|
||||
exemples:
|
||||
base: >-
|
||||
|
@ -65,7 +65,7 @@ toutes ces conditions:
|
|||
produit:
|
||||
description: >-
|
||||
C'est une multiplication adaptée pour exprimer au mieux les cotisations.
|
||||
|
||||
|
||||
|
||||
Sa propriété `assiette` est multipliée par un pourcentage `taux`, ou par un
|
||||
`facteur` quand ce nom est plus approprié.
|
||||
|
@ -111,7 +111,7 @@ variations:
|
|||
`non`.
|
||||
|
||||
|
||||
Ce mécanisme peut aussi être utilisé au sein d'un autre mécanisme avec des attributs,
|
||||
Ce mécanisme peut aussi être utilisé au sein d'un autre mécanisme avec des attributs,
|
||||
tel que `produit` ou `barème`.
|
||||
arguments:
|
||||
- si: condition à vérifier
|
||||
|
@ -185,7 +185,7 @@ le maximum de:
|
|||
mécanisme `encadrement`.
|
||||
exemples:
|
||||
base: >-
|
||||
max:
|
||||
max:
|
||||
le maximum de:
|
||||
- 50
|
||||
- 100
|
||||
|
@ -199,7 +199,7 @@ le minimum de:
|
|||
Pour plafonner une valeur, préférer l'utilisation du mécanisme `encadrement`.
|
||||
exemples:
|
||||
base: >-
|
||||
min:
|
||||
min:
|
||||
le minimum de:
|
||||
- 50
|
||||
- 100
|
||||
|
@ -277,7 +277,6 @@ barème:
|
|||
- taux: 0.6%
|
||||
arrondi: oui
|
||||
|
||||
|
||||
grille:
|
||||
description: >-
|
||||
C'est un barème sous la forme d'une grille de correspondance simple. C'est
|
||||
|
@ -345,7 +344,7 @@ composantes:
|
|||
méthode de calcul mais diffèrent selons certains paramètres. Pour ne pas
|
||||
définir deux variables quasi-redondantes, on utilise ce mécanisme.
|
||||
|
||||
Cela permet d'avoir une écriture factorisée, plus facile à lire.
|
||||
Cela permet d'avoir une écriture factorisée, plus facile à lire.
|
||||
|
||||
Dans les calculs, `composantes` se comporte **exactement comme une somme**.
|
||||
La documentation, elle, sera adaptée pour montrer chaque composante.
|
||||
|
@ -356,9 +355,9 @@ composantes:
|
|||
Chaque composante peut également contenir un champs `attributs` de type objet
|
||||
contenant les mécanismes chainés à appliquer à la composante en question.
|
||||
|
||||
Lorsque l'on utilise l'attribut `nom`, cela aboutit à la définition de règles
|
||||
Lorsque l'on utilise l'attribut `nom`, cela aboutit à la définition de règles
|
||||
imbriquées pour chacun des termes de la somme.
|
||||
|
||||
|
||||
exemples:
|
||||
base: >-
|
||||
composante:
|
||||
|
@ -368,36 +367,36 @@ composantes:
|
|||
- taux: 2%
|
||||
- taux: 4%
|
||||
plafond: plafond sécurité sociale
|
||||
|
||||
|
||||
Cotisations: >-
|
||||
cotisation 1:
|
||||
produit:
|
||||
assiette: assiette de base
|
||||
composantes:
|
||||
- attributs:
|
||||
nom: employeur
|
||||
taux: 5%
|
||||
- attributs:
|
||||
nom: salarié
|
||||
taux: 1%
|
||||
cotisation 1:
|
||||
produit:
|
||||
assiette: assiette de base
|
||||
composantes:
|
||||
- attributs:
|
||||
nom: employeur
|
||||
taux: 5%
|
||||
- attributs:
|
||||
nom: salarié
|
||||
taux: 1%
|
||||
|
||||
cotisations salariales :
|
||||
somme:
|
||||
- cotisation 1 . salarié
|
||||
# ...
|
||||
cotisations salariales :
|
||||
somme:
|
||||
- cotisation 1 . salarié
|
||||
# ...
|
||||
TVA: >-
|
||||
prix:
|
||||
produit:
|
||||
assiette: 50€
|
||||
composantes:
|
||||
- attributs:
|
||||
nom: HT
|
||||
- attributs:
|
||||
nom: TVA
|
||||
taux: 20%
|
||||
prix:
|
||||
produit:
|
||||
assiette: 50€
|
||||
composantes:
|
||||
- attributs:
|
||||
nom: HT
|
||||
- attributs:
|
||||
nom: TVA
|
||||
taux: 20%
|
||||
|
||||
vérification:
|
||||
prix = prix . HT + prix . TVA
|
||||
vérification:
|
||||
prix = prix . HT + prix . TVA
|
||||
|
||||
abattement:
|
||||
chainable: oui
|
||||
|
@ -458,13 +457,12 @@ unité:
|
|||
Permet de convertir explicitement une unité.
|
||||
|
||||
Affiche un avertissement si la conversion n'est pas possible à cause d'unités incompatibles.
|
||||
|
||||
|
||||
exemples:
|
||||
base: >-
|
||||
salaire:
|
||||
salaire:
|
||||
valeur: 35 k€/an
|
||||
unité: €/mois
|
||||
|
||||
|
||||
par défaut:
|
||||
chainable: oui
|
||||
|
@ -472,19 +470,16 @@ par défaut:
|
|||
Permet de donner une valeur par défaut pour le calcul, sans influer sur les variables manquantes retournées.
|
||||
|
||||
Utile dans le cas d'une situation incomplète où l'on veut quand même retourner une première estimation.
|
||||
|
||||
|
||||
exemples:
|
||||
base: >-
|
||||
prix TTC:
|
||||
prix TTC:
|
||||
assiette: prix HT * (100% + TVA)
|
||||
TVA:
|
||||
TVA:
|
||||
par défaut: 20%
|
||||
|
||||
|
||||
|
||||
|
||||
synchronisation:
|
||||
description: >-
|
||||
description: >-
|
||||
Permet de récupérer certaines informations, telles que les
|
||||
codes postaux des villes, à partir d'APIs externes, telles que l'[API
|
||||
des communes de France](https://geo.api.gouv.fr/decoupage-administratif/communes).
|
||||
|
@ -527,34 +522,33 @@ inversion numérique:
|
|||
|
||||
résoudre la référence circulaire:
|
||||
description: |
|
||||
Active le calcul itératif pour trouver la valeur de la règle qui résout
|
||||
Active le calcul itératif pour trouver la valeur de la règle qui résout
|
||||
la référence circulaire.
|
||||
|
||||
Il est possible pour une règle de se référencer elle-même. Par défaut, le
|
||||
|
||||
Il est possible pour une règle de se référencer elle-même. Par défaut, le
|
||||
moteur considère qu'il s'agit d'un cycle non voulu, et renvoie 'null' comme valeur
|
||||
pour la règle en question, en affichant un avertissement.
|
||||
|
||||
Mais dans certains cas, la formule est bonne et le cycle est voulu. La valeur de la
|
||||
Mais dans certains cas, la formule est bonne et le cycle est voulu. La valeur de la
|
||||
règle attendue est donc celle qui résout l'équation obtenue via la référence cyclique.
|
||||
|
||||
Lorsque l'on active cette fonctionnalité, le moteur va procéder par essai-erreur jusqu'à
|
||||
Lorsque l'on active cette fonctionnalité, le moteur va procéder par essai-erreur jusqu'à
|
||||
trouver cette valeur.
|
||||
|
||||
Note : la résolution de cycle est coûteuse en temps de calcul. Il faut donc veiller à
|
||||
ne pas la cumuler avec l'évaluation d'un autre mécanisme coûteux comme l'inversion numérique
|
||||
par exemple.
|
||||
|
||||
|
||||
exemples:
|
||||
base: >-
|
||||
x:
|
||||
x:
|
||||
valeur: 4 * x - 5
|
||||
résoudre la référence circulaire: oui
|
||||
calcul du revenu professionnel: >-
|
||||
chiffre d'affaires: 10000 €/an
|
||||
|
||||
|
||||
cotisations: 25% * revenu professionnel
|
||||
|
||||
revenu professionnel:
|
||||
|
||||
revenu professionnel:
|
||||
valeur: chiffre d'affaires - cotisations
|
||||
résoudre la référence circulaire: oui
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
douche:
|
||||
titre: Impact carbone d'une douche
|
||||
description: Impact carbone liée aux douches prise au cours de l'année
|
||||
icônes: 🚿 🍃
|
||||
note: A titre de comparaison, l'empreinte carbone d'un burger est estimée à 0.279kg
|
||||
icônes: 🚿 🍃
|
||||
note: A titre de comparaison, l'empreinte carbone d'un burger est estimée à 0.279kg
|
||||
unité: kgCO2eq / an
|
||||
valeur: fréquence * impact par litre * litres consommés
|
||||
|
||||
|
@ -14,9 +14,8 @@ douche . fréquence:
|
|||
5 par semaine: 5 douche/semaine * 52 semaines/an # Publicodes ne gère pas encore nativement l'unité semaine
|
||||
2 par jour: 2 douche/jour
|
||||
|
||||
|
||||
douche . impact par litre:
|
||||
somme:
|
||||
somme:
|
||||
- eau . impact par litre froid
|
||||
- chauffage . impact par litre
|
||||
|
||||
|
@ -34,7 +33,6 @@ chauffage:
|
|||
chauffage . type:
|
||||
par défaut: "'électricité'"
|
||||
|
||||
|
||||
chauffage . impact par kWh:
|
||||
notes: |
|
||||
La base carbone de l'ADEME ne permet malheureusement pas de faire des liens profonds vers les chiffres utilisés.
|
||||
|
@ -50,7 +48,7 @@ chauffage . énergie consommée par litre:
|
|||
analyse du prix d'une douche: 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:
|
||||
produit:
|
||||
produit:
|
||||
assiette: 0.0325 kWh/litre
|
||||
facteur:
|
||||
unité: kgCO2eq/kWh
|
||||
|
@ -60,13 +58,13 @@ chauffage . impact par litre:
|
|||
- si: type = 'fioul'
|
||||
alors: 0.324
|
||||
- si: type = 'électricité'
|
||||
alors: 0.059
|
||||
alors: 0.059
|
||||
|
||||
douche . litres consommés:
|
||||
produit:
|
||||
assiette: durée moyenne
|
||||
facteur: débit
|
||||
|
||||
|
||||
douche . durée moyenne:
|
||||
question: Combien de temps dure votre douche en général ?
|
||||
par défaut: 10 min/douche
|
||||
|
@ -74,14 +72,14 @@ douche . durée moyenne:
|
|||
expresse: 5 min/douche
|
||||
moyenne: 10 min/douche
|
||||
lente: 20 min/douche
|
||||
|
||||
|
||||
douche . débit:
|
||||
valeur: 18 litre/min
|
||||
références:
|
||||
économise l'eau: https://www.jeconomiseleau.org/index.php/particuliers/economies-par-usage/la-douche-et-le-bain
|
||||
|
||||
douche . pomme de douche économe:
|
||||
remplace:
|
||||
remplace:
|
||||
règle: débit
|
||||
par: 9 litre/min
|
||||
question: Utilisez-vous une pomme de douche économe ?
|
||||
|
|
|
@ -8,8 +8,7 @@ import 'regenerator-runtime/runtime'
|
|||
import App from './components/App'
|
||||
|
||||
Sentry.init({
|
||||
dsn:
|
||||
'https://92bbc21937b24136a2fe1b1d922b000f@o548798.ingest.sentry.io/5745615',
|
||||
dsn: 'https://92bbc21937b24136a2fe1b1d922b000f@o548798.ingest.sentry.io/5745615',
|
||||
integrations: [new Integrations.BrowserTracing()],
|
||||
|
||||
// Set tracesSampleRate to 1.0 to capture 100%
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
{
|
||||
"applicable si": {
|
||||
"chainable": "oui",
|
||||
"description": "Renvoie `non` si la condition est égale à `non`. Renvoie la valeur sinon.\nPermet de désactiver une règle ou une valeur. ",
|
||||
"description": "Renvoie `non` si la condition est égale à `non`. Renvoie la valeur sinon.\nPermet de désactiver une règle ou une valeur.",
|
||||
"retourne": "Valeur | non",
|
||||
"exemples": {
|
||||
"base": "ancienneté: 4 mois prime de vacances:\n applicable si: ancienneté >= 1 an\n valeur: 200€"
|
||||
|
@ -9,7 +9,7 @@
|
|||
},
|
||||
"non applicable si": {
|
||||
"chainable": "oui",
|
||||
"description": "Renvoit `non` si la condition n'est pas égale à `non`\nPermet de désactiver une règle ou une valeur. ",
|
||||
"description": "Renvoit `non` si la condition n'est pas égale à `non`\nPermet de désactiver une règle ou une valeur.",
|
||||
"retourne": "Valeur | non",
|
||||
"exemples": {
|
||||
"base": "ancienneté: 4 mois prime de vacances:\n non applicable si: ancienneté < 1 an\n valeur: 200€"
|
||||
|
@ -46,7 +46,7 @@
|
|||
}
|
||||
},
|
||||
"variations": {
|
||||
"description": "Contient une liste de conditions (`si`) et leurs conséquences associées (`alors`), ainsi qu'un cas par défaut (`sinon`).\n\nPour la première condition vraie dans la liste, on retient la valeur qui lui est associée.\n\nSi aucune condition n'est vraie, alors ce mécanisme renvoie implicitement `non`.\n\nCe mécanisme peut aussi être utilisé au sein d'un autre mécanisme avec des attributs, tel que `produit` ou `barème`.",
|
||||
"description": "Contient une liste de conditions (`si`) et leurs conséquences associées (`alors`), ainsi qu'un cas par défaut (`sinon`).\n\nPour la première condition vraie dans la liste, on retient la valeur qui lui est associée.\n\nSi aucune condition n'est vraie, alors ce mécanisme renvoie implicitement `non`.\n\nCe mécanisme peut aussi être utilisé au sein d'un autre mécanisme avec des attributs, tel que `produit` ou `barème`.",
|
||||
"arguments": [
|
||||
{
|
||||
"si": "condition à vérifier",
|
||||
|
@ -76,13 +76,13 @@
|
|||
"le maximum de": {
|
||||
"description": "Renvoie la valeur numérique de la liste de propositions fournie qui est la plus grande.\n\nPour ajouter un plancher à une valeur, préférer l'utilisation du mécanisme `encadrement`.",
|
||||
"exemples": {
|
||||
"base": "max: \n le maximum de:\n - 50\n - 100"
|
||||
"base": "max:\n le maximum de:\n - 50\n - 100"
|
||||
}
|
||||
},
|
||||
"le minimum de": {
|
||||
"description": "Renvoie la valeur numérique de la liste de propositions fournie qui est la plus petite.\n\nPour plafonner une valeur, préférer l'utilisation du mécanisme `encadrement`.",
|
||||
"exemples": {
|
||||
"base": "min: \n le minimum de:\n - 50\n - 100"
|
||||
"base": "min:\n le minimum de:\n - 50\n - 100"
|
||||
}
|
||||
},
|
||||
"arrondi": {
|
||||
|
@ -119,11 +119,11 @@
|
|||
}
|
||||
},
|
||||
"composantes": {
|
||||
"description": "Beaucoup de cotisations sont composées de deux parties qui partagent la méthode de calcul mais diffèrent selons certains paramètres. Pour ne pas définir deux variables quasi-redondantes, on utilise ce mécanisme.\nCela permet d'avoir une écriture factorisée, plus facile à lire. \nDans les calculs, `composantes` se comporte **exactement comme une somme**. La documentation, elle, sera adaptée pour montrer chaque composante.\nIl est possible par exemple pour le mécanisme `produit` de garder en commun l'assiette, et de déclarer des composantes pour le taux.\nChaque composante peut également contenir un champs `attributs` de type objet contenant les mécanismes chainés à appliquer à la composante en question.\nLorsque l'on utilise l'attribut `nom`, cela aboutit à la définition de règles imbriquées pour chacun des termes de la somme.\n ",
|
||||
"description": "Beaucoup de cotisations sont composées de deux parties qui partagent la méthode de calcul mais diffèrent selons certains paramètres. Pour ne pas définir deux variables quasi-redondantes, on utilise ce mécanisme.\nCela permet d'avoir une écriture factorisée, plus facile à lire.\nDans les calculs, `composantes` se comporte **exactement comme une somme**. La documentation, elle, sera adaptée pour montrer chaque composante.\nIl est possible par exemple pour le mécanisme `produit` de garder en commun l'assiette, et de déclarer des composantes pour le taux.\nChaque composante peut également contenir un champs `attributs` de type objet contenant les mécanismes chainés à appliquer à la composante en question.\nLorsque l'on utilise l'attribut `nom`, cela aboutit à la définition de règles imbriquées pour chacun des termes de la somme.",
|
||||
"exemples": {
|
||||
"base": "composante:\n produit:\n assiette: assiette de base\n composantes:\n - taux: 2%\n - taux: 4%\n plafond: plafond sécurité sociale",
|
||||
"Cotisations": "cotisation 1:\n produit:\n assiette: assiette de base\n composantes:\n - attributs:\n nom: employeur\n taux: 5%\n - attributs:\n nom: salarié\n taux: 1%\n\ncotisations salariales :\n somme: \n - cotisation 1 . salarié\n # ...",
|
||||
"TVA": "prix:\n produit:\n assiette: 50€\n composantes:\n - attributs:\n nom: HT\n - attributs:\n nom: TVA\n taux: 20%\n\nvérification:\n prix = prix . HT + prix . TVA "
|
||||
"Cotisations": "cotisation 1:\n produit:\n assiette: assiette de base\n composantes:\n - attributs:\n nom: employeur\n taux: 5%\n - attributs:\n nom: salarié\n taux: 1%\n\ncotisations salariales :\n somme:\n - cotisation 1 . salarié\n # ...",
|
||||
"TVA": "prix:\n produit:\n assiette: 50€\n composantes:\n - attributs:\n nom: HT\n - attributs:\n nom: TVA\n taux: 20%\n\nvérification:\n prix = prix . HT + prix . TVA"
|
||||
}
|
||||
},
|
||||
"abattement": {
|
||||
|
@ -159,14 +159,14 @@
|
|||
"chainable": "oui",
|
||||
"description": "Permet de convertir explicitement une unité.\n\nAffiche un avertissement si la conversion n'est pas possible à cause d'unités incompatibles.\n",
|
||||
"exemples": {
|
||||
"base": "salaire: \n valeur: 35 k€/an\n unité: €/mois"
|
||||
"base": "salaire:\n valeur: 35 k€/an\n unité: €/mois"
|
||||
}
|
||||
},
|
||||
"par défaut": {
|
||||
"chainable": "oui",
|
||||
"description": "Permet de donner une valeur par défaut pour le calcul, sans influer sur les variables manquantes retournées.\n\nUtile dans le cas d'une situation incomplète où l'on veut quand même retourner une première estimation.\n",
|
||||
"exemples": {
|
||||
"base": "prix TTC: \n assiette: prix HT * (100% + TVA)\nTVA: \n par défaut: 20%"
|
||||
"base": "prix TTC:\n assiette: prix HT * (100% + TVA)\nTVA:\n par défaut: 20%"
|
||||
}
|
||||
},
|
||||
"synchronisation": {
|
||||
|
@ -177,10 +177,10 @@
|
|||
"description": "Il est souhaitable de rédiger les règles de calcul en publicodes de la même façon qu'elles sont décrites dans la loi ou les interprétations administratives ou juridiques existantes. En conséquence, certaines variables n'auront donc pas de méthode de calcul clairement explicitée, il s'agira donc de la déduire des autres valeurs renseignées.\n\nDe façon simplifiée, il s'agira donc, à partir d'une règle existante explicitant `y = ƒ(x)` de calculer `x` à partir de `y`.\n\nL'inversion numérique permet d'estimer la valeur de la variable en question au plus près à partir d'un des _objectifs_, listés dans la propriété `avec`. Il faut alors renseigner une valeur cible pour ces objectifs.\n\nL'algorithme utilisé est la [méthode de Brent](https://fr.wikipedia.org/wiki/M%C3%A9thode_de_Brent). L'idée générale est de prendre une valeur au hasard pour la variable en question, et d'améliorer mathématiquement le choix jusqu'à ce que les valeurs cibles soient toutes suffisamment proches des objectifs.\n\nSi on demande au moteur la valeur d'une variable qui a pour formule une inversion, il va vérifier qu'une des variables `avec` a bien une valeur (calculée ou saisie), et procéder à l'inversion décrite plus haut à partir de celle-ci. Sinon, ces possibilités d'inversions seront listées comme manquantes."
|
||||
},
|
||||
"résoudre la référence circulaire": {
|
||||
"description": "Active le calcul itératif pour trouver la valeur de la règle qui résout \nla référence circulaire.\n\nIl est possible pour une règle de se référencer elle-même. Par défaut, le \nmoteur considère qu'il s'agit d'un cycle non voulu, et renvoie 'null' comme valeur\npour la règle en question, en affichant un avertissement.\n\nMais dans certains cas, la formule est bonne et le cycle est voulu. La valeur de la \nrègle attendue est donc celle qui résout l'équation obtenue via la référence cyclique.\n\nLorsque l'on active cette fonctionnalité, le moteur va procéder par essai-erreur jusqu'à \ntrouver cette valeur.\n\nNote : la résolution de cycle est coûteuse en temps de calcul. Il faut donc veiller à\nne pas la cumuler avec l'évaluation d'un autre mécanisme coûteux comme l'inversion numérique\npar exemple.\n",
|
||||
"description": "Active le calcul itératif pour trouver la valeur de la règle qui résout\nla référence circulaire.\n\nIl est possible pour une règle de se référencer elle-même. Par défaut, le\nmoteur considère qu'il s'agit d'un cycle non voulu, et renvoie 'null' comme valeur\npour la règle en question, en affichant un avertissement.\n\nMais dans certains cas, la formule est bonne et le cycle est voulu. La valeur de la\nrègle attendue est donc celle qui résout l'équation obtenue via la référence cyclique.\n\nLorsque l'on active cette fonctionnalité, le moteur va procéder par essai-erreur jusqu'à\ntrouver cette valeur.\n\nNote : la résolution de cycle est coûteuse en temps de calcul. Il faut donc veiller à\nne pas la cumuler avec l'évaluation d'un autre mécanisme coûteux comme l'inversion numérique\npar exemple.\n",
|
||||
"exemples": {
|
||||
"base": "x: \n valeur: 4 * x - 5\n résoudre la référence circulaire: oui",
|
||||
"calcul du revenu professionnel": "chiffre d'affaires: 10000 €/an\ncotisations: 25% * revenu professionnel\n \nrevenu professionnel: \n valeur: chiffre d'affaires - cotisations\n résoudre la référence circulaire: oui"
|
||||
"base": "x:\n valeur: 4 * x - 5\n résoudre la référence circulaire: oui",
|
||||
"calcul du revenu professionnel": "chiffre d'affaires: 10000 €/an\ncotisations: 25% * revenu professionnel\nrevenu professionnel:\n valeur: chiffre d'affaires - cotisations\n résoudre la référence circulaire: oui"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -2,8 +2,9 @@ import { VariationNode } from 'publicodes/source/mecanisms/variations'
|
|||
import Explanation from '../Explanation'
|
||||
|
||||
export default function Replacement(node: VariationNode) {
|
||||
const applicableReplacement = node.explanation.find((ex) => ex.satisfied)
|
||||
?.consequence
|
||||
const applicableReplacement = node.explanation.find(
|
||||
(ex) => ex.satisfied
|
||||
)?.consequence
|
||||
const replacedNode = node.explanation.slice(-1)[0].consequence
|
||||
return <Explanation node={applicableReplacement || replacedNode} />
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue