😷 Page Coronavirus et intégration du chômage partiel (#926)

Suite à la crise du coronavirus le gouvernement a élargi le dispositif
d'activité partielle et encouragé son recours massif.

Ce commit contient les modifications suivantes :

* Intégration de l'activité partielle sur le simulateur salarié ;
* Création d'une page /coronavirus incluant un simulateur spécifique pour le
  chômage partiel ainsi que des informations générale sur les dispositifs
  gouvernementaux. Référencement de cette page sur la page d'accueil et sur
  le simulateur salarié ;
* Grosse refacto du calcul de la CSG/CRDS pour y inclure le calcul des revenus
  de remplacement. Corrige aussi des erreurs pour la CSG des salariés
  bénéficiant de la DFS, et intègre l'exonération de CSG à Mayotte ;
* Légères modifications de la fenêtre « prochaines question » ;
* Affichage d'un placeholder sur les inputs des questions.

Co-authored-by: Johan Girod <johangirod@gmail.com>
pull/933/head
Maxime Quandalle 2020-03-22 23:14:51 +01:00 committed by GitHub
parent 638db17d8e
commit 57bb595884
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
45 changed files with 1444 additions and 498 deletions

View File

@ -64,9 +64,7 @@ module.exports = {
// maxWorkers: "50%",
// An array of directory names to be searched recursively up from the requiring module's location
// moduleDirectories: [
// "node_modules"
// ],
moduleDirectories: ['node_modules', 'sources'],
// An array of file extensions your modules use
// moduleFileExtensions: [

View File

@ -201,6 +201,12 @@
to = "/prerender/mon-entreprise/g%C3%A9rer/index.html"
status = 200
[[redirects]]
from = "/coronavirus"
to = "/prerender/mon-entreprise/coronavirus/index.html"
status = 200
[[redirects]]
from = "/simulateurs/salari%C3%A9"
to = "/prerender/mon-entreprise/simulateurs/salari%C3%A9/index.html"
@ -231,6 +237,11 @@
to = "/prerender/mon-entreprise/iframes/simulateur-embauche/index.html"
status = 200
[[redirects]]
from = "/iframes/simulateur-chomage-partiel"
to = "/prerender/mon-entreprise/iframes/simulateur-chomage-partiel/index.html"
status = 200
[[redirects]]
from = "/*"
to = "/mon-entreprise.html"

View File

@ -4,6 +4,7 @@
import artisteAuteur from './rules/artiste-auteur.yaml'
import base from './rules/base.yaml'
import chômagePartiel from './rules/chômage-partiel.yaml'
import CCBatiment from './rules/conventions-collectives/bâtiment.yaml'
import CCHotels from './rules/conventions-collectives/hôtels-cafés-restaurants.yaml'
import CCOptique from './rules/conventions-collectives/optique.yaml'
@ -33,7 +34,8 @@ const rules = {
...CCOptique,
...CCSpectacleVivant,
...CCSport,
...situationPersonnelle
...situationPersonnelle,
...chômagePartiel
}
export default rules

View File

@ -37,3 +37,24 @@ SMIC horaire:
références:
décret: https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000037833206
service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F2300
SMIC temps plein:
unité: €/mois
formule:
produit:
assiette: contrat salarié . temps de travail . base légale * période . semaines par mois
facteur: SMIC horaire
références:
décret: https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000037833206
SMIC temps plein . net imposable:
titre: SMIC net imposable
description: Montant du SMIC net imposable pour un temps plein.
formule:
recalcul:
règle: contrat salarié . rémunération . net imposable . base
avec:
contrat salarié . rémunération . brut de base: SMIC temps plein
références:
barème PAS: https://bofip.impots.gouv.fr/bofip/11255-PGP.html

View File

@ -0,0 +1,12 @@
baisse de revenu chômage partiel:
formule:
allègement:
assiette: net sans chômage partiel
abattement: contrat salarié . rémunération . net
baisse de revenu chômage partiel . net sans chômage partiel:
formule:
recalcul:
règle: contrat salarié . rémunération . net
avec:
contrat salarié . activité partielle: non

View File

@ -132,6 +132,7 @@ contrat salarié . convention collective . BTP . cotisations conventionnelles:
- OPPBTP
contrat salarié . convention collective . BTP . congés intempéries:
rend non applicable: CDD . compensation pour congés non pris
formule:
produit:
assiette: cotisations . assiette
@ -157,6 +158,7 @@ contrat salarié . convention collective . BTP . congés intempéries:
alors: 19.90%
références:
CIBTP: https://www.cibtp.fr/
Article L3141-30 du Code du Travail: https://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=DF6E6424807679A6EDC2915496BEA32D.tplgfr22s_2?idArticle=LEGIARTI000033020675&cidTexte=LEGITEXT000006072050&dateTexte=20200320
contrat salarié . convention collective . BTP . congés intempéries . caisse de rattachement:
question: À quelle caisse l'entreprise est-elle rattachée pour le versement de la cotisation congés intempéries ?

View File

@ -79,12 +79,14 @@ contrat salarié . intermittents du spectacle . formation professionnelle:
taux: 2.10%
contrat salarié . intermittents du spectacle . caisse des congés spectacle:
rend non applicable: CDD . compensation pour congés non pris
formule:
produit:
assiette: rémunération . brut
taux: 15.40%
références:
audiens.org: https://www.audiens.org/files/live/sites/siteAudiens/files/03_documents/entreprise/Fiches-techniques/Conges-Spectacles-Mode-d-emploi-employeur-2019.pdf
Article L3141-30 du Code du Travail: https://www.legifrance.gouv.fr/affichCodeArticle.do;jsessionid=DF6E6424807679A6EDC2915496BEA32D.tplgfr22s_2?idArticle=LEGIARTI000033020675&cidTexte=LEGITEXT000006072050&dateTexte=20200320
contrat salarié . intermittents du spectacle . retraite complémentaire techniciens et cadre:
applicable si:

View File

@ -91,7 +91,7 @@ impôt . revenu imposable . abattement contrat court:
- contrat salarié . CDD
- contrat salarié . CDD . durée contrat <= 2 mois
formule:
arrondi: 50% * contrat salarié . SMIC temps plein . net imposable * 1 mois
arrondi: 50% * SMIC temps plein . net imposable * 1 mois
note: Cet abattement s'applique aussi pour les conventions de stage ou les contrats de mission (intérim) de moins de 2 mois.
références:
Bofip - dispositions spécifiques aux contrats courts: https://bofip.impots.gouv.fr/bofip/11252-PGP.html?identifiant=BOI-IR-PAS-20-20-30-10-20180515

View File

@ -319,7 +319,7 @@ protection sociale . santé . indemnités journalières . salarié:
produit:
assiette: revenu moyen [€/jour]
taux: 50%
plafond: 1.8 * contrat salarié . SMIC temps plein [€/jour]
plafond: 1.8 * SMIC temps plein [€/jour]
reférences:
service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F3053

View File

@ -205,6 +205,167 @@ contrat salarié . frais professionnels . indemnité kilométrique vélo . dista
10 km/jour: 200
par défaut: 80
contrat salarié . activité partielle:
question: Le salarié est-il en chômage partiel ?
description: >-
À la suite de la crise du Coronavirus, le gouvernement a mis en place un
dispositif de chômage partiel étendu dans lequel l'État prend en charge
l'indemnisation des heures chômées jusquà 4,5 SMIC.
La déclaration d'activité partielle est simplifiée est l'effet est
rétroactif.
par défaut: non
rend non applicable:
- temps de travail . heures supplémentaires
- temps de travail . heures complémentaires
références:
déclaration employeur: https://activitepartielle.emploi.gouv.fr/aparts/
service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F23503
economie.gouv.fr: https://www.economie.gouv.fr/entreprises/activite-partielle
urssaf.fr: https://www.urssaf.fr/portail/home/employeur/reduire-ou-cesser-lactivite/lactivite-partielle.html
contrat salarié . activité partielle . rémunération mensuelle minimale:
acronyme: RMM
description: >-
Les salariés à temps plein dont lhoraire de travail est réduit ont droit à
une rémunération mensuelle minimale qui peut donner lieu à un versement
complémentaire de lemployeur.
références:
Article L3232-3 du code du travail: https://www.legifrance.gouv.fr/affichCodeArticle.do?idArticle=LEGIARTI000006902847&cidTexte=LEGITEXT000006072050&dateTexte=20080501
formule:
recalcul:
règle: contrat salarié . rémunération . net de cotisations
avec:
rémunération . brut de base: SMIC contractuel
activité partielle: non
contrat salarié . activité partielle . heures chômées:
unité: heures/mois
formule:
produit:
assiette: temps de travail . temps contractuel
taux: 100% - proportion heures travaillées
contrat salarié . activité partielle . proportion heures travaillées:
titre: proportion heures travaillées
question: Quelle est la proportion d'heures travaillées sur le mois ?
description: >-
Dans le cadre du chômage partiel, la proportion d'heure travaillées correspond
au ratio du nombre d'heures travaillées par rapport au temps de travail
contractuel habituel.
Un ratio de 0% signifie que l'employé n'a pas travaillé ce mois ci.
Un ratio de 100% signifie que l'employé a effectué toutes ces heures contractuelles.
Les heures supplémentaires, même habituelles, ne sont pas prises en compte.
unité: '%'
par défaut: 0
suggestions:
0%: 0
20%: 20
50%: 50
contrat salarié . activité partielle . indemnités:
titre: indemnités activité partielle
description: >-
La mise en chômage partiel ouvre droit non au paiement dun salaire mais à
lallocation spécifique. Pour chaque heure chômée indemnisable, le salarié
reçoit de l'entreprise une indemnité. L'entreprise obtient en contrepartie de
lEtat une allocation dactivité partielle.
Si après versement de lindemnité dactivité partielle la rémunération du
salarié est inférieure à la rémunération mensuelle minimale (RMM garantie par
les articles L3232-1 et suivants du code du travail pour les salariés à temps
plein), l'employeur doit lui verser une allocation complémentaire qui est égale
à la différence entre la rémunération mensuelle minimale (ou Smic net) et la
somme initialement perçue par le salarié.
formule:
somme:
- base
- complémentaire
- conventionnelle
références:
urssaf.fr: https://www.urssaf.fr/portail/home/employeur/reduire-ou-cesser-lactivite/lactivite-partielle.html
contrat salarié . activité partielle . indemnités . base:
titre: indemnités d'activité partielle de base
formule:
multiplication:
assiette: retrait absence
taux: 70%
contrat salarié . activité partielle . indemnités . complémentaire:
titre: indemnité complémentaire
description: >-
L'indemnité complémentaire de chômage partielle est une indemnité versée par
l'entreprise pour les salaires proches du SMIC permettant de s'assurer que
rémunération effectivement perçue ne soit jamais inférieure à celle
du SMIC net.
formule:
allègement:
assiette: rémunération mensuelle minimale
abattement:
somme:
- rémunération . net de cotisations
- indemnités . base
contrat salarié . activité partielle . indemnités . conventionnelle:
applicable si: convention syntec
formule:
produit:
assiette: rémunération . assiette congés payés
taux:
grille:
assiette: rémunération . assiette congés payés
tranches:
- montant: 95% - 70%
plafond: 2000
- montant: 80% - 70%
plafond: plafond sécurité sociale temps plein
- montant: 75% - 70%
références:
Legifrance: https://www.legifrance.gouv.fr/affichIDCCArticle.do?idArticle=KALIARTI000028465400&cidTexte=KALITEXT000028465378&dateTexte=29990101&categorieLien=id
Juritravail: https://www.juritravail.com/Actualite/Hygiene-securite-travail-employeur/Id/327284
contrat salarié . activité partielle . retrait absence:
titre: retrait activité partielle
formule:
multiplication:
assiette: rémunération . taux horaire
facteur: heures chômées
contrat salarié . activité partielle . indemnisation entreprise:
titre: Remboursement de l'indemnité d'activité partielle
description: >-
Dans le cadre de la crise du Coronavirus, le gouvernement a anoncé que
l'indemnité de chômage partiel sera prise à 100% en charge par l'état.
formule:
encadrement:
valeur: indemnités . base
plancher: 8.03 €/heure * heures chômées
plafond:
recalcul:
avec:
rémunération . brut de base: 4.5 * SMIC
# TODO : This should be merged with other convention collectives
contrat salarié . activité partielle . convention syntec:
question: La convention collective Syntec est-elle applicable à l'entreprise ?
description: >-
Convention Collective applicable aux salariés des Bureaux d'Études
Techniques, des Cabinets d'Ingénieurs-Conseils et des Sociétés de Conseils.
Cette convention collective prévoit notamment une majoration de l'indemnité
de chômage partielle au dessus du minimum légal et à la charge de
l'entreprise.
par défaut: non
rend non applicable:
# TODO: this is not working, the question is still displayed. This should be
# fixed but is not critical
- profession spécifique
contrat salarié . déduction forfaitaire spécifique:
description: >-
Pour une liste précise de professions, l'employeur peut pratiquer une
@ -217,7 +378,7 @@ contrat salarié . déduction forfaitaire spécifique:
titre: assiette avec DFS
remplace:
règle: cotisations . assiette
sauf dans: contrat salarié . CSG
sauf dans: contrat salarié . CSG et CRDS
# TODO: ajouter pas d'abattement pour l'assurance chômage mais seulement
# pour les journalistes. Nécessite probablement de faire un re-remplacement
# inverse.
@ -235,13 +396,13 @@ contrat salarié . déduction forfaitaire spécifique:
contrat salarié . déduction forfaitaire spécifique . taux:
formule:
variations:
- si: profession = 'journaliste'
- si: profession spécifique = 'journaliste'
alors: 20%
- si: profession = 'ouvrier du bâtiment'
- si: profession spécifique = 'ouvrier du bâtiment'
alors: 10%
- si: profession = 'artiste musicien'
- si: profession spécifique = 'artiste musicien'
alors: 20%
- si: profession = 'pilote de ligne ou personnel navigant'
- si: profession spécifique = 'pilote de ligne ou personnel navigant'
alors: 30%
- sinon: 0%
références:
@ -356,7 +517,7 @@ contrat salarié . CDD . compensation pour congés non pris:
formule:
le maximum de:
- produit:
assiette: assiette mensuelle
assiette: rémunération . assiette congés payés
taux: 10%
facteur: proportion congés non pris
- produit:
@ -408,15 +569,10 @@ contrat salarié . CDD . congés dus en jours ouvrés:
contrat salarié . congés dus par mois:
formule: 25 jour ouvré / 12 mois
contrat salarié . CDD . compensation pour congés non pris . assiette mensuelle:
unité: €/mois
formule: rémunération . brut de base + prime de fin de contrat
contrat salarié . CDD . compensation pour congés non pris . salaire journalier:
unité: €/jour ouvré
formule: assiette mensuelle / période . jours ouvrés moyen par mois
formule: rémunération . assiette congés payés / période . jours ouvrés moyen par mois
contrat salarié . CDD . prime de fin de contrat:
indemnité:
@ -770,8 +926,7 @@ contrat salarié . apprentissage:
Le contrat d'apprentissage est un contrat de travail écrit à durée limitée (CDD) ou à durée indéterminée (CDI) entre un salarié et un employeur. Il permet à l'apprenti de suivre une formation en alternance en entreprise sous la responsabilité d'un maître d'apprentissage et en centre de formation des apprentis (CFA) pendant 1 à 3 ans.
formule: contrat salarié = 'apprentissage'
rend non applicable:
- CSG
- CRDS
- CSG et CRDS
- statut cadre
- statut JEI
- régime des impatriés
@ -916,13 +1071,13 @@ contrat salarié . cotisations . assiette minimale:
recalcul:
règle: rémunération . assiette de vérification du SMIC
avec:
rémunération . brut de base: SMIC
rémunération . brut de base: SMIC horaire * temps de travail . effectif
contrat salarié . rémunération . brut de base:
titre: Salaire brut
résumé: Brut de base inscrit dans le contrat de travail
résumé: Brut de référence (sans les primes, indemnités ni majorations)
type: salaire
question: Quel est le salaire de base ?
question: Quel est votre salaire brut ?
description: |
C'est le salaire *brut* régulier inscrit dans le contrat de travail. Il ne change jamais entre les mois et ne peut pas être modifié sans signature des deux parties.
@ -985,6 +1140,10 @@ contrat salarié . rémunération . brut de base . équivalent temps plein:
salaire médian: 2300
SMIC: 1522
contrat salarié . rémunération . taux horaire:
unité: €/heure
formule: assiette de vérification du SMIC / temps de travail
contrat salarié . rémunération . taux horaire des heures supplémentaires et complémentaires:
description: >
Le taux horaire utilisé pour calculer la rémunération liée au heures
@ -1014,6 +1173,26 @@ contrat salarié . rémunération . assiette de vérification du SMIC:
payées (et non de manière lissée sur l'année), c'est pourquoi nous ne les
incluons pas dans cette formule.
contrat salarié . rémunération . assiette congés payés:
titre: Assiette pour le calcul de l'indemnité de congés payés
description: >-
Pendant ses congés, le salarié ne perçoit pas son salaire. Il perçoit une
indemnité de congés payés.
Toutes les sommes ayant le caractère de salaire sont prises en compte pour
déterminer l'indemnité de congés payés. Les autres sommes ne sont pas prise en
compte.
formule:
somme:
- brut de base
- heures supplémentaires
- heures complémentaires
- avantages en nature
- primes . ancienneté
- primes . activité
références:
service-public.fr: https://www.service-public.fr/particuliers/vosdroits/F33359
contrat salarié . rémunération . primes:
description: |
Les primes sont des compléments de salaire versés au salarié en vertu du
@ -1098,16 +1277,19 @@ contrat salarié . rémunération . brut:
# et de retraite complémentaire on ne ré-intègre ici que la part employeur
# (car la part salarié est déjà comptabilisé dans `rémunération . brut de
# base` dont elle vient en déduction).
somme:
- rémunération . brut de base
- avantages en nature . montant
- primes
- CDD . indemnités salarié
- heures supplémentaires
- heures complémentaires
- frais professionnels
- prévoyance . employeur
- retraite supplémentaire . employeur
allègement:
assiette:
somme:
- rémunération . brut de base
- avantages en nature . montant
- primes
- CDD . indemnités salarié
- heures supplémentaires
- heures complémentaires
- frais professionnels
- prévoyance . employeur
- retraite supplémentaire . employeur
abattement: activité partielle . retrait absence
contrat salarié . rémunération . heures supplémentaires:
titre: rémunération heures supplémentaires
@ -1135,6 +1317,25 @@ contrat salarié . rémunération . heures complémentaires:
- temps de travail . heures complémentaires
- temps de travail . heures complémentaires . majoration
contrat salarié . rémunération . revenus de remplacement:
description: >-
Les revenus de remplacement sont les revenus perçus en remplacement de la
rémunération du travail : allocations de chômage ou de chômage partiel,
indemnités maladie ou accident du travail, pension de retraite, revenu
d'intégration sociale, etc.
Ces revenus sont imposables mais sont exonérés de cotisations sociales. Ils
sont soumis à la CSG/CRDS avec un taux spécifique.
formule:
somme:
- activité partielle . indemnités
note: >-
L'indemnité complémentaire n'est pas ajoutée ici car elle est
systématiquement exonérée de CSG du fait de l'écrêtement pour les bas
revenus.
L'ajouter abouti à un calcul cyclique (vu qu'elle dépend du montant de la CSG)
contrat salarié . avantages sociaux:
description: >
Ce sont les avantages sociaux payés par l'employeur. Ils sont spécifiques à l'entreprise, et fournis par des structures privées (mutuelle, assurance...).
@ -1309,27 +1510,6 @@ contrat salarié . plafond sécurité sociale . renonciation proratisation:
- règle: plafond sécurité sociale
par: plafond sécurité sociale temps plein
contrat salarié . SMIC temps plein:
unité: €/mois
formule:
produit:
assiette: temps de travail . base légale * période . semaines par mois
facteur: SMIC horaire
références:
décret: https://www.legifrance.gouv.fr/affichTexte.do?cidTexte=JORFTEXT000037833206
contrat salarié . SMIC temps plein . net imposable:
titre: SMIC net imposable
description: Montant du SMIC net imposable pour un temps plein.
formule:
recalcul:
règle: rémunération . net imposable . base
avec:
rémunération . brut de base: SMIC temps plein
références:
barème PAS: https://bofip.impots.gouv.fr/bofip/11255-PGP.html
contrat salarié . SMIC contractuel:
description: >
Valeur du SMIC pro-ratisé pour prendre en compte le temps partiel et utilisé pour la détermination du salaire minimum
@ -1355,8 +1535,7 @@ contrat salarié . cotisations . salariales:
- contribution d'équilibre général .salarié
- contribution d'équilibre technique .salarié
- chômage .salarié
- CSG
- CRDS
- CSG et CRDS
- APEC .salarié
- complémentaire santé .salarié
- conventionnelles
@ -1398,8 +1577,17 @@ contrat salarié . rémunération . net de cotisations:
titre: Salaire net de cotisations
type: rémunération
unité: €/mois
formule:
somme:
- brut
- (- cotisations . salariales)
formule: brut - cotisations . salariales
contrat salarié . rémunération . net avec revenus de remplacement:
formule:
somme:
- net de cotisations
- revenus de remplacement
- (- CSG et CRDS . revenus de remplacement)
contrat salarié . rémunération . net imposable:
titre: Salaire net imposable
@ -1408,27 +1596,25 @@ contrat salarié . rémunération . net imposable:
description: |
C'est la base utilisée pour calculer l'impôt sur le revenu.
formule:
allègement:
assiette: base
abattement:
somme:
- frais professionnels . part déductible
- prime d'impatriation
- exonération d'impôt des stagiaires et apprentis
- heures supplémentaires et complémentaires défiscalisées
- retraite supplémentaire . exonération fiscale
- prévoyance . exonération fiscale
somme:
- base
- (- frais professionnels . part déductible)
- (- prime d'impatriation)
- (- exonération d'impôt des stagiaires et apprentis)
- (- heures supplémentaires et complémentaires défiscalisées)
- (- retraite supplémentaire . exonération fiscale)
- (- prévoyance . exonération fiscale)
références:
DSN: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
contrat salarié . rémunération . net imposable . base:
titre: net imposable avant exonérations
description: Le net imposable avant les exonérations et déductions
formule:
somme:
- rémunération . net de cotisations
- net avec revenus de remplacement
- avantages sociaux
- CSG .non déductible
- CRDS
- CSG et CRDS . non déductible
contrat salarié . rémunération . net imposable . heures supplémentaires et complémentaires défiscalisées:
formule:
@ -1459,8 +1645,9 @@ contrat salarié . prime d'impatriation:
contrat salarié . rémunération . net:
titre: Salaire net
unité: €/mois
type: salaire
question: Quel est le salaire net ?
question: Quel est votre salaire net ?
résumé: Salaire net avant impôt
description: >-
C'est le montant que le salarié toucherait à la fin du mois avant de payer
@ -1475,12 +1662,10 @@ contrat salarié . rémunération . net:
le changer, il faut signer un avenant au contrat).
formule:
allègement:
assiette: rémunération . net de cotisations
abattement:
somme:
- avantages en nature . montant
- frais professionnels . titres-restaurant . montant
somme:
- net avec revenus de remplacement
- (- avantages en nature . montant)
- (- frais professionnels . titres-restaurant . montant)
contrat salarié . rémunération . net après impôt:
titre: Salaire net après impôt
@ -1519,7 +1704,7 @@ contrat salarié . prix du travail:
contrat salarié . rémunération . total:
titre: Total chargé
question: Quel est la rémunération chargée ?
question: Quelle est la rémunération chargée ?
résumé: Dépensé par l'entreprise
type: salaire
unité par défaut: €/mois
@ -1529,6 +1714,7 @@ contrat salarié . rémunération . total:
somme:
- brut
- cotisations . patronales
- activité partielle . indemnités
contrat salarié . cotisations . patronales . réductions de cotisations:
formule:
@ -1624,9 +1810,8 @@ contrat salarié . cotisations . patronales . conventionnelles:
formule: 0
contrat salarié . aides employeur:
titre: aides à l'embauche
titre: aides employeur
résumé: Pour l'employeur, différées dans le temps
icônes: 🎁
description: |
Ces aides sont appelées différées, car elles ne consistent pas en une simple réduction des cotisations mensuelles : elles interviendront a posteriori par exemple sous forme de crédit d'impôt.
@ -1634,8 +1819,8 @@ contrat salarié . aides employeur:
formule:
somme:
- aide à l'embauche d'apprentis
- activité partielle . indemnisation entreprise
- emploi franc
note:
contrat salarié . aides employeur . aide à l'embauche d'apprentis:
description: |
@ -1707,6 +1892,12 @@ contrat salarié . temps de travail:
- heures complémentaires
description: En France, la base légale du travail est de 35h/semaine. Mais un grand nombre de dispositions existantes permettent de faire varier ce nombre. Vous pouvez les retrouver sur la page [service-public.fr](https://www.service-public.fr/particuliers/vosdroits/N458) dédiée.
contrat salarié . temps de travail . effectif:
formule:
somme:
- temps de travail
- (- activité partielle . heures chômées)
contrat salarié . temps de travail . temps contractuel:
unité: heures/mois
formule:
@ -2381,21 +2572,42 @@ contrat salarié . contribution au dialogue social:
assiette: cotisations . assiette
taux: 0.016%
contrat salarié . assiette CSG et CRDS:
note: Cette assiette est complexe, cette version n'est qu'une simplification.
contrat salarié . CSG et CRDS:
description: >-
La CSG et la CRDS sont dues par tous les salariés remplissant les deux
conditions suivantes :
- ils sont domiciliés fiscalement en France,
- ils sont à la charge dun régime français dassurance maladie obligatoire.
Si lun des deux critères nest pas rempli, la CSG et la CRDS ne sont pas
dues, à la condition den apporter la preuve (justificatif fiscal ou carte
dassuré social).
formule:
somme:
- CSG
- CRDS
contrat salarié . CSG et CRDS . assiette de base:
références:
calcul: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-csg-crds/les-revenus-salariaux-soumis-a-l.html
abattement: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-csg-crds/abattement-et-deductions/les-revenus-exclus-de-labattemen.html
heures supplémentaires: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
formule:
somme:
- assiette abattue
- assiette abattue totale
# TODO : ce sont les cotisations forfaitaires qui ne rentrent pas dans
# l'abattue, et non tous les avantages sociaux
- avantages sociaux
# - (- assiette revenu remplacements)
- (- assiette heures supplémentaires et complémentaires défiscalisées)
contrat salarié . assiette CSG et CRDS . assiette abattue:
contrat salarié . CSG et CRDS . assiette abattue totale:
formule:
barème:
assiette: cotisations . assiette
assiette:
cotisations . assiette
# - rémunération . revenus de remplacement
multiplicateur: plafond sécurité sociale
# c'est en fait un abattement de 1,75% sur la partie en-dessous de 4 fois le plafond
tranches:
@ -2403,7 +2615,13 @@ contrat salarié . assiette CSG et CRDS . assiette abattue:
plafond: 4
- taux: 100%
contrat salarié . CSG . assiette heures supplémentaires et complémentaires défiscalisées:
contrat salarié . CSG et CRDS . assiette revenu remplacements:
formule:
produit:
taux: 98.25%
assiette: rémunération . revenus de remplacement
contrat salarié . CSG et CRDS . assiette heures supplémentaires et complémentaires défiscalisées:
formule:
produit:
assiette: rémunération . net imposable . heures supplémentaires et complémentaires défiscalisées
@ -2411,33 +2629,45 @@ contrat salarié . CSG . assiette heures supplémentaires et complémentaires d
références:
DSN: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
contrat salarié . CSG . assiette CSG déductible:
formule: assiette CSG et CRDS - assiette heures supplémentaires et complémentaires défiscalisées
contrat salarié . CSG et CRDS . non déductible:
titre: CSG non déductible et CRDS
formule:
somme:
- CSG . base .non déductible
- CSG . heures supplémentaires et complémentaires défiscalisées
- CRDS
- revenus de remplacement . CSG non déductible
- revenus de remplacement . CRDS
contrat salarié . CSG:
contrat salarié . CSG et CRDS . CSG:
non applicable si: établissement . localisation . département = 'Mayotte'
cotisation:
impôt: oui
dû par: salarié
description: |
Contribution sociale généralisée.
Prélèvement obligatoire qui participe au financement de la sécurité sociale.
formule:
produit:
composantes:
- attributs:
impôt sur le revenu: non déductible
assiette: assiette CSG et CRDS
taux: 2.4%
- attributs:
impôt sur le revenu: déductible
assiette: assiette CSG déductible
taux: 6.8%
- attributs:
nom: heures supplémentaires et complémentaires défiscalisées
impôt sur le revenu: non déductible
assiette: assiette heures supplémentaires et complémentaires défiscalisées
taux: 6.8%
description: >-
La contribution sociale généralisée (CSG) est un impôt destiné à participer
au financement de la protection sociale.
A la différence des cotisations sociales qui ne portent que sur les revenus
dactivité, la CSG concerne, outre les revenus dactivité et de remplacement
(allocations chômage, indemnités journalières…), les revenus du patrimoine,
les produits de placement ou les sommes engagées ou redistribuées par les
jeux.
Elle est prélevée à la source sur la plupart des revenus. Elle est recouvrée
par les Urssaf sur les revenus dactivité et par ladministration fiscale
sur les revenus du patrimoine.
Le produit de la CSG est reversé à la Cnam et à la Cnaf, il finance
également le fonds de solidarité vieillesse
formule:
somme:
- base
- heures supplémentaires et complémentaires défiscalisées
références:
urssaf.fr: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/la-base-de-calcul/assiette-csg-crds.html
heures supplémentaires: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
exemples:
- nom: 'CSG cadre'
situation:
@ -2450,18 +2680,117 @@ contrat salarié . CSG:
cotisations . assiette: 1500
complémentaire santé . forfait: 40
valeur attendue: 137.425
références:
heures supplémentaires: https://dsn-info.custhelp.com/app/answers/detail/a_id/2110
contrat salarié . CRDS:
contrat salarié . CSG et CRDS . CSG . taux déductible:
formule: 2.4%
contrat salarié . CSG et CRDS . CSG . taux non déductible:
formule: 6.8%
contrat salarié . CSG et CRDS . CSG . base:
titre: CSG
formule:
multiplication:
assiette: assiette de base
composantes:
- attributs:
impôt sur le revenu: non déductible
taux: taux déductible
- attributs:
impôt sur le revenu: déductible
taux: taux non déductible
contrat salarié . CSG et CRDS . CSG . heures supplémentaires et complémentaires défiscalisées:
titre: CSG heures supplémentaires et complémentaires défiscalisées
formule:
produit:
assiette: assiette heures supplémentaires et complémentaires défiscalisées
taux: taux déductible + taux non déductible
contrat salarié . CSG et CRDS . CRDS:
cotisation:
impôt: oui
dû par: salarié
description: Contribution pour le remboursement de la dette sociale
formule:
produit:
assiette: assiette CSG et CRDS
taux: 0.5%
assiette:
somme:
- assiette de base
- assiette heures supplémentaires et complémentaires défiscalisées
taux: taux
contrat salarié . CSG et CRDS . CRDS . taux:
titre: taux CRDS
formule: 0.5%
contrat salarié . CSG et CRDS . revenus de remplacement:
titre: CSG et CRDS revenus de remplacement
description: >-
La CSG et CRDS prélevées sur les revenus de remplacement.
note: >-
Le prélèvement de la CSG et de la CRDS ne peut pas avoir pour effet de
réduire le montant de la rémunération dactivité et des allocations de
chômage à un seuil inférieur au Smic brut.
formule:
somme:
- revenus de remplacement . CSG déductible
- revenus de remplacement . CSG non déductible
- revenus de remplacement . CRDS
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible:
titre: CSG déductible revenus de remplacement
applicable si: rémunération nette >= SMIC temps plein
formule: montant
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible . rémunération nette:
formule:
somme:
- rémunération . net de cotisations
- rémunération . revenus de remplacement
- (- montant)
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible . montant:
titre: CSG déductible
formule:
produit:
assiette: CSG et CRDS . assiette revenu remplacements
taux: CSG . taux déductible
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible:
titre: CSG non déductible revenus de remplacement
applicable si: rémunération nette >= SMIC temps plein
formule: montant
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible . rémunération nette:
formule:
somme:
- rémunération . net de cotisations
- rémunération . revenus de remplacement
- (- CSG déductible . montant)
- (- montant)
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible . montant:
titre: CSG non déductible
formule:
produit:
assiette: CSG et CRDS . assiette revenu remplacements
taux: 3.8%
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS:
titre: CRDS revenus de remplacement
applicable si: rémunération nette >= SMIC temps plein
formule: montant
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS . rémunération nette:
formule:
somme:
- rémunération . net de cotisations
- rémunération . revenus de remplacement
- (- CSG déductible . montant)
- (- CSG non déductible . montant)
- (- montant)
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS . montant:
titre: CRDS
formule:
produit:
assiette: assiette revenu remplacements
taux: CRDS . taux
contrat salarié . FNAL:
titre: Contribution au Fonds National dAide au Logement
@ -2814,7 +3143,7 @@ contrat salarié . taxe sur les salaires . barème:
assiette: 2300
valeur attendue: 2627.97
contrat salarié . profession:
contrat salarié . profession spécifique:
question: Le salarié exerce t-il l'une des professions suivantes ?
formule:
une possibilité:
@ -2824,14 +3153,14 @@ contrat salarié . profession:
- artiste musicien
- pilote de ligne ou personnel navigant
contrat salarié . profession . journaliste:
contrat salarié . profession spécifique . journaliste:
icônes:
description: >-
Concerne les journalistes, rédacteurs, photographes, directeurs de journaux
Critiques dramatiques et musicaux.
contrat salarié . profession . journaliste . réduction de taux:
applicable si: profession = 'journaliste'
contrat salarié . profession spécifique . journaliste . réduction de taux:
applicable si: profession spécifique = 'journaliste'
remplace:
- règle: vieillesse . taux employeur plafonné
par: vieillesse . taux employeur plafonné * réduction de taux
@ -2852,8 +3181,8 @@ contrat salarié . profession . journaliste . réduction de taux:
par: ATMP . taux minimum * réduction de taux
formule: 80%
contrat salarié . profession . journaliste . abattement fiscal:
applicable si: profession = 'journaliste'
contrat salarié . profession spécifique . journaliste . abattement fiscal:
applicable si: profession spécifique = 'journaliste'
remplace: rémunération . net imposable
titre: net imposable journaliste
formule:
@ -2861,20 +3190,20 @@ contrat salarié . profession . journaliste . abattement fiscal:
assiette: rémunération . net imposable
abattement: 7650€/an
contrat salarié . profession . ouvrier du bâtiment:
contrat salarié . profession spécifique . ouvrier du bâtiment:
icônes: 👷‍♂️
description: >-
Concerne les ouvriers du bâtiment visés aux paragraphes 1er et 2 de
larticle 1er du décret du 17 novembre 1936, à lexclusion de ceux qui
travaillent en usine ou en atelier.
contrat salarié . profession . artiste musicien:
contrat salarié . profession spécifique . artiste musicien:
icônes: 🎼
description: >-
Concerne les artistes musiciens, choristes, chefs dorchestre, régisseurs de
théâtre
contrat salarié . profession . pilote de ligne ou personnel navigant:
contrat salarié . profession spécifique . pilote de ligne ou personnel navigant:
icônes:
description: >-
Concerne les pilotes, radios, mécaniciens navigants des compagnies de
@ -3227,7 +3556,7 @@ contrat salarié . cotisations . assiette forfaitaire . montant:
- assiette . salariale
- règle: assiette . salariale
dans: vieillesse
- règle: assiette CSG et CRDS . assiette abattue
- règle: CSG et CRDS . assiette abattue totale
- règle: plafond sécurité sociale
par: plafond sécurité sociale temps plein
sauf dans:

View File

@ -13,8 +13,7 @@ situation personnelle . domiciliation fiscale à l'étranger:
question: La résidence fiscale est-elle située à l'étranger ?
rend non applicable:
- dirigeant . indépendant . cotisations et contributions . CSG et CRDS
- contrat salarié . CSG
- contrat salarié . CRDS
- contrat salarié . CSG et CRDS
- impôt
par défaut: non
références:

View File

@ -2,9 +2,6 @@
display: flex;
align-items: center;
margin: 1rem 0;
max-width: 100%;
color: var(--lighterInverseTextColor);
width: 45rem;
}
.ui__.banner img {

View File

@ -16,6 +16,12 @@ export let SalaireBrutSection = ({ getRule }) => {
),
salaireDeBase = getRule('contrat salarié . rémunération . brut de base'),
rémunérationBrute = getRule('contrat salarié . rémunération . brut'),
chômagePartielIndemnité = getRule(
'contrat salarié . activité partielle . indemnités'
),
chômagePartielAbsence = getRule(
'contrat salarié . activité partielle . retrait activité partielle'
),
primes = getRule('contrat salarié . rémunération . primes')
return (
<div className="payslip__salarySection">
@ -30,6 +36,12 @@ export let SalaireBrutSection = ({ getRule }) => {
)}
/>
)}
{chômagePartielIndemnité?.nodeValue && (
<>
<Line rule={chômagePartielAbsence} />
<Line rule={chômagePartielIndemnité} />
</>
)}
{!!heuresSupplémentaires?.nodeValue && (
<Line rule={heuresSupplémentaires} />
)}

View File

@ -1,11 +1,12 @@
import { formatValue } from 'Engine/format'
import React, { useCallback, useState } from 'react'
import { formatPercentage } from 'Engine/format'
import { debounce as debounceFn } from '../utils'
import './PercentageField.css'
export default function PercentageField({ onChange, value, debounce }) {
export default function PercentageField({ onChange, value, debounce = 0 }) {
const [localValue, setLocalValue] = useState(value)
const debouncedOnChange = useCallback(
debounce ? debounce(debounce, onChange) : onChange,
debounce ? debounceFn(debounce, onChange) : onChange,
[debounce, onChange]
)
@ -26,7 +27,10 @@ export default function PercentageField({ onChange, value, debounce }) {
max="1"
/>
<span style={{ display: 'inline-block', width: '3em' }}>
{formatPercentage(localValue)}
{formatValue({
value: localValue,
unit: '%'
})}
</span>
</div>
)

View File

@ -1,7 +1,4 @@
import {
deletePreviousSimulation,
loadPreviousSimulation
} from 'Actions/actions'
import { loadPreviousSimulation } from 'Actions/actions'
import React from 'react'
import { Trans } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
@ -20,17 +17,13 @@ export default function PreviousSimulationBanner() {
return (
<Banner hidden={!previousSimulation || newSimulationStarted} icon="💾">
<Trans i18nKey="previousSimulationBanner.info">
Votre précédente simulation a été sauvegardée.
Votre précédente simulation a été sauvegardée :
</Trans>{' '}
<LinkButton onClick={() => dispatch(loadPreviousSimulation())}>
<Trans i18nKey="previousSimulationBanner.retrieveButton">
Retrouver ma simulation
</Trans>
</LinkButton>
.{' '}
<LinkButton onClick={() => dispatch(deletePreviousSimulation())}>
<Trans>Effacer</Trans>
</LinkButton>
</Banner>
)
}

View File

@ -1,5 +1,7 @@
import Controls from 'Components/Controls'
import Conversation, { ConversationProps } from 'Components/conversation/Conversation'
import Conversation, {
ConversationProps
} from 'Components/conversation/Conversation'
import SeeAnswersButton from 'Components/conversation/SeeAnswersButton'
import PageFeedback from 'Components/Feedback/PageFeedback'
import SearchButton from 'Components/SearchButton'
@ -13,23 +15,28 @@ import * as Animate from 'Ui/animate'
import Progress from 'Ui/Progress'
type SimulationProps = {
explanations: React.ReactNode
explanations?: React.ReactNode
results?: React.ReactNode
customEndMessages?: ConversationProps['customEndMessages']
showPeriodSwitch?: boolean
}
export default function Simulation({
explanations,
customEndMessages
results,
customEndMessages,
showPeriodSwitch
}: SimulationProps) {
const firstStepCompleted = useSelector(firstStepCompletedSelector)
const progress = useSelector(simulationProgressSelector)
return (
<>
<TargetSelection />
<TargetSelection showPeriodSwitch={showPeriodSwitch} />
<SearchButton invisibleButton />
{firstStepCompleted && (
<>
<Animate.fromTop>
{results}
<div
style={{
display: 'flex',

View File

@ -10,7 +10,7 @@ import React, { useContext, useEffect, useState } from 'react'
import emoji from 'react-easy-emoji'
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { Link } from 'react-router-dom'
import { Link, useLocation } from 'react-router-dom'
import { RootState } from 'Reducers/rootReducer'
import {
analysisWithDefaultsSelector,
@ -23,7 +23,7 @@ import AnimatedTargetValue from 'Ui/AnimatedTargetValue'
import CurrencyInput from './CurrencyInput/CurrencyInput'
import './TargetSelection.css'
export default function TargetSelection() {
export default function TargetSelection({ showPeriodSwitch = true }) {
const [initialRender, setInitialRender] = useState(true)
const analysis = useSelector(analysisWithDefaultsSelector)
const objectifs = useSelector(
@ -86,7 +86,7 @@ export default function TargetSelection() {
</h2>
)}
</div>
{index === 0 && <PeriodSwitch />}
{index === 0 && showPeriodSwitch && <PeriodSwitch />}
</div>
<section
className="ui__ plain card"
@ -198,12 +198,19 @@ const Target = ({ target, initialRender }) => {
let Header = ({ target }) => {
const sitePaths = useContext(SitePathsContext)
const { t } = useTranslation()
const { pathname } = useLocation()
// TODO : Super hacky, we want to amend one label in the covid simulator, but
// because the label is fetched from the global state we have to do a hack
// here based on the URL.
const hackyShowPeriod = pathname === sitePaths.coronavirus
return (
<span className="header">
<span className="texts">
<span className="optionTitle">
<Link to={sitePaths.documentation.rule(target.dottedName)}>
{target.title || target.name}
{hackyShowPeriod && ' ' + t('mensuel')}
</Link>
</span>
<p>{target.summary}</p>
@ -326,7 +333,7 @@ function AidesGlimpse() {
<span>{formatCurrency(aides.nodeValue, language)}</span>
</AnimatedTargetValue>
</strong>{' '}
<Trans>d'aides</Trans> {emoji(aides.explanation.icons)}
<Trans>d'aides</Trans> {emoji(aides.explanation?.icons ?? '')}
</RuleLink>
</div>
</Animate.fromTop>

View File

@ -1,6 +1,5 @@
import { goToQuestion, resetSimulation } from 'Actions/actions'
import Overlay from 'Components/Overlay'
import RuleLink from 'Components/RuleLink'
import Value from 'Components/Value'
import { getRuleFromAnalysis } from 'Engine/rules'
import React from 'react'
@ -19,6 +18,7 @@ import './AnswerList.css'
export default function AnswerList({ onClose }) {
const dispatch = useDispatch()
const { folded, next } = useSelector(stepsToRules)
console.log({ next })
return (
<Overlay onClose={onClose} className="answer-list">
<h2>
@ -38,11 +38,15 @@ export default function AnswerList({ onClose }) {
</small>
</h2>
<StepsTable {...{ rules: folded, onClose }} />
<h2>
{emoji('🔮 ')}
<Trans>Prochaines questions</Trans>
</h2>
<StepsTable {...{ rules: next, onClose }} />
{next.length > 0 && (
<>
<h2>
{emoji('🔮 ')}
<Trans>Prochaines questions</Trans>
</h2>
<StepsTable {...{ rules: next, onClose }} />
</>
)}
</Overlay>
)
}
@ -62,10 +66,18 @@ function StepsTable({ rules, onClose }) {
`}
>
<td>
<RuleLink {...rule} />
<button
className="ui__ link-button"
onClick={() => {
dispatch(goToQuestion(rule.dottedName))
onClose()
}}
>
{rule.title}
</button>
</td>
<td>
<button
<span
className="answer"
css={`
display: inline-block;
@ -76,21 +88,16 @@ function StepsTable({ rules, onClose }) {
text-align: start;
font-weight: 500;
> span {
border-bottom: 1px dashed blue;
border-bottom-color: var(--textColorOnWhite);
padding: 0.05em 0em;
display: inline-block;
}
`}
onClick={() => {
dispatch(goToQuestion(rule.dottedName))
onClose()
}}
>
<span className="answerContent">
<Value {...rule} />
</span>
</button>{' '}
</span>{' '}
</td>
</tr>
))}

View File

@ -15,6 +15,8 @@ export default function Input({
onSubmit,
dottedName,
value,
defaultValue,
autoFocus,
unit
}) {
const colors = useContext(ThemeColorsContext)
@ -36,9 +38,10 @@ export default function Input({
<div className="answer">
<NumberFormat
autoFocus
className={'suffixed'}
autoFocus={autoFocus}
className="suffixed"
id={'step-' + dottedName}
placeholder={defaultValue}
thousandSeparator={thousandSeparator}
decimalSeparator={decimalSeparator}
allowEmptyFormatting={true}

View File

@ -87,7 +87,8 @@
}
.step input::placeholder {
opacity: 0.7;
opacity: 0.6;
color: grey;
}
.step input[type='tel']::placeholder {
font-family: monospace;

View File

@ -0,0 +1,23 @@
objectifs:
- contrat salarié . rémunération . brut de base
objectifs secondaires:
- contrat salarié . prix du travail
- contrat salarié . rémunération . net
- baisse de revenu chômage partiel
- contrat salarié . activité partielle . indemnités
questions:
uniquement:
- contrat salarié . activité partielle . proportion heures travaillées
- contrat salarié . temps de travail . temps partiel
- contrat salarié . temps de travail . temps partiel . heures par semaine
- contrat salarié . activité partielle . convention syntec
- contrat salarié . profession spécifique
unités par défaut: [€/mois]
situation:
dirigeant: non
contrat salarié . activité partielle: oui
contrat salarié . médecine du travail: non
contrat salarié . complémentaire santé: 0

View File

@ -13,6 +13,7 @@ objectifs secondaires:
questions:
à l'affiche:
Chômage partiel: contrat salarié . activité partielle
Temps partiel: contrat salarié . temps de travail . temps partiel
Cadre: contrat salarié . statut cadre . choix statut cadre
Heures supplémentaires: contrat salarié . temps de travail . heures supplémentaires

View File

@ -97,10 +97,12 @@
display: flex;
flex-direction: column;
text-align: center;
margin: 1rem;
padding-top: 1rem;
padding-bottom: 1rem;
text-decoration: none;
align-items: center;
color: inherit;
font-size: inherit !important;
}

View File

@ -0,0 +1,53 @@
import React, { useCallback } from 'react'
import styled from 'styled-components'
import { debounce } from '../../utils'
type RangeSliderProps = {
value?: number
onChange: React.ChangeEventHandler<HTMLInputElement>
}
export default function RangeSlider({ value, onChange }: RangeSliderProps) {
const debouncedOnChange = useCallback(debounce(100, onChange), [])
return (
<Input
type="range"
min="0"
max="100"
defaultValue={value}
onChange={evt => debouncedOnChange(evt.target.value)}
/>
)
}
const Input = styled.input`
width: 100%;
height: 15px;
border-radius: 5px;
background: #d3d3d3;
outline: none;
opacity: 0.7;
transition: opacity 0.2s;
&:hover {
opacity: 1;
}
&::-webkit-slider-thumb {
appearance: none;
width: 25px;
height: 25px;
border-radius: 50%;
background: var(--color);
cursor: pointer;
}
&::-moz-range-thumb {
width: 25px;
height: 25px;
border-radius: 50%;
background: var(--color);
cursor: pointer;
}
`

View File

@ -125,9 +125,10 @@ span.ui__.enumeration:not(:last-of-type)::after {
.ui__.label {
font-size: 85%;
padding: 0.4rem 0.8rem;
padding: 0.4rem 0.6rem;
font-weight: bold;
color: white;
background: var(--lighterTextColor);
background: var(--darkColor);
border-radius: 0.3rem;
text-align: center;
}

View File

@ -4,6 +4,7 @@ import SelectGéo from 'Components/conversation/select/SelectGéo'
import SelectAtmp from 'Components/conversation/select/SelectTauxRisque'
import SendButton from 'Components/conversation/SendButton'
import CurrencyInput from 'Components/CurrencyInput/CurrencyInput'
import PercentageField from 'Components/PercentageField'
import ToggleSwitch from 'Components/ui/ToggleSwitch'
import { is, prop, unless } from 'ramda'
import React from 'react'
@ -117,6 +118,9 @@ export default function RuleInput({
</>
)
}
if (unit?.numerators.includes('%') && isTarget) {
return <PercentageField {...commonProps} debounce={600} />
}
return <Input {...commonProps} unit={unit} />
}

View File

@ -16,7 +16,8 @@ type EngineConfig = {
}
let enrichRules = input => {
const rules = typeof input === 'string' ? safeLoad(input) : input
const rules =
typeof input === 'string' ? safeLoad(input.replace(/\t/g, ' ')) : input
const rulesList = Array.isArray(rules)
? rules
: Object.entries(rules).map(([dottedName, rule]) => ({
@ -27,20 +28,19 @@ let enrichRules = input => {
}
export default class Engine {
rules: Array<Rule>
parsedRules: Record<DottedName, Rule>
defaultValues: Simulation['situation']
situation: Simulation['situation'] = {}
cache = { ...emptyCache }
constructor(config: EngineConfig = {}) {
const rules = config
? [
...(config.rules ? enrichRules(config.rules) : rulesFr),
...(config.extra ? enrichRules(config.extra) : [])
]
: rulesFr
this.parsedRules = parseAll(rules) as any
this.defaultValues = collectDefaults(rules)
this.rules = [
...(config?.rules ? enrichRules(config.rules) : rulesFr),
...(config?.extra ? enrichRules(config.extra) : [])
]
this.parsedRules = parseAll(this.rules) as any
this.defaultValues = collectDefaults(this.rules)
}
private resetCache() {

View File

@ -1,29 +1,27 @@
import Value from 'Components/Value'
import React, { createContext, useContext, useMemo, useState } from 'react'
import React, { createContext, useContext, useMemo } from 'react'
import Engine from '.'
const EngineContext = createContext<{
export const EngineContext = createContext<{
engine: Engine | null
error: string | null
}>({ engine: new Engine(), error: null })
type InputProps = {
rules?: any
extra?: any
situation?: any
children: React.ReactNode
}
export function Provider({ rules, situation, children }: InputProps) {
const [error, setError] = useState<string | null>(null)
const engine = useMemo(() => {
export function Provider({ rules, extra, situation, children }: InputProps) {
const [engine, error] = useMemo(() => {
try {
setError(null)
return new Engine({ rules })
return [new Engine({ rules, extra }), null]
} catch (err) {
setError(err?.message ?? err.toString())
return null
return [null, (err?.message ?? err.toString()) as string]
}
}, [rules])
}, [rules, extra])
if (engine !== null && !Object.is(situation, engine.situation)) {
engine.setSituation(situation)
}

View File

@ -25,6 +25,8 @@ Commencer: Get started
Continuer: Continue
Cotisations: Contributions
Cotisations sociales: Social contributions
'Covid-19 : Découvrez les mesures de soutien aux entreprises': 'Covid-19: Find out about business support measures'
Coût pour l'entreprise: Cost to the company
Crée le: Created on
Créer une: Create a
De: From
@ -37,6 +39,7 @@ Désactivée: Inactive
Détail annuel des cotisations: Annual detail of my contributions
Effacer: Reset
Embauche: Hiring process
En incluant l'indemnité de chômage partiel: Including short-time working allowance
En-dessous de: Below
Entreprise Individuelle: Sole Proprietorship
Entrez des mots clefs ici: Enter keywords
@ -53,6 +56,7 @@ Gérant majoritaire: Chairman
Gérant minoritaire: Managing director
Imprimer: Print
Impôts: Taxes
'Indemnité chômage partiel prise en charge par l''état :': 'State-paid short-time working allowance :'
Indépendant: Independent
International: International
Intégrer l'interface de simulation: Integrate the simulation interface
@ -75,6 +79,7 @@ Nous n'avons rien trouvé: We didn't find any matching registered company.
Oui: 'Yes'
Outils pour les développeurs: Tools for developers
Pages associées: Related pages
Part du salaire net maintenue: Share of net salary maintained
Part employeur: Employer share
Part salariale: Employee share
Part salarié: Employee share
@ -82,6 +87,7 @@ Pas en auto-entrepreneur: Not in auto-entrepreneur
Pas implémenté: Not implemented
Passer: Skip
Personnalisez l'integration: Customize the integration
'Perte de revenu net :': 'Loss of net income :'
Plafonds des tranches: Wafer ceilings
Plein écran: Fullscreen
Plus d'informations: More information (fr)
@ -108,6 +114,8 @@ Retour à mon activité: Back to my business
Revenir à la documentation: Go back to documentation
Revenu (incluant les dépenses liées à l'activité): Revenue (including expenses related to the activity)
Revenu disponible: Disposable income
'Revenu net avec chômage partiel :': 'Net income with short-time work :'
Revenu net mensuel: Monthly net income
Récapitulatif: Summary
Rémunération du dirigeant: Director's remuneration
Répartition du chiffre d'affaires: Breakdown of turnover
@ -128,6 +136,7 @@ Taux: Rate
Taux calculé: Calculated rate
Taux moyen: Average rate
Total des retenues: Total withheld
'Total payé par l''entreprise :': 'Total paid by the company :'
Tout effacer: Delete all
Tranche de l'assiette: Scale bracket
Un seul associé: Only one partner
@ -381,6 +390,17 @@ comparaisonRégimes:
Create my company as:
trimestreValidés: <0>Number of quarters validated <1>(for retirement)</1></0>
composantes: components
coronavirus:
description: >-
<0>Coronavirus and short-time working: what impact on my income?</0><1>The
government is putting in place measures to support employees affected by the
Coronavirus crisis. One of the key measures is the assumption of the entire
short-time working compensation by the State.</1><2>This simulator allows
you to find out your net income if you have been placed on short-time work,
as well as the total cost to the company.</2>
page:
description: Estimate net income with short-time working benefits
titre: 'Coronavirus and short-time working: what impact on your income?'
cotisation: contribution
créer:
cta:
@ -807,6 +827,7 @@ listeformejuridique:
page:
titre: Legal status list for creating your company in France
maj2019: The simulation is up-to-date in 2019.
mensuel: monthly
mois: month
montant à atteindre: minimum value
multiplicateur: multiplier
@ -836,7 +857,11 @@ pages:
publicode: >-
<0>Publicodes</0><1>Our tools are powered by Publicodes, a new language
for encoding "explainable" algorithms.</1>
code:
description: 'Here is the code to copy and paste on your site:'
titre: Integration Code
code à copier: 'Here is the code to copy and paste on your site:'
couleur: 'What color? '
home:
choice:
iframe: >-
@ -858,8 +883,10 @@ pages:
module</2> to blend it into the visual theme of your page.</2><3>The
attribute <1>data-lang="en"</1> allows you to choose English as the
simulator language.</3>
module: What module?
par: per
path:
coronavirus: /coronavirus
créer:
après: /after-registration
guideStatut:

View File

@ -1,6 +1,14 @@
SMIC horaire:
titre.en: hourly minimum wage (SMIC)
titre.fr: SMIC horaire
SMIC temps plein:
titre.en: '[automatic] minimum wage'
titre.fr: SMIC temps plein
SMIC temps plein . net imposable:
description.en: '[automatic] Amount of the net taxable SMIC for a full-time employee.'
description.fr: Montant du SMIC net imposable pour un temps plein.
titre.en: '[automatic] minimum net taxable income'
titre.fr: SMIC net imposable
aide déclaration revenu indépendant 2019:
description.en: >-
[automatic] These rules calculate the amounts claimed in the 2020 social and
@ -252,6 +260,12 @@ artiste-auteur . revenus . traitements et salaires:
résumé.fr: Le montant brut hors TVA de vos droits d'auteur (recettes précomptées)
titre.en: Income in wages and salaries
titre.fr: Revenu en traitements et salaires
baisse de revenu chômage partiel:
titre.en: '[automatic] short-time working'
titre.fr: baisse de revenu chômage partiel
baisse de revenu chômage partiel . net sans chômage partiel:
titre.en: '[automatic] net without short-time work'
titre.fr: net sans chômage partiel
contrat salarié:
contrôles.0.en: >
[automatic] Remember that a fixed-term contract must always correspond to a
@ -481,9 +495,6 @@ contrat salarié . CDD . compensation pour congés non pris:
- maintenant : Les congés peuvent être pris dès lembauche
titre.en: '[automatic] holiday pay'
titre.fr: indemnité de congés payés
contrat salarié . CDD . compensation pour congés non pris . assiette mensuelle:
titre.en: monthly basis
titre.fr: assiette mensuelle
contrat salarié . CDD . compensation pour congés non pris . proportion congés non pris:
titre.en: proportion of untaken leave
titre.fr: proportion congés non pris
@ -803,26 +814,136 @@ contrat salarié . CDD . événement . rupture pour faute grave ou force majeure
contrat salarié . CDI:
titre.en: CDI
titre.fr: CDI
contrat salarié . CRDS:
description.en: Contribution for the repayment of the social debt
contrat salarié . CSG et CRDS:
description.en: >-
[automatic] The CSG and the CRDS are payable by all employees meeting the
following two conditions:
- they are domiciled in France for tax purposes, - they are covered by a
French compulsory health insurance scheme.
If one of the two criteria is not met, the CSG and CRDS are not due,
provided that proof is provided (tax receipt or social security card).
description.fr: >-
La CSG et la CRDS sont dues par tous les salariés remplissant les deux
conditions suivantes :
- ils sont domiciliés fiscalement en France, - ils sont à la charge dun
régime français dassurance maladie obligatoire.
Si lun des deux critères nest pas rempli, la CSG et la CRDS ne sont pas
dues, à la condition den apporter la preuve (justificatif fiscal ou carte
dassuré social).
titre.en: '[automatic] CSG and CRDS'
titre.fr: CSG et CRDS
contrat salarié . CSG et CRDS . CRDS:
description.en: '[automatic] Contribution for the repayment of the social debt'
description.fr: Contribution pour le remboursement de la dette sociale
titre.en: CRDS
titre.en: '[automatic] DRES'
titre.fr: CRDS
contrat salarié . CSG:
description.en: |-
Generalized social contribution.
Compulsory levy that contributes to the financing of social security.
description.fr: |
Contribution sociale généralisée.
Prélèvement obligatoire qui participe au financement de la sécurité sociale.
titre.en: CSG
contrat salarié . CSG et CRDS . CRDS . taux:
titre.en: '[automatic] CRDS rate'
titre.fr: taux CRDS
contrat salarié . CSG et CRDS . CSG:
description.en: >-
[automatic] The General Social Contribution (CSG) is a tax intended to
contribute to the financing of social protection.
Unlike social contributions, which only apply to earned income, the CSG
covers, in addition to earned income and replacement income (unemployment
benefits, daily allowances, etc.), income from assets, investment income or
sums committed or redistributed by the games.
It is deducted at source from most income. It is collected by the USSAF on
income from activities and by the tax authorities on income from assets.
The CSG proceeds are paid to the CNAM and the CNAF, and also finance the old
age solidarity fund.
description.fr: >-
La contribution sociale généralisée (CSG) est un impôt destiné à participer
au financement de la protection sociale.
A la différence des cotisations sociales qui ne portent que sur les revenus
dactivité, la CSG concerne, outre les revenus dactivité et de remplacement
(allocations chômage, indemnités journalières…), les revenus du patrimoine,
les produits de placement ou les sommes engagées ou redistribuées par les
jeux.
Elle est prélevée à la source sur la plupart des revenus. Elle est recouvrée
par les Urssaf sur les revenus dactivité et par ladministration fiscale
sur les revenus du patrimoine.
Le produit de la CSG est reversé à la Cnam et à la Cnaf, il finance
également le fonds de solidarité vieillesse
titre.en: '[automatic] CSG'
titre.fr: CSG
contrat salarié . CSG . assiette CSG déductible:
titre.en: deductible CSG base
titre.fr: assiette CSG déductible
contrat salarié . CSG . assiette heures supplémentaires et complémentaires défiscalisées:
contrat salarié . CSG et CRDS . CSG . base:
titre.en: '[automatic] CSG'
titre.fr: CSG
contrat salarié . CSG et CRDS . CSG . heures supplémentaires et complémentaires défiscalisées:
titre.en: '[automatic] CSG tax-free overtime and overtime supplements'
titre.fr: CSG heures supplémentaires et complémentaires défiscalisées
contrat salarié . CSG et CRDS . CSG . taux déductible:
titre.en: '[automatic] deductible rate'
titre.fr: taux déductible
contrat salarié . CSG et CRDS . CSG . taux non déductible:
titre.en: '[automatic] non-deductible rate'
titre.fr: taux non déductible
contrat salarié . CSG et CRDS . assiette abattue totale:
titre.en: '[automatic] total slaughter plate'
titre.fr: assiette abattue totale
contrat salarié . CSG et CRDS . assiette de base:
titre.en: '[automatic] base plate'
titre.fr: assiette de base
contrat salarié . CSG et CRDS . assiette heures supplémentaires et complémentaires défiscalisées:
titre.en: '[automatic] tax-free overtime and additional hours base'
titre.fr: assiette heures supplémentaires et complémentaires défiscalisées
contrat salarié . CSG et CRDS . assiette revenu remplacements:
titre.en: '[automatic] income base replacements'
titre.fr: assiette revenu remplacements
contrat salarié . CSG et CRDS . non déductible:
titre.en: '[automatic] Non-deductible CSG and CRDS'
titre.fr: CSG non déductible et CRDS
contrat salarié . CSG et CRDS . revenus de remplacement:
description.en: '[automatic] CSG and CRDS deducted from replacement income.'
description.fr: La CSG et CRDS prélevées sur les revenus de remplacement.
note.en: >-
[automatic] The levying of the CSG and the CRDS may not have the effect of
reducing the amount of earned income and unemployment benefits to a
threshold lower than the gross minimum wage.
note.fr: >-
Le prélèvement de la CSG et de la CRDS ne peut pas avoir pour effet de
réduire le montant de la rémunération dactivité et des allocations de
chômage à un seuil inférieur au Smic brut.
titre.en: '[automatic] CSG and CRDS replacement income'
titre.fr: CSG et CRDS revenus de remplacement
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS:
titre.en: '[automatic] CRDS replacement income'
titre.fr: CRDS revenus de remplacement
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS . montant:
titre.en: '[automatic] DRES'
titre.fr: CRDS
contrat salarié . CSG et CRDS . revenus de remplacement . CRDS . rémunération nette:
titre.en: '[automatic] take-home pay'
titre.fr: rémunération nette
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible:
titre.en: '[automatic] Deductible MSA replacement income'
titre.fr: CSG déductible revenus de remplacement
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible . montant:
titre.en: '[automatic] deductible MSA'
titre.fr: CSG déductible
contrat salarié . CSG et CRDS . revenus de remplacement . CSG déductible . rémunération nette:
titre.en: '[automatic] take-home pay'
titre.fr: rémunération nette
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible:
titre.en: '[automatic] Non-deductible CSG replacement income'
titre.fr: CSG non déductible revenus de remplacement
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible . montant:
titre.en: '[automatic] non-deductible MSA'
titre.fr: CSG non déductible
contrat salarié . CSG et CRDS . revenus de remplacement . CSG non déductible . rémunération nette:
titre.en: '[automatic] take-home pay'
titre.fr: rémunération nette
contrat salarié . FNAL:
description.en: >-
The National Housing Fund (Fnal) is a contribution to ensure the financing
@ -875,14 +996,146 @@ contrat salarié . SMIC contractuel:
pour la détermination du salaire minimum
titre.en: Contractual minimum wage (SMIC)
titre.fr: SMIC contractuel
contrat salarié . SMIC temps plein:
titre.en: full-time mimimum wage (SMIC)
titre.fr: SMIC temps plein
contrat salarié . SMIC temps plein . net imposable:
description.en: '[automatic] Amount of the net taxable SMIC for a full-time employee.'
description.fr: Montant du SMIC net imposable pour un temps plein.
titre.en: '[automatic] minimum net taxable income'
titre.fr: SMIC net imposable
contrat salarié . activité partielle:
description.en: >-
[automatic] Following the Coronavirus crisis, the government introduced an
extended short-time working scheme in which the state pays compensation for
hours worked up to 4.5 SMIC.
The declaration of partial activity is simplified and the effect is
retroactive.
description.fr: >-
À la suite de la crise du Coronavirus, le gouvernement a mis en place un
dispositif de chômage partiel étendu dans lequel l'État prend en charge
l'indemnisation des heures chômées jusquà 4,5 SMIC.
La déclaration d'activité partielle est simplifiée est l'effet est
rétroactif.
question.en: '[automatic] Is the employee on short-time work?'
question.fr: Le salarié est-il en chômage partiel ?
titre.en: '[automatic] partial activity'
titre.fr: activité partielle
contrat salarié . activité partielle . convention syntec:
description.en: >-
[automatic] Collective bargaining agreement applicable to employees of
Technical Design Offices, Engineering Consultancy Firms and Consulting
Firms.
This collective bargaining agreement provides in particular for an increase
in the partial unemployment benefit above the legal minimum and at the
expense of the company.
description.fr: >-
Convention Collective applicable aux salariés des Bureaux d'Études
Techniques, des Cabinets d'Ingénieurs-Conseils et des Sociétés de Conseils.
Cette convention collective prévoit notamment une majoration de l'indemnité
de chômage partielle au dessus du minimum légal et à la charge de
l'entreprise.
question.en: '[automatic] Is the Syntec collective agreement applicable to the company?'
question.fr: La convention collective Syntec est-elle applicable à l'entreprise ?
titre.en: '[automatic] syntec convention'
titre.fr: convention syntec
contrat salarié . activité partielle . heures chômées:
titre.en: '[automatic] non-working hours'
titre.fr: heures chômées
contrat salarié . activité partielle . indemnisation entreprise:
description.en: >-
[automatic] In the context of the Coronavirus crisis, the government has
announced that the short-time working allowance will be 100% paid by the
state.
description.fr: >-
Dans le cadre de la crise du Coronavirus, le gouvernement a anoncé que
l'indemnité de chômage partiel sera prise à 100% en charge par l'état.
titre.en: '[automatic] Reimbursement of partial activity allowance'
titre.fr: Remboursement de l'indemnité d'activité partielle
contrat salarié . activité partielle . indemnités:
description.en: >-
[automatic] If you are placed on short-time work, you are not entitled to a
salary but to a special allowance. For each hour of compensable time off,
the employee receives an allowance from the company. In return, the company
receives a partial activity allowance from the State.
If, after payment of the partial activity allowance, the employee's
remuneration is less than the minimum monthly remuneration (RMM guaranteed
by Articles L3232-1 and following of the Labour Code for full-time
employees), the employer must pay him an additional allowance equal to the
difference between the minimum monthly remuneration (or Smic net) and the
sum initially received by the employee.
description.fr: >-
La mise en chômage partiel ouvre droit non au paiement dun salaire mais à
lallocation spécifique. Pour chaque heure chômée indemnisable, le salarié
reçoit de l'entreprise une indemnité. L'entreprise obtient en contrepartie
de lEtat une allocation dactivité partielle.
Si après versement de lindemnité dactivité partielle la rémunération du
salarié est inférieure à la rémunération mensuelle minimale (RMM garantie
par les articles L3232-1 et suivants du code du travail pour les salariés à
temps plein), l'employeur doit lui verser une allocation complémentaire qui
est égale à la différence entre la rémunération mensuelle minimale (ou Smic
net) et la somme initialement perçue par le salarié.
titre.en: '[automatic] partial activity compensation'
titre.fr: indemnités activité partielle
contrat salarié . activité partielle . indemnités . base:
titre.en: '[automatic] basic partial severance pay'
titre.fr: indemnités d'activité partielle de base
contrat salarié . activité partielle . indemnités . complémentaire:
description.en: >-
[automatic] The supplementary partial unemployment allowance is an allowance
paid by the company for salaries close to the SMIC to ensure that
remuneration actually received is never lower than the net SMIC.
description.fr: >-
L'indemnité complémentaire de chômage partielle est une indemnité versée par
l'entreprise pour les salaires proches du SMIC permettant de s'assurer que
rémunération effectivement perçue ne soit jamais inférieure à celle du SMIC
net.
titre.en: '[automatic] additional allowance'
titre.fr: indemnité complémentaire
contrat salarié . activité partielle . indemnités . conventionnelle:
titre.en: '[automatic] conventional'
titre.fr: conventionnelle
contrat salarié . activité partielle . proportion heures travaillées:
description.en: >-
[automatic] In the case of short-time working, the proportion of hours
worked corresponds to the ratio of the number of hours worked to the usual
contractual working time.
A ratio of 0% means that the employee did not work this month. A ratio of
100% means that the employee worked all those contractual hours.
Overtime, even usual overtime, is not taken into account.
description.fr: >-
Dans le cadre du chômage partiel, la proportion d'heure travaillées
correspond au ratio du nombre d'heures travaillées par rapport au temps de
travail contractuel habituel.
Un ratio de 0% signifie que l'employé n'a pas travaillé ce mois ci. Un ratio
de 100% signifie que l'employé a effectué toutes ces heures contractuelles.
Les heures supplémentaires, même habituelles, ne sont pas prises en compte.
question.en: '[automatic] What is the proportion of hours worked over the month?'
question.fr: Quelle est la proportion d'heures travaillées sur le mois ?
suggestions.0%.en: '[automatic] 0%'
suggestions.0%.fr: 0%
suggestions.20%.en: '[automatic] 20%'
suggestions.20%.fr: 20%
suggestions.50%.en: '[automatic] 50%'
suggestions.50%.fr: 50%
titre.en: '[automatic] proportion of hours worked'
titre.fr: proportion heures travaillées
contrat salarié . activité partielle . retrait absence:
titre.en: '[automatic] partial activity withdrawal'
titre.fr: retrait activité partielle
contrat salarié . activité partielle . rémunération mensuelle minimale:
description.en: >-
[automatic] Full-time employees with reduced working hours are entitled to a
minimum monthly remuneration which may be supplemented by an additional
payment from the employer.
description.fr: >-
Les salariés à temps plein dont lhoraire de travail est réduit ont droit à
une rémunération mensuelle minimale qui peut donner lieu à un versement
complémentaire de lemployeur.
titre.en: '[automatic] minimum monthly pay'
titre.fr: rémunération mensuelle minimale
contrat salarié . aides employeur:
description.en: >
Some aids can be requested by the employer to help hires.
@ -901,8 +1154,8 @@ contrat salarié . aides employeur:
officiel](http://www.aides-entreprises.fr).
résumé.en: Deferred aids available to the employer.
résumé.fr: 'Pour l''employeur, différées dans le temps'
titre.en: deferred employer aids
titre.fr: aides à l'embauche
titre.en: '[automatic] employer assistance'
titre.fr: aides employeur
contrat salarié . aides employeur . aide à l'embauche d'apprentis:
description.en: >
Since 2019, a single hiring aid has replaced four previous schemes. The
@ -1041,14 +1294,6 @@ contrat salarié . apprentissage . diplôme préparé . niveau supérieur au bac
niveau II (License, BMS...), et de niveau III (BTS, SUT, BM, ...)
titre.en: Degree above the baccalaureate level
titre.fr: Diplôme d'un niveau supérieur au bac
contrat salarié . assiette CSG et CRDS:
note.en: '[automatic] This plate is complex, this version is only a simplification.'
note.fr: 'Cette assiette est complexe, cette version n''est qu''une simplification.'
titre.en: CSG and CRDS base
titre.fr: assiette CSG et CRDS
contrat salarié . assiette CSG et CRDS . assiette abattue:
titre.en: reduced base
titre.fr: assiette abattue
contrat salarié . avantages sociaux:
description.en: >-
These are the benefits paid by the employer. They are specific to the
@ -2336,12 +2581,12 @@ contrat salarié . prix du travail:
résumé.fr: Dépensé par l'entreprise
titre.en: labor cost
titre.fr: Coût total
contrat salarié . profession:
contrat salarié . profession spécifique:
question.en: '[automatic] Does the employee work in one of the following professions?'
question.fr: Le salarié exerce t-il l'une des professions suivantes ?
titre.en: '[automatic] profession'
titre.fr: profession
contrat salarié . profession . artiste musicien:
titre.en: '[automatic] specific profession'
titre.fr: profession spécifique
contrat salarié . profession spécifique . artiste musicien:
description.en: >-
[automatic] Concerns musicians, choir members, conductors, theatre managers,
etc.
@ -2350,7 +2595,7 @@ contrat salarié . profession . artiste musicien:
théâtre
titre.en: '[automatic] musical artist'
titre.fr: artiste musicien
contrat salarié . profession . journaliste:
contrat salarié . profession spécifique . journaliste:
description.en: >-
[automatic] Concerns journalists, editors, photographers, newspaper
directors Dramatic and music critics.
@ -2359,13 +2604,13 @@ contrat salarié . profession . journaliste:
Critiques dramatiques et musicaux.
titre.en: '[automatic] journalist'
titre.fr: journaliste
contrat salarié . profession . journaliste . abattement fiscal:
contrat salarié . profession spécifique . journaliste . abattement fiscal:
titre.en: '[automatic] net taxable journalist'
titre.fr: net imposable journaliste
contrat salarié . profession . journaliste . réduction de taux:
contrat salarié . profession spécifique . journaliste . réduction de taux:
titre.en: '[automatic] rate reduction'
titre.fr: réduction de taux
contrat salarié . profession . ouvrier du bâtiment:
contrat salarié . profession spécifique . ouvrier du bâtiment:
description.en: >-
[automatic] Concerns the construction workers referred to in paragraphs 1
and 2 of Article 1 of the Decree of 17 November 1936, excluding those
@ -2376,12 +2621,12 @@ contrat salarié . profession . ouvrier du bâtiment:
travaillent en usine ou en atelier.
titre.en: '[automatic] construction worker'
titre.fr: ouvrier du bâtiment
contrat salarié . profession . pilote de ligne ou personnel navigant:
contrat salarié . profession spécifique . pilote de ligne ou personnel navigant:
description.en: >-
[automatic] Concerns pilots, radios, flight engineers of air transport
companies; pilots and mechanics employed by aircraft and engine construction
companies for testing prototypes; pilot instructors of flying clubs and
civil aviation schools.
[automatic] Concerns pilots, radio operators, flight engineers of air
transport companies; pilots and mechanics employed by aircraft and engine
construction companies to test prototypes; pilot instructors of flying clubs
and civil aviation schools.
description.fr: >-
Concerne les pilotes, radios, mécaniciens navigants des compagnies de
transports aériens ; pilotes et mécaniciens employés par les maisons de
@ -2587,6 +2832,22 @@ contrat salarié . rémunération:
les sommes d'argent versées au salarié.
titre.en: Remuneration
titre.fr: rémunération
contrat salarié . rémunération . assiette congés payés:
description.en: >-
[automatic] During his or her leave, the employee does not receive his or
her salary. He or she receives holiday pay.
All sums that have the character of wages are taken into account to
determine the holiday pay. Other amounts are not taken into account.
description.fr: >-
Pendant ses congés, le salarié ne perçoit pas son salaire. Il perçoit une
indemnité de congés payés.
Toutes les sommes ayant le caractère de salaire sont prises en compte pour
déterminer l'indemnité de congés payés. Les autres sommes ne sont pas prise
en compte.
titre.en: '[automatic] Basis for the calculation of holiday pay allowance'
titre.fr: Assiette pour le calcul de l'indemnité de congés payés
contrat salarié . rémunération . assiette de vérification du SMIC:
description.en: >
This is the salary taken into account to verify that the minimum wage is
@ -2811,10 +3072,10 @@ contrat salarié . rémunération . brut de base:
Il ne comprend pas les indemnités, avantages sociaux, avantages en nature et
primes...
question.en: What is the monthly gross salary?
question.fr: Quel est le salaire de base ?
résumé.en: Written in the employment contract
résumé.fr: Brut de base inscrit dans le contrat de travail
question.en: '[automatic] What''s your gross salary?'
question.fr: Quel est votre salaire brut ?
résumé.en: '[automatic] Reference gross (excluding premiums, allowances and surcharges)'
résumé.fr: 'Brut de référence (sans les primes, indemnités ni majorations)'
suggestions.SMIC.en: '[automatic] SMIC'
suggestions.SMIC.fr: SMIC
suggestions.salaire médian.en: '[automatic] median earnings'
@ -2864,8 +3125,8 @@ contrat salarié . rémunération . net:
Cette somme peut varier en fonction de décisions politiques (augmentation ou
diminution des cotisations) alors que le salaire brut est contractuel (pour
le changer, il faut signer un avenant au contrat).
question.en: What is the net salary?
question.fr: Quel est le salaire net ?
question.en: '[automatic] What''s your take-home pay?'
question.fr: Quel est votre salaire net ?
résumé.en: Received by the employee
résumé.fr: Salaire net avant impôt
titre.en: Net salary
@ -2900,6 +3161,9 @@ contrat salarié . rémunération . net après impôt:
résumé.fr: Versé sur le compte bancaire
titre.en: Net salary after income tax
titre.fr: Salaire net après impôt
contrat salarié . rémunération . net avec revenus de remplacement:
titre.en: '[automatic] net with replacement income'
titre.fr: net avec revenus de remplacement
contrat salarié . rémunération . net de cotisations:
titre.en: Remuneration after contributions
titre.fr: Salaire net de cotisations
@ -2914,8 +3178,8 @@ contrat salarié . rémunération . net imposable:
contrat salarié . rémunération . net imposable . base:
description.en: Net taxable income before exemptions and deductions
description.fr: Le net imposable avant les exonérations et déductions
titre.en: base
titre.fr: base
titre.en: '[automatic] net taxable before exemptions'
titre.fr: net imposable avant exonérations
contrat salarié . rémunération . net imposable . heures supplémentaires et complémentaires défiscalisées:
titre.en: tax-free overtime hours
titre.fr: heures supplémentaires et complémentaires défiscalisées
@ -3005,6 +3269,40 @@ contrat salarié . rémunération . primes . fin d'année . treizième mois:
question.fr: Le salarié bénéficie-t-il d'un treizième mois ?
titre.en: thirteenth month
titre.fr: treizième mois
contrat salarié . rémunération . revenus de remplacement:
description.en: >-
[automatic] Replacement income is income received in lieu of work:
unemployment or short-time working benefits, sickness or accident benefits,
retirement pension, social integration income, etc.
This income is taxable but exempt from social security contributions. They
are subject to the CSG/CRDS with a specific rate.
description.fr: >-
Les revenus de remplacement sont les revenus perçus en remplacement de la
rémunération du travail : allocations de chômage ou de chômage partiel,
indemnités maladie ou accident du travail, pension de retraite, revenu
d'intégration sociale, etc.
Ces revenus sont imposables mais sont exonérés de cotisations sociales. Ils
sont soumis à la CSG/CRDS avec un taux spécifique.
note.en: >-
[automatic] The additional allowance is not added here because it is
systematically exempt from CSG due to the capping for low incomes.
Adding it results in a cyclical calculation (since it depends on the amount
of the CSG).
note.fr: >-
L'indemnité complémentaire n'est pas ajoutée ici car elle est
systématiquement exonérée de CSG du fait de l'écrêtement pour les bas
revenus.
L'ajouter abouti à un calcul cyclique (vu qu'elle dépend du montant de la
CSG)
titre.en: '[automatic] replacement revenues'
titre.fr: revenus de remplacement
contrat salarié . rémunération . taux horaire:
titre.en: '[automatic] hourly fee'
titre.fr: taux horaire
contrat salarié . rémunération . taux horaire des heures supplémentaires et complémentaires:
description.en: >
[automatic] The hourly rate used to calculate overtime pay. It includes
@ -3023,8 +3321,8 @@ contrat salarié . rémunération . total:
amount.
description.fr: |
C'est le total que l'employeur doit verser pour employer un salarié.
question.en: What is the remuneration charged?
question.fr: Quel est la rémunération chargée ?
question.en: '[automatic] What is the remuneration charged?'
question.fr: Quelle est la rémunération chargée ?
résumé.en: Spent by the company
résumé.fr: Dépensé par l'entreprise
titre.en: Total salary
@ -3211,6 +3509,9 @@ contrat salarié . temps de travail:
contrat salarié . temps de travail . base légale:
titre.en: legal base
titre.fr: base légale
contrat salarié . temps de travail . effectif:
titre.en: '[automatic] staff'
titre.fr: effectif
contrat salarié . temps de travail . heures complémentaires:
contrôles.0.en: >-
[automatic] Unless otherwise provided by agreement, the number of overtime

View File

@ -1,21 +1,5 @@
import { getRuleFromAnalysis } from 'Engine/rules'
import {
add,
compose,
equals,
filter,
fromPairs,
map,
mapObjIndexed,
max,
mergeWith,
pick,
pipe,
propEq,
reduce,
sort,
without
} from 'ramda'
import { compose, filter, fromPairs, map, max, reduce, sort } from 'ramda'
import { createSelector } from 'reselect'
import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors'
import { Rule } from 'Types/rule'
@ -59,7 +43,7 @@ const byMontantTotal = (
a[1].partSalariale
)
}
// TODO : refaire ça proprement dans le moteur
const REPARTITION_CSG: Partial<Record<Branch, number>> = {
'protection sociale . famille': 0.85,
'protection sociale . santé': 7.75,
@ -67,50 +51,6 @@ const REPARTITION_CSG: Partial<Record<Branch, number>> = {
// On peut imaginer la partager à toute les composantes concernées
'protection sociale . autres': 0.6
}
function applyCSGInPlace(
CSG: Cotisation,
rawRépartition: Record<Branch, MontantPartagé>
): void {
for (const branche in REPARTITION_CSG) {
rawRépartition[branche] = {
partPatronale:
rawRépartition[branche].partPatronale +
(CSG.montant.partPatronale * (REPARTITION_CSG[branche] / (9.2 / 100))) /
100,
partSalariale:
rawRépartition[branche].partSalariale +
(CSG.montant.partSalariale * (REPARTITION_CSG[branche] / (9.2 / 100))) /
100
}
}
}
const brancheConcernéeParLaRéduction = [
'santé',
'retraite',
'logement',
'famille'
].map(branche => 'protection sociale . ' + branche)
function applyReduction(
réduction,
répartitionMap: Record<Branch, MontantPartagé>
): Record<Branch, MontantPartagé> {
const totalPatronal = (pipe(
pick(brancheConcernéeParLaRéduction),
Object.values,
reduce(mergeWith(add), {})
)(répartitionMap) as any).partPatronale
return mapObjIndexed(
({ partPatronale, partSalariale }, branche: string) => ({
partPatronale: brancheConcernéeParLaRéduction.find(equals(branche))
? partPatronale - (partPatronale / totalPatronal) * réduction.nodeValue
: partPatronale,
partSalariale
}),
répartitionMap
)
}
const répartition = analysis => {
let cotisations = fromPairs(analysisToCotisations(analysis) as any)
@ -122,22 +62,8 @@ const répartition = analysis => {
réductionsDeCotisations = getRule(
'contrat salarié . cotisations . patronales . réductions de cotisations'
)
let CSG
const autresCotisations = cotisations['protection sociale . autres'] as any
if (autresCotisations) {
CSG = autresCotisations.find(propEq('dottedName', 'contrat salarié . CSG'))
cotisations['protection sociale . autres'] = without(
[CSG],
autresCotisations
)
}
let répartitionMap = map(totalCotisations as any, cotisations) as any
if (CSG) {
applyCSGInPlace(CSG, répartitionMap)
}
répartitionMap = applyReduction(réductionsDeCotisations, répartitionMap)
return {
répartition: compose(
sort(byMontantTotal),

View File

@ -23,6 +23,7 @@ import './App.css'
import Footer from './layout/Footer/Footer'
import Header from './layout/Header'
import trackSimulatorActions from './middlewares/trackSimulatorActions'
import Coronavirus from './pages/Coronavirus'
import Créer from './pages/Créer'
import IntegrationTest from './pages/Dev/IntegrationTest'
import Personas from './pages/Dev/Personas'
@ -118,6 +119,7 @@ const App = () => {
/>
<Route path={sitePaths.integration.index} component={Integration} />
<Route path={sitePaths.nouveautés} component={Nouveautés} />
<Route path={sitePaths.coronavirus} component={Coronavirus} />
<Route exact path="/dev/sitemap" component={Sitemap} />
<Route
exact

View File

@ -1,6 +1,5 @@
import PageFeedback from 'Components/Feedback/PageFeedback'
import LegalNotice from 'Components/LegalNotice'
import NewsletterRegister from 'Components/NewsletterRegister'
import { SitePathsContext } from 'Components/utils/withSitePaths'
import { lensPath, view } from 'ramda'
import React, { useContext } from 'react'
@ -20,7 +19,8 @@ const feedbackBlacklist = [
['simulateurs', 'indépendant'],
['simulateurs', 'auto-entrepreneur'],
['simulateurs', 'assimilé-salarié'],
['simulateurs', 'salarié']
['simulateurs', 'salarié'],
['coronavirus', 'chômagePartiel']
].map(lensPath)
const Footer = () => {
@ -50,13 +50,6 @@ const Footer = () => {
blacklist={feedbackBlacklist.map(lens => view(lens, sitePaths))}
/>
<div className="ui__ container">
{i18n.language === 'fr' && (
<>
<NewsletterRegister />
<hr className="footer__separator" />
</>
)}
{i18n.language === 'en' && (
<p className="ui__ notice" css="text-align: center">
This website is provided by the{' '}

View File

@ -0,0 +1,208 @@
import { setSimulationConfig } from 'Actions/actions'
import RuleLink from 'Components/RuleLink'
import Simulation from 'Components/Simulation'
import chomagePartielConfig from 'Components/simulationConfigs/chômage-partiel.yaml'
import StackedBarChart from 'Components/StackedBarChart'
import { ThemeColorsContext } from 'Components/utils/colors'
import { IsEmbeddedContext } from 'Components/utils/embeddedContext'
import { Markdown } from 'Components/utils/markdown'
import { formatValue } from 'Engine/format'
import { getRuleFromAnalysis } from 'Engine/rules'
import React, { useContext } from 'react'
import { Helmet } from 'react-helmet'
import { Trans, useTranslation } from 'react-i18next'
import { useDispatch, useSelector } from 'react-redux'
import { useLocation } from 'react-router'
import { analysisWithDefaultsSelector } from 'Selectors/analyseSelectors'
import Animate from 'Ui/animate'
export default function ChômagePartiel() {
const dispatch = useDispatch()
const location = useLocation<{ fromGérer?: boolean }>()
const inIframe = useContext(IsEmbeddedContext)
dispatch(setSimulationConfig(chomagePartielConfig, location.state?.fromGérer))
const { t } = useTranslation()
return (
<>
<Helmet>
<title>
{t(
'coronavirus.page.titre',
'Coronavirus et chômage partiel : quel impact sur vos revenus ?'
)}
</title>
<meta
name="description"
content={t(
'coronavirus.page.description',
'Estimez le revenus net avec les indemnités de chômage partiel'
)}
/>
</Helmet>
{!inIframe && (
<Trans i18nKey="coronavirus.description">
<h1>
<span
css={`
font-size: 0.65em;
opacity: 0.85;
`}
>
Coronavirus et chômage partiel
</span>
<br />
Quel impact sur mes revenus ?
</h1>
<p>
Ce simulateur permet de connaître le revenu net versé au salarié,
ainsi que le coût total restant à charge pour l'entreprise en cas de
chômage partiel.
</p>
</Trans>
)}
<Simulation
results={<ExplanationSection />}
customEndMessages={
<span className="ui__ notice">Voir les résultats au-dessus</span>
}
showPeriodSwitch={false}
/>
{!inIframe && <TextExplanations />}
</>
)
}
function ExplanationSection() {
const analysis = useSelector(analysisWithDefaultsSelector)
const { language } = useTranslation().i18n
const { palettes } = useContext(ThemeColorsContext)
const getRule = getRuleFromAnalysis(analysis)
const net = getRule('contrat salarié . rémunération . net')
const indemnité = getRule('contrat salarié . activité partielle . indemnités')
const totalEntreprise = getRule('contrat salarié . prix du travail')
const perteRevenu = getRule('baisse de revenu chômage partiel')
if (!net?.nodeValue) {
return null
}
return (
<Animate.fromTop>
<div
css={`
margin-top: 2rem;
`}
></div>
<div
className="ui__ light card"
css={`
margin: 3rem 0;
`}
>
<div id="targetSelection">
<ul className="targets">
<li>
<div className="main">
<div>
<div className="optionTitle">
<Trans>Revenu net mensuel</Trans>
</div>
<p>
<Trans>En incluant l'indemnité de chômage partiel</Trans>
</p>
</div>
<div className="targetInputOrValue">
<RuleLink {...net}>
{formatValue({
value: net.nodeValue,
language,
unit: '€',
maximumFractionDigits: 0
})}
</RuleLink>
</div>
</div>
</li>
<li className="small-target">
<div className="main">
<Trans>Coût pour l'entreprise</Trans>
<div className="targetInputOrValue">
<RuleLink {...totalEntreprise}>
{formatValue({
value: totalEntreprise.nodeValue,
language,
unit: '€',
maximumFractionDigits: 0
})}
</RuleLink>
</div>
</div>
</li>
<li>
<span className="optionTitle">
<Trans>Part du salaire net maintenue</Trans>
</span>
<StackedBarChart
data={[
{
...net,
title: 'net avec chômage partiel',
color: palettes[0][0]
},
{
...perteRevenu,
title: 'Baisse de revenu',
color: palettes[1][0]
}
]}
/>
</li>
</ul>
</div>
</div>
</Animate.fromTop>
)
}
function TextExplanations() {
const { i18n } = useTranslation()
if (i18n.language !== 'fr') {
return null
}
return (
<Markdown
css={`
margin-top: 2rem;
`}
source={`
[👨💻 Intégrer ce simulateur sur votre site](/intégration/iframe?module=simulateur-chomage-partiel)
## Pour l'entreprise : déclarer une activité partielle 📫
Face à la crise du coronavirus, les modalités de passage en activité partielle
ont été allégées. L'employeur est autorisé a placer ses salariés en activité
partielle avant que la demande officielle ne soit déposée. Celui-ci dispose
ensuite d'un délai de **30 jours** pour se mettre en règle. Les
indemnités seront versées avec un effet rétro-actif débutant à la mise en place
du chômage partiel.
[ Effectuer la demande de chômage partiel](https://activitepartielle.emploi.gouv.fr/aparts/).
## Indépendants 🚶
Les petites entreprises et les indépendants qui subissent une fermeture
administrative OU qui auront connu une perte de chiffre d'affaires d'au moins
70% au mois de mars 2020 par rapport au mois de mars 2019 bénéficieront d'une
aide de **1 500 euros**. Pour bénéficier de cette aide forfaitaire il faudra
faire une déclaration sur le site de la DGFiP.
Plus d'informations sur le site du
[Ministère de l'Économie](https://www.economie.gouv.fr/coronavirus-soutien-entreprises)
et de l'[Urssaf](https://www.urssaf.fr/portail/home/actualites/foire-aux-questions.html).
`}
/>
)
}

View File

@ -6,7 +6,8 @@ export const integrableModuleNames = [
'simulateur-autoentrepreneur',
'simulateur-independant',
'simulateur-assimilesalarie',
'simulateur-artiste-auteur'
'simulateur-artiste-auteur',
'simulateur-chomage-partiel'
]
export default function IntegrationTest() {

View File

@ -133,25 +133,45 @@ export default function SocialSecurity() {
</Link>
)}
{régime !== 'auto-entrepreneur' && (
<Link
className="ui__ interactive card box"
css="width: 100%"
to={{
pathname: sitePaths.simulateurs.salarié,
state: {
fromGérer: true
}
}}
>
<div className="ui__ big box-icon">{emoji('🤝')}</div>
<Trans i18nKey="gérer.choix.embauche">
<h3>Estimer le montant dune embauche</h3>
<p className="ui__ notice">
Calculez le montant total que votre entreprise devra
dépenser pour rémunérer votre prochain employé
</p>
</Trans>
</Link>
<>
<Link
className="ui__ interactive card box"
css="width: 100%"
to={{
pathname: sitePaths.coronavirus
}}
>
<div className="ui__ big box-icon">{emoji('😷')}</div>
<Trans i18nKey="gérer.choix.embauche">
<h3>Connaître les aides</h3>
<p className="ui__ notice">
Calculez le montant des indemnités de chômage partiel.
Découvrez la liste des dispositifs d'aides aux
entreprises.
</p>
</Trans>
<span className="ui__ label">Covid-19</span>
</Link>
<Link
className="ui__ interactive card box"
css="width: 100%"
to={{
pathname: sitePaths.simulateurs.salarié,
state: {
fromGérer: true
}
}}
>
<div className="ui__ big box-icon">{emoji('🤝')}</div>
<Trans i18nKey="gérer.choix.embauche">
<h3>Estimer le montant dune embauche</h3>
<p className="ui__ notice">
Calculez le montant total que votre entreprise devra
dépenser pour rémunérer votre prochain employé
</p>
</Trans>
</Link>
</>
)}
</div>
</section>
@ -341,7 +361,7 @@ export const CompanySection = ({ company }: CompanySectionProps) => {
: company.statutJuridique}
</span>
{company.isDirigeantMajoritaire != null && (
<span css="margin-left: 1rem" className="ui__ label">
<span css="margin-left: 1rem;" className="ui__ label">
{company.isDirigeantMajoritaire ? (
<Trans i18nKey="gérer.entreprise.majoritaire">
Dirigeant majoritaire

View File

@ -2,6 +2,7 @@ import { IsEmbeddedContext } from 'Components/utils/embeddedContext'
import React from 'react'
import { Route } from 'react-router'
import { inIframe } from '../../../../utils'
import SimulateurChômagePartiel from '../Coronavirus'
import SimulateurArtisteAuteur from '../Simulateurs/ArtisteAuteur'
import SimulateurAssimiléSalarié from '../Simulateurs/AssimiléSalarié'
import SimulateurAutoEntrepreneur from '../Simulateurs/AutoEntrepreneur'
@ -37,6 +38,10 @@ export default function Iframes() {
path="/iframes/simulateur-artiste-auteur"
component={SimulateurArtisteAuteur}
/>
<Route
path="/iframes/simulateur-chomage-partiel"
component={SimulateurChômagePartiel}
/>
{inIframe() && <IframeFooter />}
</div>
</IsEmbeddedContext.Provider>

View File

@ -39,6 +39,14 @@ export default function Landing() {
<img src={illustrationSvg} className="landing-title__img" />
</section>
<section className="ui__ full-width light-bg center-flex">
<div style={{ textAlign: 'center', width: '100%' }}>
{emoji('😷')}{' '}
<Link to={sitePaths.coronavirus}>
<Trans>
Covid-19 : Découvrez les mesures de soutien aux entreprises
</Trans>
</Link>
</div>
<Link
className="ui__ interactive card box"
to={

View File

@ -1,4 +1,5 @@
import { setSimulationConfig } from 'Actions/actions'
import Banner from 'Components/Banner'
import PreviousSimulationBanner from 'Components/PreviousSimulationBanner'
import SalaryExplanation from 'Components/SalaryExplanation'
import Simulation from 'Components/Simulation'
@ -34,6 +35,7 @@ export default function Salarié() {
)}
/>
</Helmet>
<h1>
<Trans i18nKey="simulateurs.salarié.titre">
Simulateur de revenus pour salarié
@ -158,6 +160,11 @@ export let SalarySimulation = () => {
</>
}
/>
<br />
<Banner icon={'😷'}>
<strong>Covid-19 et chômage partiel </strong>:{' '}
<Link to={sitePaths.coronavirus}>Calculez votre indemnité</Link>
</Banner>
<PreviousSimulationBanner />
</>
)

View File

@ -1,9 +1,13 @@
import { ThemeColorsProvider } from 'Components/utils/colors'
import {
ThemeColorsContext,
ThemeColorsProvider
} from 'Components/utils/colors'
import { ScrollToTop } from 'Components/utils/Scroll'
import urssafLogo from 'Images/urssaf.svg'
import React, { Suspense, useRef, useState } from 'react'
import React, { Suspense, useContext, useRef, useState } from 'react'
import emoji from 'react-easy-emoji'
import { Trans } from 'react-i18next'
import { MemoryRouter } from 'react-router-dom'
import { MemoryRouter, useLocation } from 'react-router-dom'
import { integrableModuleNames } from '../Dev/IntegrationTest'
import Iframes from '../Iframes'
import './iframe.css'
@ -15,10 +19,16 @@ import poleEmploiLogo from './images/pole-emploi.png'
let LazyColorPicker = React.lazy(() => import('../Dev/ColorPicker'))
function IntegrationCustomizer() {
const { search } = useLocation()
const defaultModuleFromUrl =
new URLSearchParams(search ?? '').get('module') ?? ''
const [currentModule, setCurrentModule] = React.useState(
integrableModuleNames[0]
integrableModuleNames.includes(defaultModuleFromUrl)
? defaultModuleFromUrl
: integrableModuleNames[0]
)
const [color, setColor] = useState()
const { color: defaultColor } = useContext(ThemeColorsContext)
const [color, setColor] = useState(defaultColor)
return (
<section>
<h2>
@ -65,25 +75,35 @@ function IntegrationCustomizer() {
>
<div className="ui__ left-side">
<h3>
<Trans>Quel module ?</Trans>
<Trans i18nKey="pages.développeurs.module">Quel module ?</Trans>
{emoji('🚩')}
</h3>
<select onChange={event => setCurrentModule(event.target.value)}>
<select
onChange={event => setCurrentModule(event.target.value)}
value={currentModule}
>
{integrableModuleNames.map(name => (
<option key={name}>{name}</option>
))}
</select>
<h3>
<Trans>Quelle couleur ?</Trans>
<Trans i18nKey="pages.développeurs.couleur">
Quelle couleur ?{' '}
</Trans>
{emoji('🎨')}
</h3>
<Suspense fallback={<div>Chargement...</div>}>
<LazyColorPicker color={color} onChange={setColor} />
</Suspense>
<h3>
<Trans>Code d'intégration</Trans>
<Trans i18nKey="pages.développeurs.code.titre">
Code d'intégration
</Trans>
{emoji('🛠')}
</h3>
<p>
<Trans i18nKey="pages.développeurs.code à copier">
<Trans i18nKey="pages.développeurs.code.description">
Voici le code à copier-coller sur votre site :
</Trans>
</p>

View File

@ -130,6 +130,7 @@ export const constructLocalizedSitePath = (language: string) => {
index: t('path.documentation.index', '/documentation'),
rule: (dottedName: DottedName) => '/' + encodeRuleName(dottedName)
},
coronavirus: t('path.coronavirus', '/coronavirus'),
integration: {
index: t('path.integration.index', '/intégration'),
iframe: t('path.integration.iframe', '/iframe'),

View File

@ -123,8 +123,10 @@ module.exports = {
'/simulateurs/assimilé-salarié',
'/simulateurs/indépendant',
'/créer',
'/coronavirus',
'/gérer',
'/iframes/simulateur-embauche'
'/iframes/simulateur-embauche',
'/iframes/simulateur-chomage-partiel'
],
indexPath: path.resolve('dist', 'mon-entreprise.html')
})

View File

@ -106,7 +106,7 @@ exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - a
exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - avec charges 2`] = `"[10982,10982,10742,4,19,23]"`;
exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 1`] = `"[0,0,2488,0,0,0]"`;
exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 1`] = `"[-2313,-2313,2488,0,0,0]"`;
exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 2`] = `"[169,169,139,0,1,1]"`;
@ -200,6 +200,24 @@ exports[`calculate simulations-salarié: JEI 2`] = `"[26635,0,0,20000,15969,106
exports[`calculate simulations-salarié: JEI 3`] = `"[4517,0,0,4000,3141,2741]"`;
exports[`calculate simulations-salarié: activité partielle 1`] = `"[27,1218,0,1560,1197,1197]"`;
exports[`calculate simulations-salarié: activité partielle 2`] = `"[27,2800,0,4000,2594,2354]"`;
exports[`calculate simulations-salarié: activité partielle 3`] = `"[778,4849,0,8000,5209,4232]"`;
exports[`calculate simulations-salarié: activité partielle 4`] = `"[850,2240,0,4000,2704,2435]"`;
exports[`calculate simulations-salarié: activité partielle 5`] = `"[2479,1400,0,4000,2869,2556]"`;
exports[`calculate simulations-salarié: activité partielle 6`] = `"[27,2100,3750,3000,1940,1844]"`;
exports[`calculate simulations-salarié: activité partielle 7`] = `"[27,2800,0,4000,2594,2491]"`;
exports[`calculate simulations-salarié: activité partielle 8`] = `"[227,1400,0,2000,1540,1515]"`;
exports[`calculate simulations-salarié: activité partielle 9`] = `"[327,4200,0,6000,4182,3494]"`;
exports[`calculate simulations-salarié: aides 1`] = `"[2302,0,0,2000,1561,1524]"`;
exports[`calculate simulations-salarié: aides 2`] = `"[12823,0,0,10000,8911,7667]"`;
@ -242,19 +260,19 @@ exports[`calculate simulations-salarié: effectif 3`] = `"[2539,0,0,2000,1561,1
exports[`calculate simulations-salarié: effectif 4`] = `"[2539,0,0,2000,1561,1524]"`;
exports[`calculate simulations-salarié: frais pro - DFS 1`] = `"[2242,0,0,2000,1668,1668]"`;
exports[`calculate simulations-salarié: frais pro - DFS 1`] = `"[2242,0,0,2000,1630,1630]"`;
exports[`calculate simulations-salarié: frais pro - DFS 2`] = `"[2335,0,0,2000,1603,1561]"`;
exports[`calculate simulations-salarié: frais pro - DFS 2`] = `"[2335,0,0,2000,1584,1544]"`;
exports[`calculate simulations-salarié: frais pro - DFS 3`] = `"[2265,0,0,2000,1645,1597]"`;
exports[`calculate simulations-salarié: frais pro - DFS 3`] = `"[2265,0,0,2000,1606,1563]"`;
exports[`calculate simulations-salarié: frais pro - DFS 4`] = `"[2243,0,0,2000,1657,1608]"`;
exports[`calculate simulations-salarié: frais pro - DFS 4`] = `"[2243,0,0,2000,1613,1569]"`;
exports[`calculate simulations-salarié: frais pro - DFS 5`] = `"[2437,0,0,2000,1590,1590]"`;
exports[`calculate simulations-salarié: frais pro - DFS 6`] = `"[1767,0,0,1700,1380,1380]"`;
exports[`calculate simulations-salarié: frais pro - DFS 6`] = `"[1767,0,0,1700,1364,1364]"`;
exports[`calculate simulations-salarié: frais pro - DFS 7`] = `"[3287,0,0,2600,2175,2141]"`;
exports[`calculate simulations-salarié: frais pro - DFS 7`] = `"[3287,0,0,2600,2125,2097]"`;
exports[`calculate simulations-salarié: frais pro - IKV 1`] = `"[4367,0,0,3200,2530,2320]"`;
@ -292,9 +310,9 @@ exports[`calculate simulations-salarié: impôt sur le revenu 4`] = `"[3896,0,0
exports[`calculate simulations-salarié: impôt sur le revenu 5`] = `"[41834,0,0,30000,24227,14588]"`;
exports[`calculate simulations-salarié: impôt sur le revenu 6`] = `"[4076,0,0,3000,2353,2267]"`;
exports[`calculate simulations-salarié: impôt sur le revenu 6`] = `"[4076,0,0,3000,2626,2481]"`;
exports[`calculate simulations-salarié: impôt sur le revenu 7`] = `"[41834,0,0,30000,24227,15843]"`;
exports[`calculate simulations-salarié: impôt sur le revenu 7`] = `"[41834,0,0,30000,26966,16204]"`;
exports[`calculate simulations-salarié: impôt sur le revenu 8`] = `"[4076,0,0,3000,2353,2107]"`;

View File

@ -205,21 +205,48 @@ frais pro - IKV:
frais pro - DFS:
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . profession: journaliste
contrat salarié . profession spécifique: journaliste
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . profession: ouvrier du bâtiment
contrat salarié . profession spécifique: ouvrier du bâtiment
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . profession: artiste musicien
contrat salarié . profession spécifique: artiste musicien
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . profession: pilote de ligne ou personnel navigant
contrat salarié . profession spécifique: pilote de ligne ou personnel navigant
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . profession: journaliste
contrat salarié . profession spécifique: journaliste
contrat salarié . déduction forfaitaire spécifique . application: non
# Test des taux réduits journalistes et abattement fiscal
- contrat salarié . rémunération . brut de base: 1700
contrat salarié . profession: journaliste
contrat salarié . profession spécifique: journaliste
- contrat salarié . rémunération . brut de base: 2600
contrat salarié . profession: journaliste
contrat salarié . profession spécifique: journaliste
activité partielle:
- contrat salarié . rémunération . brut de base: 1560
contrat salarié . activité partielle: oui
- contrat salarié . rémunération . brut de base: 4000
contrat salarié . activité partielle: oui
- contrat salarié . rémunération . brut de base: 8000
contrat salarié . activité partielle: oui
- contrat salarié . rémunération . brut de base: 4000
contrat salarié . activité partielle: oui
contrat salarié . activité partielle . proportion heures travaillées: 20
- contrat salarié . rémunération . brut de base: 4000
contrat salarié . activité partielle: oui
contrat salarié . activité partielle . proportion heures travaillées: 50
- contrat salarié . rémunération . brut de base: 3000
contrat salarié . activité partielle: oui
contrat salarié . temps de travail . temps partiel: oui
contrat salarié . temps de travail . temps partiel . heures par semaine: 28
- contrat salarié . rémunération . brut de base: 4000
contrat salarié . activité partielle: oui
contrat salarié . profession spécifique: journaliste
- contrat salarié . rémunération . brut de base: 2000
contrat salarié . activité partielle: oui
contrat salarié . activité partielle . convention syntec: oui
- contrat salarié . rémunération . brut de base: 6000
contrat salarié . activité partielle: oui
contrat salarié . activité partielle . convention syntec: oui
lodeom:
- contrat salarié . rémunération . brut de base: 1521.22

127
yarn.lock
View File

@ -1561,11 +1561,6 @@ abab@^2.0.0:
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a"
integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg==
abbrev@1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8"
integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
accepts@~1.3.5, accepts@~1.3.7:
version "1.3.7"
resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd"
@ -3727,7 +3722,7 @@ debug@3.1.0, debug@=3.1.0:
dependencies:
ms "2.0.0"
debug@3.2.6, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1, debug@^3.2.6:
debug@3.2.6, debug@^3.0.0, debug@^3.1.0, debug@^3.1.1:
version "3.2.6"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==
@ -3852,7 +3847,7 @@ detect-file@^1.0.0:
resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7"
integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=
detect-libc@^1.0.2, detect-libc@^1.0.3:
detect-libc@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b"
integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=
@ -4995,13 +4990,6 @@ fs-extra@^6.0.1:
jsonfile "^4.0.0"
universalify "^0.1.0"
fs-minipass@^1.2.5:
version "1.2.7"
resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7"
integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==
dependencies:
minipass "^2.6.0"
fs-mkdirp-stream@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb"
@ -5730,7 +5718,7 @@ i18next@^19.0.1:
dependencies:
"@babel/runtime" "^7.3.1"
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@~0.4.13:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@ -5764,13 +5752,6 @@ iframe-resizer@^4.1.1:
resolved "https://registry.yarnpkg.com/iframe-resizer/-/iframe-resizer-4.2.10.tgz#c61c9119bb1bf31931fc3c3bb025e1891b18502c"
integrity sha512-9T/AWavGI5Q7nw2ch7qatkKvhK6S11eatuSh0SXpPXN3MV0HtN97KyifWJSuMj47rD6jbqe1CXT91PLQbexvEQ==
ignore-walk@^3.0.1:
version "3.0.3"
resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37"
integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==
dependencies:
minimatch "^3.0.4"
ignore@^3.3.5:
version "3.3.10"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.3.10.tgz#0a97fb876986e8081c631160f8f9f389157f0043"
@ -7585,21 +7566,6 @@ minimist@~0.0.1:
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.10.tgz#de3f98543dbf96082be48ad1a0c7cda836301dcf"
integrity sha1-3j+YVD2/lggr5IrRoMfNqDYwHc8=
minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0:
version "2.9.0"
resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6"
integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==
dependencies:
safe-buffer "^5.1.2"
yallist "^3.0.0"
minizlib@^1.2.1:
version "1.3.3"
resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d"
integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==
dependencies:
minipass "^2.9.0"
mississippi@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/mississippi/-/mississippi-2.0.0.tgz#3442a508fafc28500486feea99409676e4ee5a6f"
@ -7640,7 +7606,7 @@ mixin-deep@^1.2.0:
for-in "^1.0.2"
is-extendable "^1.0.1"
mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1:
mkdirp@0.5.1, mkdirp@^0.5.1, mkdirp@~0.5.1:
version "0.5.1"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
@ -7795,15 +7761,6 @@ nearley@^2.19.0, nearley@^2.7.10:
randexp "0.4.6"
semver "^5.4.1"
needle@^2.2.1:
version "2.3.3"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117"
integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@ -7902,22 +7859,6 @@ node-notifier@^5.4.2:
shellwords "^0.1.1"
which "^1.3.0"
node-pre-gyp@*:
version "0.14.0"
resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83"
integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==
dependencies:
detect-libc "^1.0.2"
mkdirp "^0.5.1"
needle "^2.2.1"
nopt "^4.0.1"
npm-packlist "^1.1.6"
npmlog "^4.0.2"
rc "^1.2.7"
rimraf "^2.6.1"
semver "^5.3.0"
tar "^4.4.2"
node-releases@^1.1.50:
version "1.1.52"
resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9"
@ -7935,14 +7876,6 @@ noop-logger@^0.1.1:
resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2"
integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=
nopt@^4.0.1:
version "4.0.3"
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48"
integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==
dependencies:
abbrev "1"
osenv "^0.1.4"
normalize-package-data@^2.3.2:
version "2.5.0"
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
@ -7987,27 +7920,6 @@ now-and-later@^2.0.0:
dependencies:
once "^1.3.2"
npm-bundled@^1.0.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b"
integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==
dependencies:
npm-normalize-package-bin "^1.0.1"
npm-normalize-package-bin@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2"
integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==
npm-packlist@^1.1.6:
version "1.4.8"
resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e"
integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==
dependencies:
ignore-walk "^3.0.1"
npm-bundled "^1.0.1"
npm-normalize-package-bin "^1.0.1"
npm-run-path@^2.0.0:
version "2.0.2"
resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f"
@ -8015,7 +7927,7 @@ npm-run-path@^2.0.0:
dependencies:
path-key "^2.0.0"
npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2:
npmlog@^4.0.1, npmlog@^4.1.2:
version "4.1.2"
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==
@ -8226,7 +8138,7 @@ os-browserify@^0.3.0:
resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27"
integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=
os-homedir@^1.0.0, os-homedir@^1.0.1:
os-homedir@^1.0.1:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M=
@ -8240,19 +8152,11 @@ os-locale@^3.1.0:
lcid "^2.0.0"
mem "^4.0.0"
os-tmpdir@^1.0.0, os-tmpdir@~1.0.2:
os-tmpdir@~1.0.2:
version "1.0.2"
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
osenv@^0.1.4:
version "0.1.5"
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==
dependencies:
os-homedir "^1.0.0"
os-tmpdir "^1.0.0"
p-defer@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c"
@ -10211,7 +10115,7 @@ select@^1.1.2:
resolved "https://registry.yarnpkg.com/select/-/select-1.1.2.tgz#0e7350acdec80b1108528786ec1d4418d11b396d"
integrity sha1-DnNQrN7ICxEIUoeG7B1EGNEbOW0=
"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
"semver@2 || 3 || 4 || 5", semver@^5.4.1, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1:
version "5.7.1"
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7"
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
@ -10996,19 +10900,6 @@ tar-stream@^2.0.0:
inherits "^2.0.3"
readable-stream "^3.1.1"
tar@^4.4.2:
version "4.4.13"
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525"
integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==
dependencies:
chownr "^1.1.1"
fs-minipass "^1.2.5"
minipass "^2.8.6"
minizlib "^1.2.1"
mkdirp "^0.5.0"
safe-buffer "^5.1.2"
yallist "^3.0.3"
term-size@^1.2.0:
version "1.2.0"
resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69"
@ -12185,7 +12076,7 @@ yallist@^2.1.2:
resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=
yallist@^3.0.0, yallist@^3.0.2, yallist@^3.0.3:
yallist@^3.0.2:
version "3.1.1"
resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd"
integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==