From 1328f2f805abc923d642ebe6e459de4726c8d1c4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9my=20Rialland?= Date: Wed, 18 Jan 2023 18:03:31 +0100 Subject: [PATCH] WIP --- .../test-e2e/__snapshots__/index.test.ts.snap | 14 +- .../règles/exonération-covid.yaml | 2 - .../assistant-déclaration-revenu.yaml | 2 +- .../charges-sociales-formulaire.yaml | 2 +- modele-social/règles/dirigeant.yaml | 4 +- modele-social/règles/entreprise/activité.yaml | 386 +++++++++++++----- .../entreprise/catégorie-juridique.yaml | 96 +++-- .../règles/entreprise/coût-création.yaml | 104 +++++ .../règles/entreprise/entreprise.yaml | 20 +- .../règles/entreprise/imposition.yaml | 2 +- modele-social/règles/profession-libérale.yaml | 2 +- modele-social/règles/salarié/cotisations.yaml | 2 +- .../règles/salarié/rémunération.yaml | 2 +- .../ChiffreAffairesActivitéMixte.tsx | 19 +- .../components/conversation/ChoicesInput.tsx | 162 ++++---- .../components/conversation/Conversation.tsx | 9 +- .../conversation/MulipleChoicesInput.tsx | 73 ++++ .../components/conversation/RuleInput.tsx | 53 ++- site/source/locales/rules-en.yaml | 10 +- .../Simulateurs/CoutCreationEntreprise.tsx | 43 ++ site/source/pages/Simulateurs/Dividendes.tsx | 35 +- .../Simulateurs/configs/autoEntrepreneur.ts | 2 +- .../Simulateurs/configs/comparateurStatuts.ts | 2 +- .../pages/Simulateurs/configs/indépendant.ts | 2 +- site/source/pages/Simulateurs/metadata-src.ts | 25 ++ site/source/pages/Simulateurs/metadata.tsx | 5 + .../metadata/coutCreationEntreprise.tsx | 32 ++ .../index.tsx | 2 +- site/source/sitePaths.ts | 2 + .../assistant-charges-sociales.yaml | 2 +- .../simulations-auto-entrepreneur.test.ts | 4 +- .../simulations-auto-entrepreneur.yaml | 22 +- .../simulations-indépendant.test.ts | 2 +- 33 files changed, 845 insertions(+), 299 deletions(-) create mode 100644 modele-social/règles/entreprise/coût-création.yaml create mode 100644 site/source/components/conversation/MulipleChoicesInput.tsx create mode 100644 site/source/pages/Simulateurs/CoutCreationEntreprise.tsx create mode 100644 site/source/pages/Simulateurs/metadata/coutCreationEntreprise.tsx diff --git a/api/source/test-e2e/__snapshots__/index.test.ts.snap b/api/source/test-e2e/__snapshots__/index.test.ts.snap index d9c139ca0..112b02145 100644 --- a/api/source/test-e2e/__snapshots__/index.test.ts.snap +++ b/api/source/test-e2e/__snapshots__/index.test.ts.snap @@ -531,7 +531,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` "evaluate": [ { "missingVariables": [ - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", ], "nodeValue": 8904, "traversedVariables": [ @@ -563,7 +563,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux vente restauration hébergement", "entreprise . chiffre d'affaires . vente restauration hébergement", "dirigeant . indépendant . PL", - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", "entreprise . imposition . régime . micro-entreprise", "entreprise . imposition . IS", "DRI . accompagnement imposition . régime memento fiscal . RSI", @@ -572,7 +572,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` "DRI . accompagnement imposition . régime memento fiscal . DECC", "DRI . accompagnement imposition . régime memento fiscal . SPECIAL", "DRI . accompagnement imposition . régime memento fiscal . MICROE", - "entreprise . activité . service ou vente", + "entreprise . activités . service ou vente", "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BIC", "entreprise . chiffre d'affaires . service BIC", "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BNC", @@ -596,7 +596,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` }, { "missingVariables": [ - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", "établissement . commune . département", "établissement . commune . département . outre-mer", ], @@ -654,7 +654,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` }, { "missingVariables": [ - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", "établissement . commune . département", "établissement . commune . département . outre-mer", ], @@ -692,7 +692,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux vente restauration hébergement", "entreprise . chiffre d'affaires . vente restauration hébergement", "dirigeant . indépendant . PL", - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", "entreprise . imposition . régime . micro-entreprise", "entreprise . imposition . IS", "DRI . accompagnement imposition . régime memento fiscal . RSI", @@ -701,7 +701,7 @@ exports[`e2e test mon-entreprise api > Test evaluate micro entreprise 2`] = ` "DRI . accompagnement imposition . régime memento fiscal . DECC", "DRI . accompagnement imposition . régime memento fiscal . SPECIAL", "DRI . accompagnement imposition . régime memento fiscal . MICROE", - "entreprise . activité . service ou vente", + "entreprise . activités . service ou vente", "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BIC", "entreprise . chiffre d'affaires . service BIC", "dirigeant . auto-entrepreneur . cotisations et contributions . cotisations . taux service BNC", diff --git a/exoneration-covid/règles/exonération-covid.yaml b/exoneration-covid/règles/exonération-covid.yaml index fe5e6e68f..3163b503f 100644 --- a/exoneration-covid/règles/exonération-covid.yaml +++ b/exoneration-covid/règles/exonération-covid.yaml @@ -78,8 +78,6 @@ lieu d'exercice . outre-mer: début d'activité: titre: Période de début d’activité question: À quelle période avez-vous débuté votre activité ? - formulaire: - type: select une possibilité: choix obligatoire: oui possibilités: diff --git a/modele-social/règles/declarations-indépendant/assistant-déclaration-revenu.yaml b/modele-social/règles/declarations-indépendant/assistant-déclaration-revenu.yaml index 5d67c101d..bf72a98a9 100644 --- a/modele-social/règles/declarations-indépendant/assistant-déclaration-revenu.yaml +++ b/modele-social/règles/declarations-indépendant/assistant-déclaration-revenu.yaml @@ -2,7 +2,7 @@ DRI: experimental: oui valeur: non remplace: - - règle: entreprise . catégorie juridique . EI . auto-entrepreneur . défaut + - règle: entreprise . catégorie juridique . EI . auto-entrepreneur par: non DRI . cas exclus: diff --git a/modele-social/règles/declarations-indépendant/charges-sociales-formulaire.yaml b/modele-social/règles/declarations-indépendant/charges-sociales-formulaire.yaml index ebe7ef27c..bee3c8240 100644 --- a/modele-social/règles/declarations-indépendant/charges-sociales-formulaire.yaml +++ b/modele-social/règles/declarations-indépendant/charges-sociales-formulaire.yaml @@ -9,7 +9,7 @@ déclaration charge sociales: par: ACRE - # Par défaut on considère que l'entreprise est mixte et on affiche tous les champs - règle: entreprise . activité . mixte + règle: entreprise . activités . revenus mixtes par: oui déclaration charge sociales . comptabilité: diff --git a/modele-social/règles/dirigeant.yaml b/modele-social/règles/dirigeant.yaml index 0ad8cac98..29f0e6f24 100644 --- a/modele-social/règles/dirigeant.yaml +++ b/modele-social/règles/dirigeant.yaml @@ -461,7 +461,7 @@ dirigeant . auto-entrepreneur . cotisations et contributions . cotisations: description: | Pour les professions libérales relevant de la CIPAV, le taux est le même quelle que soit la catégorie d’imposition/activité (BIC ou BNC, service ou vente). applicable si: affiliation CIPAV - rend non applicable: entreprise . activité . mixte + rend non applicable: entreprise . activités . revenus mixtes produit: assiette: entreprise . chiffre d'affaires taux: @@ -973,7 +973,7 @@ dirigeant . indépendant . cotisations et contributions . PCV: conventionnel. dirigeant . indépendant . cotisations et contributions . déduction tabac: - applicable si: entreprise . activité . débit de tabac + applicable si: entreprise . activités . commerciale . débit de tabac question: Quel est le montant des revenus issus de la vente de tabac que vous souhaitez exonérer de cotisation vieillesse ? description: | Si vous exercez une activité de débit de tabac simultanément à une activité commerciale, vous avez la possibilité d’opter pour le calcul de votre cotisation d’assurance vieillesse sur le seul revenu tiré de votre activité commerciale (en effet, les remises pour débit de tabac sont soumises par ailleurs à un prélèvement vieillesse particulier). Nous attirons cependant votre attention sur le fait qu’en cotisant sur une base moins importante, excluant les revenus de débit de tabac, vos droits à retraite pour l’assurance vieillesse des commerçants en seront diminués. diff --git a/modele-social/règles/entreprise/activité.yaml b/modele-social/règles/entreprise/activité.yaml index 67a380a74..0ee0a46cc 100644 --- a/modele-social/règles/entreprise/activité.yaml +++ b/modele-social/règles/entreprise/activité.yaml @@ -1,6 +1,7 @@ entreprise . activité: - titre: activité principale + déprécié: oui type: texte + références: "Activité de votre entreprise : code APE, code NAF, qu'est-ce que c'est ?": https://www.economie.gouv.fr/entreprises/activite-entreprise-code-ape-code-naf 'À quoi correspond le code APE (code NAF) ?': https://entreprendre.service-public.fr/vosdroits/F33050 @@ -8,7 +9,14 @@ entreprise . activité: entreprise . activité . nature: titre: nature de l'activité question: Quelle est la nature de votre activité principale ? - description: Votre type d'activité va déterminer une grande partie des calculs de cotisations, contributions et impôt. + description: | + Votre type d'activité va déterminer une grande partie des calculs de cotisations, contributions et impôt. + + ### Pluri-activité + En cas d'activité multiples, m'activité principale est réputée être l'activité la plus ancienne. + + Toutefois, à partir de la troisième année civile suivant celle au cours de laquelle la situation de pluriactivité a débuté, les personnes intéressées peuvent demander que l'activité qui a procuré le montant de chiffre d'affaires ou de recettes hors taxes le plus élevé sur les trois dernières années soit considérée comme leur activité principale. + par défaut: "'commerciale'" formule: une possibilité: @@ -22,53 +30,252 @@ entreprise . activité . nature: Comment déterminer la nature de l'activité d'une entreprise ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat Spécifiquement pour les auto-entrepreneurs: https://www.shine.fr/blog/categorie-activite-auto-entrepreneur -entreprise . activité . nature . libérale: - question: Votre activité est-elle une profession libérale ? - valeur: activité . nature = 'libérale' - description: | - Une activité libérale consiste en des prestations de services de nature principalement intellectuelles. + avec: + libérale: + valeur: activité . nature = 'libérale' + description: | + Une activité libérale consiste en des prestations de services de nature principalement intellectuelles. - Vous rendez un service payant. + Vous rendez un service payant. - Vous devez avoir un diplôme ou une qualification professionnelle dans le domaine. + Vous devez avoir un diplôme ou une qualification professionnelle dans le domaine. - références: - Comment savoir si votre entreprise est libérale ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-3situation1 - fiche Wikipedia: https://fr.wikipedia.org/wiki/Profession_lib%C3%A9rale - liste des professions libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales + références: + Comment savoir si votre entreprise est libérale ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-3situation1 + fiche Wikipedia: https://fr.wikipedia.org/wiki/Profession_lib%C3%A9rale + liste des professions libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales -entreprise . activité . nature . commerciale: - valeur: activité . nature = 'commerciale' - description: | - Votre activité est commerciale si vous êtes dans l'un des cas suivants : + commerciale: + valeur: activité . nature = 'commerciale' + description: | + Votre activité est commerciale si vous êtes dans l'un des cas suivants : - - Vous achetez des biens ou des marchandises pour les revendre dans un but lucratif : Qui rapporte de l'argent, du profit, des bénéfices - - Vous vendez des services dans les domaines de l'hôtellerie, la restauration, les transports, les spectacles, la sécurité, l'informatique, le design, etc. - - Vous avez une activité de location de biens, de marchandises ou de services + - Vous achetez des biens ou des marchandises pour les revendre dans un but lucratif : Qui rapporte de l'argent, du profit, des bénéfices + - Vous vendez des services dans les domaines de l'hôtellerie, la restauration, les transports, les spectacles, la sécurité, l'informatique, le design, etc. + - Vous avez une activité de location de biens, de marchandises ou de services - références: - Comment savoir si votre activité est commerciale: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-1situation1 + références: + Comment savoir si votre activité est commerciale: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-1situation1 -entreprise . activité . nature . artisanale: - valeur: activité . nature = 'artisanale' - description: | - Pour être artisan, vous devez répondre aux 3 critères suivants : + artisanale: + valeur: activité . nature = 'artisanale' + description: | + Pour être artisan, vous devez répondre aux 3 critères suivants : - - Votre activité doit faire partie de la liste officielle des métiers de l'artisanat ou de la liste officielle des métiers d'artisanat d'art - - Votre entreprise doit compter moins de 11 salariés à sa création - - Vous devez détenir un savoir-faire spécifique et le prouver par un diplôme (CAP, BEP, etc.) ou une qualification professionnelle - références: - Comment savoir si votre activité est artisanale ?: 'https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-2situation1' - liste des activités artisanales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/activites-artisanales-0 + - Votre activité doit faire partie de la liste officielle des métiers de l'artisanat ou de la liste officielle des métiers d'artisanat d'art + - Votre entreprise doit compter moins de 11 salariés à sa création + - Vous devez détenir un savoir-faire spécifique et le prouver par un diplôme (CAP, BEP, etc.) ou une qualification professionnelle + références: + Comment savoir si votre activité est artisanale ?: 'https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-2situation1' + liste des activités artisanales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/activites-artisanales-0 -entreprise . activité . service ou vente: + libérale . réglementée: + question: Est-ce une activité libérale réglementée ? + par défaut: non + description: | + Certaines professions libérales ont été classées dans le domaine libéral par la loi et leur titre est protégé. Leurs membres doivent respecter des règles déontologiques strictes et sont soumis au contrôle de leurs instances professionnelles (ordre, chambre, ou syndicat). + + > Exemples de professions règlementées : architecte, avocat, infirmier, médecin... + + Il s'agit des autres personnes qui pratiquent, une science ou un art et dont l'activité intellectuelle joue le principal rôle. Leurs recettes doivent représenter la rémunération d'un travail personnel, sans lien de subordination, tout en engageant leur responsabilité technique et morale. + + > Exemples de professions non-règlementées : développeur, historien, urbaniste... + références: + Liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales + +## ======================= +## | New activité modèle | +## ======================= + +entreprise . activités: experimental: oui - non applicable si: mixte + titre: nature de l'activité + question: Quelle(s) sont les activité(s) de votre entreprise ? + description: | + Votre type d'activité va déterminer une grande partie des calculs de cotisations, contributions et impôt. + + ### Pluri-activité + Il est possible d'avoir plusieurs activités différente pour une même entreprise. + + Par exemple, une boulangerie (activité artisanale) peut avoir un rayon épicerie (activité commerciale). + + plusieurs possibilités: + - artisanale + - commerciale + - agricole + - libérale + références: + Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite + Comment déterminer la nature de l'activité d'une entreprise ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat + Spécifiquement pour les auto-entrepreneurs: https://www.shine.fr/blog/categorie-activite-auto-entrepreneur + + avec: + libérale: + par défaut: + variable manquante: entreprise . activités + valeur: non + question: Avez-vous une activité libérale ? + description: | + Une activité libérale consiste en des prestations de services de nature principalement intellectuelles. + + Vous rendez un service payant. + + Vous devez avoir un diplôme ou une qualification professionnelle dans le domaine. + + références: + Comment savoir si votre entreprise est libérale ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-3situation1 + fiche Wikipedia: https://fr.wikipedia.org/wiki/Profession_lib%C3%A9rale + liste des professions libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales + + commerciale: + par défaut: + variable manquante: entreprise . activités + valeur: non + + question: Avez-vous une activité commerciale ? + description: | + Votre activité est commerciale si vous êtes dans l'un des cas suivants : + + - Vous achetez des biens ou des marchandises pour les revendre dans un but lucratif : Qui rapporte de l'argent, du profit, des bénéfices + - Vous vendez des services dans les domaines de l'hôtellerie, la restauration, les transports, les spectacles, la sécurité, l'informatique, le design, etc. + - Vous avez une activité de location de biens, de marchandises ou de services + + références: + Comment savoir si votre activité est commerciale: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-1situation1 + + artisanale: + par défaut: + variable manquante: entreprise . activités + valeur: non + + question: Avez-vous une activité artisanale ? + description: | + Pour être artisan, vous devez répondre aux 3 critères suivants : + + - Votre activité doit faire partie de la liste officielle des métiers de l'artisanat ou de la liste officielle des métiers d'artisanat d'art + - Votre entreprise doit compter moins de 11 salariés à sa création + - Vous devez détenir un savoir-faire spécifique et le prouver par un diplôme (CAP, BEP, etc.) ou une qualification professionnelle + références: + Comment savoir si votre activité est artisanale ?: 'https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-2situation1' + liste des activités artisanales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/activites-artisanales-0 + + agricole: + non applicable si: catégorie juridique . EI . auto-entrepreneur + par défaut: + variable manquante: entreprise . activités + valeur: non + question: Avez-vous une activité agricole ? + description: | + Une activité est agricole si elle dépend du cycle biologique végétal ou animal dans le cadre d'une exploitation ou d'une production. + + Ce critère est déterminant et s'applique quelle que soit la forme juridique de votre exploitation (entreprise individuelle, société, groupement agricole). + + Il peut s'agir également d'une activité qui prolonge l'activité de production agricole. Ainsi les activités suivantes sont considérées comme agricoles : + + - Activités de "tourisme à la ferme" (gîtes, chambres d'hôtes, tables d'hôtes, fermes auberges, etc.) ayant pour support l'exploitation agricole + - Activités de préparation et d'entraînement des chevaux et poneys domestiques en vue de leur exploitation : courses, concours, cours, etc. + - Production et commercialisation de biogaz, d'électricité et de chaleur par la méthanisation, lorsqu'elle est issue en majorité (plus de 50 %) de matières provenant d'exploitations agricoles + - Transformation et vente directe des produits issus + références: + Comment savoir si votre activité est agricole ?: 'https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat?lang=&quest0=1&quest=#fiche-item-aria-4situation1' + + libérale . réglementée: + question: Est-ce une activité libérale réglementée ? + par défaut: non + description: | + Certaines professions libérales ont été classées dans le domaine libéral par la loi et leur titre est protégé. Leurs membres doivent respecter des règles déontologiques strictes et sont soumis au contrôle de leurs instances professionnelles (ordre, chambre, ou syndicat). + + > Exemples de professions règlementées : architecte, avocat, infirmier, médecin... + + Il s'agit des autres personnes qui pratiquent, une science ou un art et dont l'activité intellectuelle joue le principal rôle. Leurs recettes doivent représenter la rémunération d'un travail personnel, sans lien de subordination, tout en engageant leur responsabilité technique et morale. + + > Exemples de professions non-règlementées : développeur, historien, urbaniste... + références: + Liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales + + commerciale . agent commercial: + description: | + L’agent commercial négocie et/ou conclut des contrats de vente, d’achat, de location ou de prestation de services pour le compte d’un tiers (producteur, industriel, commerçant, etc.). Il s’agit donc d’un intermédiaire de commerce qui, contrairement au VRP (vendeur, représentant et placier), est un professionnel indépendant. + question: Exercez-vous votre activité en tant qu'agent commercial ? + par défaut: non + références: + 'Devenir agent commercial : pourquoi et comment obtenir ce statut ?': https://www.economie.gouv.fr/entreprises/agent-commercial-immatriculation + 'Agent commercial - Réglementation': https://bpifrance-creation.fr/activites-reglementees/agent-commercial + +# entreprise . activités . principale: +# une possibilité: +# choix obligatoire: oui +# possibilités: +# - artisanale +# - commerciale +# - agricole +# - libérale +# variations: +# - si: +# toutes ces conditions: +# - activités . artisanale +# - activités . commerciale = non +# - activités . agricole = non +# - activités . libérale = non +# alors: "'artisanale'" +# - si: +# toutes ces conditions: +# - activités . commerciale +# - activités . artisanale = non +# - activités . agricole = non +# - activités . libérale = non +# alors: "'commerciale'" +# - si: +# toutes ces conditions: +# - activités . agricole +# - activités . artisanale = non +# - activités . commerciale = non +# - activités . libérale = non +# alors: "'agricole'" +# - si: +# toutes ces conditions: +# - activités . libérale +# - activités . agricole = non +# - activités . artisanale = non +# - activités . commerciale = non +# alors: "'libérale'" +# - sinon: +# variations: +# - si: activités . libérale +# par défaut: "'libérale'" +# - si: activités . agricole +# par défaut: "'agricole'" +# - si: activités . commerciale +# par défaut: "'artisanale'" +# - sinon: +# par défaut: "'commerciale'" + +# références: +# Vérifier la nature de son activité: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/verifier-nature-son-activite +# Comment déterminer la nature de l'activité d'une entreprise ?: https://entreprendre.service-public.fr/vosdroits/F32887/personnalisation/resultat +# Spécifiquement pour les auto-entrepreneurs: https://www.shine.fr/blog/categorie-activite-auto-entrepreneur +# avec: +# artisanale: +# applicable si: activités . artisanale +# valeur: activités . principale = "'artisanale'" +# commerciale: +# applicable si: activités . commerciale +# valeur: activités . principale = "'commerciale'" +# agricole: +# applicable si: activités . agricole +# valeur: activités . principale = "'agricole'" +# libérale: +# applicable si: activités . libérale +# valeur: activités . principale = "'libérale'" + +entreprise . activités . service ou vente: + experimental: oui + non applicable si: revenus mixtes applicable si: une de ces conditions: - - activité . nature = 'artisanale' - - activité . nature = 'commerciale' - question: Quelle est le type d'activité de l'entreprise ? + - activités . artisanale + - activités . commerciale + question: Quelle est le type d'activité principale de l'entreprise ? formule: une possibilité: choix obligatoire: oui @@ -77,33 +284,37 @@ entreprise . activité . service ou vente: - service par défaut: "'vente'" -entreprise . activité . service ou vente . vente: - titre: vente de biens, restauration ou hébergement - description: | - Il s’agit de toute opération comportant transfert de propriété d'un bien - corporel (c'est-à-dire un bien ayant une existence matérielle), ainsi que - toutes les activités de restauration et d'hébergement. - références: - page impots.gouv.fr: https://www.impots.gouv.fr/portail/professionnel/achatvente-de-biens + avec: + vente: + titre: vente de biens, restauration ou hébergement + description: | + Il s’agit de toute opération comportant transfert de propriété d'un bien + corporel (c'est-à-dire un bien ayant une existence matérielle), ainsi que + toutes les activités de restauration et d'hébergement. + références: + page impots.gouv.fr: https://www.impots.gouv.fr/portail/professionnel/achatvente-de-biens -entreprise . activité . service ou vente . service: - titre: prestation de service - description: | - Il s’agit de toute opération ne comportant pas de transfert de propriété de - biens corporels (c'est-à-dire ayant une existence matérielle). + service: + titre: prestation de service + description: | + Il s’agit de toute opération ne comportant pas de transfert de propriété de + biens corporels (c'est-à-dire ayant une existence matérielle). + références: + page impots.gouv.fr: https://www.impots.gouv.fr/portail/professionnel/prestations-entre-assujettis - références: - page impots.gouv.fr: https://www.impots.gouv.fr/portail/professionnel/prestations-entre-assujettis +entreprise . activités . commerciale . débit de tabac: + experimental: oui + question: Exercez-vous une activité de vente de tabac ? + par défaut: non -entreprise . activité . mixte: +entreprise . activités . revenus mixtes: experimental: oui titre: Activités mixtes applicable si: imposition . régime . micro-entreprise - question: Votre entreprise a-t-elle plusieurs types d'activités ? + question: Votre entreprise a-t-elle des activités avec des types de revenus différents ? par défaut: non description: | - Il est possible d'avoir plusieurs activités avec des types de revenus - différents pour une même entreprise. + Il est possible des activités avec des types de revenus différents pour une même entreprise. Par exemple, une entreprise de plomberie qui facture l'achat et la pose d'un robinet a une partie de son chiffre d'affaires en vente de materiel (le robinet) @@ -118,44 +329,25 @@ entreprise . activité . mixte: Si votre entreprise a des activités correspondants à plusieurs catégories de revenus, répondez oui à cette question. -entreprise . activité . mixte . proportions: - description: Part des différentes activités dans le chiffre d'affaires - titre: proportion activité - unité: '%' - somme: - - nom: service BIC - variations: - - si: activité . nature = 'libérale' - alors: 0% - - sinon: 50% - - nom: service BNC - variations: - - si: activité . nature = 'libérale' - alors: 2 / 3 - - sinon: 0% - - nom: vente restauration hébergement - variations: - - si: activité . nature = 'libérale' - alors: 1 / 3 - - sinon: 50% - note: Il appartient à l'utilisateur de bien vérifier que la somme des trois pourcentages renseignés vaut 100%. - -entreprise . activité . nature . libérale . réglementée: - question: Est-ce une activité libérale réglementée ? - par défaut: non - description: | - Certaines professions libérales ont été classées dans le domaine libéral par la loi et leur titre est protégé. Leurs membres doivent respecter des règles déontologiques strictes et sont soumis au contrôle de leurs instances professionnelles (ordre, chambre, ou syndicat). - - > Exemples de professions règlementées : architecte, avocat, infirmier, médecin... - - Il s'agit des autres personnes qui pratiquent, une science ou un art et dont l'activité intellectuelle joue le principal rôle. Leurs recettes doivent représenter la rémunération d'un travail personnel, sans lien de subordination, tout en engageant leur responsabilité technique et morale. - - > Exemples de professions non-règlementées : développeur, historien, urbaniste... - références: - Liste des activités libérales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/liste-professions-liberales - -entreprise . activité . débit de tabac: - experimental: oui - applicable si: activité . nature = 'commerciale' - question: Exercez-vous une activité de vente de tabac ? - par défaut: non + avec: + proportions: + description: Part des différentes activités dans le chiffre d'affaires + titre: proportion activité + unité: '%' + somme: + - nom: service BIC + variations: + - si: activité . nature . libérale + alors: 0% + - sinon: 50% + - nom: service BNC + variations: + - si: activité . nature . libérale + alors: 2 / 3 + - sinon: 0% + - nom: vente restauration hébergement + variations: + - si: activité . nature . libérale + alors: 1 / 3 + - sinon: 50% + note: Il appartient à l'utilisateur de bien vérifier que la somme des trois pourcentages renseignés vaut 100%. diff --git a/modele-social/règles/entreprise/catégorie-juridique.yaml b/modele-social/règles/entreprise/catégorie-juridique.yaml index edde8e5b7..5f3537bb6 100644 --- a/modele-social/règles/entreprise/catégorie-juridique.yaml +++ b/modele-social/règles/entreprise/catégorie-juridique.yaml @@ -1,45 +1,99 @@ entreprise . catégorie juridique: - description: | - Les catégories juridiques accessibles via l'API SIRENE - par défaut: non + question: Quelle est la catégorie juridique ? + # description: Les catégories juridiques accessibles via l'API SIRENE + # par défaut: non + note: On se base ici sur les catégories juridiques définies par l'INSEE + références: + liste des catégories juridique de l'INSEE: https://www.insee.fr/fr/information/2028129 une possibilité: choix obligatoire: oui possibilités: - EI + - EI . auto-entrepreneur - SARL + - SARL . unipersonnelle + - SA à conseil d'administration + - SA à directoire + - SNC - SAS + - SAS . unipersonnelle + - SELARL + - SELAS + - autre personne morale immatriculée au RCS - autre - références: - liste des catégories juridique de l'INSEE: https://www.insee.fr/fr/information/2028129 - note: On se base ici sur les catégories juridiques définies par l'INSEE + meta: + affichage: radio + +### (niveau 1 code 1) Entrepreneur individuel ### entreprise . catégorie juridique . EI: - titre: 'EI ou EIRL' - valeur: catégorie juridique = 'EI' + titre: Entreprise Individuelle + valeur: + une de ces conditions: + - catégorie juridique = 'EI' + - catégorie juridique = 'EI . auto-entrepreneur' entreprise . catégorie juridique . EI . auto-entrepreneur: + titre: Micro/Auto-Entrepreneur question: Êtes-vous auto-entrepreneur ? - par défaut: - nom: défaut - valeur: oui + valeur: catégorie juridique = 'EI . auto-entrepreneur' + # par défaut: + # nom: défaut + # valeur: oui remplace: - règle: imposition . régime par: "'micro-entreprise'" - règle: entreprise . imposition par: "'IR'" +### (niveau 1 code 5) Société commerciale ### + entreprise . catégorie juridique . SARL: - titre: 'EURL ou SARL' - valeur: catégorie juridique = 'SARL' + titre: Société À Responsabilité Limitée (SARL) + # titre: EURL ou SARL + valeur: + une de ces conditions: + - catégorie juridique = 'SARL' + - catégorie juridique = 'SARL . unipersonnelle' entreprise . catégorie juridique . SARL . unipersonnelle: - titre: EURL + titre: Entreprise Unipersonnelle à Responsabilité Limitée (EURL ou SARL unipersonnelle) description: |- Une EURL est une entreprise avec un seul associé. Cela signifie que vous êtes le seul et unique propriétaire de l'entreprise. question: Votre entreprise est-elle une EURL ? - par défaut: oui + # par défaut: oui + valeur: catégorie juridique = 'SARL . unipersonnelle' + +entreprise . catégorie juridique . SA à conseil d'administration: + titre: Société Anonyme à conseil d'administration + valeur: catégorie juridique = 'SA à conseil d'administration' + +entreprise . catégorie juridique . SA à directoire: + titre: Société Anonyme à directoire + valeur: catégorie juridique = 'SA à directoire' + +entreprise . catégorie juridique . SNC: + titre: Société en Nom Collectif (SNC) + valeur: catégorie juridique = 'SNC' + +entreprise . catégorie juridique . SAS: + titre: Société par Actions Simplifiée (SAS) + # titre: SASU ou SAS + valeur: + une de ces conditions: + - catégorie juridique = 'SAS' + - catégorie juridique = 'SAS . unipersonnelle' + +entreprise . catégorie juridique . SAS . unipersonnelle: + titre: Société par Actions Simplifiée Unipersonnelle (SASU) + question: Votre entreprise est-elle une SASU ? + # par défaut: oui + valeur: catégorie juridique = 'SAS . unipersonnelle' + +### (niveau 1 code 6) Autre personne morale immatriculée au RCS ### entreprise . catégorie juridique . SELARL: + titre: Société d'Exercice Libéral A Responsabilité Limitée (SELARL) valeur: catégorie juridique = 'SELARL' remplace: - règle: entreprise . activité . nature @@ -48,6 +102,7 @@ entreprise . catégorie juridique . SELARL: par: oui entreprise . catégorie juridique . SELAS: + titre: Société d'Exercice Libéral par Actions Simplifiées (SELAS) valeur: catégorie juridique = 'SELAS' remplace: - règle: entreprise . activité . nature @@ -55,14 +110,9 @@ entreprise . catégorie juridique . SELAS: - règle: entreprise . activité . nature . libérale . réglementée par: oui -entreprise . catégorie juridique . SAS: - titre: 'SASU ou SAS' - valeur: catégorie juridique = 'SAS' - -entreprise . catégorie juridique . SAS . unipersonnelle: - titre: 'SASU' - question: Votre entreprise est-elle une SASU ? - par défaut: oui +entreprise . catégorie juridique . autre personne morale immatriculée au RCS: + titre: autre personne morale immatriculée au RCS + valeur: catégorie juridique = 'autre personne morale immatriculée au RCS' entreprise . catégorie juridique . autre: valeur: catégorie juridique = 'autre' diff --git a/modele-social/règles/entreprise/coût-création.yaml b/modele-social/règles/entreprise/coût-création.yaml new file mode 100644 index 000000000..48d80c9c4 --- /dev/null +++ b/modele-social/règles/entreprise/coût-création.yaml @@ -0,0 +1,104 @@ +entreprise . coût formalités . création: + titre: Coût de création d'une entreprise + somme: + - RCS . création + - CMA . création + - RSAC . création + +entreprise . coût formalités . RCS: + titre: Les tarifs liés au Registre du commerce et des sociétés + avec: + création: + variations: + - si: catégorie juridique . EI . auto-entrepreneur + alors: 0€ + - si: catégorie juridique . EI + alors: + applicable si: activités . commerciale + valeur: 20.07 € + - si: + une de ces conditions: + - catégorie juridique . SARL + - catégorie juridique . SAS + # TODO ??? + alors: 24.52 € + - sinon: 49.04 € + références: + Article A743-10 du Code de commerce: https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000041675936 + +entreprise . coût formalités . CMA: + titre: Les tarifs liés au Chambre des Métiers et de l'Artisanat + applicable si: activités . artisanale + avec: + création: + variations: + - si: RCS . création > 0€ + alors: 15 € + - sinon: 45 € + références: + Prestation délivrée par la chambre de métiers et de l’artisanat: https://formalites.entreprises.gouv.fr/tarifs.php#art19 + +entreprise . coût formalités . RSAC: + titre: Les tarifs liés au Registre Spécial des Agents Commerciaux + applicable si: activités . commerciale . agent commercial + avec: + création: 6.69 € + +entreprise . coût formalités . création . JAL: + titre: Les tarifs liés au Journal d'annonce légal +# Les JAL ont une logique qui dépend beaucoup du prestataire. +# Les montant forfaitaires existent dans la loi, mais aucun moyen de savoir si ils sont beaucoup utilisés. +# Peut-être mettre une fourchette dans un premier temps (comme sur service-public) ? +# Fun fact : la presse quotidienne régionale est financée à 50% par cette mane + +entreprise . coût formalités . création . BODACC: + titre: Les tarifs liés au Bulletin officiel des annonces civiles et commerciales +# +# entreprise . coût formalités . création . x: + +# RCS: +# Différence entre immatriculation principale et immatriculation par création d'une entreprise (39 vs 41) : +# la deuxième est une réduction de la formalité pour la création de société commerciale (pas concernée les sociétés agricole, SELARL, etc) +# Société civile, société agricole, SELARL, etc -> pas de réduction pour la création, seulement société commerciale et artisanale ; +# toute société doit être immatriculée au RCS + +# Pas de JAL pour les sociétés agricoles ; +# Pas de frais de BODACC pour la création ; +# Pas de frais liés à l'INPI pour la création ; +# Uniquement frais de greffe + JAL ; + +# coût HT ; + +# Plus de déclarations d'affectation du patrimoine d'EIRL. + +# Bénéficiaire effectif : +# montant à payer en plus ; +# détenir un pourcentage minimale de droit de vote ou de capital social de 25% ; +# ou si personne ne dépasse le seul, c'est le représentant ; + +# Agents commerciaux : +# A la fois personne physique non immatriculé au RCS et société imatriculé au RCS + +# Agents commerciaux : +# A la fois personne physique non immatriculé au RCS + +entreprise . coût formalités . création . frais de transmissions: + # description: +# Frais de transmissions +# Désormais, tout est sur guichet unique, dématerialisé, donc pas de frais transmission possible +# Par contre, le greffe peut envoyer des pièces, facture débourt postaux, 0.97€ HT (à vérifier) +# Si RCS est un succès, le greffe doit vous envoyer des kbis, ces frais postaux sont inclus dans la prestation principale +# Demande de complément facturé en cas de pièce manquante chez le RCS mais pas chez les artisans. + +# Auto-entreprise +# pas de frais de création +# plus de formation obligatoire +# frais d'immatriculation de cessation et radiation sont gratuit +# Mais +# frais de rejet en cas de mauvaise déclaration (3 €) +# normalement pas censé arrivé via le guichet unique +# mais ça peut arriver pour les micro entrepreneur réglementée (hors libérale) +# exemple : taxi + +# Autre +# Double immatriculation possible (artisan + commerçant), dans ce cas, réduction artisan diff --git a/modele-social/règles/entreprise/entreprise.yaml b/modele-social/règles/entreprise/entreprise.yaml index 6426c0b1e..826b1a3c1 100644 --- a/modele-social/règles/entreprise/entreprise.yaml +++ b/modele-social/règles/entreprise/entreprise.yaml @@ -86,13 +86,13 @@ entreprise . chiffre d'affaires . vente restauration hébergement: question: Quel est le chiffre d'affaires issu de la vente de biens, restauration ou hébergement ? unité: €/an variations: - - si: activité . mixte + - si: activités . revenus mixtes alors: produit: assiette: chiffre d'affaires - taux: activité . mixte . proportions . vente restauration hébergement + taux: activités . revenus mixtes . proportions . vente restauration hébergement - sinon: - applicable si: activité . service ou vente = 'vente' + applicable si: activités . service ou vente = 'vente' valeur: chiffre d'affaires arrondi: oui plancher: 0€/an @@ -132,13 +132,13 @@ entreprise . chiffre d'affaires . service BIC: **Exemples** : transports, service à la personne, réparation etc. par défaut: 0€/an variations: - - si: activité . mixte + - si: activités . revenus mixtes alors: produit: assiette: chiffre d'affaires - taux: activité . mixte . proportions . service BIC + taux: activités . revenus mixtes . proportions . service BIC - sinon: - applicable si: activité . service ou vente = 'service' + applicable si: activités . service ou vente = 'service' valeur: chiffre d'affaires références: service-public.fr: https://www.service-public.fr/professionnels-entreprises/vosdroits/F32919 @@ -159,13 +159,13 @@ entreprise . chiffre d'affaires . service BNC: Les revenus tirés de ce chiffre d'affaires sont imposable au régime BNC (bénéfices non commerciaux) variations: - - si: activité . mixte + - si: activités . revenus mixtes alors: produit: assiette: chiffre d'affaires - taux: activité . mixte . proportions . service BNC + taux: activités . revenus mixtes . proportions . service BNC - sinon: - applicable si: activité . nature = 'libérale' + applicable si: activité . nature . libérale valeur: chiffre d'affaires références: @@ -411,7 +411,7 @@ entreprise . TVA: **À noter** : il ne faut pas confondre l'exonération de TVA (qui dépend de votre activité) et le régime en franchise de base (qui dépend de votre chiffre d'affaires). - references: + références: Les régimes d'imposition à la TVA: https://www.impots.gouv.fr/professionnel/les-regimes-dimposition-la-tva Tout savoir sur la TVA: https://entreprendre.service-public.fr/vosdroits/N13445 Liste des activités exonérées (Article 61 du Code général des impôts): https://www.legifrance.gouv.fr/codes/id/LEGISCTA000006179649/ diff --git a/modele-social/règles/entreprise/imposition.yaml b/modele-social/règles/entreprise/imposition.yaml index 0dd8186db..7888e7514 100644 --- a/modele-social/règles/entreprise/imposition.yaml +++ b/modele-social/règles/entreprise/imposition.yaml @@ -281,7 +281,7 @@ entreprise . imposition . régime . micro-entreprise . revenu abattu: plancher: nom: plancher abattement variations: - - si: entreprise . activité . mixte + - si: entreprise . activités . revenus mixtes alors: 610 €/an - sinon: 305 €/an diff --git a/modele-social/règles/profession-libérale.yaml b/modele-social/règles/profession-libérale.yaml index fd680951d..485599a3a 100644 --- a/modele-social/règles/profession-libérale.yaml +++ b/modele-social/règles/profession-libérale.yaml @@ -2,7 +2,7 @@ dirigeant . indépendant . PL: titre: Profession libérale applicable si: entreprise . activité . nature = 'libérale' - rend non applicable: entreprise . activité . mixte + rend non applicable: entreprise . activités . revenus mixtes formule: oui dirigeant . indépendant . PL . métier: diff --git a/modele-social/règles/salarié/cotisations.yaml b/modele-social/règles/salarié/cotisations.yaml index 51d12a4c8..1156ec8cd 100644 --- a/modele-social/règles/salarié/cotisations.yaml +++ b/modele-social/règles/salarié/cotisations.yaml @@ -500,7 +500,7 @@ salarié . cotisations . AGS: Cette cotisations permet de garantir les salaires des employés en cas de difficultés de l'entreprise (sauvegarde, redressement, liquidation). Elle paie les salaires sur les 60 derniers jours de travail. Elle permet de payer des préavis et des indemnités de fin de contrat. cotisation: branche: assurance chômage - references: + références: calcul: https://www.service-public.fr/professionnels-entreprises/vosdroits/F31409 produit: assiette: cotisations . assiette diff --git a/modele-social/règles/salarié/rémunération.yaml b/modele-social/règles/salarié/rémunération.yaml index 15895791f..5331050f6 100644 --- a/modele-social/règles/salarié/rémunération.yaml +++ b/modele-social/règles/salarié/rémunération.yaml @@ -550,7 +550,7 @@ salarié . rémunération . frais professionnels . trajets domicile travail . tr Remboursement des frais de transport: https://www.service-public.fr/particuliers/vosdroits/F19846/personnalisation/resultat?lang=&quest0=0 Prise en charge obligatoire des frais de transport public: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-elements-a-prendre-en-compte/les-frais-professionnels/les-frais-de-transport/trajet-domicilelieu-de-travail/prise-en-charge-obligatoire-des.html#FilAriane suggestions: - Navigo: 75 €/mois + Navigo: 84.10 €/mois Técély: 65 €/mois RTM: 40 €/mois Tisséo: 42.50 €/mois diff --git a/site/source/components/ChiffreAffairesActivitéMixte.tsx b/site/source/components/ChiffreAffairesActivitéMixte.tsx index 99a0d2deb..0d061753d 100644 --- a/site/source/components/ChiffreAffairesActivitéMixte.tsx +++ b/site/source/components/ChiffreAffairesActivitéMixte.tsx @@ -17,11 +17,11 @@ import { FromTop } from './ui/animate' import { useEngine } from './utils/EngineContext' const proportions = { - 'entreprise . activité . mixte . proportions . service BIC': + 'entreprise . activités . revenus mixtes . proportions . service BIC': "entreprise . chiffre d'affaires . service BIC", - 'entreprise . activité . mixte . proportions . service BNC': + 'entreprise . activités . revenus mixtes . proportions . service BNC': "entreprise . chiffre d'affaires . service BNC", - 'entreprise . activité . mixte . proportions . vente restauration hébergement': + 'entreprise . activités . revenus mixtes . proportions . vente restauration hébergement': "entreprise . chiffre d'affaires . vente restauration hébergement", } as const @@ -52,10 +52,10 @@ export default function ChiffreAffairesActivitéMixte({ onUpdateSituation={clearChiffreAffaireMixte} dottedName={dottedName} /> - + - + {Object.values(proportions).map((chiffreAffaires) => ( { dispatch( @@ -148,7 +149,9 @@ function ActivitéMixte() { Object.values(proportions).reduce( (acc, dottedName) => ({ ...acc, [dottedName]: undefined }), { - 'entreprise . activité . mixte': checked ? 'oui' : 'non', + 'entreprise . activités . revenus mixtes': checked + ? 'oui' + : 'non', } ) ) diff --git a/site/source/components/conversation/ChoicesInput.tsx b/site/source/components/conversation/ChoicesInput.tsx index 7a7c84424..9698835af 100644 --- a/site/source/components/conversation/ChoicesInput.tsx +++ b/site/source/components/conversation/ChoicesInput.tsx @@ -5,16 +5,7 @@ import { RuleNode, serializeEvaluation, } from 'publicodes' -import { - Fragment, - Key, - createContext, - useCallback, - useContext, - useEffect, - useRef, - useState, -} from 'react' +import { Fragment, Key, useCallback, useEffect, useRef, useState } from 'react' import { Trans, useTranslation } from 'react-i18next' import styled from 'styled-components' @@ -58,12 +49,6 @@ export type Choice = RuleNode & { canGiveUp?: boolean } -// TODO : This is hacky, the logic to hide/disable some of the possible answer -// to a mutliple-choice question must be handled by Publicodes. We use a React -// context instead of passing down props to avoid polluting to much code with -// this undesirable option. -export const HiddenOptionContext = createContext>([]) - export function MultipleAnswerInput({ choice, type = 'radio', @@ -162,89 +147,84 @@ function RadioChoice({ rootDottedName: Names type: 'radio' | 'toggle' }) { - const hiddenOptions = useContext(HiddenOptionContext) const { t } = useTranslation() return ( <> - {choice.children.map((node) => { - return ( - - {' '} - {hiddenOptions.includes( - node.dottedName as DottedName - ) ? null : 'children' in node ? ( -
( + + {' '} + {'children' in node ? ( +
+

+ {node.title} +

+ + + + +
+ ) : ( + + -

- {node.title} -

- - - - -
- ) : ( - - - {node.title}{' '} - {node.rawNode.icônes && } - {' '} - {type !== 'toggle' && ( - - )} - - )} -
- ) - })} + {node.title}{' '} + {node.rawNode.icônes && } + {' '} + {type !== 'toggle' && ( + + )} + + )} + + ))} {choice.canGiveUp && ( <> {t('Aucun')} diff --git a/site/source/components/conversation/Conversation.tsx b/site/source/components/conversation/Conversation.tsx index d39680e16..9b22bf4ad 100644 --- a/site/source/components/conversation/Conversation.tsx +++ b/site/source/components/conversation/Conversation.tsx @@ -50,11 +50,13 @@ export default function Conversation({ const dispatch = useDispatch() const engine = useEngine() const currentQuestion = useNextQuestions(engines)[0] + const situation = useSelector(situationSelector) const currentQuestionIsAnswered = !( currentQuestion in useMissingVariables({ engines: engines ?? [engine] }) ) const previousAnswers = useSelector(answeredQuestionsSelector) + const { t } = useTranslation() useEffect(() => { if (currentQuestion && !currentQuestionIsAnswered) { @@ -72,8 +74,11 @@ export default function Conversation({ dispatch(goToQuestion(previousAnswers.slice(-1)[0])) } - const onChange = (value: PublicodesExpression | undefined) => { - dispatch(answerQuestion(currentQuestion, value)) + const onChange = ( + value: PublicodesExpression | undefined, + dottedName: DottedName + ) => { + dispatch(answerQuestion(dottedName, value)) } return ( diff --git a/site/source/components/conversation/MulipleChoicesInput.tsx b/site/source/components/conversation/MulipleChoicesInput.tsx new file mode 100644 index 000000000..fc65d476b --- /dev/null +++ b/site/source/components/conversation/MulipleChoicesInput.tsx @@ -0,0 +1,73 @@ +import { DottedName } from 'modele-social' +import Engine, { PublicodesExpression, RuleNode } from 'publicodes' + +import { Checkbox } from '@/design-system' +import { Emoji } from '@/design-system/emoji' + +import { ExplicableRule } from './Explicable' +import { InputProps } from './RuleInput' + +export function MultipleChoicesInput( + props: Omit, 'onChange'> & { + choices: Array + onChange: (value: PublicodesExpression, name: Names) => void + } +) { + const handleChange = (isSelected: boolean, dottedName: Names) => { + // As soon as one option is selected, all the others are not missing anymore + return props.choices.forEach((choice) => { + const value = + dottedName === choice.dottedName + ? isSelected + : props.engine.evaluate(choice).nodeValue + props.onChange(value ? 'oui' : 'non', choice.dottedName) + }) + } + + return ( + <> + {props.choices.map((node) => ( + <> + + handleChange(isSelected, node.dottedName as Names) + } + engine={props.engine} + /> +
+ + ))} + + ) +} + +type CheckBoxRuleProps = { + node: RuleNode + engine: Engine + onChange: (isSelected: boolean) => void +} +function CheckBoxRule({ node, engine, onChange }: CheckBoxRuleProps) { + const evaluation = engine.evaluate(node) + if (evaluation.nodeValue === null) { + return null + } + + return ( + <> + onChange(isSelected)} + /> + {node.rawNode.icônes && }{' '} + + + ) +} diff --git a/site/source/components/conversation/RuleInput.tsx b/site/source/components/conversation/RuleInput.tsx index 81d0596ca..dd3bcf05d 100644 --- a/site/source/components/conversation/RuleInput.tsx +++ b/site/source/components/conversation/RuleInput.tsx @@ -17,6 +17,7 @@ import { getMeta } from '@/utils' import { Choice, MultipleAnswerInput, OuiNonInput } from './ChoicesInput' import DateInput from './DateInput' +import { MultipleChoicesInput } from './MulipleChoicesInput' import ParagrapheInput from './ParagrapheInput' import TextInput from './TextInput' import SelectPaysDétachement from './select/SelectPaysDétachement' @@ -53,13 +54,14 @@ type Props = Omit< export type InputProps = Omit< Props, - 'onChange' + 'onChange' | 'engine' > & Pick & { question: RuleNode['rawNode']['question'] description: RuleNode['rawNode']['description'] value: EvaluatedNode['nodeValue'] onChange: (value: PublicodesExpression | undefined) => void + engine: Engine } export const binaryQuestion = [ @@ -85,7 +87,7 @@ export default function RuleInput({ }: Props) { const defaultEngine = useContext(EngineContext) - const engineValue = engine ?? defaultEngine + const engineValue = (engine ?? defaultEngine) as Engine const rule = engineValue.getRule(dottedName) const evaluation = engineValue.evaluate({ valeur: dottedName, ...modifiers }) @@ -106,13 +108,24 @@ export default function RuleInput({ question: rule.rawNode.question, suggestions: showSuggestions ? rule.suggestions : {}, autoFocus: shouldFocusField, + engine: engineValue, ...props, // Les espaces ne sont pas autorisés dans un id, les points sont assimilés à une déclaration de class CSS par Cypress id: props?.id?.replace(/\s|\./g, '') ?? dottedName.replace(/\s|\./g, ''), } const meta = getMeta<{ affichage?: string }>(rule.rawNode, {}) - if (getVariant(engineValue.getRule(dottedName))) { + if (isMultiplePossibilities(engineValue, dottedName)) { + return ( + + ) + } + + if (isOnePossibility(engineValue.getRule(dottedName))) { const type = inputType ?? (meta.affichage && @@ -123,7 +136,7 @@ export default function RuleInput({ return ( ) @@ -197,7 +210,7 @@ export default function RuleInput({ ) } -const getVariant = (node: RuleNode) => +const isOnePossibility = (node: RuleNode) => reduceAST( (_, node) => { if (node.nodeKind === 'une possibilité') { @@ -208,7 +221,7 @@ const getVariant = (node: RuleNode) => node ) -export const buildVariantTree = ( +export const getOnePossibilityOptions = ( engine: Engine, path: Name ): Choice => { @@ -216,7 +229,7 @@ export const buildVariantTree = ( if (!node) { throw new Error(`La règle ${path} est introuvable`) } - const variant = getVariant(node) + const variant = isOnePossibility(node) const canGiveUp = variant && (!variant['choix obligatoire'] || variant['choix obligatoire'] === 'non') @@ -233,9 +246,33 @@ export const buildVariantTree = ( ) .filter((node) => engine.evaluate(node).nodeValue !== null) .map(({ dottedName }) => - buildVariantTree(engine, dottedName as Name) + getOnePossibilityOptions(engine, dottedName as Name) ), } : null ) as Choice } + +type RuleWithMultiplePossibilities = RuleNode & { + rawNode: RuleNode['rawNode'] & { + 'plusieurs possibilités'?: Array + } +} +function isMultiplePossibilities( + engine: Engine, + dottedName: Name +): boolean { + return !!(engine.getRule(dottedName) as RuleWithMultiplePossibilities) + .rawNode['plusieurs possibilités'] +} + +function getMultiplePossibilitiesOptions( + engine: Engine, + dottedName: Name +): Array { + return ( + (engine.getRule(dottedName) as RuleWithMultiplePossibilities).rawNode[ + 'plusieurs possibilités' + ] ?? [] + ).map((name) => engine.getRule(`${dottedName} . ${name}` as Name)) +} diff --git a/site/source/locales/rules-en.yaml b/site/source/locales/rules-en.yaml index fc026a045..3e51d224a 100644 --- a/site/source/locales/rules-en.yaml +++ b/site/source/locales/rules-en.yaml @@ -3969,7 +3969,7 @@ entreprise . activité . débit de tabac: question.fr: Exercez-vous une activité de vente de tabac ? titre.en: '[automatic] tobacco shop' titre.fr: débit de tabac -entreprise . activité . mixte: +entreprise . activités . revenus mixtes: description.en: > [automatic] It is possible to have several activities with different types of income for the same @@ -4028,7 +4028,7 @@ entreprise . activité . mixte: question.fr: Votre entreprise a-t-elle plusieurs types d'activités ? titre.en: '[automatic] Mixed activities' titre.fr: Activités mixtes -entreprise . activité . mixte . proportions: +entreprise . activités . revenus mixtes . proportions: description.en: '[automatic] Share of the different activities in the turnover' description.fr: Part des différentes activités dans le chiffre d'affaires note.en: '[automatic] It is up to the user to check that the sum of the three @@ -4147,12 +4147,12 @@ entreprise . activité . nature . libérale . réglementée: question.fr: Est-ce une activité libérale réglementée ? titre.en: '[automatic] regulated' titre.fr: réglementée -entreprise . activité . service ou vente: +entreprise . activités . service ou vente: question.en: '[automatic] What type of business is the company in?' question.fr: Quelle est le type d'activité de l'entreprise ? titre.en: '[automatic] service or sale' titre.fr: service ou vente -entreprise . activité . service ou vente . service: +entreprise . activités . service ou vente . service: description.en: > [automatic] This is any transaction that does not involve the transfer of ownership of tangible @@ -4163,7 +4163,7 @@ entreprise . activité . service ou vente . service: biens corporels (c'est-à-dire ayant une existence matérielle). titre.en: '[automatic] service delivery' titre.fr: prestation de service -entreprise . activité . service ou vente . vente: +entreprise . activités . service ou vente . vente: description.en: > [automatic] It is any transaction involving the transfer of ownership of a tangible asset (i.e., an asset with a physical existence), as diff --git a/site/source/pages/Simulateurs/CoutCreationEntreprise.tsx b/site/source/pages/Simulateurs/CoutCreationEntreprise.tsx new file mode 100644 index 000000000..c856535a3 --- /dev/null +++ b/site/source/pages/Simulateurs/CoutCreationEntreprise.tsx @@ -0,0 +1,43 @@ +import Simulation, { + SimulationGoal, + SimulationGoals, +} from '@/components/Simulation' + +export const CoutCreationEntreprise = () => { + return ( + <> + {/* */} + + {/* */} + } + legend="" + > + {/* + + + */} + {/* */} + {/* */} + {/* */} + + + + + + + ) +} diff --git a/site/source/pages/Simulateurs/Dividendes.tsx b/site/source/pages/Simulateurs/Dividendes.tsx index 9e6be7173..91f64948d 100644 --- a/site/source/pages/Simulateurs/Dividendes.tsx +++ b/site/source/pages/Simulateurs/Dividendes.tsx @@ -12,7 +12,6 @@ import Simulation, { SimulationGoals, } from '@/components/Simulation' import StackedBarChart from '@/components/StackedBarChart' -import { HiddenOptionContext } from '@/components/conversation/ChoicesInput' import Warning from '@/components/ui/WarningBlock' import { useEngine } from '@/components/utils/EngineContext' import { Radio, ToggleGroup } from '@/design-system/field' @@ -38,25 +37,23 @@ export default function DividendesSimulation() { - - }> -
* { - margin-top: 0.6rem; - } - justify-content: center; + }> +
* { + margin-top: 0.6rem; + } + justify-content: center; - @media (min-width: 590px) { - justify-content: space-between; - } - `} - >
- -
- + @media (min-width: 590px) { + justify-content: space-between; + } + `} + >
+ +
) } diff --git a/site/source/pages/Simulateurs/configs/autoEntrepreneur.ts b/site/source/pages/Simulateurs/configs/autoEntrepreneur.ts index 3e7b524d6..4b902e686 100644 --- a/site/source/pages/Simulateurs/configs/autoEntrepreneur.ts +++ b/site/source/pages/Simulateurs/configs/autoEntrepreneur.ts @@ -41,7 +41,7 @@ export const configAutoEntrepreneur: SimulationConfig = { 'liste noire': [ 'entreprise . charges', "entreprise . chiffre d'affaires", - 'entreprise . activité . mixte', + 'entreprise . activités . revenus mixtes', ], }, 'unité par défaut': '€/an', diff --git a/site/source/pages/Simulateurs/configs/comparateurStatuts.ts b/site/source/pages/Simulateurs/configs/comparateurStatuts.ts index 180b85fc0..e67e7932f 100644 --- a/site/source/pages/Simulateurs/configs/comparateurStatuts.ts +++ b/site/source/pages/Simulateurs/configs/comparateurStatuts.ts @@ -32,7 +32,7 @@ export const configComparateurStatuts: SimulationConfig = { }, 'unité par défaut': '€/mois', situation: { - 'entreprise . activité . mixte': 'non', + 'entreprise . activités . revenus mixtes': 'non', salarié: 'non', 'salarié . cotisations . ATMP . taux fonctions support': 'oui', "entreprise . chiffre d'affaires": '4000 €/mois', diff --git a/site/source/pages/Simulateurs/configs/indépendant.ts b/site/source/pages/Simulateurs/configs/indépendant.ts index 74201a445..478c484e1 100644 --- a/site/source/pages/Simulateurs/configs/indépendant.ts +++ b/site/source/pages/Simulateurs/configs/indépendant.ts @@ -53,7 +53,7 @@ export const configIndépendant: SimulationConfig = { 'dirigeant . indépendant . PL . CNAVPL . exonération incapacité', 'dirigeant . indépendant . cotisations et contributions . exonérations . pension invalidité', 'entreprise . salariés . effectif', - 'entreprise . activité . débit de tabac', + 'entreprise . activités . commerciale . débit de tabac', ], }, 'unité par défaut': '€/an', diff --git a/site/source/pages/Simulateurs/metadata-src.ts b/site/source/pages/Simulateurs/metadata-src.ts index 456d24d1c..cb19f8b7b 100644 --- a/site/source/pages/Simulateurs/metadata-src.ts +++ b/site/source/pages/Simulateurs/metadata-src.ts @@ -789,6 +789,31 @@ const getMetadataSrc = (t: TFunction) => { nextSteps: ['déclaration-charges-sociales-indépendant'], }, + 'coût-création-entreprise': { + icône: '💰', + tracking: 'cout_création_entreprise', + iframePath: 'coût-création-entreprise', + pathId: 'simulateurs.coût-création-entreprise', + meta: { + title: t( + 'pages.simulateurs.coût-création-entreprise.meta.title', + "Coût de création d'une entreprise" + ), + description: t( + 'pages.simulateurs.coût-création-entreprise.meta.description', + "Estimer les coûts lors de la création d'une entreprise" + ), + }, + shortName: t( + 'pages.simulateurs.coût-création-entreprise.shortName', + "Coût de création d'une entreprise" + ), + title: t( + 'pages.simulateurs.coût-création-entreprise.title', + "Simulateur du coût de création d'une entreprise" + ), + // nextSteps: ['déclaration-charges-sociales-indépendant'], + }, } as const return data diff --git a/site/source/pages/Simulateurs/metadata.tsx b/site/source/pages/Simulateurs/metadata.tsx index bdd97d370..b41a7eb47 100644 --- a/site/source/pages/Simulateurs/metadata.tsx +++ b/site/source/pages/Simulateurs/metadata.tsx @@ -62,6 +62,7 @@ import salaireBrutNetPreviewFR from './images/SalaireBrutNetPreviewFR.png' import urlIllustrationNetBrutEn from './images/illustration-net-brut-en.png' import urlIllustrationNetBrut from './images/illustration-net-brut.png' import getData from './metadata-src.js' +import { coutCreationEntreprise } from './metadata/coutCreationEntreprise' interface SimulatorsDataParams { t: TFunction @@ -737,6 +738,10 @@ function getSimulatorsData({ t, sitePaths, language }: SimulatorsDataParams) { path: sitePaths.simulateurs['exonération-covid'], component: ExonérationCovid, }, + 'coût-création-entreprise': coutCreationEntreprise( + pureSimulatorsData, + sitePaths + ), } as const } diff --git a/site/source/pages/Simulateurs/metadata/coutCreationEntreprise.tsx b/site/source/pages/Simulateurs/metadata/coutCreationEntreprise.tsx new file mode 100644 index 000000000..099119972 --- /dev/null +++ b/site/source/pages/Simulateurs/metadata/coutCreationEntreprise.tsx @@ -0,0 +1,32 @@ +import { AbsoluteSitePaths } from '@/sitePaths' + +import { CoutCreationEntreprise } from '../CoutCreationEntreprise' +import { SimulationConfig } from '../configs/types' +import { MetadataSrc } from '../metadata-src' + +const config: SimulationConfig = { + 'objectifs exclusifs': [], + objectifs: ['entreprise . coût formalités . création'], + questions: {}, + // 'unité par défaut': '€/mois', + situation: {}, +} + +export const coutCreationEntreprise = ( + pureSimulatorsData: MetadataSrc, + sitePaths: AbsoluteSitePaths +) => ({ + ...pureSimulatorsData['coût-création-entreprise'], + config, + meta: { + ...pureSimulatorsData['coût-création-entreprise']?.meta, + // ogImage: , + }, + path: sitePaths.simulateurs['coût-création-entreprise'], + component: CoutCreationEntreprise, + seoExplanations: ( + <>Vive le SEO + // + // + ), +}) diff --git a/site/source/pages/gerer/declaration-charges-sociales-independant/index.tsx b/site/source/pages/gerer/declaration-charges-sociales-independant/index.tsx index dfcb785e7..f757fb587 100644 --- a/site/source/pages/gerer/declaration-charges-sociales-independant/index.tsx +++ b/site/source/pages/gerer/declaration-charges-sociales-independant/index.tsx @@ -135,7 +135,7 @@ export default function AideDéclarationIndépendant() { {/* PLNR */} - + diff --git a/site/source/sitePaths.ts b/site/source/sitePaths.ts index b787494ce..085353376 100644 --- a/site/source/sitePaths.ts +++ b/site/source/sitePaths.ts @@ -56,6 +56,7 @@ const rawSitePathsFr = { }, simulateurs: { index: 'simulateurs', + 'coût-création-entreprise': 'coût-création-entreprise', 'auto-entrepreneur': 'auto-entrepreneur', 'entreprise-individuelle': 'entreprise-individuelle', eirl: 'eirl', @@ -139,6 +140,7 @@ const rawSitePathsEn = { }, simulateurs: { index: 'calculators', + 'coût-création-entreprise': 'coût-création-entreprise', indépendant: 'independant', 'entreprise-individuelle': 'sole-proprietorship', 'auto-entrepreneur': 'auto-entrepreneur', diff --git a/site/test/regressions/assistant-charges-sociales.yaml b/site/test/regressions/assistant-charges-sociales.yaml index f526bdc92..0b5b14830 100644 --- a/site/test/regressions/assistant-charges-sociales.yaml +++ b/site/test/regressions/assistant-charges-sociales.yaml @@ -47,7 +47,7 @@ débit de tabac: - <<: *base déclaration charge sociales . nature de l'activité: "'commerciale'" dirigeant . rémunération . totale: 50000 €/an - entreprise . activité . débit de tabac: oui + entreprise . activités . commerciale . débit de tabac: oui dirigeant . indépendant . cotisations et contributions . déduction tabac: 30000 €/an RSA: diff --git a/site/test/regressions/simulations-auto-entrepreneur.test.ts b/site/test/regressions/simulations-auto-entrepreneur.test.ts index 9810b1579..d90024b12 100644 --- a/site/test/regressions/simulations-auto-entrepreneur.test.ts +++ b/site/test/regressions/simulations-auto-entrepreneur.test.ts @@ -27,9 +27,9 @@ it('calculate simulations-auto-entrepreneur', () => { ).toMatchInlineSnapshot(` [ "dirigeant . auto-entrepreneur . impôt . versement libératoire", - "entreprise . activité . mixte", + "entreprise . activités . revenus mixtes", "entreprise . activité . nature", - "entreprise . activité . service ou vente", + "entreprise . activités . service ou vente", "entreprise . date de création", "impôt . foyer fiscal . enfants à charge", "impôt . foyer fiscal . revenu imposable . autres revenus imposables", diff --git a/site/test/regressions/simulations-auto-entrepreneur.yaml b/site/test/regressions/simulations-auto-entrepreneur.yaml index 2bdfcfbef..332505577 100644 --- a/site/test/regressions/simulations-auto-entrepreneur.yaml +++ b/site/test/regressions/simulations-auto-entrepreneur.yaml @@ -46,31 +46,31 @@ activités: entreprise . activité . nature . libérale . réglementée: oui - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an entreprise . activité . nature: "'artisanale'" - entreprise . activité . service ou vente: "'vente'" + entreprise . activités . service ou vente: "'vente'" - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an entreprise . activité . nature: "'artisanale'" - entreprise . activité . service ou vente: "'service'" + entreprise . activités . service ou vente: "'service'" - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an entreprise . activité . nature: "'commerciale'" - entreprise . activité . service ou vente: "'vente'" + entreprise . activités . service ou vente: "'vente'" - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an entreprise . activité . nature: "'commerciale'" - entreprise . activité . service ou vente: "'service'" + entreprise . activités . service ou vente: "'service'" activité mixte: - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an - entreprise . activité . mixte: oui + entreprise . activités . revenus mixtes: oui - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an - entreprise . activité . mixte: oui + entreprise . activités . revenus mixtes: oui entreprise . activité . nature: "'libérale'" - dirigeant . auto-entrepreneur . chiffre d'affaires: 20000 €/an - entreprise . activité . mixte: oui + entreprise . activités . revenus mixtes: oui entreprise . activité . nature: "'artisanale'" - entreprise . chiffre d'affaires . service BIC: 20000 €/an entreprise . chiffre d'affaires . service BNC: 10000 €/an entreprise . chiffre d'affaires . vente restauration hébergement: 15000 €/an - entreprise . activité . mixte . proportions . service BIC: 44.44% - entreprise . activité . mixte . proportions . service BNC: 22.22% - entreprise . activité . mixte . proportions . vente restauration hébergement: 33.33% - entreprise . activité . mixte: oui + entreprise . activités . revenus mixtes . proportions . service BIC: 44.44% + entreprise . activités . revenus mixtes . proportions . service BNC: 22.22% + entreprise . activités . revenus mixtes . proportions . vente restauration hébergement: 33.33% + entreprise . activités . revenus mixtes: oui entreprise . activité . nature: "'commerciale'" diff --git a/site/test/regressions/simulations-indépendant.test.ts b/site/test/regressions/simulations-indépendant.test.ts index 6b2ceca3e..5548dcce5 100644 --- a/site/test/regressions/simulations-indépendant.test.ts +++ b/site/test/regressions/simulations-indépendant.test.ts @@ -34,7 +34,7 @@ it('calculate simulations-indépendant', () => { "dirigeant . indépendant . cotisations facultatives", "dirigeant . indépendant . revenus étrangers", "dirigeant . rémunération . net", - "entreprise . activité . débit de tabac", + "entreprise . activités . commerciale . débit de tabac", "entreprise . activité . nature", "entreprise . catégorie juridique", "entreprise . charges",