From 50dee3a23065f2137ab7bc4fafd405517f54c15d Mon Sep 17 00:00:00 2001 From: Johan Girod Date: Thu, 2 Feb 2023 13:11:28 +0100 Subject: [PATCH] =?UTF-8?q?R=C3=A9pare=20les=20tests=20de=20non=20regressi?= =?UTF-8?q?on?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/artilleryio-config.yaml | 2 +- modele-social/règles/bénéficiaire.yaml | 4 +- modele-social/règles/dirigeant.yaml | 6 -- modele-social/règles/entreprise/activité.yaml | 1 + .../entreprise/catégorie-juridique.yaml | 5 +- .../règles/entreprise/imposition.yaml | 3 +- site/source/pages/Simulateurs/Dividendes.tsx | 24 ++------ .../pages/Simulateurs/configs/config.ts | 13 +++++ .../pages/Simulateurs/configs/dividendes.ts | 3 +- .../pages/Simulateurs/configs/indépendant.ts | 13 +++-- .../pages/Simulateurs/configs/salarié.ts | 2 +- .../cout-creation-entreprise/_config.ts | 16 +----- .../Simulateurs/impot-societe/_config.tsx | 33 +++++++++++ .../impot-societe/_simulationConfig.ts | 14 +++++ .../index.tsx} | 55 ++++++++++++------- site/source/pages/Simulateurs/metadata-src.ts | 26 ++------- site/source/pages/Simulateurs/metadata.tsx | 43 ++------------- .../simulations-impôt-société.test.ts | 7 +-- .../simulations-indépendant.test.ts | 1 - 19 files changed, 133 insertions(+), 138 deletions(-) create mode 100644 site/source/pages/Simulateurs/configs/config.ts create mode 100644 site/source/pages/Simulateurs/impot-societe/_config.tsx create mode 100644 site/source/pages/Simulateurs/impot-societe/_simulationConfig.ts rename site/source/pages/Simulateurs/{ImpôtSociété.tsx => impot-societe/index.tsx} (62%) diff --git a/api/artilleryio-config.yaml b/api/artilleryio-config.yaml index 1d98c9fd7..99d15dc1b 100644 --- a/api/artilleryio-config.yaml +++ b/api/artilleryio-config.yaml @@ -16,7 +16,7 @@ scenarios: ], "situation": { "dirigeant": "non", - "entreprise . catégorie juridique": "non", + "entreprise . catégorie juridique": "''", "entreprise . imposition": "non", "salarié . activité partielle": "non", "impôt . méthode de calcul . par défaut": { diff --git a/modele-social/règles/bénéficiaire.yaml b/modele-social/règles/bénéficiaire.yaml index 71e469f48..857b6727d 100644 --- a/modele-social/règles/bénéficiaire.yaml +++ b/modele-social/règles/bénéficiaire.yaml @@ -1,13 +1,13 @@ bénéficiaire: experimental: oui applicable si: entreprise . imposition . IS + valeur: non description: | Un bénéficiaire est un actionnaire dans une SAS ou un associé dans une SARL/EURL. Attention: nous ne prenons en compte ici que le cas de figure de l'associé unique (SASU et EURL). - valeur: non # [TODO] [dividendes-indep] bénéficiaire . compte courant d'associé: @@ -36,8 +36,6 @@ bénéficiaire . compte courant d'associé: Circulaire RSI C2014-001: https://www.secu-independants.fr/uploads/tx_rsirss/C2014-001.pdf bénéficiaire . dividendes: - valeur: oui - applicable si: entreprise . imposition = 'IS' bénéficiaire . dividendes . bruts: unité: €/an diff --git a/modele-social/règles/dirigeant.yaml b/modele-social/règles/dirigeant.yaml index ed2c7e07d..d78e66348 100644 --- a/modele-social/règles/dirigeant.yaml +++ b/modele-social/règles/dirigeant.yaml @@ -8,12 +8,6 @@ dirigeant . gérant minoritaire: dirigeant . régime social: experimental: oui - - non applicable si: - une de ces conditions: - - entreprise . catégorie juridique . SELARL #TODO NON IMPLEMENTE - - entreprise . catégorie juridique . SELAS #TODO NON IMPLEMENTE - - entreprise . catégorie juridique . autre variations: - si: entreprise . catégorie juridique . EI . auto-entrepreneur alors: "'auto-entrepreneur'" diff --git a/modele-social/règles/entreprise/activité.yaml b/modele-social/règles/entreprise/activité.yaml index b2f60a1fe..9355cbed5 100644 --- a/modele-social/règles/entreprise/activité.yaml +++ b/modele-social/règles/entreprise/activité.yaml @@ -103,6 +103,7 @@ entreprise . activités: Artisanale : {{ artisanale }} ; Libérale : {{ libérale }} ; Agricole : {{ agricole }} + par défaut: oui plusieurs possibilités: - artisanale - commerciale diff --git a/modele-social/règles/entreprise/catégorie-juridique.yaml b/modele-social/règles/entreprise/catégorie-juridique.yaml index f16d6b3d1..6ddbae76f 100644 --- a/modele-social/règles/entreprise/catégorie-juridique.yaml +++ b/modele-social/règles/entreprise/catégorie-juridique.yaml @@ -26,7 +26,6 @@ entreprise . catégorie juridique: note: On se base ici sur les catégories juridiques définies par l'INSEE références: Liste des catégories juridique de l'INSEE: https://www.insee.fr/fr/information/2028129 - # par défaut: "'SARL'" une possibilité: choix obligatoire: oui possibilités: @@ -58,6 +57,10 @@ entreprise . catégorie juridique . EI: par: "'micro-entreprise'" - règle: entreprise . imposition par: "'IR'" + - règle: entreprise . imposition . IR + par: oui + - règle: entreprise . imposition . IS + par: non par défaut: nom: par défaut experimental: oui diff --git a/modele-social/règles/entreprise/imposition.yaml b/modele-social/règles/entreprise/imposition.yaml index be41989bb..861e5edd3 100644 --- a/modele-social/règles/entreprise/imposition.yaml +++ b/modele-social/règles/entreprise/imposition.yaml @@ -5,15 +5,16 @@ entreprise . imposition: possibilités: - IR - IS + par défaut: variations: - si: une de ces conditions: - catégorie juridique . SARL . EURL + - catégorie juridique . SELARL . SELARL - catégorie juridique . EI alors: "'IR'" - sinon: "'IS'" - références: Comment seront imposés mes bénéfices ?: https://bpifrance-creation.fr/moment-de-vie/comment-seront-imposes-mes-benefices?block_id=186 Quelle imposition selon mon statut ?: https://www.economie.gouv.fr/entreprises/impot-revenu-impot-societe-statut diff --git a/site/source/pages/Simulateurs/Dividendes.tsx b/site/source/pages/Simulateurs/Dividendes.tsx index 91f64948d..08856b2af 100644 --- a/site/source/pages/Simulateurs/Dividendes.tsx +++ b/site/source/pages/Simulateurs/Dividendes.tsx @@ -38,20 +38,6 @@ export default function DividendesSimulation() { }> -
* { - margin-top: 0.6rem; - } - justify-content: center; - - @media (min-width: 590px) { - justify-content: space-between; - } - `} - >
@@ -110,12 +96,10 @@ const DividendesSimulationGoals = () => ( dottedName="impôt . foyer fiscal . revenu imposable . autres revenus imposables" /> - - - + ) diff --git a/site/source/pages/Simulateurs/configs/config.ts b/site/source/pages/Simulateurs/configs/config.ts new file mode 100644 index 000000000..f1b3300f6 --- /dev/null +++ b/site/source/pages/Simulateurs/configs/config.ts @@ -0,0 +1,13 @@ +import { ImmutableType } from '@/types/utils' + +import { PageConfig } from './types' + +// Replace type by commented line when we upgrade to typescript v5: +export function config< + // const Base extends ImmutableType + Base extends ImmutableType +>(base: ImmutableType & Base) { + return { + [base.id]: base, + } as ImmutableType<{ [k in Base['id']]: Base }> +} diff --git a/site/source/pages/Simulateurs/configs/dividendes.ts b/site/source/pages/Simulateurs/configs/dividendes.ts index 178ef2e56..d05ae6ffc 100644 --- a/site/source/pages/Simulateurs/configs/dividendes.ts +++ b/site/source/pages/Simulateurs/configs/dividendes.ts @@ -14,7 +14,8 @@ export const configDividendes: SimulationConfig = { 'unité par défaut': '€/an', situation: { bénéficiaire: 'oui', - salarié: 'non', + 'entreprise . catégorie juridique': "'SAS'", + 'entreprise . associés': "'unique'", 'entreprise . imposition': "'IS'", 'impôt . méthode de calcul': "'PFU'", 'dirigeant . rémunération . net . imposable': '0 €/an', diff --git a/site/source/pages/Simulateurs/configs/indépendant.ts b/site/source/pages/Simulateurs/configs/indépendant.ts index 051fa560f..5363fe4d0 100644 --- a/site/source/pages/Simulateurs/configs/indépendant.ts +++ b/site/source/pages/Simulateurs/configs/indépendant.ts @@ -43,7 +43,6 @@ export const configIndépendant: SimulationConfig = { "entreprise . chiffre d'affaires", 'entreprise . exercice . début', 'entreprise . exercice . fin', - 'entreprise . catégorie juridique', 'entreprise . imposition . régime', 'entreprise . activités', 'entreprise . activités . revenus mixtes', @@ -62,6 +61,7 @@ export const configIndépendant: SimulationConfig = { situation: { 'dirigeant . régime social': "'indépendant'", 'entreprise . imposition': "'IR'", + 'entreprise . catégorie juridique': "''", salarié: 'non', }, } @@ -69,19 +69,24 @@ export const configIndépendant: SimulationConfig = { export const configEntrepriseIndividuelle: SimulationConfig = { ...configIndépendant, situation: { - ...configIndépendant.situation, - 'entreprise . imposition': "'IR'", + 'entreprise . catégorie juridique': "'EI'", + 'entreprise . catégorie juridique . EI . auto-entrepreneur': 'non', }, } export const configEirl: SimulationConfig = { ...configIndépendant, + situation: { + 'entreprise . catégorie juridique': "'EI'", + 'entreprise . catégorie juridique . EI . auto-entrepreneur': 'non', + }, } export const configEurl: SimulationConfig = { ...configIndépendant, situation: { - ...configIndépendant.situation, + 'entreprise . catégorie juridique': "'SARL'", + 'entreprise . associés': "'unique'", 'entreprise . imposition': "'IS'", }, } diff --git a/site/source/pages/Simulateurs/configs/salarié.ts b/site/source/pages/Simulateurs/configs/salarié.ts index af2ec1d11..4487a1bb0 100644 --- a/site/source/pages/Simulateurs/configs/salarié.ts +++ b/site/source/pages/Simulateurs/configs/salarié.ts @@ -55,7 +55,7 @@ export const configSalarié: SimulationConfig = { 'unité par défaut': '€/mois', situation: { dirigeant: 'non', - 'entreprise . catégorie juridique': 'non', + 'entreprise . catégorie juridique': "''", 'entreprise . imposition': 'non', 'salarié . activité partielle': 'non', 'impôt . méthode de calcul . par défaut': { diff --git a/site/source/pages/Simulateurs/cout-creation-entreprise/_config.ts b/site/source/pages/Simulateurs/cout-creation-entreprise/_config.ts index be62f0ff1..45487a2dd 100644 --- a/site/source/pages/Simulateurs/cout-creation-entreprise/_config.ts +++ b/site/source/pages/Simulateurs/cout-creation-entreprise/_config.ts @@ -1,10 +1,8 @@ -import { ImmutableType } from '@/types/utils' - import CoutCreationEntreprise from '.' -import { PageConfig } from '../configs/types' +import { config } from '../configs/config' import { SimulatorsDataParams } from '../metadata' -export function configCoûtCréationEntreprise({ +export function coûtCréationEntrepriseConfig({ t, sitePaths, }: SimulatorsDataParams) { @@ -48,13 +46,3 @@ export function configCoûtCréationEntreprise({ // Remove this "as const" when we upgrade to typescript v5: } as const) } - -// Replace type by commented line when we upgrade to typescript v5: -function config< - // const Base extends ImmutableType - Base extends ImmutableType ->(base: ImmutableType & Base) { - return { - [base.id]: base, - } as ImmutableType<{ [k in Base['id']]: Base }> -} diff --git a/site/source/pages/Simulateurs/impot-societe/_config.tsx b/site/source/pages/Simulateurs/impot-societe/_config.tsx new file mode 100644 index 000000000..283c03180 --- /dev/null +++ b/site/source/pages/Simulateurs/impot-societe/_config.tsx @@ -0,0 +1,33 @@ +import ISSimulation, { SeoExplanations } from '.' +import { config } from '../configs/config' +import { SimulatorsDataParams } from '../metadata' +import ISSimulationConfig from './_simulationConfig' + +export function impôtSociétéConfig({ t, sitePaths }: SimulatorsDataParams) { + return config({ + id: 'coût-création-entreprise', + beta: true, + icône: '🗓', + tracking: 'impot-societe', + pathId: 'simulateurs.is', + iframePath: 'impot-societe', + meta: { + title: t('pages.simulateurs.is.meta.title', 'Impôt sur les sociétés'), + description: t( + 'pages.simulateurs.is.meta.description', + 'Calculez votre impôt sur les sociétés' + ), + color: '#E71D66', + }, + shortName: t('pages.simulateurs.is.meta.title', 'Impôt sur les sociétés'), + title: t( + 'pages.simulateurs.is.title', + "Simulateur d'impôt sur les sociétés" + ), + nextSteps: ['salarié', 'comparaison-statuts'], + path: sitePaths.simulateurs.is, + component: ISSimulation, + seoExplanations: SeoExplanations, + simulation: ISSimulationConfig, + }) +} diff --git a/site/source/pages/Simulateurs/impot-societe/_simulationConfig.ts b/site/source/pages/Simulateurs/impot-societe/_simulationConfig.ts new file mode 100644 index 000000000..c5e34a954 --- /dev/null +++ b/site/source/pages/Simulateurs/impot-societe/_simulationConfig.ts @@ -0,0 +1,14 @@ +import { SimulationConfig } from '../configs/types' + +const ISSimulationConfig: SimulationConfig = { + 'unité par défaut': '€/an', + situation: { + salarié: 'non', + 'entreprise . catégorie juridique': "''", + 'entreprise . imposition': "'IS'", + 'entreprise . imposition . IS . éligible taux réduit': 'oui', + 'entreprise . TVA . franchise de TVA': 'non', + }, +} + +export default ISSimulationConfig diff --git a/site/source/pages/Simulateurs/ImpôtSociété.tsx b/site/source/pages/Simulateurs/impot-societe/index.tsx similarity index 62% rename from site/source/pages/Simulateurs/ImpôtSociété.tsx rename to site/source/pages/Simulateurs/impot-societe/index.tsx index a66f5b9ba..ff7f61334 100644 --- a/site/source/pages/Simulateurs/ImpôtSociété.tsx +++ b/site/source/pages/Simulateurs/impot-societe/index.tsx @@ -9,31 +9,13 @@ import { SimulationGoal, SimulationGoals } from '@/components/Simulation' import RuleInput from '@/components/conversation/RuleInput' import Warning from '@/components/ui/WarningBlock' import { FromTop } from '@/components/ui/animate' -import useSimulationConfig from '@/components/utils/useSimulationConfig' +import { H2 } from '@/design-system/typography/heading' import { Body, Intro } from '@/design-system/typography/paragraphs' -import { SimulationConfig } from '@/reducers/rootReducer' import { situationSelector } from '@/selectors/simulationSelectors' -import { useSitePaths } from '@/sitePaths' -import { TrackPage } from '../../ATInternetTracking' - -const configIS = { - 'unité par défaut': '€/an', - situation: { - 'entreprise . imposition': "'IS'", - 'entreprise . imposition . IS . éligible taux réduit': 'oui', - 'entreprise . TVA . franchise de TVA': 'non', - }, -} as SimulationConfig +import { TrackPage } from '../../../ATInternetTracking' export default function ISSimulation() { - const { absoluteSitePaths } = useSitePaths() - - useSimulationConfig({ - path: absoluteSitePaths.simulateurs.is, - config: configIS, - }) - return ( <> ) } + +export const SeoExplanations = ( + +

Comment est calculé l’impôt sur les sociétés ?

+ + L’impôt sur les sociétés s’applique aux bénéfices réalisés par les + sociétés de capitaux (SA, SAS, SASU, SARL, etc.) et sur option facultative + pour certaines autres sociétés (EIRL, EURL, SNC, etc.). + + + Il est calculé sur la base des bénéfices réalisés en France au cours de + l’exercice comptable. La durée d’un exercice est normalement d’un an mais + il peut être plus court ou plus long (notamment en début d’activité ou à + la dissolution de l’entreprise). Dans ce cas le barème de l’impôt est + pro-ratisé en fonction de la durée de l’exercice, ce qui est pris en + compte dans le simulateur en modifiant les dates de début et de fin de + l’exercice. + +

Taux réduit et régimes spécifiques

+ + Les PME réalisant moins de 7,63 millions d’euros de chiffre d’affaires et + dont le capital est détenu à 75% par des personnes physiques bénéficient + d’un taux réduit d’impôt sur les sociétés. Ce taux est pris en compte sur + le simulateur et il n’est pour l’instant pas possible de simuler + l’inéligibilité aux taux réduits. + + + Enfin il existe des régimes d’impositions spécifiques avec des taux dédiés + pour certains types de plus-values (cession de titres, cession de + brevets). Ces régimes ne sont pas intégrés dans le simulateur. + +
+) diff --git a/site/source/pages/Simulateurs/metadata-src.ts b/site/source/pages/Simulateurs/metadata-src.ts index 1c0e05d4a..f4d53353a 100644 --- a/site/source/pages/Simulateurs/metadata-src.ts +++ b/site/source/pages/Simulateurs/metadata-src.ts @@ -1,7 +1,8 @@ import { ImmutableType } from '@/types/utils' import { PageConfig } from './configs/types' -import { configCoûtCréationEntreprise } from './cout-creation-entreprise/_config.js' +import { coûtCréationEntrepriseConfig } from './cout-creation-entreprise/_config.js' +import { impôtSociétéConfig } from './impot-societe/_config' import { SimulatorsDataParams } from './metadata' /** @@ -727,27 +728,7 @@ const getMetadataSrc = (params: SimulatorsDataParams) => { }, shortName: t('pages.simulateurs.pamc.shortname', 'PAMC'), }, - is: { - icône: '🗓', - tracking: 'impot-societe', - pathId: 'simulateurs.is', - iframePath: 'impot-societe', - meta: { - title: t('pages.simulateurs.is.meta.title', 'Impôt sur les sociétés'), - description: t( - 'pages.simulateurs.is.meta.description', - 'Calculez votre impôt sur les sociétés' - ), - color: '#E71D66', - }, - shortName: t('pages.simulateurs.is.meta.title', 'Impôt sur les sociétés'), - title: t( - 'pages.simulateurs.is.title', - "Simulateur d'impôt sur les sociétés" - ), - nextSteps: ['salarié', 'comparaison-statuts'], - }, dividendes: { icône: '🎩', tracking: 'dividendes', @@ -796,7 +777,8 @@ const getMetadataSrc = (params: SimulatorsDataParams) => { nextSteps: ['déclaration-charges-sociales-indépendant'], }, - ...configCoûtCréationEntreprise(params), + ...coûtCréationEntrepriseConfig(params), + ...impôtSociétéConfig(params), } as const // TODO: remove this Omit diff --git a/site/source/pages/Simulateurs/metadata.tsx b/site/source/pages/Simulateurs/metadata.tsx index 7e90115a6..2b351882f 100644 --- a/site/source/pages/Simulateurs/metadata.tsx +++ b/site/source/pages/Simulateurs/metadata.tsx @@ -26,7 +26,6 @@ import SchemeComparaisonPage from './ComparateurStatuts' import DividendesSimulation from './Dividendes' import ÉconomieCollaborative from './EconomieCollaborative' import ExonérationCovid from './ExonerationCovid' -import ISSimulation from './ImpôtSociété' import IndépendantSimulation, { EntrepriseIndividuelle, IndépendantPLSimulation, @@ -558,6 +557,7 @@ function getSimulatorsData(params: SimulatorsDataParams) { 'économie-collaborative': { ...pureSimulatorsData['économie-collaborative'], path: sitePaths.simulateurs.économieCollaborative.index, + beta: true, component: ÉconomieCollaborative, }, 'choix-statut': { @@ -639,46 +639,10 @@ function getSimulatorsData(params: SimulatorsDataParams) { simulation: configProfessionLibérale, component: PAMCHome, }, - is: { - ...pureSimulatorsData.is, - path: sitePaths.simulateurs.is, - component: ISSimulation, - seoExplanations: ( - -

Comment est calculé l’impôt sur les sociétés ?

- - L’impôt sur les sociétés s’applique aux bénéfices réalisés par les - sociétés de capitaux (SA, SAS, SASU, SARL, etc.) et sur option - facultative pour certaines autres sociétés (EIRL, EURL, SNC, etc.). - - - Il est calculé sur la base des bénéfices réalisés en France au cours - de l’exercice comptable. La durée d’un exercice est normalement d’un - an mais il peut être plus court ou plus long (notamment en début - d’activité ou à la dissolution de l’entreprise). Dans ce cas le - barème de l’impôt est pro-ratisé en fonction de la durée de - l’exercice, ce qui est pris en compte dans le simulateur en - modifiant les dates de début et de fin de l’exercice. - -

Taux réduit et régimes spécifiques

- - Les PME réalisant moins de 7,63 millions d’euros de chiffre - d’affaires et dont le capital est détenu à 75% par des personnes - physiques bénéficient d’un taux réduit d’impôt sur les sociétés. Ce - taux est pris en compte sur le simulateur et il n’est pour l’instant - pas possible de simuler l’inéligibilité aux taux réduits. - - - Enfin il existe des régimes d’impositions spécifiques avec des taux - dédiés pour certains types de plus-values (cession de titres, - cession de brevets). Ces régimes ne sont pas intégrés dans le - simulateur. - -
- ), - }, + dividendes: { ...pureSimulatorsData.dividendes, + beta: true, path: sitePaths.simulateurs.dividendes, simulation: configDividendes, component: DividendesSimulation, @@ -740,6 +704,7 @@ function getSimulatorsData(params: SimulatorsDataParams) { }, 'coût-création-entreprise': pureSimulatorsData['coût-création-entreprise'], + is: pureSimulatorsData['coût-création-entreprise'], } as const return data satisfies ImmutableType<{ [key: string]: Omit }> diff --git a/site/test/regressions/simulations-impôt-société.test.ts b/site/test/regressions/simulations-impôt-société.test.ts index 8a38e6cce..06da0973e 100644 --- a/site/test/regressions/simulations-impôt-société.test.ts +++ b/site/test/regressions/simulations-impôt-société.test.ts @@ -1,5 +1,7 @@ import { it } from 'vitest' +import ISSimulationConfig from '@/pages/Simulateurs/impot-societe/_simulationConfig' + import impotSocieteSituations from './simulations-impôt-société.yaml' import { runSimulations } from './utils' @@ -10,9 +12,6 @@ it('calculate simulations-impot-société', () => { 'entreprise . imposition . IS . montant', 'entreprise . imposition . IS . contribution sociale', ], - { - 'entreprise . imposition': "'IS'", - 'entreprise . imposition . IS . éligible taux réduit': 'oui', - } + ISSimulationConfig.situation ) }) diff --git a/site/test/regressions/simulations-indépendant.test.ts b/site/test/regressions/simulations-indépendant.test.ts index 2ddf02cf7..09ce1cc79 100644 --- a/site/test/regressions/simulations-indépendant.test.ts +++ b/site/test/regressions/simulations-indépendant.test.ts @@ -37,7 +37,6 @@ it('calculate simulations-indépendant', () => { "entreprise . activité . nature", "entreprise . activités", "entreprise . activités . commerciale", - "entreprise . catégorie juridique", "entreprise . charges", "entreprise . chiffre d'affaires", "entreprise . date de création",