From 3886e900cfd97eb06ae600f218369fd502875661 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 29 Jan 2020 17:54:17 +0100 Subject: [PATCH 01/23] prends en compte les retours dnrti --- .../pages/Simulateurs/dnrti.tsx | 136 ++++++++---------- source/types/rule.ts | 1 + 2 files changed, 57 insertions(+), 80 deletions(-) diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx index e151d252a..c279a7739 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx @@ -1,6 +1,7 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' +import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' import React, { useEffect, useState } from 'react' @@ -21,11 +22,14 @@ import { useRule } from './ArtisteAuteur' const simulationConfig = { objectifs: [ - 'dirigeant . indépendant . cotisations et contributions', - 'dirigeant . rémunération totale' + 'aide déclaration revenu indépendant 2019 . revenu net fiscal', + 'aide déclaration revenu indépendant 2019 . CSG déductible', + 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', + 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', + 'aide déclaration revenu indépendant 2019 . assiette sociale' ], situation: { - dirigeant: 'indépendant' + 'aide déclaration revenu indépendant 2019': 'oui' }, 'unités par défaut': ['€/an'] } @@ -67,9 +71,9 @@ export default function DNRTI() {

Revenus d'activité

@@ -147,9 +151,10 @@ function SubSection({ type SimpleFieldProps = { dottedName: DottedName + summary?: Rule['summary'] question?: Rule['question'] } -function SimpleField({ dottedName, question }: SimpleFieldProps) { +function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { const dispatch = useDispatch() const analysis = useSelector((state: RootState) => { return ruleAnalysisSelector(state, { dottedName }) @@ -176,16 +181,16 @@ function SimpleField({ dottedName, question }: SimpleFieldProps) { return ( -

- {question ?? analysis.question} -

+

{question ?? analysis.question}

+

{summary ?? analysis.summary}

+ useRule(objectif)) + .filter(r => r.nodeValue) - function Link({ cotisation }) { - return ( -

- - {cotisation.nodeValue - ? formatValue({ - value: cotisation.nodeValue, - language: 'fr', - unit: '€', - maximumFractionDigits: 0 - }) - : '-'} - -

- ) - } - if (!cotisationsRule.nodeValue) { + const [intersectionRef, displayResults] = useDisplayOnIntersecting({ + threshold: 0.5 + }) + + if (!results.length) { return null } + return ( - +
- Vos cotisations - - Vos revenus net - - Cotisations non déductibles -

- Ce montant doit être réintégré au revenu net dans votre déclaration - fiscale. -

- + {results.map(r => ( + <> +

+ {r.title} {r.summary} +

+ {r.description &&

{r.description}

} +

+ + {r.nodeValue + ? formatValue({ + value: r.nodeValue, + language: 'fr', + unit: '€', + maximumFractionDigits: 0 + }) + : '-'} + +

+ + ))}
- +
) } -const FormWrapper = styled.div` - display: flex; - justify-content: space-between; - align-items: flex-start; - - ul { - padding: 0; - } -` - const FormBlock = styled.section` - width: 63%; + max-width: 500px; padding: 0; h3 { @@ -269,27 +261,11 @@ const FormBlock = styled.section` font-size: 1.05em; padding: 5px 10px; } + ul { + padding: 0; + } ` const Question = styled.div` margin-top: 1em; ` - -const ResultBlock = styled.section` - position: sticky; - top: 3%; - padding: 3%; - width: 34%; - background: var(--lightestColor); -` - -const ResultSubTitle = styled.h4` - &:not(:first-child) { - margin-top: 2em; - } -` - -const ResultNumber = styled.strong` - display: block; - text-align: right; -` diff --git a/source/types/rule.ts b/source/types/rule.ts index 493b47468..b4d2f3776 100644 --- a/source/types/rule.ts +++ b/source/types/rule.ts @@ -7,6 +7,7 @@ export type Rule = { unité: string unit: string name?: string + summary?: string title?: string defaultValue: any icons: string From 8b14fc5b2c1db261a1aa217247559bcb1227f76d Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Wed, 29 Jan 2020 18:24:21 +0100 Subject: [PATCH 02/23] =?UTF-8?q?:art:=20am=C3=A9liore=20les=20r=C3=A9sult?= =?UTF-8?q?ats?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules.js | 4 +- .../rules/déclaration-revenu-indépendant.yaml | 60 ++++++++++++++++++ .../pages/Simulateurs/dnrti.tsx | 17 +++-- test/mécanismes/période.yaml | 63 +++++++++++++++++++ 4 files changed, 134 insertions(+), 10 deletions(-) create mode 100644 publicode/rules/déclaration-revenu-indépendant.yaml create mode 100644 test/mécanismes/période.yaml diff --git a/publicode/rules.js b/publicode/rules.js index e24eb5235..d40c87050 100644 --- a/publicode/rules.js +++ b/publicode/rules.js @@ -6,6 +6,7 @@ import artisteAuteur from './rules/artiste-auteur.yaml' import base from './rules/base.yaml' import conventionsCollectives from './rules/conventions-collectives.yaml' import dirigeant from './rules/dirigeant.yaml' +import déclarationIndépendant from './rules/déclaration-revenu-indépendant.yaml' import entrepriseEtablissement from './rules/entreprise-établissement.yaml' import impot from './rules/impôt.yaml' import protectionSociale from './rules/protection-sociale.yaml' @@ -23,7 +24,8 @@ const rules = { ...protectionSociale, ...salarié, ...conventionsCollectives, - ...situationPersonnelle + ...situationPersonnelle, + ...déclarationIndépendant } export default rules diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml new file mode 100644 index 000000000..1f856de90 --- /dev/null +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -0,0 +1,60 @@ +# AIDE A LA DECLARATION DES INDEPENDANTS + +aide déclaration revenu indépendant 2019: + description: Ces règles sont écrites pour aider à remplir les déclarations sociale et + fiscale des indépendant de 2020 sur les revenus 2019 + remplace: + - règle: dirigeant + par: "'indépendant'" + - règle: entreprise . catégorie d'activité . libérale règlementée + par: non + par défaut: non + +aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: + remplace: plafond sécurité sociale temps plein + formule: 3377 €/mois + +aide déclaration revenu indépendant 2019 . revenu net fiscal: + titre: revenu net fiscal + résumé: avant déduction des charges sociales et exonérations fiscales [A] + unité par défaut: €/an + formule: dirigeant . indépendant . rémunération totale + +aide déclaration revenu indépendant 2019 . CSG déductible: + titre: CSG déductible + résumé: '[B]' + formule: dirigeant . indépendant . cotisations et contributions . CSG et CRDS .déductible + +aide déclaration revenu indépendant 2019 . cotisations sociales déductible: + titre: cotisations sociales obligatoire déductible + résumé: y compris CFP [C] + description: >- + Montant à reporter dans la case XI de votre déclaration sociale et rubrique + 326 du formulaire 2033-D-SD (pour le réel simplifié) ou rubrique A5 du + formulaire 2053-SD (pour le réel normal) de votre déclaration fiscale. + formule: + somme: + - dirigeant . indépendant . cotisations et contributions . cotisations + - dirigeant . indépendant . cotisations et contributions . formation professionnelle + - dirigeant . indépendant . conjoint collaborateur . cotisations + - (- dirigeant . indépendant . cotisations et contributions . exonérations) + +aide déclaration revenu indépendant 2019 . total charges sociales déductible: + titre: total charges sociales obligatoires déductible fiscalement + résumé: '[B + C]' + formule: + somme: + - CSG déductible + - cotisations sociales déductible + description: >- + Montant à reporter dans la rubrique 252 du formulaire 2033-B-SD (pour le + réel simplifié) ou en rubrique FZ du formulaire 2052-SD (pour le réel + normal) de votre déclaration fiscale. + +aide déclaration revenu indépendant 2019 . assiette sociale: + titre: assiette sociale + résumé: 'pour information [A - (B + C)]' + formule: + somme: + - revenu net fiscal + - (- cotisations sociales déductible) diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx index c279a7739..22410d49a 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx @@ -1,7 +1,6 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' -import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' import React, { useEffect, useState } from 'react' @@ -207,21 +206,17 @@ function Results() { const results = simulationConfig.objectifs .map(objectif => useRule(objectif)) .filter(r => r.nodeValue) - - const [intersectionRef, displayResults] = useDisplayOnIntersecting({ - threshold: 0.5 - }) - if (!results.length) { return null } - return (
+

+ Aide à la déclaration 📄 +

{results.map(r => ( <> @@ -229,7 +224,7 @@ function Results() { {r.title} {r.summary} {r.description &&

{r.description}

} -

+

{r.nodeValue ? formatValue({ @@ -244,6 +239,10 @@ function Results() { ))} +

+ + +
) } diff --git a/test/mécanismes/période.yaml b/test/mécanismes/période.yaml new file mode 100644 index 000000000..621ec7e9d --- /dev/null +++ b/test/mécanismes/période.yaml @@ -0,0 +1,63 @@ +dépenses: + formule: + calendrier: + - le: 05/01/2018 + montant: 100 € + - le: 08/01/2018 + montant: 50 € + - le: 04/02/2018 + montant: 200 € + +filtre par période . sur un mois: + période: + depuis: 01/01/2018 + jusqu'à: 31/01/2018 + formule: dépense + exemples: + - valeur attendue: 150€ + +filtre par période . sur un mois (infix): + formule: dépenses [depuis le 01/01/2018 jusqu'au 31/01/2018] + exemples: + - valeur attendue: 150€ + + +# salaire . brut de base: +# formule: +# calendrier: +# - depuis: 01/04/2018 +# montant: 2000€/mois +# - depuis: 01/08/2019 +# montant: 2200€/mois +# salaire . primes: +# par défaut: 0 €/mois + +# salaire . primes . décembre 2019: +# remplace: +# règle: primes +# période: +# depuis: 01/12/2019 +# jusqu'à: 31/12/2019 +# formule: 1200€ + +# salaire . brut: +# formules: +# - brut de base +# - primes + +# salaire . brut . en 2019: +# période: +# depuis: 01/01/2019 +# jusqu'à: 31/12/2019 +# formule: salaire brut +# exemples: +# - valeur attendue: 26200€ + +# salaire . brut . mensuel en 2019: +# unité: €/mois +# période: +# depuis: 01/01/2019 +# jusqu'à: 31/12/2019 +# formule: salaire brut +# exemples: +# - valeur attendue: 2183 €/mois From 913051ac9b7d15da8ce37c9a49f36029684ac7ed Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Thu, 6 Feb 2020 13:28:23 +0100 Subject: [PATCH 03/23] wip --- publicode/rules/déclaration-revenu-indépendant.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index 1f856de90..dba6bea1d 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -8,7 +8,7 @@ aide déclaration revenu indépendant 2019: par: "'indépendant'" - règle: entreprise . catégorie d'activité . libérale règlementée par: non - par défaut: non + formule: non aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: remplace: plafond sécurité sociale temps plein @@ -18,7 +18,7 @@ aide déclaration revenu indépendant 2019 . revenu net fiscal: titre: revenu net fiscal résumé: avant déduction des charges sociales et exonérations fiscales [A] unité par défaut: €/an - formule: dirigeant . indépendant . rémunération totale + formule: dirigeant . rémunération totale aide déclaration revenu indépendant 2019 . CSG déductible: titre: CSG déductible From ffb3d67eed1d67369b5d9defb0c415995c7435f4 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Fri, 7 Feb 2020 12:12:25 +0100 Subject: [PATCH 04/23] =?UTF-8?q?:racehorse:=20am=C3=A9liore=20la=20perfor?= =?UTF-8?q?mance=20du=20formulaire=20d'aide=20=C3=A0=20la=20d=C3=A9clarati?= =?UTF-8?q?on=20pour=20les=20ind=C3=A9pendants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules.js | 4 +- .../rules/déclaration-revenu-indépendant.yaml | 11 +- .../utils/useDisplayOnIntersecting.ts | 17 +- source/engine/RuleInput.tsx | 3 + .../pages/Simulateurs/dnrti.tsx | 221 ++++++++++++------ 5 files changed, 170 insertions(+), 86 deletions(-) diff --git a/publicode/rules.js b/publicode/rules.js index d40c87050..e6b913330 100644 --- a/publicode/rules.js +++ b/publicode/rules.js @@ -18,14 +18,14 @@ const rules = { // TODO: rule order shouldn't matter but there is a bug if "impot" is after // "dirigeant". ...impot, + ...déclarationIndépendant, ...artisteAuteur, ...dirigeant, ...entrepriseEtablissement, ...protectionSociale, ...salarié, ...conventionsCollectives, - ...situationPersonnelle, - ...déclarationIndépendant + ...situationPersonnelle } export default rules diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index dba6bea1d..4c957a1a8 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -3,12 +3,17 @@ aide déclaration revenu indépendant 2019: description: Ces règles sont écrites pour aider à remplir les déclarations sociale et fiscale des indépendant de 2020 sur les revenus 2019 + par défaut: non + +aide déclaration revenu indépendant 2019 . professions libérale: remplace: - - règle: dirigeant - par: "'indépendant'" - règle: entreprise . catégorie d'activité . libérale règlementée par: non - formule: non + contrôles: + - si: entreprise . date de création < 01/01/2019 + avertissement: >- + Cette aide à la déclaration ne prends pas en compte les professions + libérales affiliées à la CIPAV. aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: remplace: plafond sécurité sociale temps plein diff --git a/source/components/utils/useDisplayOnIntersecting.ts b/source/components/utils/useDisplayOnIntersecting.ts index 4709a594a..49d19c2a5 100644 --- a/source/components/utils/useDisplayOnIntersecting.ts +++ b/source/components/utils/useDisplayOnIntersecting.ts @@ -3,8 +3,12 @@ import { useEffect, useRef, useState } from 'react' export default function({ root = null, rootMargin, - threshold = 0 -}: IntersectionObserverInit): [React.RefObject, boolean] { + threshold = 0, + unobserve = true +}: IntersectionObserverInit & { unobserve?: boolean }): [ + React.RefObject, + boolean +] { const ref = useRef(null) const [wasOnScreen, setWasOnScreen] = useState(false) @@ -13,7 +17,10 @@ export default function({ ([entry]) => { if (entry.isIntersecting) { setWasOnScreen(entry.isIntersecting) - ref.current && observer.unobserve(ref.current) + ref.current && unobserve && observer.unobserve(ref.current) + } + if (!entry.isIntersecting && !unobserve) { + setWasOnScreen(entry.isIntersecting) } }, { @@ -27,9 +34,9 @@ export default function({ observer.observe(node) } return () => { - node && observer.unobserve(node) + node && unobserve && observer.unobserve(node) } - }, [root, rootMargin, threshold]) + }, [root, rootMargin, threshold, ref.current]) return [ref, wasOnScreen] } diff --git a/source/engine/RuleInput.tsx b/source/engine/RuleInput.tsx index 566cde769..58944bd2a 100644 --- a/source/engine/RuleInput.tsx +++ b/source/engine/RuleInput.tsx @@ -24,6 +24,7 @@ type Props = { onChange: (value: Value) => void useSwitch?: boolean isTarget?: boolean + autoFocus?: boolean value?: Value className?: string onSubmit?: (value: Value) => void @@ -40,6 +41,7 @@ export default function InputComponent({ value, useSwitch = false, isTarget = false, + autoFocus = false, className, onSubmit }: Props) { @@ -53,6 +55,7 @@ export default function InputComponent({ value, onChange, onSubmit, + autoFocus, className, title: rule.title, question: rule.question, diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx index 22410d49a..1da86a312 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx @@ -1,9 +1,11 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' +import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' -import React, { useEffect, useState } from 'react' +import React, { useCallback, useEffect, useState } from 'react' +import Skeleton from 'react-loading-skeleton' import { useDispatch, useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' import { @@ -28,19 +30,52 @@ const simulationConfig = { 'aide déclaration revenu indépendant 2019 . assiette sociale' ], situation: { + dirigeant: 'indépendant', 'aide déclaration revenu indépendant 2019': 'oui' }, 'unités par défaut': ['€/an'] } +const lauchComputationWhenResultsInViewport = () => { + const [resultsRef, resultsInViewPort] = useDisplayOnIntersecting({ + threshold: 0, + unobserve: false + }) + const [currentIncome, setCurrentIncome] = useState(null) + const [displayForm, setDisplayForm] = useState(false) + const updateIncome = useCallback( + income => { + setDisplayForm(income != null) + setCurrentIncome(income) + }, + [setDisplayForm, setCurrentIncome] + ) + const dispatch = useDispatch() + useEffect(() => { + if (resultsInViewPort && displayForm) { + dispatch( + updateSituation('dirigeant . rémunération totale', currentIncome) + ) + } else { + dispatch(updateSituation('dirigeant . rémunération totale', null)) + } + }, [resultsInViewPort, displayForm, currentIncome]) + + return { updateIncome, resultsRef, displayForm } +} export default function DNRTI() { const dispatch = useDispatch() const analysis = useSelector(analysisWithDefaultsSelector) + const rules = useSelector(flatRulesSelector) const company = useSelector( (state: RootState) => state.inFranceApp.existingCompany ) dispatch(setSimulationConfig(simulationConfig, true)) - + const { + resultsRef, + displayForm, + updateIncome + } = lauchComputationWhenResultsInViewport() return ( <>

@@ -65,48 +100,63 @@ export default function DNRTI() { d'engagement - - - -

Revenus d'activité

- Quel est votre revenu professionnel en 2019 ?

+

+ Indiquez votre résultat net fiscal avant déduction des charges sociales + et exonérations fiscales. +

+ + - - - - {/* PLNR */} - - - - -

Situation personnelle

- - - - -

Exonérations

- - - - -

International

- - - {/*

DOM - Départements d'Outre-Mer

+
+ {displayForm && ( + <> + +

Votre entreprise

- Pas encore implémenté -

*/} - - + Vous pouvez renseigner votre entreprise pour pré-remplir le + formulaire +

+ + + + + + {/* PLNR */} + + + + +

Situation personnelle

+ + + + +

Exonérations

+ + + + +

International

+ + +
+
+
+ +
+ + )} ) } @@ -161,13 +211,19 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { const rules = useSelector((state: RootState) => state.rules) const value = useSelector(situationSelector)[dottedName] const [currentValue, setCurrentValue] = useState(value) + const dispatchValue = useCallback( + value => { + dispatch(updateSituation(dottedName, value)) + dispatch({ + type: 'STEP_ACTION', + name: 'fold', + step: dottedName + }) + }, + [dispatch, dottedName] + ) const update = (value: unknown) => { - dispatch(updateSituation(dottedName, value)) - dispatch({ - type: 'STEP_ACTION', - name: 'fold', - step: dottedName - }) + dispatchValue(value) setCurrentValue(value) } useEffect(() => { @@ -203,12 +259,13 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { } function Results() { - const results = simulationConfig.objectifs - .map(objectif => useRule(objectif)) - .filter(r => r.nodeValue) - if (!results.length) { - return null - } + const results = simulationConfig.objectifs.map(dottedName => + useSelector((state: RootState) => { + return ruleAnalysisSelector(state, { dottedName }) + }) + ) + const onGoingComputation = !results.filter(node => node.nodeValue != null) + .length return (
Aide à la déclaration 📄 - - {results.map(r => ( - <> -

- {r.title} {r.summary} -

- {r.description &&

{r.description}

} -

- - {r.nodeValue - ? formatValue({ + {onGoingComputation && ( +

+ Calcul en cours... +

+ )} + <> + + {results.map(r => ( + +

+ {r.title} {r.summary} +

+ {r.description &&

{r.description}

} +

+ + {r.nodeValue ? ( + formatValue({ value: r.nodeValue, language: 'fr', unit: '€', maximumFractionDigits: 0 - }) - : '-'} - -

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

+ + ))} +
+
+ + +
+
) } @@ -268,3 +334,6 @@ const FormBlock = styled.section` const Question = styled.div` margin-top: 1em; ` +const BigInput = styled.div` + font-size: 130%; +` From 17e18992c3b5b2bccee11424b9ab031bdde4a37a Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Fri, 7 Feb 2020 13:54:40 +0100 Subject: [PATCH 05/23] :hammer: reformule la question des IJSS selon le retour DNRTI --- publicode/rules/dirigeant.yaml | 74 ++++++++- publicode/rules/entreprise-établissement.yaml | 10 +- publicode/rules/situation-personnelle.yaml | 75 ++------- source/components/SimulateurWarning.tsx | 153 +++++++----------- .../simulationConfigs/indépendant.yaml | 2 +- source/components/ui/WarningBlock.tsx | 55 +++++++ .../pages/Simulateurs/dnrti.tsx | 101 ++++++------ 7 files changed, 253 insertions(+), 217 deletions(-) create mode 100644 source/components/ui/WarningBlock.tsx diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index 51007e04c..ba4386129 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -366,7 +366,6 @@ dirigeant . rémunération totale: somme: - indépendant . revenu net de cotisations - indépendant . cotisations et contributions - - (- situation personnelle . IJSS . total) - si: auto-entrepreneur alors: inversion numérique: @@ -421,7 +420,6 @@ dirigeant . indépendant . revenu net de cotisations: formule: somme: - revenu professionnel - - situation personnelle . IJSS . défiscalisées - (- cotisations et contributions . CSG et CRDS .non déductible) résumé: Avant déduction de l'impôt sur le revenu question: Quel revenu avant impôt voulez-vous toucher ? @@ -958,12 +956,12 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS: - attributs: nom: revenus de remplacement impôt sur le revenu: non déductible - assiette: situation personnelle . IJSS . total + assiette: dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS taux: 2.9% - attributs: nom: revenus de remplacement impôt sur le revenu: déductible - assiette: situation personnelle . IJSS . total + assiette: dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS taux: 3.8% références: @@ -993,7 +991,7 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS . assiette - cotisations - conjoint collaborateur . cotisations - (- revenus étrangers . montant) - - (- situation personnelle . IJSS . fiscalisées) + - (- dirigeant . indépendant . IJSS . imposable) dirigeant . indépendant . cotisations et contributions . formation professionnelle: formule: @@ -1054,7 +1052,7 @@ dirigeant . indépendant . cotisations et contributions . exonérations . âge: rend non applicable: cotisations . invalidité et décès dirigeant . indépendant . cotisations et contributions . exonérations . invalidité: - question: Êtes-vous titulaire d’une pension d’invalidité du régime des travailleurs indépendants ? + question: Êtes-vous titulaire d’une pension d’invalidité à titre de travailleur indépendant ? description: Les personnes titulaires d’une pension d’invalidité versée par un régime des travailleurs non-salariés non agricoles bénéficient d’une exonération totale des cotisations maladie et retraite complémentaire. par défaut: non rend non applicable: @@ -1111,3 +1109,67 @@ dirigeant . indépendant . cotisations et contributions . cotisations . maladie multiplication: assiette: maladie . assiette taux: 14.5% + +dirigeant . indépendant . IJSS: + titre: indemnités journalières de sécurité sociale + description: >- + En cas de maladie, maternité, ou accident, le régime général de Sécurité + sociale ainsi que les régimes spéciaux assurent le versement de prestations + « en espèces ». + + Ce sont les indemnités journalières de Sécurité sociale (IJSS). + + Les indemnités complémentaires aux indemnités journalières de la Sécurité + sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas + des revenus de remplacement. + + Note: Les prestations d’invalidité versées par les régimes + d’invalidité-décès ne sont pas concernées + + question: Avez-vous perçu des indemnités journalières de maladie, maternité ou paternité au titre de votre activité indépendante ? + par défaut: non + +dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS: + titre: indemnités journalières défiscalisées + question: >- + Quel est le montant des indemnités journalières perçues qui n’ont pas été + précomptées de la CSG-CRDS ? + description: >- + Indiquez uniquement le montant brut de vos revenus de remplacement, + imposables et non imposables qui figure sur le relevé de prestations fourni + pas votre caisse d'assurance maladie. Ce montant est à saisir uniquement + lorsque ces revenus de remplacement n'ont pas été précomptés de la CSG-CRDS + ce afin que la CSG-CRDS puisse être calculée au taux réduit de 6,70%. + + Les revenus de remplacement sont : l'allocation forfaitaire de repos + maternel, l'indemnité journalière forfaitaire d'interruption d'activité, + l'indemnité de remplacement pour maternité, paternité ou adoption et + l'indemnité journalière maladie. + par défaut: 0 + unité: €/an + +dirigeant . indépendant . IJSS . imposable: + titre: indemnités journalières imposable + résumé: Uniquement si vous ne relevez pas du régime micro-fiscal + question: Quel est le montant des indemnités journalières imposables perçues ? + description: >- + Indiquez uniquement les revenus de remplacement imposables perçus, donc tous + les revenus de remplacement perçus **sauf les indemnités journalières en + lien avec une Affection de Longue Durée (ALD)**. + + + Ces revenus seront déduits de votre assiette des contributions, afin de ne + pas être soumis deux fois à la CSG-CRDS : + + - Les revenus de remplacement qui ont été précomptés de la CSG-CRDS doivent + être indiqués pour leur montant net de la part de CSG déductible. + + - Les revenus de remplacement qui n’ont pas été précomptés de la CSG-CRDS + doivent être indiqués pour leur montant brut tel que perçu. + + Les revenus de remplacement sont : l'allocation forfaitaire de repos + maternel, l'indemnité journalière forfaitaire d'interruption d'activité, + l’indemnité de remplacement pour maternité, paternité ou adoption et + l'indemnité journalière maladie. + par défaut: 0 + unité: €/an diff --git a/publicode/rules/entreprise-établissement.yaml b/publicode/rules/entreprise-établissement.yaml index 7335748df..17e835fd5 100644 --- a/publicode/rules/entreprise-établissement.yaml +++ b/publicode/rules/entreprise-établissement.yaml @@ -3,7 +3,7 @@ entreprise: Le contrat lie une entreprise, identifiée par un code SIREN, et un employé. entreprise . date de création: - question: Quelle est la date de début d'activité ? + question: Quelle est votre date de début d'activité ? par défaut: 01/01/2020 description: | La date de début d'activité (ou date de création) est fixée lors de la @@ -282,16 +282,16 @@ entreprise . taxe sur les salaires: abattement: abattement associations entreprise . catégorie d'activité: - question: Quelle est votre catégorie d'activité ? + question: Quelle est la nature de votre activité ? description: Votre catégorie d'activité va déterminer une grande partie des calculs de cotisation, contribution et impôt. par défaut: commerciale ou industrielle formule: une possibilité: choix obligatoire: oui possibilités: - - libérale - - commerciale ou industrielle - artisanale + - commerciale ou industrielle + - 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://www.service-public.fr/professionnels-entreprises/vosdroits/F32887 @@ -433,7 +433,7 @@ entreprise . catégorie d'activité . libérale règlementée . type d'activité entreprise . catégorie d'activité . débit de tabac: applicable si: catégorie d'activité = 'commerciale ou industrielle' - question: Votre entreprise est-elle un débit de tabac ? + question: Exercez-vous une activité de vente de tabac ? par défaut: non entreprise . rattachée à la CIPAV: diff --git a/publicode/rules/situation-personnelle.yaml b/publicode/rules/situation-personnelle.yaml index ea3d8157a..6d5bfc563 100644 --- a/publicode/rules/situation-personnelle.yaml +++ b/publicode/rules/situation-personnelle.yaml @@ -1,75 +1,22 @@ situation personnelle: situation personnelle . RSA: - titre: allocataire RSA - question: Êtes-vous allocataire du RSA ? + titre: bénéficiaire RSA ou prime d'activité + question: >- + Etes-vous bénéficiaire du RSA ou de la prime d’activité ? par défaut: non -situation personnelle . IJSS: - titre: indemnités journalières de sécurité sociale - description: | - En cas de maladie, maternité, ou accident, le régime général de Sécurité sociale ainsi que les régimes spéciaux assurent le versement de prestations « en espèces ». Ce sont les indemnités journalières de Sécurité sociale (IJSS), - Les indemnités complémentaires aux indemnités journalières de la Sécurité sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas des revenus de remplacement. - - Note: Les prestations d’invalidité versées par les régimes d’invalidité-décès ne sont pas concernées - question: Avez-vous touché des indemnités journalières de sécurité sociale (maladie, maternité, paternité, etc.) ? - par défaut: non - -situation personnelle . IJSS . montant: - non applicable si: ALD - titre: indemnités journalières fiscalisées - par défaut: 0 - question: Quel était leur montant total brut ? - unité par défaut: €/an - -situation personnelle . IJSS . ALD: - question: Avez-vous touché des indemnités dans le cas d'une affection longue durée (ALD) dite "exonérante" ? - description: - L'affection longue durée (ALD) est mise en place par la loi du 13 août 2004 relative à l'assurance maladie. Ce statut offre aux personnes malades chroniques qui remplissent certaines conditions une prise en charge spécifique de leurs soins médicaux. - L'affection longue durée est une maladie de longue durée, présentant un caractère grave ou chronique et nécessitant un traitement long dont le coût est élevé. - La liste des ALD dites "exonérante" est disponible sur le site [ameli.fr](https://www.ameli.fr/assure/droits-demarches/maladie-accident-hospitalisation/affection-longue-duree-ald/affection-longue-duree-ald) - Les indemnité versée dans le cadre d'une ALD dites "éxonérante" ne sont pas imposable. - par défaut: non - -situation personnelle . IJSS . ALD . autres indemnités: - question: Avez-vous également touché des indemnités non liées à votre ALD (maternité, paternité, autre maladie) ? - par défaut: non - -situation personnelle . IJSS . ALD . autres indemnités . montant: - question: Quel était le montant de vos autres indemnités ? - par défaut: 0 - unité: €/an - -situation personnelle . IJSS . défiscalisées: - applicable si: ALD - titre: indemnités journalières défiscalisées - question: Quel était le montant de vos indemnités ALD ? - par défaut: 0 - unité: €/an - -situation personnelle . IJSS . fiscalisées: - titre: indemnités journalières fiscalisées - formule: - somme: - - IJSS . montant - - ALD . autres indemnités . montant - -situation personnelle . IJSS . total: - titre: total indemnités journalières - formule: - somme: - - fiscalisées - - défiscalisées - situation personnelle . domiciliation fiscale à l'étranger: - description: | - Ces assurés ne sont pas redevables de la CSG/CRDS mais, en contrepartie ils sont redevables de la cotisation maladie sur la base d’un taux plus elevé. - question: La résidence fiscale de l'assuré est-elle domiciliée à l'étranger ? - par défaut: non - rend non applicable: + description: >- + Ces assurés ne sont pas redevables de la CSG/CRDS mais, en contrepartie ils + sont redevables de la cotisation maladie sur la base d’un taux plus elevé. + 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 - impôt - références: + par défaut: non + références: urssaf.fr: https://www.urssaf.fr/portail/home/employeur/calculer-les-cotisations/les-taux-de-cotisations/la-csg-crds/qui-en-est-redevable.html diff --git a/source/components/SimulateurWarning.tsx b/source/components/SimulateurWarning.tsx index 74b6fb798..3a602efbf 100644 --- a/source/components/SimulateurWarning.tsx +++ b/source/components/SimulateurWarning.tsx @@ -1,6 +1,5 @@ -import { usePersistingState } from 'Components/utils/persistState' +import Warning from 'Components/ui/WarningBlock' import React from 'react' -import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' import { SitePaths } from './utils/withSitePaths' @@ -11,102 +10,64 @@ type SimulateurWarningProps = { export default function SimulateurWarning({ simulateur }: SimulateurWarningProps) { - let [folded, fold] = usePersistingState( - 'app::simulateurs:warning-folded:v1:' + simulateur, - false - ) return ( -
-

- {emoji('🚩 ')} - - Avant de commencer... - {' '} - {folded && ( - + +

    + {simulateur == 'auto-entrepreneur' && ( + <> +
  • + + {' '} + Les auto-entrepreneurs ne peuvent pas déduire leurs charges de + leur chiffre d'affaires. Il faut donc{' '} + + retrancher au net tous les coûts liés à l'entreprise pour + obtenir le revenu réellement perçu. + + +
  • +
  • + + Le simulateur n'intègre pas la cotisation foncière des + entreprise (CFE) qui est dûe dès la deuxième année d'exercice. + Son montant varie fortement en fonction du chiffre d'affaire et + de la domiciliation de l'entreprise.{' '} + + Plus d'infos. + + +
  • + + )} + {simulateur !== 'artiste-auteur' && ( +
  • + + Les calculs sont indicatifs et ne se substituent pas aux décomptes + réels des Urssaf, impots.gouv.fr, ou autres. + +
  • )} -

    - {!folded && ( -
    -
      - {simulateur == 'auto-entrepreneur' && ( - <> -
    • - - {' '} - Les auto-entrepreneurs ne peuvent pas déduire leurs charges - de leur chiffre d'affaires. Il faut donc{' '} - - retrancher au net tous les coûts liés à l'entreprise pour - obtenir le revenu réellement perçu. - - -
    • -
    • - - Le simulateur n'intègre pas la cotisation foncière des - entreprise (CFE) qui est dûe dès la deuxième année - d'exercice. Son montant varie fortement en fonction du - chiffre d'affaire et de la domiciliation de l'entreprise.{' '} - - Plus d'infos. - - -
    • - - )} - {simulateur !== 'artiste-auteur' && ( -
    • - - Les calculs sont indicatifs et ne se substituent pas aux - décomptes réels des Urssaf, impots.gouv.fr, ou autres. - -
    • - )} - {simulateur === 'artiste-auteur' && ( - <> -
    • - - Cette estimation est proposée à titre indicatif. Elle est - faite à partir des éléments réglementaires applicables et - des éléments que vous avez saisis, mais elle ne tient pas - compte de l'ensemble de votre situation. Le montant réel de - vos cotisations peut donc être différent. - -
    • -
    • - - Ce simulateur permet d'estimer le montant de vos cotisations - pour l'année 2020 à partir de votre revenu projeté - -
    • - - )} -
    -
    - -
    -
    - )} -
+ {simulateur === 'artiste-auteur' && ( + <> +
  • + + Cette estimation est proposée à titre indicatif. Elle est faite + à partir des éléments réglementaires applicables et des éléments + que vous avez saisis, mais elle ne tient pas compte de + l'ensemble de votre situation. Le montant réel de vos + cotisations peut donc être différent. + +
  • +
  • + + Ce simulateur permet d'estimer le montant de vos cotisations + pour l'année 2020 à partir de votre revenu projeté + +
  • + + )} + + ) } diff --git a/source/components/simulationConfigs/indépendant.yaml b/source/components/simulationConfigs/indépendant.yaml index 4a7a3730e..d720a4e4f 100644 --- a/source/components/simulationConfigs/indépendant.yaml +++ b/source/components/simulationConfigs/indépendant.yaml @@ -29,7 +29,7 @@ questions: - dirigeant . indépendant . cotisations et contributions . cotisations . retraite complémentaire . taux spécifique PLNR - dirigeant . indépendant . cotisations et contributions . exonérations . invalidité - dirigeant . indépendant . revenus étrangers - - situation personnelle . IJSS + - dirigeant . indépendant . IJSS - situation personnelle . domiciliation fiscale à l'étranger non prioritaires: - entreprise . catégorie d'activité . débit de tabac diff --git a/source/components/ui/WarningBlock.tsx b/source/components/ui/WarningBlock.tsx new file mode 100644 index 000000000..10c32fccc --- /dev/null +++ b/source/components/ui/WarningBlock.tsx @@ -0,0 +1,55 @@ +import { usePersistingState } from 'Components/utils/persistState' +import React, { ReactChildren } from 'react' +import emoji from 'react-easy-emoji' +import { Trans } from 'react-i18next' + +type WarningProps = { + localStorageKey: string + children: ReactChildren +} + +export default function Warning({ localStorageKey, children }: WarningProps) { + let [folded, fold] = usePersistingState(localStorageKey, false) + return ( +
    +

    + {emoji('🚩 ')} + + + Avant de commencer... + + {' '} + {folded && ( + + )} +

    + {!folded && ( +
    + {children} +
    + +
    +
    + )} +
    + ) +} diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx index 1da86a312..1a61309b0 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx @@ -1,6 +1,7 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' +import Warning from 'Components/ui/WarningBlock' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' @@ -36,12 +37,14 @@ const simulationConfig = { 'unités par défaut': ['€/an'] } const lauchComputationWhenResultsInViewport = () => { + const dottedName = 'dirigeant . rémunération totale' const [resultsRef, resultsInViewPort] = useDisplayOnIntersecting({ - threshold: 0, + threshold: 0.5, unobserve: false }) - const [currentIncome, setCurrentIncome] = useState(null) - const [displayForm, setDisplayForm] = useState(false) + const value = useSelector(situationSelector)[dottedName] + const [currentIncome, setCurrentIncome] = useState(value) + const [displayForm, setDisplayForm] = useState(currentIncome != null) const updateIncome = useCallback( income => { setDisplayForm(income != null) @@ -52,15 +55,13 @@ const lauchComputationWhenResultsInViewport = () => { const dispatch = useDispatch() useEffect(() => { if (resultsInViewPort && displayForm) { - dispatch( - updateSituation('dirigeant . rémunération totale', currentIncome) - ) + dispatch(updateSituation(dottedName, currentIncome)) } else { - dispatch(updateSituation('dirigeant . rémunération totale', null)) + dispatch(updateSituation(dottedName, null)) } }, [resultsInViewPort, displayForm, currentIncome]) - return { updateIncome, resultsRef, displayForm } + return { updateIncome, resultsRef, displayForm, currentIncome } } export default function DNRTI() { @@ -74,32 +75,40 @@ export default function DNRTI() { const { resultsRef, displayForm, - updateIncome + updateIncome, + currentIncome } = lauchComputationWhenResultsInViewport() return ( <>

    + Travailleurs indépendants +
    Aide à la déclaration de revenus au titre de l'année 2019{' '} -
    - Travailleurs indépendants

    - Nous mettons à disposition un outil d'aide aux déclarations fiscale - (revenu) et sociale (DSI). Il vous permet de connaître le montant des - charges sociales déductibles à partir de votre résultat net fiscal. + Cet outil est une aide aux déclarations fiscale (revenu) et sociale + (DSI). Il vous permet de connaître le montant des charges sociales + déductibles à partir de votre résultat net fiscal.

    -

    - Cet outil vous concerne uniquement si vous êtes dans - les cas suivants : -

    -
      -
    • vous cotisez au régime général des travailleurs indépendants
    • -
    • - votre entreprise est au régime réel d'imposition et en comptabilité - d'engagement -
    • -
    + +

    + Cet outil vous concerne si vous êtes dans tous les cas suivants : +

    +
      +
    • vous cotisez au régime général des travailleurs indépendants
    • +
    • + votre entreprise est au régime réel d'imposition et en comptabilité + d'engagement +
    • +
    +

    Il ne vous concerne pas si vous êtes dans un des cas suivants :

    +
      +
    • vous êtes une profession libérale reglementée
    • +
    • vous êtes une profession libérale cotisant à la CIPAV
    • +
    • votre entreprise est domicilié dans les DOM
    • +
    +

    Quel est votre revenu professionnel en 2019 ?

    Indiquez votre résultat net fiscal avant déduction des charges sociales @@ -110,6 +119,7 @@ export default function DNRTI() { rules={rules} dottedName="dirigeant . rémunération totale" onChange={updateIncome} + value={currentIncome} autoFocus /> @@ -133,7 +143,7 @@ export default function DNRTI() {

    Situation personnelle

    - +

    Exonérations

    @@ -175,19 +185,18 @@ function SubSection({ const situation = useSelector(situationSelector) const title = hideTitle ? null : ruleTitle - const subQuestions = flatRules - .filter( - ({ dottedName, question }) => - Boolean(question) && - dottedName.startsWith(sectionDottedName) && - (Object.keys(situation).includes(dottedName) || - nextSteps.includes(dottedName)) - ) - .sort( - (rule1, rule2) => - nextSteps.indexOf(rule1.dottedName) - - nextSteps.indexOf(rule2.dottedName) - ) + const subQuestions = flatRules.filter( + ({ dottedName, question }) => + Boolean(question) && + dottedName.startsWith(sectionDottedName) && + (Object.keys(situation).includes(dottedName) || + nextSteps.includes(dottedName)) + ) + // .sort( + // (rule1, rule2) => + // nextSteps.indexOf(rule1.dottedName) - + // nextSteps.indexOf(rule2.dottedName) + // ) return ( <> {!!subQuestions.length && title &&

    {title}

    } @@ -289,9 +298,9 @@ function Results() { {r.description &&

    {r.description}

    }

    - {r.nodeValue ? ( + {r.nodeValue != null ? ( formatValue({ - value: r.nodeValue, + value: r.nodeValue || 0, language: 'fr', unit: '€', maximumFractionDigits: 0 @@ -303,11 +312,13 @@ function Results() {

    ))} + {!onGoingComputation && ( +
    + + +
    + )}
    -
    - - -
    ) From 34c3e5e54e5bef4f1b465b84d3cd236bb282ed85 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Fri, 7 Feb 2020 14:57:40 +0100 Subject: [PATCH 06/23] =?UTF-8?q?Am=C3=A9liore=20l'UI,=20change=20l'url=20?= =?UTF-8?q?et=20traduit=20le=20formulaire=20d'aide=20=C3=A0=20la=20d=C3=A9?= =?UTF-8?q?claration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rules/déclaration-revenu-indépendant.yaml | 11 +- publicode/rules/entreprise-établissement.yaml | 1 + source/components/SimulateurWarning.tsx | 4 +- source/components/ui/WarningBlock.tsx | 4 +- source/locales/en.yaml | 30 +- source/locales/rules-en.yaml | 280 +++++++++++------- .../AideDéclarationIndépendants.tsx} | 152 +++++----- .../mon-entreprise.fr/pages/Gérer/Home.tsx | 128 ++++---- .../mon-entreprise.fr/pages/Gérer/index.tsx | 5 + .../pages/Simulateurs/index.tsx | 4 +- source/sites/mon-entreprise.fr/sitePaths.ts | 9 +- test/mécanismes/période.yaml | 63 ---- 12 files changed, 388 insertions(+), 303 deletions(-) rename source/sites/mon-entreprise.fr/pages/{Simulateurs/dnrti.tsx => Gérer/AideDéclarationIndépendants.tsx} (72%) delete mode 100644 test/mécanismes/période.yaml diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index 4c957a1a8..4cacb066d 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -7,11 +7,16 @@ aide déclaration revenu indépendant 2019: aide déclaration revenu indépendant 2019 . professions libérale: remplace: - - règle: entreprise . catégorie d'activité . libérale règlementée + - règle: dirigeant . rattachement CIPAV par: non + contrôles: - - si: entreprise . date de création < 01/01/2019 - avertissement: >- + - si: + toutes ces conditions: + - entreprise . date de création < 01/01/2019 + - entreprise . catégorie d'activité = 'libérale' + niveau: avertissement + message: >- Cette aide à la déclaration ne prends pas en compte les professions libérales affiliées à la CIPAV. diff --git a/publicode/rules/entreprise-établissement.yaml b/publicode/rules/entreprise-établissement.yaml index 17e835fd5..d2b23a8ca 100644 --- a/publicode/rules/entreprise-établissement.yaml +++ b/publicode/rules/entreprise-établissement.yaml @@ -282,6 +282,7 @@ entreprise . taxe sur les salaires: abattement: abattement associations entreprise . catégorie d'activité: + titre: nature de l'activité question: Quelle est la nature de votre activité ? description: Votre catégorie d'activité va déterminer une grande partie des calculs de cotisation, contribution et impôt. par défaut: commerciale ou industrielle diff --git a/source/components/SimulateurWarning.tsx b/source/components/SimulateurWarning.tsx index 3a602efbf..828304df6 100644 --- a/source/components/SimulateurWarning.tsx +++ b/source/components/SimulateurWarning.tsx @@ -11,7 +11,9 @@ export default function SimulateurWarning({ simulateur }: SimulateurWarningProps) { return ( - +
      {simulateur == 'auto-entrepreneur' && ( <> diff --git a/source/components/ui/WarningBlock.tsx b/source/components/ui/WarningBlock.tsx index 10c32fccc..66f9c2f7c 100644 --- a/source/components/ui/WarningBlock.tsx +++ b/source/components/ui/WarningBlock.tsx @@ -1,11 +1,11 @@ import { usePersistingState } from 'Components/utils/persistState' -import React, { ReactChildren } from 'react' +import React, { ReactNode } from 'react' import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' type WarningProps = { localStorageKey: string - children: ReactChildren + children: ReactNode } export default function Warning({ localStorageKey, children }: WarningProps) { diff --git a/source/locales/en.yaml b/source/locales/en.yaml index fd4df8321..d75fc5dfe 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -43,6 +43,7 @@ Entrée: Enter Envoyer: Send Exemples: Examples Exemples de simulation de salaire: Examples of salary simulations +Exonérations: Exemptions Explorez notre documentation: Explore our documentation Faire une simulation: Launch a simulation Fiche de paie: Payslip @@ -52,6 +53,7 @@ Gérant minoritaire: Managing director Imprimer: Print Impôts: Taxes Indépendant: Independent +International: International Intégrer l'interface de simulation: Integrate the simulation interface Intégrer la bibliothèque de calcul: Integrate the calculation library Intégrer nos simulateurs: Integrate our simulators @@ -66,7 +68,7 @@ Mon entreprise: My company Mon revenu: My income Montant: Amount Montant des cotisations: Amount of contributions -'Nom de l''entreprise ou SIREN ': Company name or SIREN code +"Nom de l'entreprise ou SIREN ": Company name or SIREN code Non: 'No' Nous n'avons rien trouvé: We didn't find any matching registered company. Oui: 'Yes' @@ -117,6 +119,7 @@ Si: If Simulateur de salaire: Employee salary simulation Simulations personnalisées: Customized simulations Sinon: Else +Situation personnelle: Personal situation Suivant: Next Taux: Rate Taux calculé: Calculated rate @@ -134,6 +137,26 @@ Votre adresse e-mail: Your email address Votre entreprise: Your company Votre forme juridique: Your legal status aide: aid or subsidy +aide-déclaration-indépendant: + description: >- + <0>Help with your 2019 income tax return <1>This tool is a tax + (income) and social security (ISD) declaration aid for self-employed + workers. It allows you to find out the amount of social security charges + deductible from your net fiscal result.<2><0>This tool is for you if you + are in any of the following cases :<1><0>you contribute to the general + scheme for self-employed persons<1>your business is in the actual tax + system and in accrual accounting<2>It does not concern you if you + are in one of the following cases:<3><0>you are a regulated liberal + profession<1>you are a liberal profession contributing to the + CIPAV<2>your company is domiciled in the DOMs<3>What is your + professional income in 2019?<4>Indicate your net fiscal result before + deduction of social security charges and tax exemptions. + entreprise: + description: You can fill in your company to pre-fill in the form + titre: <0>Company and activity + results: + ongoing: Calculation in progress... + title: "Reporting help \U0001F4C4" an: year année: year applicable si: applicable if @@ -677,6 +700,9 @@ gérant minoritaire: titre: Chairman or managing director gérer: choix: + déclaration: >- + <0>Completing my tax return<1>Easily calculate the amounts to carry + forward on your 2019 tax return embauche: > <0>Estimate the amount spent for hiring @@ -845,6 +871,7 @@ path: exemples: /examples index: /documentation gérer: + déclaration-indépendant: /declaration-aid-independent embaucher: /hiring index: /manage sécuritéSociale: /social-security @@ -858,7 +885,6 @@ path: assimilé-salarié: /assimile-salarie auto-entrepreneur: /auto-entrepreneur comparaison: /social-scheme-comparaison - dnrti: /dnrti index: /simulators indépendant: /independant salarié: /salaried diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index 581fb50ab..fc5d3d46a 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -1,6 +1,70 @@ SMIC horaire: titre.en: hourly minimum wage (SMIC) titre.fr: SMIC horaire +aide déclaration revenu indépendant 2019: + description.en: >- + [automatic] These rules are written to assist in completing the 2020 + self-employed social and tax returns on the 2019 income 2019 + description.fr: >- + Ces règles sont écrites pour aider à remplir les déclarations sociale et + fiscale des indépendant de 2020 sur les revenus 2019 + titre.en: '[automatic] self-employment income assistance 2019' + titre.fr: aide déclaration revenu indépendant 2019 +aide déclaration revenu indépendant 2019 . CSG déductible: + résumé.en: '[automatic] [B]' + résumé.fr: '[B]' + titre.en: '[automatic] deductible MSA' + titre.fr: CSG déductible +aide déclaration revenu indépendant 2019 . assiette sociale: + résumé.en: '[automatic] for your information [A - (B + C)].' + résumé.fr: 'pour information [A - (B + C)]' + titre.en: '[automatic] social base' + titre.fr: assiette sociale +aide déclaration revenu indépendant 2019 . cotisations sociales déductible: + description.en: >- + [automatic] Amount to be reported in Box XI of your social security return + and Item 326 of Form 2033-D-SD (for the simplified actual) or Item A5 of + Form 2053-SD (for the normal actual) of your tax return. + description.fr: >- + Montant à reporter dans la case XI de votre déclaration sociale et rubrique + 326 du formulaire 2033-D-SD (pour le réel simplifié) ou rubrique A5 du + formulaire 2053-SD (pour le réel normal) de votre déclaration fiscale. + résumé.en: '[automatic] including PSC [C]' + résumé.fr: 'y compris CFP [C]' + titre.en: '[automatic] deductible compulsory social security contributions' + titre.fr: cotisations sociales obligatoire déductible +aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: + titre.en: '[automatic] social security ceiling 2019' + titre.fr: plafond sécurité sociale 2019 +aide déclaration revenu indépendant 2019 . professions libérale: + contrôles.0.en: >- + [automatic] This declaration aid does not take into account the liberal + professions affiliated to the CIPAV. + contrôles.0.fr: >- + Cette aide à la déclaration ne prends pas en compte les professions + libérales affiliées à la CIPAV. + titre.en: '[automatic] liberal professions' + titre.fr: professions libérale +aide déclaration revenu indépendant 2019 . revenu net fiscal: + résumé.en: >- + [automatic] before deduction of social security charges and tax exemptions + [A]. + résumé.fr: 'avant déduction des charges sociales et exonérations fiscales [A]' + titre.en: '[automatic] net taxable income' + titre.fr: revenu net fiscal +aide déclaration revenu indépendant 2019 . total charges sociales déductible: + description.en: >- + [automatic] Amount to be reported in Item 252 of Form 2033-B-SD (for + Simplified Actual) or Item FZ of Form 2052-SD (for Regular Actual) on your + tax return. + description.fr: >- + Montant à reporter dans la rubrique 252 du formulaire 2033-B-SD (pour le + réel simplifié) ou en rubrique FZ du formulaire 2052-SD (pour le réel + normal) de votre déclaration fiscale. + résumé.en: '[automatic] [B + C]' + résumé.fr: '[B + C]' + titre.en: '[automatic] total tax-deductible compulsory social security charges' + titre.fr: total charges sociales obligatoires déductible fiscalement artiste-auteur: description.en: The artist-author regime description.fr: Le régime des artistes-auteurs @@ -3394,6 +3458,92 @@ dirigeant . auto-entrepreneur . plafond: dirigeant . indépendant: titre.en: indépendant titre.fr: indépendant +dirigeant . indépendant . IJSS: + description.en: >- + [automatic] In the event of illness, maternity or accident, the general + social security system and special schemes provide "cash" benefits. + + These are per diems from Social Security (IJSS). + + Compensation in addition to the Social Security daily allowances paid under + a provident fund contract does not constitute replacement income. + + Note: Disability benefits paid by disability/death plans are not affected. + description.fr: >- + En cas de maladie, maternité, ou accident, le régime général de Sécurité + sociale ainsi que les régimes spéciaux assurent le versement de prestations + « en espèces ». + + Ce sont les indemnités journalières de Sécurité sociale (IJSS). + + Les indemnités complémentaires aux indemnités journalières de la Sécurité + sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas + des revenus de remplacement. + + Note: Les prestations d’invalidité versées par les régimes + d’invalidité-décès ne sont pas concernées + question.en: >- + [automatic] Have you received daily allowances for sickness, maternity or + paternity as a result of your self-employed activity? + question.fr: "Avez-vous perçu des indemnités journalières de maladie, maternité ou paternité au titre de votre activité indépendante\_?" + titre.en: '[automatic] social security daily allowances' + titre.fr: indemnités journalières de sécurité sociale +dirigeant . indépendant . IJSS . imposable: + description.en: >- + [automatic] Indicate only the taxable replacement income received, i.e. all + replacement income received **except for daily allowances in connection with + a Long-Term Affection (LTA)**. + + + This income will be deducted from your contribution base, so as not to be + submitted twice to the CSG-CRDS : + + - Replacement income that has been deducted from the CSG-CRDS must be shown + for the net amount of the deductible CSG share. + + - Replacement income that has not been deducted from the CSG-CRDS must be + shown for the gross amount as received. + + The replacement income is: the flat-rate maternity rest allowance, the + flat-rate daily allowance for interruption of activity, the replacement + allowance for maternity, paternity or adoption and the daily sickness + allowance. + description.fr: "Indiquez uniquement les revenus de remplacement imposables perçus, donc tous les revenus de remplacement perçus **sauf les indemnités journalières en lien avec une Affection de Longue Durée (ALD)**. \n\nCes revenus seront déduits de votre assiette des contributions, afin de ne pas être soumis deux fois à la CSG-CRDS\_:\n- Les revenus de remplacement qui ont été précomptés de la CSG-CRDS doivent être indiqués pour leur montant net de la part de CSG déductible. \n- Les revenus de remplacement qui n’ont pas été précomptés de la CSG-CRDS doivent être indiqués pour leur montant brut tel que perçu. \nLes revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l’indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie." + question.en: '[automatic] What is the amount of taxable per diems received?' + question.fr: "Quel est le montant des indemnités journalières imposables perçues\_?" + résumé.en: '[automatic] Only if you do not fall under the micro-fiscal regime.' + résumé.fr: Uniquement si vous ne relevez pas du régime micro-fiscal + titre.en: '[automatic] taxable per diems' + titre.fr: indemnités journalières imposable +dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS: + description.en: >- + [automatic] Indicate only the gross amount of your replacement income, + taxable and non-taxable, as shown on the statement of benefits provided by + your health insurance fund. This amount is to be entered only when the + replacement income has not been deducted from the CSG-CRDS so that the + CSG-CRDS can be calculated at the reduced rate of 6.70%. + + The replacement income is: the flat-rate maternity rest allowance, the + flat-rate daily allowance for interruption of activity, the replacement + allowance for maternity, paternity or adoption and the daily sickness + allowance. + description.fr: >- + Indiquez uniquement le montant brut de vos revenus de remplacement, + imposables et non imposables qui figure sur le relevé de prestations fourni + pas votre caisse d'assurance maladie. Ce montant est à saisir uniquement + lorsque ces revenus de remplacement n'ont pas été précomptés de la CSG-CRDS + ce afin que la CSG-CRDS puisse être calculée au taux réduit de 6,70%. + + Les revenus de remplacement sont : l'allocation forfaitaire de repos + maternel, l'indemnité journalière forfaitaire d'interruption d'activité, + l'indemnité de remplacement pour maternité, paternité ou adoption et + l'indemnité journalière maladie. + question.en: >- + [automatic] What is the amount of per diems received that have not been + deducted in advance from the CSG-CRDS? + question.fr: "Quel est le montant des indemnités journalières perçues qui n’ont pas été précomptées de la CSG-CRDS\_?" + titre.en: '[automatic] tax-free per diems' + titre.fr: indemnités journalières défiscalisées dirigeant . indépendant . PLNR régime général: description.en: rattaché au régime général plutôt que la CIPAV description.fr: >- @@ -3782,10 +3932,8 @@ dirigeant . indépendant . cotisations et contributions . exonérations . invali self-employed workers' scheme enjoy full exemption from sickness and supplementary pension contributions. description.fr: "Les personnes titulaires d’une pension d’invalidité versée par un régime des travailleurs non-salariés non agricoles bénéficient d’une exonération totale des cotisations\_maladie et retraite complémentaire." - question.en: indépendants ? - question.fr: >- - Êtes-vous titulaire d’une pension d’invalidité du régime des travailleurs - indépendants ? + question.en: '[automatic] Do you receive a disability pension as a self-employed person?' + question.fr: "Êtes-vous titulaire d’une pension d’invalidité à titre de travailleur indépendant\_?" titre.en: disability titre.fr: invalidité dirigeant . indépendant . cotisations et contributions . exonérations . âge: @@ -3847,7 +3995,9 @@ dirigeant . indépendant . revenus étrangers: Pour savoir si ces revenus sont soumis à l'impôt sur le revenu, référez-vous à la notice explicative sur le site [impots.gouv.fr](https://www.impots.gouv.fr/portail/international-particulier/imposition-des-revenus-de-source-etrangere) - question.en: '?' + question.en: >- + [automatic] Have you received any income abroad in connection with your + business? question.fr: Avez-vous perçu des revenus à l'étranger dans le cadre de votre activité ? titre.en: foreign income titre.fr: revenus étrangers @@ -4049,10 +4199,10 @@ entreprise . catégorie d'activité: description.fr: >- Votre catégorie d'activité va déterminer une grande partie des calculs de cotisation, contribution et impôt. - question.en: What is your category of activity? - question.fr: Quelle est votre catégorie d'activité ? - titre.en: activity category - titre.fr: catégorie d'activité + question.en: '[automatic] What is the nature of your business?' + question.fr: Quelle est la nature de votre activité ? + titre.en: '[automatic] nature of business' + titre.fr: nature de l'activité entreprise . catégorie d'activité . artisanale: description.en: > It is an activity of service, production, processing, or by a qualified @@ -4120,8 +4270,8 @@ entreprise . catégorie d'activité . commerciale ou industrielle: titre.en: commercial or industrial titre.fr: commerciale ou industrielle entreprise . catégorie d'activité . débit de tabac: - question.en: Is your business a tobacco store? - question.fr: Votre entreprise est-elle un débit de tabac ? + question.en: '[automatic] Do you engage in tobacco sales?' + question.fr: "Exercez-vous une activité de vente de tabac\_?" titre.en: tobacco shop titre.fr: débit de tabac entreprise . catégorie d'activité . libérale: @@ -4387,8 +4537,8 @@ entreprise . date de création: Si vous n'avez pas le jour exact, le mois suffit en général pour une bonne approximation. - question.en: When did you create your company? - question.fr: Quelle est la date de début d'activité ? + question.en: '[automatic] What is your start date?' + question.fr: Quelle est votre date de début d'activité ? suggestions.Début 2019.en: '[automatic] Early 2019' suggestions.Début 2019.fr: Début 2019 suggestions.Début 2020.en: '[automatic] Early 2020' @@ -5233,104 +5383,20 @@ revenus net de cotisations: situation personnelle: titre.en: personal situation titre.fr: situation personnelle -situation personnelle . IJSS: - description.en: > - [automatic] In the event of illness, maternity or accident, the general - social security system and special schemes provide "cash" benefits. These - are per diems from Social Security (IJSS), - - Compensation in addition to the Social Security daily allowances paid under - a provident fund contract does not constitute replacement income. - - - Note: Disability benefits paid by disability/death plans are not affected. - description.fr: > - En cas de maladie, maternité, ou accident, le régime général de Sécurité - sociale ainsi que les régimes spéciaux assurent le versement de prestations - « en espèces ». Ce sont les indemnités journalières de Sécurité sociale - (IJSS), - - Les indemnités complémentaires aux indemnités journalières de la Sécurité - sociale versées dans le cadre d’un contrat de prévoyance ne constituent pas - des revenus de remplacement. - - - Note: Les prestations d’invalidité versées par les régimes - d’invalidité-décès ne sont pas concernées - question.en: 'maternité, paternité, etc.) ?' - question.fr: >- - Avez-vous touché des indemnités journalières de sécurité sociale (maladie, - maternité, paternité, etc.) ? - titre.en: social security daily allowances - titre.fr: indemnités journalières de sécurité sociale -situation personnelle . IJSS . ALD: - description.en: >- - [automatic] Long-term affection (ALD) is introduced by the Law of 13 August - 2004 on health insurance. This status offers chronically ill people who meet - certain conditions specific medical care. Long-term condition is a - long-term, severe or chronic illness requiring long-term treatment at high - cost. The list of "exempt" DTAs is available on the website - [ameli.fr](https://www.ameli.fr/assure/droits-demarches/maladie-accident-hospitalisation/affection-longue-duree-ald/affection-longue-duree-ald) - Compensation paid under an "exempt" DTA is not taxable. - description.fr: >- - L'affection longue durée (ALD) est mise en place par la loi du 13 août 2004 - relative à l'assurance maladie. Ce statut offre aux personnes malades - chroniques qui remplissent certaines conditions une prise en charge - spécifique de leurs soins médicaux. L'affection longue durée est une maladie - de longue durée, présentant un caractère grave ou chronique et nécessitant - un traitement long dont le coût est élevé. La liste des ALD dites - "exonérante" est disponible sur le site - [ameli.fr](https://www.ameli.fr/assure/droits-demarches/maladie-accident-hospitalisation/affection-longue-duree-ald/affection-longue-duree-ald) - Les indemnité versée dans le cadre d'une ALD dites "éxonérante" ne sont pas - imposable. - question.en: (ALD) dite "exonérante" ? - question.fr: >- - Avez-vous touché des indemnités dans le cas d'une affection longue durée - (ALD) dite "exonérante" ? - titre.en: ALD - titre.fr: ALD -situation personnelle . IJSS . ALD . autres indemnités: - question.en: '(maternité, paternité, autre maladie) ?' - question.fr: >- - Avez-vous également touché des indemnités non liées à votre ALD (maternité, - paternité, autre maladie) ? - titre.en: other compensation - titre.fr: autres indemnités -situation personnelle . IJSS . ALD . autres indemnités . montant: - question.en: How much was your other compensation? - question.fr: Quel était le montant de vos autres indemnités ? - titre.en: amount - titre.fr: montant -situation personnelle . IJSS . défiscalisées: - question.en: What was the amount of your ALD benefits? - question.fr: Quel était le montant de vos indemnités ALD ? - titre.en: tax-free per diems - titre.fr: indemnités journalières défiscalisées -situation personnelle . IJSS . fiscalisées: - titre.en: taxable daily allowances - titre.fr: indemnités journalières fiscalisées -situation personnelle . IJSS . montant: - question.en: What was their total gross amount? - question.fr: Quel était leur montant total brut ? - titre.en: taxable daily allowances - titre.fr: indemnités journalières fiscalisées -situation personnelle . IJSS . total: - titre.en: total daily allowances - titre.fr: total indemnités journalières situation personnelle . RSA: - question.en: Are you a beneficiary of the RSA (active solidarity income)? - question.fr: Êtes-vous allocataire du RSA ? - titre.en: RSA recipient - titre.fr: allocataire RSA + question.en: '[automatic] Are you a beneficiary of the RSA or the activity bonus?' + question.fr: "Etes-vous bénéficiaire du RSA ou de la prime d’activité\_?" + titre.en: '[automatic] beneficiary RSA or activity bonus' + titre.fr: bénéficiaire RSA ou prime d'activité situation personnelle . domiciliation fiscale à l'étranger: - description.en: > + description.en: >- [automatic] These insured persons are not liable for the CSG/CRDS but, in return, they are liable for the health contribution at a higher rate. - description.fr: > + description.fr: >- Ces assurés ne sont pas redevables de la CSG/CRDS mais, en contrepartie ils sont redevables de la cotisation maladie sur la base d’un taux plus elevé. - question.en: Is the insured's tax residence abroad? - question.fr: La résidence fiscale de l'assuré est-elle domiciliée à l'étranger ? + question.en: '[automatic] Is the tax residence located abroad?' + question.fr: La résidence fiscale est-elle située à l'étranger ? titre.en: tax domicile abroad titre.fr: domiciliation fiscale à l'étranger établissement: @@ -5343,7 +5409,9 @@ situation personnelle . domiciliation fiscale à l'étranger: titre.en: establishment titre.fr: établissement établissement . ZFU: - question.en: (ZFU) ? + question.en: >- + [automatic] Does your establishment benefit from the Urban Free Zone (ZFU) + scheme? question.fr: >- Votre établissement bénéficie-t-il du dispositif zone franche urbaine (ZFU) ? diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx similarity index 72% rename from source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx rename to source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 1a61309b0..19c0740de 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/dnrti.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -6,6 +6,7 @@ import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' import React, { useCallback, useEffect, useState } from 'react' +import { Trans } from 'react-i18next' import Skeleton from 'react-loading-skeleton' import { useDispatch, useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' @@ -19,8 +20,8 @@ import { import styled from 'styled-components' import { DottedName, Rule } from 'Types/rule' import Animate from 'Ui/animate' -import { CompanySection } from '../Gérer/Home' -import { useRule } from './ArtisteAuteur' +import { useRule } from '../Simulateurs/ArtisteAuteur' +import { CompanySection } from './Home' const simulationConfig = { objectifs: [ @@ -29,10 +30,10 @@ const simulationConfig = { 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', 'aide déclaration revenu indépendant 2019 . assiette sociale' - ], + ] as Array, situation: { dirigeant: 'indépendant', - 'aide déclaration revenu indépendant 2019': 'oui' + 'aide déclaration revenu indépendant 2019': true }, 'unités par défaut': ['€/an'] } @@ -64,7 +65,7 @@ const lauchComputationWhenResultsInViewport = () => { return { updateIncome, resultsRef, displayForm, currentIncome } } -export default function DNRTI() { +export default function AideDéclarationIndépendant() { const dispatch = useDispatch() const analysis = useSelector(analysisWithDefaultsSelector) const rules = useSelector(flatRulesSelector) @@ -80,40 +81,42 @@ export default function DNRTI() { } = lauchComputationWhenResultsInViewport() return ( <> -

      - Travailleurs indépendants -
      - Aide à la déclaration de revenus au titre de l'année 2019{' '} - -

      -

      - Cet outil est une aide aux déclarations fiscale (revenu) et sociale - (DSI). Il vous permet de connaître le montant des charges sociales - déductibles à partir de votre résultat net fiscal. -

      - -

      - Cet outil vous concerne si vous êtes dans tous les cas suivants : -

      -
        -
      • vous cotisez au régime général des travailleurs indépendants
      • -
      • - votre entreprise est au régime réel d'imposition et en comptabilité - d'engagement -
      • -
      -

      Il ne vous concerne pas si vous êtes dans un des cas suivants :

      -
        -
      • vous êtes une profession libérale reglementée
      • -
      • vous êtes une profession libérale cotisant à la CIPAV
      • -
      • votre entreprise est domicilié dans les DOM
      • -
      -
      -

      Quel est votre revenu professionnel en 2019 ?

      -

      - Indiquez votre résultat net fiscal avant déduction des charges sociales - et exonérations fiscales. -

      + +

      Aide à la déclaration de revenus au titre de l'année 2019

      +

      + Cet outil est une aide aux déclarations fiscale (revenu) et sociale + (DSI) à destination des travailleurs indépendants. Il vous permet de + connaître le montant des charges sociales déductibles à partir de + votre résultat net fiscal. +

      + +

      + Cet outil vous concerne si vous êtes dans tous les cas suivants : +

      +
        +
      • + vous cotisez au régime général des travailleurs indépendants +
      • +
      • + votre entreprise est au régime réel d'imposition et en + comptabilité d'engagement +
      • +
      +

      + Il ne vous concerne pas si vous êtes dans un des cas suivants : +

      +
        +
      • vous êtes une profession libérale réglementée
      • +
      • vous êtes une profession libérale cotisant à la CIPAV
      • +
      • votre entreprise est domiciliée dans les DOM
      • +
      +
      +

      Quel est votre revenu professionnel en 2019 ?

      +

      + Indiquez votre résultat net fiscal avant déduction des charges + sociales et exonérations fiscales. +

      +
      -

      Votre entreprise

      -

      - Vous pouvez renseigner votre entreprise pour pré-remplir le - formulaire -

      - - + +

      Entreprise et activité

      +
      + {!company && ( +

      + + Vous pouvez renseigner votre entreprise pour pré-remplir le + formulaire + +

      + )} + {/* PLNR */} - -

      Situation personnelle

      +

      + Situation personnelle +

      -

      Exonérations

      +

      + Exonérations +

      -

      International

      +

      + International +

      +
      @@ -184,7 +198,6 @@ function SubSection({ const nextSteps = useSelector(nextStepsSelector) const situation = useSelector(situationSelector) const title = hideTitle ? null : ruleTitle - const subQuestions = flatRules.filter( ({ dottedName, question }) => Boolean(question) && @@ -192,11 +205,6 @@ function SubSection({ (Object.keys(situation).includes(dottedName) || nextSteps.includes(dottedName)) ) - // .sort( - // (rule1, rule2) => - // nextSteps.indexOf(rule1.dottedName) - - // nextSteps.indexOf(rule2.dottedName) - // ) return ( <> {!!subQuestions.length && title &&

      {title}

      } @@ -214,7 +222,7 @@ type SimpleFieldProps = { } function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { const dispatch = useDispatch() - const analysis = useSelector((state: RootState) => { + const evaluatedRule = useSelector((state: RootState) => { return ruleAnalysisSelector(state, { dottedName }) }) const rules = useSelector((state: RootState) => state.rules) @@ -239,7 +247,7 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { setCurrentValue(value) }, [value]) - if (!analysis.isApplicable) { + if (!evaluatedRule.isApplicable) { return null } return ( @@ -248,12 +256,11 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) {
      -

      {question ?? analysis.question}

      -

      {summary ?? analysis.summary}

      +

      {question ?? evaluatedRule.question}

      +

      {summary ?? evaluatedRule.summary}

      - useSelector((state: RootState) => { - return ruleAnalysisSelector(state, { dottedName }) - }) + useRule(dottedName) ) const onGoingComputation = !results.filter(node => node.nodeValue != null) .length @@ -281,11 +286,17 @@ function Results() { css="margin-top: 3rem; padding: 1rem 0" >

      - Aide à la déclaration 📄 + + Aide à la déclaration 📄 +

      {onGoingComputation && (

      - Calcul en cours... + + + Calcul en cours... + +

      )} <> @@ -329,7 +340,11 @@ const FormBlock = styled.section` padding: 0; h3 { - margin-top: 50px; + margin-top: 2rem; + } + h2 { + border-top: 1px solid var(--lighterColor); + padding-top: 2rem; } select, @@ -339,6 +354,7 @@ const FormBlock = styled.section` } ul { padding: 0; + margin: 0; } ` diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 9155c10e6..3f65d6b6a 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -9,6 +9,7 @@ import Overlay from 'Components/Overlay' import { ScrollToTop } from 'Components/utils/Scroll' import { SitePathsContext } from 'Components/utils/withSitePaths' import React, { useContext, useEffect, useRef, useState } from 'react' +import emoji from 'react-easy-emoji' import { Helmet } from 'react-helmet' import { Trans, useTranslation } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' @@ -79,58 +80,81 @@ export default function SocialSecurity() { - <> -

      - - Que souhaitez-vous faire ? - -

      - {!!régime && ( - - -

      Calculer mon revenu net

      - - Estimez précisément le montant de vos cotisations grâce au - simulateur {{ régime }} de l'Urssaf - +
      +

      + + Que souhaitez-vous faire ? - - )} - {régime !== 'auto-entrepreneur' && ( - - -

      Estimer le montant d’une embauche

      - - Calculez le montant total que votre entreprise devra dépenser - pour rémunérer votre prochain employé - -
      - - )} +

      +
      + {régime === 'indépendant' && ( + +
      {emoji('✍')}
      + +

      Remplir ma déclaration de revenus

      +

      + Calculez facilement les montants à reporter dans votre + déclaration de revenu au titre de 2019 +

      +
      + + )} + + {!!régime && ( + +
      {emoji('💶')}
      + +

      Calculer mon revenu net de cotisations

      +

      + Estimez précisément le montant de vos cotisations grâce au + simulateur {{ régime }} de l'Urssaf +

      +
      + + )} + {régime !== 'auto-entrepreneur' && ( + +
      {emoji('🤝')}
      + +

      Estimer le montant d’une embauche

      +

      + Calculez le montant total que votre entreprise devra + dépenser pour rémunérer votre prochain employé +

      +
      + + )} +
      +

      + {emoji('🧰 ')} Ressources utiles

      Découvrir les démarches d’embauche

      - +

      La liste des choses à faire pour être sûr de ne rien oublier lors de l’embauche d’un nouveau salarié - +

      )} @@ -164,12 +188,12 @@ export default function SocialSecurity() { >

      Accéder au site officiel auto-entrepreneur

      - +

      Vous pourrez effectuer votre déclaration de chiffre d'affaire, payer vos cotisations, et plus largement trouver toutes les informations relatives au statut d'auto-entrepreneur - +

      )} @@ -179,11 +203,11 @@ export default function SocialSecurity() { >

      Comprendre la sécurité sociale

      - +

      A quoi servent les cotisations sociales ? Le point sur le système de protection sociale dont bénéficient tous les travailleurs en France - +

      diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx index 14a0135ad..56de1a4fc 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx @@ -4,6 +4,7 @@ import React, { useContext } from 'react' import { Trans } from 'react-i18next' import { Route, Switch } from 'react-router' import { NavLink, useLocation } from 'react-router-dom' +import AideDéclarationIndépendant from './AideDéclarationIndépendants' import Embaucher from './Embaucher' import Home from './Home' import SécuritéSociale from './SécuritéSociale' @@ -31,6 +32,10 @@ export default function Gérer() { component={SécuritéSociale} /> + ) diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx index 472730556..ffb2f04d6 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/index.tsx @@ -8,7 +8,6 @@ import { Link, useLocation } from 'react-router-dom' import ArtisteAuteur from './ArtisteAuteur' import AssimiléSalarié from './AssimiléSalarié' import AutoEntrepreneur from './AutoEntrepreneur' -import DNRTI from './dnrti' import Home from './Home' import Indépendant from './Indépendant' import Salarié from './Salarié' @@ -28,7 +27,7 @@ export default function Simulateurs() { return ( <> - {pathname !== sitePaths.simulateurs.index && !pathname.match('dnrti') && ( + {pathname !== sitePaths.simulateurs.index && (
      {lastState?.fromGérer && ( - ) diff --git a/source/sites/mon-entreprise.fr/sitePaths.ts b/source/sites/mon-entreprise.fr/sitePaths.ts index 88c9b7294..f23f6fe52 100644 --- a/source/sites/mon-entreprise.fr/sitePaths.ts +++ b/source/sites/mon-entreprise.fr/sitePaths.ts @@ -88,7 +88,11 @@ export const constructLocalizedSitePath = (language: string) => { gérer: { index: t('path.gérer.index', '/gérer'), embaucher: t('path.gérer.embaucher', '/embaucher'), - sécuritéSociale: t('path.gérer.sécuritéSociale', '/sécurité-sociale') + sécuritéSociale: t('path.gérer.sécuritéSociale', '/sécurité-sociale'), + déclarationIndépendant: t( + 'path.gérer.déclaration-indépendant', + '/aide-declaration-independants' + ) }, simulateurs: { index: t('path.simulateurs.index', '/simulateurs'), @@ -106,8 +110,7 @@ export const constructLocalizedSitePath = (language: string) => { '/comparaison-régimes-sociaux' ), salarié: t('path.simulateurs.salarié', '/salarié'), - 'artiste-auteur': t('path.simulateurs.artiste-auteur', '/artiste-auteur'), - dnrti: t('path.simulateurs.dnrti', '/dnrti') + 'artiste-auteur': t('path.simulateurs.artiste-auteur', '/artiste-auteur') }, économieCollaborative: { index: t('path.économieCollaborative.index', '/économie-collaborative'), diff --git a/test/mécanismes/période.yaml b/test/mécanismes/période.yaml deleted file mode 100644 index 621ec7e9d..000000000 --- a/test/mécanismes/période.yaml +++ /dev/null @@ -1,63 +0,0 @@ -dépenses: - formule: - calendrier: - - le: 05/01/2018 - montant: 100 € - - le: 08/01/2018 - montant: 50 € - - le: 04/02/2018 - montant: 200 € - -filtre par période . sur un mois: - période: - depuis: 01/01/2018 - jusqu'à: 31/01/2018 - formule: dépense - exemples: - - valeur attendue: 150€ - -filtre par période . sur un mois (infix): - formule: dépenses [depuis le 01/01/2018 jusqu'au 31/01/2018] - exemples: - - valeur attendue: 150€ - - -# salaire . brut de base: -# formule: -# calendrier: -# - depuis: 01/04/2018 -# montant: 2000€/mois -# - depuis: 01/08/2019 -# montant: 2200€/mois -# salaire . primes: -# par défaut: 0 €/mois - -# salaire . primes . décembre 2019: -# remplace: -# règle: primes -# période: -# depuis: 01/12/2019 -# jusqu'à: 31/12/2019 -# formule: 1200€ - -# salaire . brut: -# formules: -# - brut de base -# - primes - -# salaire . brut . en 2019: -# période: -# depuis: 01/01/2019 -# jusqu'à: 31/12/2019 -# formule: salaire brut -# exemples: -# - valeur attendue: 26200€ - -# salaire . brut . mensuel en 2019: -# unité: €/mois -# période: -# depuis: 01/01/2019 -# jusqu'à: 31/12/2019 -# formule: salaire brut -# exemples: -# - valeur attendue: 2183 €/mois From 74c20b8fe18949605939d8e0b32d7dd28e0c466f Mon Sep 17 00:00:00 2001 From: Maxime Quandalle Date: Mon, 10 Feb 2020 12:06:59 +0100 Subject: [PATCH 07/23] =?UTF-8?q?=F0=9F=96=8A=20Retouches?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/déclaration-revenu-indépendant.yaml | 9 +++++---- .../pages/Gérer/AideDéclarationIndépendants.tsx | 11 ++++++++--- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index 4cacb066d..05bdbdc92 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -1,8 +1,9 @@ # AIDE A LA DECLARATION DES INDEPENDANTS aide déclaration revenu indépendant 2019: - description: Ces règles sont écrites pour aider à remplir les déclarations sociale et - fiscale des indépendant de 2020 sur les revenus 2019 + description: >- + Ces règles calculent les montants demandés dans les déclarations sociale et + fiscale des indépendants de 2020 sur les revenus 2019 par défaut: non aide déclaration revenu indépendant 2019 . professions libérale: @@ -36,7 +37,7 @@ aide déclaration revenu indépendant 2019 . CSG déductible: formule: dirigeant . indépendant . cotisations et contributions . CSG et CRDS .déductible aide déclaration revenu indépendant 2019 . cotisations sociales déductible: - titre: cotisations sociales obligatoire déductible + titre: cotisations sociales obligatoires déductibles résumé: y compris CFP [C] description: >- Montant à reporter dans la case XI de votre déclaration sociale et rubrique @@ -50,7 +51,7 @@ aide déclaration revenu indépendant 2019 . cotisations sociales déductible: - (- dirigeant . indépendant . cotisations et contributions . exonérations) aide déclaration revenu indépendant 2019 . total charges sociales déductible: - titre: total charges sociales obligatoires déductible fiscalement + titre: total charges sociales obligatoires déductibles fiscalement résumé: '[B + C]' formule: somme: diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 19c0740de..168bf09e5 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -6,6 +6,7 @@ import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' import React, { useCallback, useEffect, useState } from 'react' +import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' import Skeleton from 'react-loading-skeleton' import { useDispatch, useSelector } from 'react-redux' @@ -287,7 +288,7 @@ function Results() { >

      - Aide à la déclaration 📄 + Aide à la déclaration <>{emoji('📄')}

      {onGoingComputation && ( @@ -325,8 +326,12 @@ function Results() { ))} {!onGoingComputation && (
      - - + +
      )} From 71f2cba981600282a391323412dbf312b2a95da1 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Tue, 18 Feb 2020 15:27:16 +0100 Subject: [PATCH 08/23] retours dnrti --- publicode/rules/dirigeant.yaml | 49 ++--- .../rules/déclaration-revenu-indépendant.yaml | 78 ++++++-- publicode/rules/situation-personnelle.yaml | 3 +- source/locales/rules-en.yaml | 175 +++++++++++++----- .../Gérer/AideDéclarationIndépendants.tsx | 24 ++- .../mon-entreprise.fr/pages/Gérer/Home.tsx | 36 ++-- .../__snapshots__/simulations.jest.js.snap | 2 +- 7 files changed, 258 insertions(+), 109 deletions(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index ba4386129..24be6af56 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -418,9 +418,10 @@ dirigeant . indépendant . cotisations et contributions . exonérations . ACRE . dirigeant . indépendant . revenu net de cotisations: formule: - somme: - - revenu professionnel - - (- cotisations et contributions . CSG et CRDS .non déductible) + allègement: + assiette: revenu professionnel + abattement: cotisations et contributions . CSG et CRDS .non déductible + résumé: Avant déduction de l'impôt sur le revenu question: Quel revenu avant impôt voulez-vous toucher ? description: Il s'agit du revenu net de cotisations et de charges, avant le paiement de l'impôt sur le revenu. @@ -887,7 +888,7 @@ dirigeant . indépendant . cotisations et contributions . cotisations . retraite - entreprise . catégorie d'activité = 'libérale' - rattachement CIPAV = non titre: taux spécifique profession libérale non reglementée - question: Avez-vous opté pour des taux spécifique de cotisation retraite complémentaire ? + question: Avez-vous opté pour des taux spécifiques de cotisation retraite complémentaire ? description: | Les professions libérales non règlementées qui ont débuté leur activité à compter du 1er janvier 2019 ou ceux qui ont débuté leur activité avant la date du 1er janvier 2019  et ont opté pour le régime général des travailleurs indépendants  ont la possibilité d’opter pour des taux spécifique de la cotisation retraite complémentaire. références: @@ -956,12 +957,12 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS: - attributs: nom: revenus de remplacement impôt sur le revenu: non déductible - assiette: dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS + assiette: dirigeant . indépendant . IJSS . total taux: 2.9% - attributs: nom: revenus de remplacement impôt sur le revenu: déductible - assiette: dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS + assiette: dirigeant . indépendant . IJSS . total taux: 3.8% références: @@ -985,13 +986,20 @@ dirigeant . indépendant . revenus étrangers . montant: par défaut: 0 dirigeant . indépendant . cotisations et contributions . CSG et CRDS . assiette: + note: >- + Seule la partie imposable des IJSS est retranchée de l'assiette de la CSG, + puisque la partie non imposable a déjà été retranchée du revenu net fiscal fourni formule: - somme: - - revenu professionnel - - cotisations - - conjoint collaborateur . cotisations - - (- revenus étrangers . montant) - - (- dirigeant . indépendant . IJSS . imposable) + allègement: + assiette: + somme: + - revenu professionnel + - cotisations + - conjoint collaborateur . cotisations + abattement: + somme: + - revenus étrangers . montant + - dirigeant . indépendant . IJSS . imposable dirigeant . indépendant . cotisations et contributions . formation professionnelle: formule: @@ -1129,19 +1137,16 @@ dirigeant . indépendant . IJSS: question: Avez-vous perçu des indemnités journalières de maladie, maternité ou paternité au titre de votre activité indépendante ? par défaut: non -dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS: - titre: indemnités journalières défiscalisées +dirigeant . indépendant . IJSS . total: + titre: indemnités journalières question: >- - Quel est le montant des indemnités journalières perçues qui n’ont pas été - précomptées de la CSG-CRDS ? + Quel est le montant total brut de toutes vos indemnités journalières ? description: >- Indiquez uniquement le montant brut de vos revenus de remplacement, imposables et non imposables qui figure sur le relevé de prestations fourni - pas votre caisse d'assurance maladie. Ce montant est à saisir uniquement - lorsque ces revenus de remplacement n'ont pas été précomptés de la CSG-CRDS - ce afin que la CSG-CRDS puisse être calculée au taux réduit de 6,70%. + pas votre caisse d'assurance maladie. - Les revenus de remplacement sont : l'allocation forfaitaire de repos + > Les revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l'indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie. @@ -1151,7 +1156,7 @@ dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS: dirigeant . indépendant . IJSS . imposable: titre: indemnités journalières imposable résumé: Uniquement si vous ne relevez pas du régime micro-fiscal - question: Quel est le montant des indemnités journalières imposables perçues ? + question: Quel est le montant brut des indemnités journalières imposables perçues? description: >- Indiquez uniquement les revenus de remplacement imposables perçus, donc tous les revenus de remplacement perçus **sauf les indemnités journalières en @@ -1167,7 +1172,7 @@ dirigeant . indépendant . IJSS . imposable: - Les revenus de remplacement qui n’ont pas été précomptés de la CSG-CRDS doivent être indiqués pour leur montant brut tel que perçu. - Les revenus de remplacement sont : l'allocation forfaitaire de repos + > Les revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l’indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie. diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index 05bdbdc92..1653d1fda 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -4,22 +4,61 @@ aide déclaration revenu indépendant 2019: description: >- Ces règles calculent les montants demandés dans les déclarations sociale et fiscale des indépendants de 2020 sur les revenus 2019 - par défaut: non + formule: non -aide déclaration revenu indépendant 2019 . professions libérale: +aide déclaration revenu indépendant 2019 . nature de l'activité: + remplace: entreprise . catégorie d'activité + question: Quelle est la nature de votre activité ? + par défaut: commerciale ou industrielle + formule: + une possibilité: + choix obligatoire: oui + possibilités: + - artisanale + - commerciale ou industrielle + - 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://www.service-public.fr/professionnels-entreprises/vosdroits/F32887 + +aide déclaration revenu indépendant 2019 . nature de l'activité . libérale: remplace: - règle: dirigeant . rattachement CIPAV par: non + - entreprise . catégorie d'activité . libérale + titre: Libérale rattachée au régime général + description: | + Ce sont les professions "intellectuelles", qui ne sont rattachée à aucune + caisse spécifique de retraite. - contrôles: - - si: - toutes ces conditions: - - entreprise . date de création < 01/01/2019 - - entreprise . catégorie d'activité = 'libérale' - niveau: avertissement - message: >- - Cette aide à la déclaration ne prends pas en compte les professions - libérales affiliées à la CIPAV. + C'est le cas de toutes les professions libérale non reglementée depuis le + 1er janvier 2019. + + références: + fiche Wikipedia: https://fr.m.wikipedia.org/wiki/Profession_libérale + +aide déclaration revenu indépendant 2019 . nature de l'activité . commerciale ou industrielle: + remplace: entreprise . catégorie d'activité . commerciale ou industrielle + description: | + ### Activité commerciale + - Achats de biens pour leur revente en l'état (commerce en gros ou de détail) + - Vente de prestations de services commerciales (location de matériel, transport, agence immobilière, hôtellerie-restauration, entreprise de spectacles, activité de sécurité privée, location, etc.) + + ### Activité industrielle + + Activité de production ou de transformation grâce à l'utilisation d'outils industriels, extraction, industries minières, manutention, magasinage et stockage + +aide déclaration revenu indépendant 2019 . nature de l'activité . artisanale: + remplace: entreprise . catégorie d'activité . artisanale + description: | + C'est une activité de service, de production, de transformation, ou de réparation exercée par un professionnel qualifié, et qui nécessite des compétences et un savoir-faire spécifiques. + + > Par exemple : les travaux, les activités liées au bâtiment, la réparation de produits fournis par le client, les coiffeurs... + + - L'entreprise ne doit pas employer plus de 10 salariés (l'activité devient commerciale au-delà) + - Les activités artisanales sont répertoriées par un décret + références: + liste des activités artisanales: https://bpifrance-creation.fr/encyclopedie/trouver-proteger-tester-son-idee/verifiertester-son-idee/activites-artisanales-0 aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: remplace: plafond sécurité sociale temps plein @@ -38,7 +77,7 @@ aide déclaration revenu indépendant 2019 . CSG déductible: aide déclaration revenu indépendant 2019 . cotisations sociales déductible: titre: cotisations sociales obligatoires déductibles - résumé: y compris CFP [C] + résumé: '[C]' description: >- Montant à reporter dans la case XI de votre déclaration sociale et rubrique 326 du formulaire 2033-D-SD (pour le réel simplifié) ou rubrique A5 du @@ -46,16 +85,19 @@ aide déclaration revenu indépendant 2019 . cotisations sociales déductible: formule: somme: - dirigeant . indépendant . cotisations et contributions . cotisations - - dirigeant . indépendant . cotisations et contributions . formation professionnelle - dirigeant . indépendant . conjoint collaborateur . cotisations - (- dirigeant . indépendant . cotisations et contributions . exonérations) +aide déclaration revenu indépendant 2019 . CFP: + résumé: contribution à la formation professionnelle [D] + formule: dirigeant . indépendant . cotisations et contributions . formation professionnelle aide déclaration revenu indépendant 2019 . total charges sociales déductible: titre: total charges sociales obligatoires déductibles fiscalement - résumé: '[B + C]' + résumé: '[B + C + D]' formule: somme: - CSG déductible + - CFP - cotisations sociales déductible description: >- Montant à reporter dans la rubrique 252 du formulaire 2033-B-SD (pour le @@ -64,8 +106,8 @@ aide déclaration revenu indépendant 2019 . total charges sociales déductible: aide déclaration revenu indépendant 2019 . assiette sociale: titre: assiette sociale - résumé: 'pour information [A - (B + C)]' + résumé: 'pour information [A - (B + C + D)]' formule: - somme: - - revenu net fiscal - - (- cotisations sociales déductible) + allègement: + assiette: revenu net fiscal + abattement: total charges sociales déductible diff --git a/publicode/rules/situation-personnelle.yaml b/publicode/rules/situation-personnelle.yaml index 6d5bfc563..08845f6d5 100644 --- a/publicode/rules/situation-personnelle.yaml +++ b/publicode/rules/situation-personnelle.yaml @@ -10,8 +10,7 @@ situation personnelle . domiciliation fiscale à l'étranger: description: >- Ces assurés ne sont pas redevables de la CSG/CRDS mais, en contrepartie ils sont redevables de la cotisation maladie sur la base d’un taux plus elevé. - question: >- - La résidence fiscale est-elle située à 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 diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index fc5d3d46a..3c79708ee 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -3,21 +3,26 @@ SMIC horaire: titre.fr: SMIC horaire aide déclaration revenu indépendant 2019: description.en: >- - [automatic] These rules are written to assist in completing the 2020 - self-employed social and tax returns on the 2019 income 2019 + [automatic] These rules calculate the amounts claimed in the 2020 social and + tax returns of self-employed persons on the 2019 income 2019 description.fr: >- - Ces règles sont écrites pour aider à remplir les déclarations sociale et - fiscale des indépendant de 2020 sur les revenus 2019 + Ces règles calculent les montants demandés dans les déclarations sociale et + fiscale des indépendants de 2020 sur les revenus 2019 titre.en: '[automatic] self-employment income assistance 2019' titre.fr: aide déclaration revenu indépendant 2019 +aide déclaration revenu indépendant 2019 . CFP: + résumé.en: '[automatic] contribution to vocational training [D]' + résumé.fr: 'contribution à la formation professionnelle [D]' + titre.en: '[automatic] PSC' + titre.fr: CFP aide déclaration revenu indépendant 2019 . CSG déductible: résumé.en: '[automatic] [B]' résumé.fr: '[B]' titre.en: '[automatic] deductible MSA' titre.fr: CSG déductible aide déclaration revenu indépendant 2019 . assiette sociale: - résumé.en: '[automatic] for your information [A - (B + C)].' - résumé.fr: 'pour information [A - (B + C)]' + résumé.en: '[automatic] for information [A - (B + C + D)].' + résumé.fr: 'pour information [A - (B + C + D)]' titre.en: '[automatic] social base' titre.fr: assiette sociale aide déclaration revenu indépendant 2019 . cotisations sociales déductible: @@ -29,22 +34,104 @@ aide déclaration revenu indépendant 2019 . cotisations sociales déductible: Montant à reporter dans la case XI de votre déclaration sociale et rubrique 326 du formulaire 2033-D-SD (pour le réel simplifié) ou rubrique A5 du formulaire 2053-SD (pour le réel normal) de votre déclaration fiscale. - résumé.en: '[automatic] including PSC [C]' - résumé.fr: 'y compris CFP [C]' + résumé.en: '[automatic] [C]' + résumé.fr: '[C]' titre.en: '[automatic] deductible compulsory social security contributions' - titre.fr: cotisations sociales obligatoire déductible + titre.fr: cotisations sociales obligatoires déductibles +aide déclaration revenu indépendant 2019 . nature de l'activité: + question.en: '[automatic] What is the nature of your business?' + question.fr: Quelle est la nature de votre activité ? + titre.en: '[automatic] nature of business' + titre.fr: nature de l'activité +aide déclaration revenu indépendant 2019 . nature de l'activité . artisanale: + description.en: > + [automatic] It is a service, production, transformation, or repair activity + carried out by a qualified professional, and which requires specific skills + and know-how. + + + > For example: works, activities related to the building, repair of + products supplied by the client, hairdressers, etc. + + + - The company must not employ more than 10 employees (the activity becomes + commercial beyond that). + + - Craft activities are listed by a decree. + description.fr: > + C'est une activité de service, de production, de transformation, ou de + réparation exercée par un professionnel qualifié, et qui nécessite des + compétences et un savoir-faire spécifiques. + + + > Par exemple : les travaux, les activités liées au bâtiment, la réparation + de produits fournis par le client, les coiffeurs... + + + - L'entreprise ne doit pas employer plus de 10 salariés (l'activité devient + commerciale au-delà) + + - Les activités artisanales sont répertoriées par un décret + titre.en: '[automatic] artisanal' + titre.fr: artisanale +aide déclaration revenu indépendant 2019 . nature de l'activité . commerciale ou industrielle: + description.en: > + [automatic] ### Commercial activity + + - Purchases of goods for resale in the same condition (wholesale or retail + trade) + + - Sale of commercial services (equipment rental, transport, real estate + agency, hotel and catering, entertainment business, private security + activity, rental, etc.). + + + ### Industrial activity + + + Production or processing activity through the use of industrial tools, + extraction, mining, handling, storage and warehousing + description.fr: > + ### Activité commerciale + + - Achats de biens pour leur revente en l'état (commerce en gros ou de + détail) + + - Vente de prestations de services commerciales (location de matériel, + transport, agence immobilière, hôtellerie-restauration, entreprise de + spectacles, activité de sécurité privée, location, etc.) + + + ### Activité industrielle + + + Activité de production ou de transformation grâce à l'utilisation d'outils + industriels, extraction, industries minières, manutention, magasinage et + stockage + titre.en: '[automatic] commercial or industrial' + titre.fr: commerciale ou industrielle +aide déclaration revenu indépendant 2019 . nature de l'activité . libérale: + description.en: > + [automatic] These are the "intellectual" professions, which are not attached + to any + + specific pension fund. + + + This has been the case for all unregulated professions since the + + January 1, 2019. + description.fr: | + Ce sont les professions "intellectuelles", qui ne sont rattachée à aucune + caisse spécifique de retraite. + + C'est le cas de toutes les professions libérale non reglementée depuis le + 1er janvier 2019. + titre.en: '[automatic] Liberal attached to the general regime' + titre.fr: Libérale rattachée au régime général aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: titre.en: '[automatic] social security ceiling 2019' titre.fr: plafond sécurité sociale 2019 -aide déclaration revenu indépendant 2019 . professions libérale: - contrôles.0.en: >- - [automatic] This declaration aid does not take into account the liberal - professions affiliated to the CIPAV. - contrôles.0.fr: >- - Cette aide à la déclaration ne prends pas en compte les professions - libérales affiliées à la CIPAV. - titre.en: '[automatic] liberal professions' - titre.fr: professions libérale aide déclaration revenu indépendant 2019 . revenu net fiscal: résumé.en: >- [automatic] before deduction of social security charges and tax exemptions @@ -61,10 +148,10 @@ aide déclaration revenu indépendant 2019 . total charges sociales déductible: Montant à reporter dans la rubrique 252 du formulaire 2033-B-SD (pour le réel simplifié) ou en rubrique FZ du formulaire 2052-SD (pour le réel normal) de votre déclaration fiscale. - résumé.en: '[automatic] [B + C]' - résumé.fr: '[B + C]' + résumé.en: '[automatic] [B + C + D]' + résumé.fr: '[B + C + D]' titre.en: '[automatic] total tax-deductible compulsory social security charges' - titre.fr: total charges sociales obligatoires déductible fiscalement + titre.fr: total charges sociales obligatoires déductibles fiscalement artiste-auteur: description.en: The artist-author regime description.fr: Le régime des artistes-auteurs @@ -3504,46 +3591,40 @@ dirigeant . indépendant . IJSS . imposable: - Replacement income that has not been deducted from the CSG-CRDS must be shown for the gross amount as received. - The replacement income is: the flat-rate maternity rest allowance, the + > Replacement income is: the flat-rate maternal rest allowance, the flat-rate daily allowance for interruption of activity, the replacement allowance for maternity, paternity or adoption and the daily sickness allowance. - description.fr: "Indiquez uniquement les revenus de remplacement imposables perçus, donc tous les revenus de remplacement perçus **sauf les indemnités journalières en lien avec une Affection de Longue Durée (ALD)**. \n\nCes revenus seront déduits de votre assiette des contributions, afin de ne pas être soumis deux fois à la CSG-CRDS\_:\n- Les revenus de remplacement qui ont été précomptés de la CSG-CRDS doivent être indiqués pour leur montant net de la part de CSG déductible. \n- Les revenus de remplacement qui n’ont pas été précomptés de la CSG-CRDS doivent être indiqués pour leur montant brut tel que perçu. \nLes revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l’indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie." - question.en: '[automatic] What is the amount of taxable per diems received?' - question.fr: "Quel est le montant des indemnités journalières imposables perçues\_?" + description.fr: "Indiquez uniquement les revenus de remplacement imposables perçus, donc tous les revenus de remplacement perçus **sauf les indemnités journalières en lien avec une Affection de Longue Durée (ALD)**. \n\nCes revenus seront déduits de votre assiette des contributions, afin de ne pas être soumis deux fois à la CSG-CRDS\_:\n- Les revenus de remplacement qui ont été précomptés de la CSG-CRDS doivent être indiqués pour leur montant net de la part de CSG déductible. \n- Les revenus de remplacement qui n’ont pas été précomptés de la CSG-CRDS doivent être indiqués pour leur montant brut tel que perçu. \n> Les revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l’indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie." + question.en: '[automatic] What is the gross amount of taxable daily allowances received?' + question.fr: Quel est le montant brut des indemnités journalières imposables perçues? résumé.en: '[automatic] Only if you do not fall under the micro-fiscal regime.' résumé.fr: Uniquement si vous ne relevez pas du régime micro-fiscal titre.en: '[automatic] taxable per diems' titre.fr: indemnités journalières imposable -dirigeant . indépendant . IJSS . non précomptés de la CSG-CRDS: +dirigeant . indépendant . IJSS . total: description.en: >- [automatic] Indicate only the gross amount of your replacement income, taxable and non-taxable, as shown on the statement of benefits provided by - your health insurance fund. This amount is to be entered only when the - replacement income has not been deducted from the CSG-CRDS so that the - CSG-CRDS can be calculated at the reduced rate of 6.70%. + your health insurance fund. - The replacement income is: the flat-rate maternity rest allowance, the + > Replacement income is: the flat-rate maternal rest allowance, the flat-rate daily allowance for interruption of activity, the replacement allowance for maternity, paternity or adoption and the daily sickness allowance. description.fr: >- Indiquez uniquement le montant brut de vos revenus de remplacement, imposables et non imposables qui figure sur le relevé de prestations fourni - pas votre caisse d'assurance maladie. Ce montant est à saisir uniquement - lorsque ces revenus de remplacement n'ont pas été précomptés de la CSG-CRDS - ce afin que la CSG-CRDS puisse être calculée au taux réduit de 6,70%. + pas votre caisse d'assurance maladie. - Les revenus de remplacement sont : l'allocation forfaitaire de repos + > Les revenus de remplacement sont : l'allocation forfaitaire de repos maternel, l'indemnité journalière forfaitaire d'interruption d'activité, l'indemnité de remplacement pour maternité, paternité ou adoption et l'indemnité journalière maladie. - question.en: >- - [automatic] What is the amount of per diems received that have not been - deducted in advance from the CSG-CRDS? - question.fr: "Quel est le montant des indemnités journalières perçues qui n’ont pas été précomptées de la CSG-CRDS\_?" - titre.en: '[automatic] tax-free per diems' - titre.fr: indemnités journalières défiscalisées + question.en: '[automatic] What is the total gross amount of all your per diems?' + question.fr: "Quel est le montant total brut de toutes vos indemnités journalières\_?" + titre.en: '[automatic] sick pay' + titre.fr: indemnités journalières dirigeant . indépendant . PLNR régime général: description.en: rattaché au régime général plutôt que la CIPAV description.fr: >- @@ -3684,6 +3765,14 @@ dirigeant . indépendant . cotisations et contributions . CSG et CRDS: titre.en: CSG and CRDS titre.fr: CSG et CRDS dirigeant . indépendant . cotisations et contributions . CSG et CRDS . assiette: + note.en: >- + [automatic] Only the taxable portion of the IJSS is deducted from the MSA + base, since the non-taxable portion has already been deducted from the net + tax income provided. + note.fr: >- + Seule la partie imposable des IJSS est retranchée de l'assiette de la CSG, + puisque la partie non imposable a déjà été retranchée du revenu net fiscal + fourni titre.en: basis titre.fr: assiette dirigeant . indépendant . cotisations et contributions . cotisations: @@ -3858,9 +3947,11 @@ dirigeant . indépendant . cotisations et contributions . cotisations . retraite and opted for the general scheme for self-employed persons have the possibility to opt for specific rates of supplementary pension contribution. description.fr: "Les professions libérales non règlementées qui ont débuté leur activité à compter du 1er janvier 2019 ou ceux qui ont débuté leur activité avant la date du 1er janvier 2019\_ et ont opté pour le régime général des travailleurs indépendants\_ ont la possibilité d’opter pour des taux spécifique de la cotisation retraite complémentaire.\n" - question.en: complémentaire ? + question.en: >- + [automatic] Have you opted for specific supplementary pension contribution + rates? question.fr: >- - Avez-vous opté pour des taux spécifique de cotisation retraite + Avez-vous opté pour des taux spécifiques de cotisation retraite complémentaire ? titre.en: unregulated specific rate for unregulated professions titre.fr: taux spécifique profession libérale non reglementée diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 168bf09e5..08116023b 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -2,6 +2,7 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' import Warning from 'Components/ui/WarningBlock' +import { ScrollToTop } from 'Components/utils/Scroll' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' @@ -29,6 +30,7 @@ const simulationConfig = { 'aide déclaration revenu indépendant 2019 . revenu net fiscal', 'aide déclaration revenu indépendant 2019 . CSG déductible', 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', + 'aide déclaration revenu indépendant 2019 . CFP', 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', 'aide déclaration revenu indépendant 2019 . assiette sociale' ] as Array, @@ -82,6 +84,7 @@ export default function AideDéclarationIndépendant() { } = lauchComputationWhenResultsInViewport() return ( <> +

      Aide à la déclaration de revenus au titre de l'année 2019

      @@ -108,14 +111,21 @@ export default function AideDéclarationIndépendant() {

      • vous êtes une profession libérale réglementée
      • +
      • + vous êtes gérants de société relevant de l’impôt sur les sociétés +
      • +
      • vous avez opté pour le régime micro-fiscal
      • vous êtes une profession libérale cotisant à la CIPAV
      • votre entreprise est domiciliée dans les DOM
      -

      Quel est votre revenu professionnel en 2019 ?

      +

      + Quel est votre résultat fiscal en 2019 ?
      + Charges sociales et exonérations fiscales non incluses +

      - Indiquez votre résultat net fiscal avant déduction des charges - sociales et exonérations fiscales. + Le résultat fiscal correspond aux produits moins les charges. Il peut + être positif (bénéfice) ou négatif (pertes).

      @@ -137,14 +147,14 @@ export default function AideDéclarationIndépendant() { {!company && (

      - Vous pouvez renseigner votre entreprise pour pré-remplir le - formulaire + Facultatif : Vous pouvez renseigner votre + entreprise pour pré-remplir le formulaire

      )} - + {/* PLNR */} @@ -288,7 +298,7 @@ function Results() { >

      - Aide à la déclaration <>{emoji('📄')} + Aide à la déclaration {emoji('📄')}

      {onGoingComputation && ( diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 3f65d6b6a..6fd819813 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -91,23 +91,25 @@ export default function SocialSecurity() {
      - {régime === 'indépendant' && ( - -
      {emoji('✍')}
      - -

      Remplir ma déclaration de revenus

      -

      - Calculez facilement les montants à reporter dans votre - déclaration de revenu au titre de 2019 -

      -
      - - )} + {company?.statutJuridique === 'EI' && + !company.isAutoEntrepreneur && ( + +
      {emoji('✍')}
      + +

      Remplir ma déclaration de revenus

      +

      + Calculez facilement les montants des charges sociales à + reporter dans votre déclaration de revenu au titre de + 2019 +

      +
      + + )} {!!régime && ( Date: Tue, 25 Feb 2020 15:28:11 +0100 Subject: [PATCH 09/23] =?UTF-8?q?=F0=9F=8E=A8=20Aide=20=C3=A0=20la=20d?= =?UTF-8?q?=C3=A9claration=20des=20ind=C3=A9pendants:=20ic=C3=B4nes,=20i18?= =?UTF-8?q?n,=20suppression=20lien?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/locales/en.yaml | 19 ++++++++++--------- .../Gérer/AideDéclarationIndépendants.tsx | 9 ++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/source/locales/en.yaml b/source/locales/en.yaml index d75fc5dfe..bfaab4e64 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -68,7 +68,7 @@ Mon entreprise: My company Mon revenu: My income Montant: Amount Montant des cotisations: Amount of contributions -"Nom de l'entreprise ou SIREN ": Company name or SIREN code +'Nom de l''entreprise ou SIREN ': Company name or SIREN code Non: 'No' Nous n'avons rien trouvé: We didn't find any matching registered company. Oui: 'Yes' @@ -139,14 +139,14 @@ Votre forme juridique: Your legal status aide: aid or subsidy aide-déclaration-indépendant: description: >- - <0>Help with your 2019 income tax return <1>This tool is a tax - (income) and social security (ISD) declaration aid for self-employed - workers. It allows you to find out the amount of social security charges - deductible from your net fiscal result.<2><0>This tool is for you if you - are in any of the following cases :<1><0>you contribute to the general - scheme for self-employed persons<1>your business is in the actual tax - system and in accrual accounting<2>It does not concern you if you - are in one of the following cases:<3><0>you are a regulated liberal + <0>Help with your 2019 income tax return <1>This tool is a tax (income) + and social security (ISD) declaration aid for self-employed workers. It + allows you to find out the amount of social security charges deductible from + your net fiscal result.<2><0>This tool is for you if you are in any of + the following cases :<1><0>you contribute to the general scheme for + self-employed persons<1>your business is in the actual tax system and in + accrual accounting<2>It does not concern you if you are in one of + the following cases:<3><0>you are a regulated liberal profession<1>you are a liberal profession contributing to the CIPAV<2>your company is domiciled in the DOMs<3>What is your professional income in 2019?<4>Indicate your net fiscal result before @@ -747,6 +747,7 @@ gérer: titre: Manage my business heure: hour heures: hours +imprimer: Print impôt: tax impôt sur le revenu: income tax indemnité: benefit diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 08116023b..91cd1c0d9 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -298,8 +298,9 @@ function Results() { >

      - Aide à la déclaration {emoji('📄')} + Aide à la déclaration + {emoji('📄')}

      {onGoingComputation && (

      @@ -337,10 +338,8 @@ function Results() { {!onGoingComputation && (
      -
      )} From 381e66dd445f61ddc41acf1cefe475f204dd46cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 4 Mar 2020 14:47:08 +0100 Subject: [PATCH 10/23] =?UTF-8?q?Mise=20=C3=A0=20jour=20du=20wording?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../pages/Gérer/AideDéclarationIndépendants.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 91cd1c0d9..2497f4d0a 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -110,12 +110,14 @@ export default function AideDéclarationIndépendant() { Il ne vous concerne pas si vous êtes dans un des cas suivants :

        -
      • vous êtes une profession libérale réglementée
      • +
      • + vous exercez une activité libérale relevant d’un régime de + retraite des professions libérales +
      • vous êtes gérants de société relevant de l’impôt sur les sociétés
      • vous avez opté pour le régime micro-fiscal
      • -
      • vous êtes une profession libérale cotisant à la CIPAV
      • votre entreprise est domiciliée dans les DOM
      From 0382baa0bc62e552749083256220ace83448a856 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Wed, 26 Feb 2020 15:35:09 +0100 Subject: [PATCH 11/23] =?UTF-8?q?=F0=9F=8E=A8=20WIP:=20R=C3=A9capitulatif?= =?UTF-8?q?=20aide=20d=C3=A9claration=20ind=C3=A9pendants?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package.json | 1 + source/locales/en.yaml | 4 +++- .../Gérer/AideDéclarationIndépendants.tsx | 21 ++++++++++++----- ...ideDéclarationIndépendantsRécapitulatif.tsx | 23 +++++++++++++++++++ .../mon-entreprise.fr/pages/Gérer/Home.tsx | 2 +- .../mon-entreprise.fr/pages/Gérer/index.tsx | 13 ++++++++++- source/sites/mon-entreprise.fr/sitePaths.ts | 14 +++++++---- yarn.lock | 7 ++++++ 8 files changed, 72 insertions(+), 13 deletions(-) create mode 100644 source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx diff --git a/package.json b/package.json index bc460ccc8..2a8783906 100644 --- a/package.json +++ b/package.json @@ -53,6 +53,7 @@ "react-router-dom": "^5.1.1", "react-spring": "=8.0.27", "react-syntax-highlighter": "^10.1.1", + "react-to-print": "^2.5.1", "react-transition-group": "^2.2.1", "react-virtualized": "^9.20.0", "react-virtualized-select": "^3.1.3", diff --git a/source/locales/en.yaml b/source/locales/en.yaml index bfaab4e64..8f4c25166 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -872,7 +872,9 @@ path: exemples: /examples index: /documentation gérer: - déclaration-indépendant: /declaration-aid-independent + déclaration-indépendant: + index: /declaration-aid-independent + récapitulatif: /summary embaucher: /hiring index: /manage sécuritéSociale: /social-security diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 2497f4d0a..9cf32e46c 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -4,16 +4,17 @@ import 'Components/TargetSelection.css' import Warning from 'Components/ui/WarningBlock' import { ScrollToTop } from 'Components/utils/Scroll' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' +import { SitePathsContext } from 'Components/utils/withSitePaths' import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' -import React, { useCallback, useEffect, useState } from 'react' +import React, { useCallback, useContext, useEffect, useState } from 'react' import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' import Skeleton from 'react-loading-skeleton' import { useDispatch, useSelector } from 'react-redux' +import { Link } from 'react-router-dom' import { RootState } from 'Reducers/rootReducer' import { - analysisWithDefaultsSelector, flatRulesSelector, nextStepsSelector, ruleAnalysisSelector, @@ -40,6 +41,7 @@ const simulationConfig = { }, 'unités par défaut': ['€/an'] } + const lauchComputationWhenResultsInViewport = () => { const dottedName = 'dirigeant . rémunération totale' const [resultsRef, resultsInViewPort] = useDisplayOnIntersecting({ @@ -70,7 +72,6 @@ const lauchComputationWhenResultsInViewport = () => { export default function AideDéclarationIndépendant() { const dispatch = useDispatch() - const analysis = useSelector(analysisWithDefaultsSelector) const rules = useSelector(flatRulesSelector) const company = useSelector( (state: RootState) => state.inFranceApp.existingCompany @@ -281,7 +282,6 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { onChange={update} value={currentValue} /> - {/* */} ) @@ -293,6 +293,7 @@ function Results() { ) const onGoingComputation = !results.filter(node => node.nodeValue != null) .length + const sitePaths = useContext(SitePathsContext) return (
      + + {emoji('📋')} Récapitulatif + +
      )} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx new file mode 100644 index 000000000..e104c4555 --- /dev/null +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -0,0 +1,23 @@ +import React, { Component } from 'react' +import { Link } from 'react-router-dom' +import { getSessionStorage } from '../../../../utils' +import { constructLocalizedSitePath } from '../../sitePaths' + +type ProviderProps = { + situation +} + +export class AideDéclarationIndépendantsRécapitulatif extends Component< + ProviderProps +> { + render() { + const lang = getSessionStorage()?.getItem('lang') + const sitePaths = constructLocalizedSitePath(lang ? lang : 'fr') + return ( + <> + Retour +

      Aide à la déclaration de revenus au titre de l'année 2019

      + + ) + } +} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 6fd819813..428a72adc 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -96,7 +96,7 @@ export default function SocialSecurity() {
      {emoji('✍')}
      diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx index 56de1a4fc..930e30e0f 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx @@ -2,9 +2,12 @@ import { ScrollToTop } from 'Components/utils/Scroll' import { SitePathsContext } from 'Components/utils/withSitePaths' import React, { useContext } from 'react' import { Trans } from 'react-i18next' +import { useSelector } from 'react-redux' import { Route, Switch } from 'react-router' import { NavLink, useLocation } from 'react-router-dom' +import { situationSelector } from 'Selectors/analyseSelectors' import AideDéclarationIndépendant from './AideDéclarationIndépendants' +import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendantsRécapitulatif' import Embaucher from './Embaucher' import Home from './Home' import SécuritéSociale from './SécuritéSociale' @@ -12,6 +15,7 @@ import SécuritéSociale from './SécuritéSociale' export default function Gérer() { const sitePaths = useContext(SitePathsContext) const location = useLocation() + const situation = useSelector(situationSelector) return ( <> @@ -33,9 +37,16 @@ export default function Gérer() { /> + ( + + )} + /> ) diff --git a/source/sites/mon-entreprise.fr/sitePaths.ts b/source/sites/mon-entreprise.fr/sitePaths.ts index f23f6fe52..e9b7324de 100644 --- a/source/sites/mon-entreprise.fr/sitePaths.ts +++ b/source/sites/mon-entreprise.fr/sitePaths.ts @@ -89,10 +89,16 @@ export const constructLocalizedSitePath = (language: string) => { index: t('path.gérer.index', '/gérer'), embaucher: t('path.gérer.embaucher', '/embaucher'), sécuritéSociale: t('path.gérer.sécuritéSociale', '/sécurité-sociale'), - déclarationIndépendant: t( - 'path.gérer.déclaration-indépendant', - '/aide-declaration-independants' - ) + déclarationIndépendant: { + index: t( + 'path.gérer.déclaration-indépendant.index', + '/aide-declaration-independants' + ), + récapitulatif: t( + 'path.gérer.déclaration-indépendant.récapitulatif', + '/récapitulatif' + ) + } }, simulateurs: { index: t('path.simulateurs.index', '/simulateurs'), diff --git a/yarn.lock b/yarn.lock index c53ee2f20..e00ecab2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9044,6 +9044,13 @@ react-test-renderer@^16.0.0-0: react-is "^16.8.6" scheduler "^0.18.0" +react-to-print@^2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/react-to-print/-/react-to-print-2.5.1.tgz#eaaff4248910f179788ab15a593ceb3e07527b8c" + integrity sha512-HhuujwTmuGYB+yBq52y1pwiv0aooaLTqksMJ6cGKWy+aT+x6zponitZd54swiAeILndxJ7oO+X1F/93XyfT/JA== + dependencies: + prop-types "^15.7.2" + react-transition-group@^1.2.0: version "1.2.1" resolved "https://registry.yarnpkg.com/react-transition-group/-/react-transition-group-1.2.1.tgz#e11f72b257f921b213229a774df46612346c7ca6" From 362b621477787ba46254bcda880c04f3bae60808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Fri, 28 Feb 2020 15:52:50 +0100 Subject: [PATCH 12/23] =?UTF-8?q?Aide=20d=C3=A9claration=20des=20ind=C3=A9?= =?UTF-8?q?pendants:=20page=20r=C3=A9capitulatif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/locales/en.yaml | 1 + .../Gérer/AideDéclarationIndépendants.tsx | 101 +---------- ...ideDéclarationIndépendantsRécapitulatif.tsx | 157 +++++++++++++++--- ...DéclarationIndépendantsSimulationConfig.tsx | 17 ++ .../AideDéclarationIndépentantsResult.tsx | 89 ++++++++++ .../mon-entreprise.fr/pages/Gérer/index.tsx | 35 ++-- .../pages/Simulateurs/ArtisteAuteur.tsx | 1 + 7 files changed, 271 insertions(+), 130 deletions(-) create mode 100644 source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx create mode 100644 source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx diff --git a/source/locales/en.yaml b/source/locales/en.yaml index 8f4c25166..a8ed8099d 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -102,6 +102,7 @@ Responsabilité limitée: Limited liability Ressources utiles: Helpful resources Retour: Back Retour à la création: Back to creation +Retour à ma déclaration: Back to my statement 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) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 9cf32e46c..68ddde21d 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -1,18 +1,12 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' -import RuleLink from 'Components/RuleLink' import 'Components/TargetSelection.css' import Warning from 'Components/ui/WarningBlock' import { ScrollToTop } from 'Components/utils/Scroll' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' -import { SitePathsContext } from 'Components/utils/withSitePaths' -import { formatValue } from 'Engine/format' import InputComponent from 'Engine/RuleInput' -import React, { useCallback, useContext, useEffect, useState } from 'react' -import emoji from 'react-easy-emoji' +import React, { useCallback, useEffect, useState } from 'react' import { Trans } from 'react-i18next' -import Skeleton from 'react-loading-skeleton' import { useDispatch, useSelector } from 'react-redux' -import { Link } from 'react-router-dom' import { RootState } from 'Reducers/rootReducer' import { flatRulesSelector, @@ -24,24 +18,10 @@ import styled from 'styled-components' import { DottedName, Rule } from 'Types/rule' import Animate from 'Ui/animate' import { useRule } from '../Simulateurs/ArtisteAuteur' +import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' +import { Results } from './AideDéclarationIndépentantsResult' import { CompanySection } from './Home' -const simulationConfig = { - objectifs: [ - 'aide déclaration revenu indépendant 2019 . revenu net fiscal', - 'aide déclaration revenu indépendant 2019 . CSG déductible', - 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', - 'aide déclaration revenu indépendant 2019 . CFP', - 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', - 'aide déclaration revenu indépendant 2019 . assiette sociale' - ] as Array, - situation: { - dirigeant: 'indépendant', - 'aide déclaration revenu indépendant 2019': true - }, - 'unités par défaut': ['€/an'] -} - const lauchComputationWhenResultsInViewport = () => { const dottedName = 'dirigeant . rémunération totale' const [resultsRef, resultsInViewPort] = useDisplayOnIntersecting({ @@ -191,7 +171,7 @@ export default function AideDéclarationIndépendant() {
      - +
      )} @@ -287,79 +267,6 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { ) } -function Results() { - const results = simulationConfig.objectifs.map(dottedName => - useRule(dottedName) - ) - const onGoingComputation = !results.filter(node => node.nodeValue != null) - .length - const sitePaths = useContext(SitePathsContext) - return ( -
      -

      - - Aide à la déclaration - - {emoji('📄')} -

      - {onGoingComputation && ( -

      - - - Calcul en cours... - - -

      - )} - <> - - {results.map(r => ( - -

      - {r.title} {r.summary} -

      - {r.description &&

      {r.description}

      } -

      - - {r.nodeValue != null ? ( - formatValue({ - value: r.nodeValue || 0, - language: 'fr', - unit: '€', - maximumFractionDigits: 0 - }) - ) : ( - - )} - -

      -
      - ))} - {!onGoingComputation && ( -
      - - - {emoji('📋')} Récapitulatif - - -
      - )} -
      - -
      - ) -} - const FormBlock = styled.section` max-width: 500px; padding: 0; diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx index e104c4555..dadd533c3 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -1,23 +1,142 @@ -import React, { Component } from 'react' -import { Link } from 'react-router-dom' -import { getSessionStorage } from '../../../../utils' -import { constructLocalizedSitePath } from '../../sitePaths' +import CompanyDetails from 'Components/CompanyDetails' +import { formatValue } from 'Engine/format' +import React from 'react' +import { Trans } from 'react-i18next' +import { useSelector } from 'react-redux' +import { RootState } from 'Reducers/rootReducer' +import { situationSelector } from 'Selectors/analyseSelectors' +import { Results } from './AideDéclarationIndépentantsResult' -type ProviderProps = { - situation +export function AideDéclarationIndépendantsRécapitulatif() { + const situation = useSelector(situationSelector) + const siren = useSelector( + (state: RootState) => state.inFranceApp.existingCompany?.siren + ) + + return ( + <> +

      + Aide à la déclaration de revenus au titre de l'année 2019 +

      + +

      + Ce document atteste de votre bonne foi concernant votre déclaration + selon les éléments transmis. +

      + +

      + Récapitulatif +

      + + + + {siren && } + + + + + + {!situation[ + "situation personnelle . domiciliation fiscale à l'étranger" + ] && ( + <> + + + + + + + )} + + + + + + + + + + + + + + ) } -export class AideDéclarationIndépendantsRécapitulatif extends Component< - ProviderProps -> { - render() { - const lang = getSessionStorage()?.getItem('lang') - const sitePaths = constructLocalizedSitePath(lang ? lang : 'fr') - return ( - <> - Retour -

      Aide à la déclaration de revenus au titre de l'année 2019

      - - ) - } +type SimpleFieldProps = { + label?: string + dottedName: string + unit?: string +} +function SimpleField({ label, dottedName, unit }: SimpleFieldProps) { + const situation = useSelector(situationSelector) + const value = situation[dottedName] + return value ? ( +

      + + {label} + {' '} + + {value !== null && + unit === '€' && + ' : ' + + formatValue({ + value: value || 0, + language: 'fr', + unit: '€', + maximumFractionDigits: 0 + })} + + {value !== null && unit === 'text' && ' : ' + value} + +

      + ) : ( + <> + ) } diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx new file mode 100644 index 000000000..c9874776f --- /dev/null +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx @@ -0,0 +1,17 @@ +import { DottedName } from 'Types/rule' + +export const simulationConfig = { + objectifs: [ + 'aide déclaration revenu indépendant 2019 . revenu net fiscal', + 'aide déclaration revenu indépendant 2019 . CSG déductible', + 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', + 'aide déclaration revenu indépendant 2019 . CFP', + 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', + 'aide déclaration revenu indépendant 2019 . assiette sociale' + ] as Array, + situation: { + dirigeant: 'indépendant', + 'aide déclaration revenu indépendant 2019': true + }, + 'unités par défaut': ['€/an'] +} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx new file mode 100644 index 000000000..768b135bc --- /dev/null +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx @@ -0,0 +1,89 @@ +import RuleLink from 'Components/RuleLink' +import { SitePathsContext } from 'Components/utils/withSitePaths' +import { formatValue } from 'Engine/format' +import React, { useContext } from 'react' +import emoji from 'react-easy-emoji' +import { Trans } from 'react-i18next' +import Skeleton from 'react-loading-skeleton' +import { Link } from 'react-router-dom' +import Animate from 'Ui/animate' +import { useRule } from '../Simulateurs/ArtisteAuteur' +import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' + +type ResultsProp = { + récapitulatif: boolean +} +export function Results({ récapitulatif }: ResultsProp) { + const results = simulationConfig.objectifs.map(dottedName => + useRule(dottedName) + ) + const onGoingComputation = !results.filter(node => node.nodeValue != null) + .length + const sitePaths = useContext(SitePathsContext) + return ( +
      +

      + + Aide à la déclaration + + {emoji('📄')} +

      + {onGoingComputation && ( +

      + + + Calcul en cours... + + +

      + )} + <> + + {results.map(r => ( + +

      + {r.title} {r.summary} +

      + {r.description &&

      {r.description}

      } +

      + + {r.nodeValue != null ? ( + formatValue({ + value: r.nodeValue || 0, + language: 'fr', + unit: '€', + maximumFractionDigits: 0 + }) + ) : ( + + )} + +

      +
      + ))} + {!onGoingComputation && ( +
      + {récapitulatif && ( + + {emoji('📋')} Récapitulatif + + )} + +
      + )} +
      + +
      + ) +} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx index 930e30e0f..c8bfab0b3 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx @@ -2,10 +2,8 @@ import { ScrollToTop } from 'Components/utils/Scroll' import { SitePathsContext } from 'Components/utils/withSitePaths' import React, { useContext } from 'react' import { Trans } from 'react-i18next' -import { useSelector } from 'react-redux' import { Route, Switch } from 'react-router' import { NavLink, useLocation } from 'react-router-dom' -import { situationSelector } from 'Selectors/analyseSelectors' import AideDéclarationIndépendant from './AideDéclarationIndépendants' import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendantsRécapitulatif' import Embaucher from './Embaucher' @@ -15,19 +13,30 @@ import SécuritéSociale from './SécuritéSociale' export default function Gérer() { const sitePaths = useContext(SitePathsContext) const location = useLocation() - const situation = useSelector(situationSelector) return ( <>
      - - ← Retour à mon activité - + {location.pathname === + '/gérer/aide-declaration-independants/récapitulatif' ? ( + + ← Retour à ma déclaration + + ) : ( + + ← Retour à mon activité + + )}
      @@ -43,9 +52,7 @@ export default function Gérer() { /> ( - - )} + component={AideDéclarationIndépendantsRécapitulatif} /> diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx index 639bd760a..5d9dd0866 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx @@ -25,6 +25,7 @@ import Animate from 'Ui/animate' export function useRule(dottedName: DottedName) { const analysis = useSelector(analysisWithDefaultsSelector) + console.log(analysis) const getRule = getRuleFromAnalysis(analysis) return getRule(dottedName) } From 45598312b44a589ea38a598f24f751c9b28582cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Fri, 28 Feb 2020 16:30:34 +0100 Subject: [PATCH 13/23] =?UTF-8?q?Aide=20d=C3=A9claration=20des=20ind=C3=A9?= =?UTF-8?q?pendants:=20impression?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/locales/en.yaml | 2 ++ ...ideDéclarationIndépendantsRécapitulatif.tsx | 10 ++++---- .../AideDéclarationIndépentantsResult.tsx | 24 +++++++++++++------ .../pages/Simulateurs/ArtisteAuteur.tsx | 1 - 4 files changed, 24 insertions(+), 13 deletions(-) diff --git a/source/locales/en.yaml b/source/locales/en.yaml index a8ed8099d..5a8c3cc94 100644 --- a/source/locales/en.yaml +++ b/source/locales/en.yaml @@ -4,6 +4,7 @@ <0>Oui: <0>Yes A quoi servent mes cotisations ?: What's included in my contributions? Accueil: Home +Aide à la déclaration de revenus au titre de l'année 2019: Help with your 2019 income tax return Alors: Then Année d'activité: Years of activity Assimilé salarié: '"Assimilé-salarié"' @@ -107,6 +108,7 @@ 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 +Récapitulatif: Summary Rémunération du dirigeant: Director's remuneration Répartition du chiffre d'affaires: Breakdown of turnover Résultat: Result diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx index dadd533c3..fe8b60d16 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -1,6 +1,6 @@ import CompanyDetails from 'Components/CompanyDetails' import { formatValue } from 'Engine/format' -import React from 'react' +import React, { useRef } from 'react' import { Trans } from 'react-i18next' import { useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' @@ -12,9 +12,9 @@ export function AideDéclarationIndépendantsRécapitulatif() { const siren = useSelector( (state: RootState) => state.inFranceApp.existingCompany?.siren ) - + const componentRef = useRef(null) return ( - <> +

      Aide à la déclaration de revenus au titre de l'année 2019

      @@ -104,8 +104,8 @@ export function AideDéclarationIndépendantsRécapitulatif() { dottedName={'dirigeant . indépendant . revenus étrangers'} /> - - + +
      ) } diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx index 768b135bc..463379f4b 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx @@ -6,14 +6,16 @@ import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' import Skeleton from 'react-loading-skeleton' import { Link } from 'react-router-dom' +import ReactToPrint from 'react-to-print' import Animate from 'Ui/animate' import { useRule } from '../Simulateurs/ArtisteAuteur' import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' type ResultsProp = { récapitulatif: boolean + componentRef?: any } -export function Results({ récapitulatif }: ResultsProp) { +export function Results({ récapitulatif, componentRef }: ResultsProp) { const results = simulationConfig.objectifs.map(dottedName => useRule(dottedName) ) @@ -74,12 +76,20 @@ export function Results({ récapitulatif }: ResultsProp) { {emoji('📋')} Récapitulatif )} - + + {!récapitulatif && ( + ( + + )} + content={() => componentRef.current} + /> + )}
      )} diff --git a/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx b/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx index 5d9dd0866..639bd760a 100644 --- a/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx +++ b/source/sites/mon-entreprise.fr/pages/Simulateurs/ArtisteAuteur.tsx @@ -25,7 +25,6 @@ import Animate from 'Ui/animate' export function useRule(dottedName: DottedName) { const analysis = useSelector(analysisWithDefaultsSelector) - console.log(analysis) const getRule = getRuleFromAnalysis(analysis) return getRule(dottedName) } From 9d5ff9cfd0fcd3fbb4b44177e17cb19c3c3c073c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Tue, 3 Mar 2020 10:17:56 +0100 Subject: [PATCH 14/23] =?UTF-8?q?=F0=9F=90=9B=20Corrige=20le=20r=C3=A9capi?= =?UTF-8?q?tulatif?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AideDéclarationIndépendantsRécapitulatif.tsx | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx index fe8b60d16..044d63afe 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -12,6 +12,7 @@ export function AideDéclarationIndépendantsRécapitulatif() { const siren = useSelector( (state: RootState) => state.inFranceApp.existingCompany?.siren ) + console.log(situation) const componentRef = useRef(null) return (
      @@ -41,7 +42,6 @@ export function AideDéclarationIndépendantsRécapitulatif() { dottedName={ "aide déclaration revenu indépendant 2019 . nature de l'activité" } - unit="text" /> {label} @@ -129,14 +129,12 @@ function SimpleField({ label, dottedName, unit }: SimpleFieldProps) { formatValue({ value: value || 0, language: 'fr', - unit: '€', + unit: unit, maximumFractionDigits: 0 })} - {value !== null && unit === 'text' && ' : ' + value} + {value !== null && unit === undefined && ' : ' + value}

      - ) : ( - <> - ) + ) : null } From aa98507ee531fe2ae75c4fa46a805098ea18a0a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Tue, 3 Mar 2020 11:45:46 +0100 Subject: [PATCH 15/23] =?UTF-8?q?=F0=9F=8E=A8=20Possibilit=C3=A9=20d'impri?= =?UTF-8?q?mer=20directement?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Gérer/AideDéclarationIndépendants.tsx | 11 ++++-- ...ideDéclarationIndépendantsRécapitulatif.tsx | 3 +- .../AideDéclarationIndépentantsResult.tsx | 35 +++++++++---------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx index 68ddde21d..3df4034bb 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx @@ -4,7 +4,7 @@ import Warning from 'Components/ui/WarningBlock' import { ScrollToTop } from 'Components/utils/Scroll' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' import InputComponent from 'Engine/RuleInput' -import React, { useCallback, useEffect, useState } from 'react' +import React, { useCallback, useEffect, useRef, useState } from 'react' import { Trans } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' @@ -18,6 +18,7 @@ import styled from 'styled-components' import { DottedName, Rule } from 'Types/rule' import Animate from 'Ui/animate' import { useRule } from '../Simulateurs/ArtisteAuteur' +import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendantsRécapitulatif' import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' import { Results } from './AideDéclarationIndépentantsResult' import { CompanySection } from './Home' @@ -63,6 +64,7 @@ export default function AideDéclarationIndépendant() { updateIncome, currentIncome } = lauchComputationWhenResultsInViewport() + const printComponentRef = useRef(null) return ( <> @@ -171,7 +173,12 @@ export default function AideDéclarationIndépendant() {
      - +
      +
      + +
      +
      +
      )} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx index 044d63afe..acbffc81f 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -12,8 +12,8 @@ export function AideDéclarationIndépendantsRécapitulatif() { const siren = useSelector( (state: RootState) => state.inFranceApp.existingCompany?.siren ) - console.log(situation) const componentRef = useRef(null) + return (

      @@ -116,7 +116,6 @@ type SimpleFieldProps = { function SimpleField({ label, dottedName, unit }: SimpleFieldProps) { const situation = useSelector(situationSelector) const value = situation[dottedName] - console.log(situation) return value && (value === 'oui' || unit === '€') ? (

      diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx index 463379f4b..a1b8294a0 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx @@ -69,27 +69,24 @@ export function Results({ récapitulatif, componentRef }: ResultsProp) { {!onGoingComputation && (

      {récapitulatif && ( - - {emoji('📋')} Récapitulatif - + <> + + {emoji('📋')} Récapitulatif + + )} - {!récapitulatif && ( - ( - - )} - content={() => componentRef.current} - /> - )} + ( + + )} + content={() => componentRef.current} + />
      )} From c2fe6b89a98aaa7f7749a9aa450889c5fb0be6a0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Guillois?= Date: Tue, 3 Mar 2020 15:48:11 +0100 Subject: [PATCH 16/23] =?UTF-8?q?Aide=20=C3=A0=20la=20d=C3=A9claration:=20?= =?UTF-8?q?r=C3=A9capitulatif=20sous=20forme=20de=20questions?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ideDéclarationIndépendantsRécapitulatif.tsx | 47 +++++++------------ 1 file changed, 16 insertions(+), 31 deletions(-) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx index acbffc81f..6d0cf2b26 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx @@ -12,6 +12,7 @@ export function AideDéclarationIndépendantsRécapitulatif() { const siren = useSelector( (state: RootState) => state.inFranceApp.existingCompany?.siren ) + console.log(useSelector((state: RootState) => state.rules)) const componentRef = useRef(null) return ( @@ -29,43 +30,30 @@ export function AideDéclarationIndépendantsRécapitulatif() { Récapitulatif

      - + {siren && } - + {!situation[ "situation personnelle . domiciliation fiscale à l'étranger" ] && ( <> - + @@ -73,7 +61,6 @@ export function AideDéclarationIndépendantsRécapitulatif() { )} @@ -85,23 +72,18 @@ export function AideDéclarationIndépendantsRécapitulatif() { /> - +
      @@ -115,24 +97,27 @@ type SimpleFieldProps = { } function SimpleField({ label, dottedName, unit }: SimpleFieldProps) { const situation = useSelector(situationSelector) + const rules = useSelector((state: RootState) => state.rules) const value = situation[dottedName] return value && (value === 'oui' || unit === '€') ? (

      - {label} - {' '} + {rules.find(rule => rule.dottedName === dottedName)?.question} + - {value !== null && - unit === '€' && - ' : ' + +   + + {value !== null && unit === '€' ? ( formatValue({ value: value || 0, language: 'fr', unit: unit, maximumFractionDigits: 0 - })} - - {value !== null && unit === undefined && ' : ' + value} + }) + ) : ( + <>{value} + )} +

      ) : null From 4be1982a3ad94393c0589c97213821d681aa56e7 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 9 Mar 2020 14:51:07 +0100 Subject: [PATCH 17/23] =?UTF-8?q?:fire:=20simplifie=20la=20page=20d'impres?= =?UTF-8?q?sion=20de=20l'aide=20=C3=A0=20la=20d=C3=A9claration=20des=20TI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit en attendant la correction des bugs sur la page de récapitulatif, on imprime la page courante : plus simple et moins de maintenance à faire en cas de modifications --- source/components/conversation/Explicable.css | 6 +- .../components/conversation/conversation.css | 9 + .../Result.tsx} | 14 +- .../Récapitulatif.tsx} | 2 +- .../AideDéclarationIndépendant/config.yaml | 11 ++ .../index.tsx} | 161 ++++++++++-------- ...DéclarationIndépendantsSimulationConfig.tsx | 17 -- .../mon-entreprise.fr/pages/Gérer/index.tsx | 4 +- 8 files changed, 127 insertions(+), 97 deletions(-) rename source/sites/mon-entreprise.fr/pages/Gérer/{AideDéclarationIndépentantsResult.tsx => AideDéclarationIndépendant/Result.tsx} (92%) rename source/sites/mon-entreprise.fr/pages/Gérer/{AideDéclarationIndépendantsRécapitulatif.tsx => AideDéclarationIndépendant/Récapitulatif.tsx} (97%) create mode 100644 source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml rename source/sites/mon-entreprise.fr/pages/Gérer/{AideDéclarationIndépendants.tsx => AideDéclarationIndépendant/index.tsx} (74%) delete mode 100644 source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx diff --git a/source/components/conversation/Explicable.css b/source/components/conversation/Explicable.css index c24b99343..99449e3dd 100644 --- a/source/components/conversation/Explicable.css +++ b/source/components/conversation/Explicable.css @@ -1,3 +1,8 @@ +@media print { + .explicable { + display: none; + } +} .explicable .icon { display: inline-block; padding: 0.15rem 0.6rem; @@ -12,7 +17,6 @@ filter: brightness(90%); } - .variantLeaf .explicable .icon img { width: 1.5em !important; height: 1.5em !important; diff --git a/source/components/conversation/conversation.css b/source/components/conversation/conversation.css index 95ee57578..30425fee8 100644 --- a/source/components/conversation/conversation.css +++ b/source/components/conversation/conversation.css @@ -125,6 +125,15 @@ border: 1px solid var(--color); color: var(--textColor) !important; } +@media print { + .step label.userAnswerButton.selected { + border: none; + } + + .step label.userAnswerButton:not(.selected) { + display: none; + } +} @media (hover) { .step label.userAnswerButton:hover:not(.selected) { background: var(--color); diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx similarity index 92% rename from source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx rename to source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx index a1b8294a0..d8f21c55b 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépentantsResult.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx @@ -5,14 +5,13 @@ import React, { useContext } from 'react' import emoji from 'react-easy-emoji' import { Trans } from 'react-i18next' import Skeleton from 'react-loading-skeleton' -import { Link } from 'react-router-dom' import ReactToPrint from 'react-to-print' import Animate from 'Ui/animate' -import { useRule } from '../Simulateurs/ArtisteAuteur' -import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' +import { useRule } from '../../Simulateurs/ArtisteAuteur' +import simulationConfig from './config.yaml' type ResultsProp = { - récapitulatif: boolean + // récapitulatif: boolean componentRef?: any } export function Results({ récapitulatif, componentRef }: ResultsProp) { @@ -66,9 +65,12 @@ export function Results({ récapitulatif, componentRef }: ResultsProp) {

      ))} +

      + Résultats calculés le {new Date().toLocaleDateString()} +

      {!onGoingComputation && (
      - {récapitulatif && ( + {/* {récapitulatif && ( <> - )} + )} */} ( diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx similarity index 97% rename from source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx rename to source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx index 6d0cf2b26..5d8890d50 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsRécapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx @@ -5,7 +5,7 @@ import { Trans } from 'react-i18next' import { useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' import { situationSelector } from 'Selectors/analyseSelectors' -import { Results } from './AideDéclarationIndépentantsResult' +import { Results } from './Result' export function AideDéclarationIndépendantsRécapitulatif() { const situation = useSelector(situationSelector) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml new file mode 100644 index 000000000..a73ae3d23 --- /dev/null +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/config.yaml @@ -0,0 +1,11 @@ +objectifs: + - aide déclaration revenu indépendant 2019 . revenu net fiscal + - aide déclaration revenu indépendant 2019 . CSG déductible + - aide déclaration revenu indépendant 2019 . cotisations sociales déductible + - aide déclaration revenu indépendant 2019 . CFP + - aide déclaration revenu indépendant 2019 . total charges sociales déductible + - aide déclaration revenu indépendant 2019 . assiette sociale +situation: + dirigeant: 'indépendant' + aide déclaration revenu indépendant 2019: true +unités par défaut: ['€/an'] diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx similarity index 74% rename from source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx rename to source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx index 3df4034bb..2139f0cba 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendants.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx @@ -17,11 +17,10 @@ import { import styled from 'styled-components' import { DottedName, Rule } from 'Types/rule' import Animate from 'Ui/animate' -import { useRule } from '../Simulateurs/ArtisteAuteur' -import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendantsRécapitulatif' -import { simulationConfig } from './AideDéclarationIndépendantsSimulationConfig' -import { Results } from './AideDéclarationIndépentantsResult' -import { CompanySection } from './Home' +import { useRule } from '../../Simulateurs/ArtisteAuteur' +import { CompanySection } from '../Home' +import simulationConfig from './config.yaml' +import { Results } from './Result' const lauchComputationWhenResultsInViewport = () => { const dottedName = 'dirigeant . rémunération totale' @@ -66,7 +65,7 @@ export default function AideDéclarationIndépendant() { } = lauchComputationWhenResultsInViewport() const printComponentRef = useRef(null) return ( - <> +

      Aide à la déclaration de revenus au titre de l'année 2019

      @@ -76,34 +75,43 @@ export default function AideDéclarationIndépendant() { connaître le montant des charges sociales déductibles à partir de votre résultat net fiscal.

      - -

      - Cet outil vous concerne si vous êtes dans tous les cas suivants : -

      -
        -
      • - vous cotisez au régime général des travailleurs indépendants -
      • -
      • - votre entreprise est au régime réel d'imposition et en - comptabilité d'engagement -
      • -
      -

      - Il ne vous concerne pas si vous êtes dans un des cas suivants : -

      -
        -
      • - vous exercez une activité libérale relevant d’un régime de - retraite des professions libérales -
      • -
      • - vous êtes gérants de société relevant de l’impôt sur les sociétés -
      • -
      • vous avez opté pour le régime micro-fiscal
      • -
      • votre entreprise est domiciliée dans les DOM
      • -
      -
      +
      + +

      + Cet outil vous concerne si vous êtes dans tous les cas suivants : +

      +
        +
      • + vous cotisez au régime général des travailleurs indépendants +
      • +
      • + votre entreprise est au régime réel d'imposition et en + comptabilité d'engagement +
      • +
      +

      + Il ne vous concerne pas si vous êtes dans un des cas suivants : +

      +
        +
      • + vous exercez une activité libérale relevant d’un régime de + retraite des professions libérales +
      • +
      • + vous êtes gérants de société relevant de l’impôt sur les + sociétés +
      • +
      • vous avez opté pour le régime micro-fiscal
      • +
      • votre entreprise est domiciliée dans les DOM
      • +
      +
      +

      Quel est votre résultat fiscal en 2019 ?
      Charges sociales et exonérations fiscales non incluses @@ -129,15 +137,23 @@ export default function AideDéclarationIndépendant() {

      Entreprise et activité

      - {!company && ( -

      - - Facultatif : Vous pouvez renseigner votre - entreprise pour pré-remplir le formulaire - -

      - )} - +
      + {!company && ( +

      + + Facultatif : Vous pouvez renseigner votre + entreprise pour pré-remplir le formulaire + +

      + )} + +
      {/* PLNR */} @@ -173,16 +189,11 @@ export default function AideDéclarationIndépendant() {
      -
      -
      - -
      -
      - +
      )} - +

      ) } @@ -226,7 +237,7 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { const evaluatedRule = useSelector((state: RootState) => { return ruleAnalysisSelector(state, { dottedName }) }) - const rules = useSelector((state: RootState) => state.rules) + const rules = useSelector(flatRulesSelector) const value = useSelector(situationSelector)[dottedName] const [currentValue, setCurrentValue] = useState(value) const dispatchValue = useCallback( @@ -252,25 +263,34 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { return null } return ( - - -
      -

      {question ?? evaluatedRule.question}

      -

      {summary ?? evaluatedRule.summary}

      -
      - -
      -
      +
      + + +
      +

      {question ?? evaluatedRule.question}

      +

      {summary ?? evaluatedRule.summary}

      +
      + +
      +
      +
      ) } @@ -284,6 +304,7 @@ const FormBlock = styled.section` h2 { border-top: 1px solid var(--lighterColor); padding-top: 2rem; + break-after: avoid; } select, diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx deleted file mode 100644 index c9874776f..000000000 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendantsSimulationConfig.tsx +++ /dev/null @@ -1,17 +0,0 @@ -import { DottedName } from 'Types/rule' - -export const simulationConfig = { - objectifs: [ - 'aide déclaration revenu indépendant 2019 . revenu net fiscal', - 'aide déclaration revenu indépendant 2019 . CSG déductible', - 'aide déclaration revenu indépendant 2019 . cotisations sociales déductible', - 'aide déclaration revenu indépendant 2019 . CFP', - 'aide déclaration revenu indépendant 2019 . total charges sociales déductible', - 'aide déclaration revenu indépendant 2019 . assiette sociale' - ] as Array, - situation: { - dirigeant: 'indépendant', - 'aide déclaration revenu indépendant 2019': true - }, - 'unités par défaut': ['€/an'] -} diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx index c8bfab0b3..260b6dd40 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/index.tsx @@ -4,8 +4,8 @@ import React, { useContext } from 'react' import { Trans } from 'react-i18next' import { Route, Switch } from 'react-router' import { NavLink, useLocation } from 'react-router-dom' -import AideDéclarationIndépendant from './AideDéclarationIndépendants' -import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendantsRécapitulatif' +import AideDéclarationIndépendant from './AideDéclarationIndépendant/index' +import { AideDéclarationIndépendantsRécapitulatif } from './AideDéclarationIndépendant/Récapitulatif' import Embaucher from './Embaucher' import Home from './Home' import SécuritéSociale from './SécuritéSociale' From 0c84aaedf1eb80f9bfe4ee89e592b2e99f9d6f03 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 9 Mar 2020 16:51:10 +0100 Subject: [PATCH 18/23] :bug: fix #897 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le moteur et les règles permettent désormais une valeure négative pour le revenu total des indépendants --- publicode/rules/dirigeant.yaml | 12 ++++++------ source/engine/evaluation.js | 4 ++-- source/engine/mecanisms.js | 15 ++++----------- .../simulations-rémunération-dirigeant.yaml | 1 + 4 files changed, 13 insertions(+), 19 deletions(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index 24be6af56..e92c4ee46 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -48,7 +48,10 @@ dirigeant . auto-entrepreneur: L'auto-entreprise est une entreprise individuelle simplifiée. À l'origine connu sous l'appellation « auto-entrepreneur », le régime de « micro-entrepreneur » est un régime de travailleur indépendant créé pour simplifier la gestion administrative, notamment en remplaçant toutes les cotisations sociales par un prélèvement unique mensuel. dirigeant . auto-entrepreneur . base des cotisations: - formule: entreprise . chiffre d'affaires + formule: + encadrement: + plancher: 0 + valeur: entreprise . chiffre d'affaires contrôles: - si: base des cotisations > plafond message: Le seuil annuel de chiffre d'affaires pour le régime de l'auto-entreprise est dépassé. [En savoir plus](/documentation/dirigeant/auto‑entrepreneur/plafond) @@ -417,11 +420,7 @@ dirigeant . indépendant . cotisations et contributions . exonérations . ACRE . plafond: 100% dirigeant . indépendant . revenu net de cotisations: - formule: - allègement: - assiette: revenu professionnel - abattement: cotisations et contributions . CSG et CRDS .non déductible - + formule: revenu professionnel - cotisations et contributions . CSG et CRDS .non déductible résumé: Avant déduction de l'impôt sur le revenu question: Quel revenu avant impôt voulez-vous toucher ? description: Il s'agit du revenu net de cotisations et de charges, avant le paiement de l'impôt sur le revenu. @@ -437,6 +436,7 @@ dirigeant . indépendant . revenu professionnel: - revenu net après impôt - entreprise . chiffre d'affaires - entreprise . chiffre d'affaires minimum + valeurs négatives possibles: oui dirigeant . indépendant . assiette des cotisations: unité par défaut: €/an diff --git a/source/engine/evaluation.js b/source/engine/evaluation.js index 22fc0cf4c..4baa7719c 100644 --- a/source/engine/evaluation.js +++ b/source/engine/evaluation.js @@ -127,11 +127,11 @@ export let defaultNode = nodeValue => ({ export let parseObject = (recurse, objectShape, value) => { let recurseOne = key => defaultValue => { - if (!value[key] && !defaultValue) + if (value[key] == null && !defaultValue) throw new Error( `Il manque une clé '${key}' dans ${JSON.stringify(value)} ` ) - return value[key] ? recurse(value[key]) : defaultValue + return value[key] != null ? recurse(value[key]) : defaultValue } let transforms = fromPairs(map(k => [k, recurseOne(k)], keys(objectShape))) return evolve(transforms, objectShape) diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index 00cf1e7c2..6760aa2a2 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -202,10 +202,10 @@ let doInversion = (oldCache, situationGate, parsedRules, v, dottedName) => { return v } - // si fx renvoie null pour une valeur numérique standard, disons 1000, on peut + // si fx renvoie null pour une valeur numérique standard, disons 2000, on peut // considérer que l'inversion est impossible du fait de variables manquantes // TODO fx peut être null pour certains x, et valide pour d'autres : on peut implémenter ici le court-circuit - let attempt = fx(1000) + let attempt = fx(2000) if (attempt.nodeValue == null) { return attempt } @@ -217,19 +217,12 @@ let doInversion = (oldCache, situationGate, parsedRules, v, dottedName) => { let y = fx(x) return y.nodeValue - fixedObjectiveValue }, - 0.1, - 1000000000, + v['valeurs négatives possibles'] === 'oui' ? -1000000 : 0, + 10000000, tolerance, 10 ) - // Si aucune des valeurs ne fonctionne, on test la valeur 0. - if (nodeValue == null) { - attempt = fx(0) - if (Math.abs(attempt.nodeValue - fixedObjectiveValue) < 0.1) { - nodeValue = 0 - } - } return { nodeValue, missingVariables: {}, diff --git a/test/regressions/simulations-rémunération-dirigeant.yaml b/test/regressions/simulations-rémunération-dirigeant.yaml index 7ef40d592..0b5960dc0 100644 --- a/test/regressions/simulations-rémunération-dirigeant.yaml +++ b/test/regressions/simulations-rémunération-dirigeant.yaml @@ -1,4 +1,5 @@ échelle de rémunération: + - dirigeant . rémunération totale: 100 - dirigeant . rémunération totale: 1000 - dirigeant . rémunération totale: 2000 - dirigeant . rémunération totale: 5000 From f5b02542b20f34b434b8533a86181316a03b1946 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 9 Mar 2020 17:14:41 +0100 Subject: [PATCH 19/23] =?UTF-8?q?=E2=9C=85=20ajoute=20un=20cas=20de=20test?= =?UTF-8?q?=20pour=20les=20dirigeant=20=C3=A0=20tr=C3=A8s=20faible=20reven?= =?UTF-8?q?us=20(100=E2=82=AC/an)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- publicode/rules/dirigeant.yaml | 5 +- .../__snapshots__/simulations.jest.js.snap | 48 +++++++++++-------- 2 files changed, 28 insertions(+), 25 deletions(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index e92c4ee46..c58d8d0a2 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -48,10 +48,7 @@ dirigeant . auto-entrepreneur: L'auto-entreprise est une entreprise individuelle simplifiée. À l'origine connu sous l'appellation « auto-entrepreneur », le régime de « micro-entrepreneur » est un régime de travailleur indépendant créé pour simplifier la gestion administrative, notamment en remplaçant toutes les cotisations sociales par un prélèvement unique mensuel. dirigeant . auto-entrepreneur . base des cotisations: - formule: - encadrement: - plancher: 0 - valeur: entreprise . chiffre d'affaires + formule: entreprise . chiffre d'affaires contrôles: - si: base des cotisations > plafond message: Le seuil annuel de chiffre d'affaires pour le régime de l'auto-entreprise est dépassé. [En savoir plus](/documentation/dirigeant/auto‑entrepreneur/plafond) diff --git a/test/regressions/__snapshots__/simulations.jest.js.snap b/test/regressions/__snapshots__/simulations.jest.js.snap index 755ea72be..4101373df 100644 --- a/test/regressions/__snapshots__/simulations.jest.js.snap +++ b/test/regressions/__snapshots__/simulations.jest.js.snap @@ -106,19 +106,21 @@ 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`] = `"[169,169,139,0,1,1]"`; +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 2`] = `"[738,738,323,0,2,2]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 2`] = `"[169,169,139,0,1,1]"`; -exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 3`] = `"[2446,2446,2588,2,5,6]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 3`] = `"[738,738,323,0,2,2]"`; -exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 4`] = `"[5291,5291,5306,4,10,12]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 4`] = `"[2446,2446,2588,2,5,6]"`; -exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 5`] = `"[10982,10982,10742,4,19,23]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 5`] = `"[5291,5291,5306,4,10,12]"`; -exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 6`] = `"[25971,28055,27050,4,46,59]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 6`] = `"[10982,10982,10742,4,19,23]"`; -exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 7`] = `"[46812,57017,52684,4,46,119]"`; +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 7`] = `"[25971,28055,27050,4,46,59]"`; + +exports[`calculate simulations-rémunération-dirigeant: Assimilé salarié - échelle de rémunération 8`] = `"[46812,57017,52684,4,46,119]"`; exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - ACRE 1`] = `"[9349,9349,2046,2,0,0]"`; @@ -140,19 +142,21 @@ exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - av exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - avec charges 2`] = `"[15480,15480,7163,4,14,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 1`] = `"[871,871,60,0,0,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 1`] = `"[87,87,6,0,0,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 2`] = `"[1742,1742,119,0,0,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 2`] = `"[871,871,60,0,0,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 3`] = `"[4354,4354,1023,1,0,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 3`] = `"[1742,1742,119,0,0,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 4`] = `"[8709,8709,2046,2,0,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 4`] = `"[4354,4354,1023,1,0,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 5`] = `"[17417,17417,4093,3,8,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 5`] = `"[8709,8709,2046,2,0,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 6`] = `"[43543,43543,10232,4,20,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 6`] = `"[17417,17417,4093,3,8,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 7`] = `"[84367,87085,20465,4,40,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 7`] = `"[43543,43543,10232,4,20,0]"`; + +exports[`calculate simulations-rémunération-dirigeant: Auto-entrepreneur - échelle de rémunération 8`] = `"[84367,87085,20465,4,40,0]"`; exports[`calculate simulations-rémunération-dirigeant: Indépendant - ACRE 1`] = `"[8215,8215,6018,4,21,0]"`; @@ -174,19 +178,21 @@ exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec ch exports[`calculate simulations-rémunération-dirigeant: Indépendant - avec charges 2`] = `"[13769,13769,10084,4,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 1`] = `"[0,0,0,3,21,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 1`] = `"[-1044,-1044,0,3,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 2`] = `"[616,616,470,3,21,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 2`] = `"[-225,-225,0,3,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 3`] = `"[3084,3084,2267,3,21,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 3`] = `"[616,616,470,3,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 4`] = `"[6795,6795,4977,4,21,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 4`] = `"[3084,3084,2267,3,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 5`] = `"[13769,13769,10084,4,21,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 5`] = `"[6795,6795,4977,4,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 6`] = `"[30434,33997,24912,4,48,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 6`] = `"[13769,13769,10084,4,21,0]"`; -exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 7`] = `"[56273,69895,36431,4,56,0]"`; +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 7`] = `"[30434,33997,24912,4,48,0]"`; + +exports[`calculate simulations-rémunération-dirigeant: Indépendant - échelle de rémunération 8`] = `"[56273,69895,36431,4,56,0]"`; exports[`calculate simulations-salarié: JEI 1`] = `"[3440,0,0,3000,2353,2187]"`; From 7e337f6724f820530f0b386867c4effca319b7e4 Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 9 Mar 2020 17:18:31 +0100 Subject: [PATCH 20/23] =?UTF-8?q?ajoute=20les=20questions=20au=20simulateu?= =?UTF-8?q?r=20ind=C3=A9pendant?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/components/simulationConfigs/indépendant.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/source/components/simulationConfigs/indépendant.yaml b/source/components/simulationConfigs/indépendant.yaml index d720a4e4f..13e230a36 100644 --- a/source/components/simulationConfigs/indépendant.yaml +++ b/source/components/simulationConfigs/indépendant.yaml @@ -23,14 +23,6 @@ questions: liste noire: - entreprise . charges # TODO : quand les questions indeps sont validés, enlever le block ci-dessous de la liste noire - - entreprise . catégorie d'activité . débit de tabac - - établissement . ZFU - - dirigeant . indépendant . cotisations et contributions . exonérations . âge - - dirigeant . indépendant . cotisations et contributions . cotisations . retraite complémentaire . taux spécifique PLNR - - dirigeant . indépendant . cotisations et contributions . exonérations . invalidité - - dirigeant . indépendant . revenus étrangers - - dirigeant . indépendant . IJSS - - situation personnelle . domiciliation fiscale à l'étranger non prioritaires: - entreprise . catégorie d'activité . débit de tabac - entreprise . ZFU From d88146ad0e0b03712e91fe5be478a4e56fd6872d Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Mon, 9 Mar 2020 17:46:00 +0100 Subject: [PATCH 21/23] :art: :fire: ajoute l'aide sur le formulaire dnrti MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit L'aide s'affiche désormais sous forme de modale, sur tous les simulateurs. Cela permet d'uniformiser le comportement, et d'avoir une meilleure expérience sur mobile --- source/components/conversation/Aide.tsx | 45 ++++++------------- .../components/conversation/Conversation.tsx | 4 +- source/components/conversation/Explicable.tsx | 34 +++++++------- source/engine/RuleInput.tsx | 2 +- .../AideDéclarationIndépendant/index.tsx | 14 ++++-- .../pages/Simulateurs/ArtisteAuteur.tsx | 4 +- 6 files changed, 45 insertions(+), 58 deletions(-) diff --git a/source/components/conversation/Aide.tsx b/source/components/conversation/Aide.tsx index 9bf82f2ed..00a889c0d 100644 --- a/source/components/conversation/Aide.tsx +++ b/source/components/conversation/Aide.tsx @@ -1,9 +1,8 @@ import { explainVariable } from 'Actions/actions' -import Animate from 'Components/ui/animate' +import Overlay from 'Components/Overlay' import { Markdown } from 'Components/utils/markdown' import { findRuleByDottedName } from 'Engine/rules' import React from 'react' -import emoji from 'react-easy-emoji' import { useDispatch, useSelector } from 'react-redux' import { RootState } from 'Reducers/rootReducer' import { flatRulesSelector } from 'Selectors/analyseSelectors' @@ -17,45 +16,29 @@ export default function Aide() { const stopExplaining = () => dispatch(explainVariable()) - if (!explained) return
      + if (!explained) return null let rule = findRuleByDottedName(flatRules, explained), text = rule.description, refs = rule.références return ( - +
      - {emoji('ℹ️')} - -
      -

      {rule.title}

      -

      - -

      - {refs && ( -
      - -
      - )} - -
      +

      {rule.title}

      +

      + +

      + {refs && ( +
      + +
      + )}
      -
      + ) } diff --git a/source/components/conversation/Conversation.tsx b/source/components/conversation/Conversation.tsx index b691d5d5d..489e71002 100644 --- a/source/components/conversation/Conversation.tsx +++ b/source/components/conversation/Conversation.tsx @@ -1,6 +1,6 @@ import { goToQuestion, validateStepWithValue } from 'Actions/actions' import QuickLinks from 'Components/QuickLinks' -import InputComponent from 'Engine/RuleInput' +import RuleInput from 'Engine/RuleInput' import { findRuleByDottedName } from 'Engine/rules' import React from 'react' import emoji from 'react-easy-emoji' @@ -44,7 +44,7 @@ export default function Conversation({ customEndMessages }: ConversationProps) { setDefault() } } - const DecoratedInputComponent = FormDecorator(InputComponent) + const DecoratedInputComponent = FormDecorator(RuleInput) return flatRules && nextSteps.length ? ( <> diff --git a/source/components/conversation/Explicable.tsx b/source/components/conversation/Explicable.tsx index a013e8f87..4f2d41c18 100644 --- a/source/components/conversation/Explicable.tsx +++ b/source/components/conversation/Explicable.tsx @@ -1,5 +1,4 @@ import { explainVariable } from 'Actions/actions' -import classNames from 'classnames' import { findRuleByDottedName } from 'Engine/rules' import React, { useContext } from 'react' import emoji from 'react-easy-emoji' @@ -25,23 +24,22 @@ export default function Explicable({ dottedName }: { dottedName: DottedName }) { //TODO montrer les variables de type 'une possibilité' - return dottedName === explained ? null : ( - { + tracker.push(['trackEvent', 'help', dottedName]) + dispatch(explainVariable(dottedName)) + e.preventDefault() + e.stopPropagation() + }} + css={` + margin-left: 0.3rem !important; + vertical-align: middle; + font-size: 110% !important; + `} > - { - tracker.push(['trackEvent', 'help', dottedName]) - dispatch(explainVariable(dottedName)) - e.preventDefault() - e.stopPropagation() - }} - > - {emoji('ℹ️')} - - + {emoji('ℹ️')} + ) } diff --git a/source/engine/RuleInput.tsx b/source/engine/RuleInput.tsx index 58944bd2a..c7ac8bc37 100644 --- a/source/engine/RuleInput.tsx +++ b/source/engine/RuleInput.tsx @@ -34,7 +34,7 @@ type Props = { // be displayed to get a user input through successive if statements // That's not great, but we won't invest more time until we have more diverse // input components and a better type system. -export default function InputComponent({ +export default function RuleInput({ rules, dottedName, onChange, diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx index 2139f0cba..45065568a 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx @@ -1,9 +1,11 @@ import { setSimulationConfig, updateSituation } from 'Actions/actions' +import Aide from 'Components/conversation/Aide' +import Explicable from 'Components/conversation/Explicable' import 'Components/TargetSelection.css' import Warning from 'Components/ui/WarningBlock' import { ScrollToTop } from 'Components/utils/Scroll' import useDisplayOnIntersecting from 'Components/utils/useDisplayOnIntersecting' -import InputComponent from 'Engine/RuleInput' +import RuleInput from 'Engine/RuleInput' import React, { useCallback, useEffect, useRef, useState } from 'react' import { Trans } from 'react-i18next' import { useDispatch, useSelector } from 'react-redux' @@ -122,7 +124,7 @@ export default function AideDéclarationIndépendant() {

      -
      + )}
      @@ -279,10 +282,13 @@ function SimpleField({ dottedName, question, summary }: SimpleFieldProps) { } `} > -

      {question ?? evaluatedRule.question}

      +

      + {question ?? evaluatedRule.question} + +

      {summary ?? evaluatedRule.summary}

      -
      - Date: Mon, 9 Mar 2020 18:23:48 +0100 Subject: [PATCH 22/23] :bug: correction de la ZFU --- publicode/rules/dirigeant.yaml | 2 +- publicode/rules/déclaration-revenu-indépendant.yaml | 4 ++++ source/engine/mecanisms.js | 2 +- .../pages/Gérer/AideDéclarationIndépendant/index.tsx | 5 +++++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/publicode/rules/dirigeant.yaml b/publicode/rules/dirigeant.yaml index c58d8d0a2..d32c392f6 100644 --- a/publicode/rules/dirigeant.yaml +++ b/publicode/rules/dirigeant.yaml @@ -1047,7 +1047,7 @@ dirigeant . indépendant . cotisations et contributions . exonérations . ZFU: plafond: recalcul: avec: - indépendant . revenu net de cotisations: 3042 heures/an * SMIC horaire + dirigeant . indépendant . revenu professionnel: 3042 heures/an * SMIC horaire dirigeant . indépendant . cotisations et contributions . exonérations . âge: question: Bénéficiez-vous du dispositif d'exonération "âge" diff --git a/publicode/rules/déclaration-revenu-indépendant.yaml b/publicode/rules/déclaration-revenu-indépendant.yaml index 1653d1fda..f5259b1d8 100644 --- a/publicode/rules/déclaration-revenu-indépendant.yaml +++ b/publicode/rules/déclaration-revenu-indépendant.yaml @@ -64,6 +64,10 @@ aide déclaration revenu indépendant 2019 . plafond sécurité sociale 2019: remplace: plafond sécurité sociale temps plein formule: 3377 €/mois +aide déclaration revenu indépendant 2019 . SMIC 2019: + remplace: SMIC horaire + formule: 10.03 €/heure + aide déclaration revenu indépendant 2019 . revenu net fiscal: titre: revenu net fiscal résumé: avant déduction des charges sociales et exonérations fiscales [A] diff --git a/source/engine/mecanisms.js b/source/engine/mecanisms.js index 6760aa2a2..50ae30c1e 100644 --- a/source/engine/mecanisms.js +++ b/source/engine/mecanisms.js @@ -482,7 +482,7 @@ export let mecanismProduct = (recurse, k, v) => { } } let mult = (base, rate, facteur, plafond) => - Math.min(base, plafond) * rate * facteur + Math.min(base, plafond === false ? Infinity : plafond) * rate * facteur const unit = inferUnit( '*', [assiette, taux, facteur].map(el => el.unit) diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx index 45065568a..ceda4c387 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/index.tsx @@ -174,6 +174,11 @@ export default function AideDéclarationIndépendant() { + + Date: Tue, 10 Mar 2020 10:54:09 +0100 Subject: [PATCH 23/23] =?UTF-8?q?:white=5Fcheck=5Fmark:=20met=20=C3=A0=20j?= =?UTF-8?q?our=20les=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- source/locales/rules-en.yaml | 3 +++ .../Gérer/AideDéclarationIndépendant/Result.tsx | 13 +------------ .../AideDéclarationIndépendant/Récapitulatif.tsx | 2 +- source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx | 3 ++- test/mécanismes/encadrement.yaml | 2 +- 5 files changed, 8 insertions(+), 15 deletions(-) diff --git a/source/locales/rules-en.yaml b/source/locales/rules-en.yaml index 3c79708ee..53cc0ff3d 100644 --- a/source/locales/rules-en.yaml +++ b/source/locales/rules-en.yaml @@ -20,6 +20,9 @@ aide déclaration revenu indépendant 2019 . CSG déductible: résumé.fr: '[B]' titre.en: '[automatic] deductible MSA' titre.fr: CSG déductible +aide déclaration revenu indépendant 2019 . SMIC 2019: + titre.en: '[automatic] MINIMUM WAGE 2019' + titre.fr: SMIC 2019 aide déclaration revenu indépendant 2019 . assiette sociale: résumé.en: '[automatic] for information [A - (B + C + D)].' résumé.fr: 'pour information [A - (B + C + D)]' diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx index d8f21c55b..e9184fbc7 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Result.tsx @@ -11,10 +11,9 @@ import { useRule } from '../../Simulateurs/ArtisteAuteur' import simulationConfig from './config.yaml' type ResultsProp = { - // récapitulatif: boolean componentRef?: any } -export function Results({ récapitulatif, componentRef }: ResultsProp) { +export function Results({ componentRef }: ResultsProp) { const results = simulationConfig.objectifs.map(dottedName => useRule(dottedName) ) @@ -70,16 +69,6 @@ export function Results({ récapitulatif, componentRef }: ResultsProp) {

      {!onGoingComputation && (
      - {/* {récapitulatif && ( - <> - - {emoji('📋')} Récapitulatif - - - )} */} ( diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx index 5d8890d50..0790f69d2 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/AideDéclarationIndépendant/Récapitulatif.tsx @@ -85,7 +85,7 @@ export function AideDéclarationIndépendantsRécapitulatif() { - +
      ) } diff --git a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx index 428a72adc..0d685837c 100644 --- a/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx +++ b/source/sites/mon-entreprise.fr/pages/Gérer/Home.tsx @@ -92,7 +92,8 @@ export default function SocialSecurity() {
      {company?.statutJuridique === 'EI' && - !company.isAutoEntrepreneur && ( + !company.isAutoEntrepreneur && + process.env.MASTER === false && (