From 68fda37b036b45120e089f47de0ecbd965f1b445 Mon Sep 17 00:00:00 2001 From: benoit-cty <6603048+benoit-cty@users.noreply.github.com> Date: Mon, 26 Sep 2022 23:07:57 +0200 Subject: [PATCH] Refacto IRState --- components/ir/articles/Articles.tsx | 14 +- components/ir/articles/alinea-4a/Alinea4a.tsx | 8 +- components/ir/articles/alinea3/Alinea3.tsx | 8 +- .../quotient-familial/plafonds/plafonds.tsx | 10 +- redux/actions/format-reforme.ts | 24 ++-- redux/actions/reforme-update-by-name.ts | 2 +- redux/reducers/parameters/amendement/ir.ts | 28 ++-- redux/reducers/parameters/base/ir.ts | 71 ++++++---- .../parameters/interfaces/ir-state.ts | 90 ++++++------ redux/reducers/parameters/plf/ir.ts | 129 +++++++++++------- 10 files changed, 219 insertions(+), 165 deletions(-) diff --git a/components/ir/articles/Articles.tsx b/components/ir/articles/Articles.tsx index b700eb1a..fe7199be 100644 --- a/components/ir/articles/Articles.tsx +++ b/components/ir/articles/Articles.tsx @@ -37,12 +37,12 @@ export class Articles extends React.Component<Props> { let { plf } = this.props; plf = plf ?? null; - const s = amendement.impot_revenu.bareme.seuils; - const t = amendement.impot_revenu.bareme.taux; - const bases = base.impot_revenu.bareme.seuils; - const baset = base.impot_revenu.bareme.taux; - const plfs = plf && plf.impot_revenu.bareme.seuils; - const plft = plf && plf.impot_revenu.bareme.taux; + const s = amendement.impot_revenu.bareme_ir_depuis_1945.seuils; + const t = amendement.impot_revenu.bareme_ir_depuis_1945.taux; + const bases = base.impot_revenu.bareme_ir_depuis_1945.seuils; + const baset = base.impot_revenu.bareme_ir_depuis_1945.taux; + const plfs = plf && plf.impot_revenu.bareme_ir_depuis_1945.seuils; + const plft = plf && plf.impot_revenu.bareme_ir_depuis_1945.taux; const nbt = s.length; const newTranche = i > 4; @@ -161,7 +161,7 @@ export class Articles extends React.Component<Props> { handleAddTranche, handleRemoveTranche, } = this.props; - const count = amendement.impot_revenu.bareme.seuils.length + 1; + const count = amendement.impot_revenu.bareme_ir_depuis_1945.seuils.length + 1; const articleTranches = fillArrayWith(count, this.gimmeIRPartsOfArticle); return ( diff --git a/components/ir/articles/alinea-4a/Alinea4a.tsx b/components/ir/articles/alinea-4a/Alinea4a.tsx index 05f293cf..af92f3e5 100644 --- a/components/ir/articles/alinea-4a/Alinea4a.tsx +++ b/components/ir/articles/alinea-4a/Alinea4a.tsx @@ -12,14 +12,14 @@ export class Alinea4a extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.decote.seuil_celib" + path="impot_revenu.calcul_impot_revenu.plaf_qf.decote.seuil_celib" /> {" "} € et {" "} <ParameterValues editable - path="impot_revenu.decote.taux" + path="impot_revenu.calcul_impot_revenu.plaf_qf.decote.taux" /> {" "} % de son montant pour les contribuables célibataires, divorcés ou @@ -27,13 +27,13 @@ export class Alinea4a extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.decote.seuil_couple" + path="impot_revenu.calcul_impot_revenu.plaf_qf.decote.seuil_couple" /> {" "} € et {" "} <ParameterValues - path="impot_revenu.decote.taux" + path="impot_revenu.calcul_impot_revenu.plaf_qf.decote.taux" /> {" "} % de son montant pour les contribuables soumis à imposition diff --git a/components/ir/articles/alinea3/Alinea3.tsx b/components/ir/articles/alinea3/Alinea3.tsx index 6101455c..4f6f7ff1 100644 --- a/components/ir/articles/alinea3/Alinea3.tsx +++ b/components/ir/articles/alinea3/Alinea3.tsx @@ -44,14 +44,14 @@ class Alinea3 extends PureComponent<PropsFromRedux> { <ParameterValues editable amendementInputSize="small" - path="impot_revenu.plafond_qf.abat_dom.taux_GuadMarReu" + path="impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.taux_GuadMarReu" /> {" "} %, dans la limite de {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.abat_dom.plaf_GuadMarReu" + path="impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.plaf_GuadMarReu" /> {" "} € pour les @@ -61,14 +61,14 @@ class Alinea3 extends PureComponent<PropsFromRedux> { <ParameterValues editable amendementInputSize="small" - path="impot_revenu.plafond_qf.abat_dom.taux_GuyMay" + path="impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.taux_GuyMay" /> {" "} %, dans la limite de {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.abat_dom.plaf_GuyMay" + path="impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.plaf_GuyMay" /> {" "} €, pour les contribuables domiciliés dans les départements de la diff --git a/components/ir/articles/quotient-familial/plafonds/plafonds.tsx b/components/ir/articles/quotient-familial/plafonds/plafonds.tsx index 8e06c60a..b7d02674 100644 --- a/components/ir/articles/quotient-familial/plafonds/plafonds.tsx +++ b/components/ir/articles/quotient-familial/plafonds/plafonds.tsx @@ -11,7 +11,7 @@ export class Plafonds extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.maries_ou_pacses" + path="impot_revenu.calcul_impot_revenu.plaf_qf.maries_ou_pacses" /> {" "} € par demi-part ou @@ -27,7 +27,7 @@ export class Plafonds extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.celib_enf" + path="impot_revenu.calcul_impot_revenu.plaf_qf.celib_enf" /> {" "} €. Lorsque les @@ -43,7 +43,7 @@ export class Plafonds extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.celib" + path="impot_revenu.calcul_impot_revenu.plaf_qf.celib" /> {" "} € ; @@ -55,7 +55,7 @@ export class Plafonds extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.reduc_postplafond" + path="impot_revenu.calcul_impot_revenu.plaf_qf.reduc_postplafond" /> {" "} € @@ -72,7 +72,7 @@ export class Plafonds extends PureComponent { {" "} <ParameterValues editable - path="impot_revenu.plafond_qf.reduc_postplafond_veuf" + path="impot_revenu.calcul_impot_revenu.plaf_qf.reduc_postplafond_veuf" /> {" "} € pour cette diff --git a/redux/actions/format-reforme.ts b/redux/actions/format-reforme.ts index b4709cd7..5a0c0224 100644 --- a/redux/actions/format-reforme.ts +++ b/redux/actions/format-reforme.ts @@ -3,16 +3,22 @@ import merge from "lodash/merge"; export function formatReforme(reforme) { return merge({}, reforme, { impot_revenu: { - bareme: { - taux: reforme.impot_revenu.bareme.taux.map(taux => taux / 100), + bareme_ir_depuis_1945: { + taux: reforme.impot_revenu.bareme_ir_depuis_1945.taux.map( + (taux) => taux / 100 + ), }, - decote: { - taux: reforme.impot_revenu.decote.taux / 100, - }, - plafond_qf: { - abat_dom: { - taux_GuadMarReu: reforme.impot_revenu.plafond_qf.abat_dom.taux_GuadMarReu / 100, - taux_GuyMay: reforme.impot_revenu.plafond_qf.abat_dom.taux_GuyMay / 100, + calcul_impot_revenu: { + plaf_qf: { + decote: { + taux: reforme.impot_revenu.calcul_impot_revenu.plaf_qf.decote.taux / 100, + }, + abat_dom: { + taux_GuadMarReu: + reforme.impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.taux_GuadMarReu / 100, + taux_GuyMay: + reforme.impot_revenu.calcul_impot_revenu.plaf_qf.abat_dom.taux_GuyMay / 100, + }, }, }, }, diff --git a/redux/actions/reforme-update-by-name.ts b/redux/actions/reforme-update-by-name.ts index 20c6ce5b..de9c6da5 100644 --- a/redux/actions/reforme-update-by-name.ts +++ b/redux/actions/reforme-update-by-name.ts @@ -11,7 +11,7 @@ const updateReformeByName = (name, prevValue) => { const shouldUpdateTaux = name.substring(0, 4) === "taux"; if (shouldUpdateTaux) type = "onUpdateReformeTaux"; - const shouldUpdatePlafond = name.substring(0, 10) === "plafond_qf"; + const shouldUpdatePlafond = name.substring(0, 10) === "plaf_qf"; if (shouldUpdatePlafond) type = "onUpdateReformePlafond"; return { name, type, value }; diff --git a/redux/reducers/parameters/amendement/ir.ts b/redux/reducers/parameters/amendement/ir.ts index 167e7a43..4f47e366 100644 --- a/redux/reducers/parameters/amendement/ir.ts +++ b/redux/reducers/parameters/amendement/ir.ts @@ -19,18 +19,18 @@ const changeValueArray = (arrayToChange, indexToChange, newValue) => { const updateTaux = (prevState: IRState, name, value): IRState => { const identifier = parseInt(name.substring(4), 10); - let list = get(prevState, "bareme.taux"); + let list = get(prevState, "bareme_ir_depuis_1945.taux"); list = changeValueArray(list, identifier, value); - set(prevState, "bareme.taux", list); + set(prevState, "bareme_ir_depuis_1945.taux", list); return prevState; }; const updateBareme = (prevState: IRState, name, value): IRState => { if (Number.isNaN(value)) return prevState; const identifier = parseInt(name.substring(5), 10); - let list = get(prevState, "bareme.seuils"); + let list = get(prevState, "bareme_ir_depuis_1945.seuils"); list = changeValueArray(list, identifier, parseInt(value, 10)); - set(prevState, "bareme.seuils", list); + set(prevState, "bareme_ir_depuis_1945.seuils", list); return prevState; }; @@ -44,34 +44,34 @@ const updateGenerique = (prevState: IRState, name, value): IRState => { }; const addTranche = (prevState: IRState): IRState => { - const seuils = get(prevState, "bareme.seuils"); + const seuils = get(prevState, "bareme_ir_depuis_1945.seuils"); const newbt = seuils.length + 1; const lastIndex = newbt - 2; - let lastSeuil = get(prevState, `bareme.seuils.${lastIndex}`); + let lastSeuil = get(prevState, `bareme_ir_depuis_1945.seuils.${lastIndex}`); lastSeuil += 1; const nextSeuil = seuils.concat(lastSeuil); - set(prevState, "bareme.seuils", nextSeuil); + set(prevState, "bareme_ir_depuis_1945.seuils", nextSeuil); - const taux = get(prevState, "bareme.taux"); - const lastTaux = get(prevState, `bareme.taux.${lastIndex}`); + const taux = get(prevState, "bareme_ir_depuis_1945.taux"); + const lastTaux = get(prevState, `bareme_ir_depuis_1945.taux.${lastIndex}`); const nextTaux = taux.concat(lastTaux); - set(prevState, "bareme.taux", nextTaux); + set(prevState, "bareme_ir_depuis_1945.taux", nextTaux); return prevState; }; const removeTranche = (prevState: IRState): IRState => { - const seuils = get(prevState, "bareme.seuils"); + const seuils = get(prevState, "bareme_ir_depuis_1945.seuils"); const newnbt = seuils.length - 1; if (newnbt <= 0) return prevState; const nextSeuils = seuils.slice(0, newnbt); - set(prevState, "bareme.seuils", nextSeuils); + set(prevState, "bareme_ir_depuis_1945.seuils", nextSeuils); - const taux = get(prevState, "bareme.taux"); + const taux = get(prevState, "bareme_ir_depuis_1945.taux"); const nextTaux = taux.slice(0, newnbt); - set(prevState, "bareme.taux", nextTaux); + set(prevState, "bareme_ir_depuis_1945.taux", nextTaux); return prevState; }; diff --git a/redux/reducers/parameters/base/ir.ts b/redux/reducers/parameters/base/ir.ts index ab13e77c..ef8f26ed 100644 --- a/redux/reducers/parameters/base/ir.ts +++ b/redux/reducers/parameters/base/ir.ts @@ -3,7 +3,7 @@ import { IRState } from "../interfaces"; export const BASE_IR_DEFAULT_STATE: IRState = { // Base = 2022 - bareme: { + bareme_ir_depuis_1945: { seuils: [10225, 26070, 74545, 160336], taux: [11, 30, 41, 45], }, @@ -21,45 +21,68 @@ export const BASE_IR_DEFAULT_STATE: IRState = { }, partsSelonNombrePAC: [ { - celibataire: 1, divorce: 1, mariesOuPacses: 2, veuf: 1, + celibataire: 1, + divorce: 1, + mariesOuPacses: 2, + veuf: 1, }, { - celibataire: 1.5, divorce: 1.5, mariesOuPacses: 2.5, veuf: 2.5, + celibataire: 1.5, + divorce: 1.5, + mariesOuPacses: 2.5, + veuf: 2.5, }, { - celibataire: 2, divorce: 2, mariesOuPacses: 3, veuf: 3, + celibataire: 2, + divorce: 2, + mariesOuPacses: 3, + veuf: 3, }, { - celibataire: 3, divorce: 3, mariesOuPacses: 4, veuf: 4, + celibataire: 3, + divorce: 3, + mariesOuPacses: 4, + veuf: 4, }, { - celibataire: 4, divorce: 4, mariesOuPacses: 5, veuf: 5, + celibataire: 4, + divorce: 4, + mariesOuPacses: 5, + veuf: 5, }, { - celibataire: 5, divorce: 5, mariesOuPacses: 6, veuf: 6, + celibataire: 5, + divorce: 5, + mariesOuPacses: 6, + veuf: 6, }, { - celibataire: 6, divorce: 6, mariesOuPacses: 7, veuf: 7, + celibataire: 6, + divorce: 6, + mariesOuPacses: 7, + veuf: 7, }, ], }, - decote: { - seuil_celib: 790, - seuil_couple: 1307, - taux: 45.25, - }, - plafond_qf: { - abat_dom: { - plaf_GuadMarReu: 2450, - plaf_GuyMay: 4050, - taux_GuadMarReu: 30, - taux_GuyMay: 40, + calcul_impot_revenu: { + plaf_qf: { + decote: { + seuil_celib: 790, + seuil_couple: 1307, + taux: 45.25, + }, + abat_dom: { + plaf_GuadMarReu: 2450, + plaf_GuyMay: 4050, + taux_GuadMarReu: 30, + taux_GuyMay: 40, + }, + celib: 951, + celib_enf: 3756, + maries_ou_pacses: 1592, + reduc_postplafond: 1587, + reduc_postplafond_veuf: 1772, }, - celib: 951, - celib_enf: 3756, - maries_ou_pacses: 1592, - reduc_postplafond: 1587, - reduc_postplafond_veuf: 1772, }, }; diff --git a/redux/reducers/parameters/interfaces/ir-state.ts b/redux/reducers/parameters/interfaces/ir-state.ts index 7bd9efd5..0b919793 100644 --- a/redux/reducers/parameters/interfaces/ir-state.ts +++ b/redux/reducers/parameters/interfaces/ir-state.ts @@ -1,52 +1,54 @@ /* eslint-disable camelcase */ export interface IRState { - bareme: { - seuils: number[]; - taux: number[]; - }; - decote: { - seuil_celib: number; - seuil_couple: number; - taux: number; - }; - plafond_qf: { - abat_dom: { - plaf_GuadMarReu: number; - plaf_GuyMay: number; - taux_GuadMarReu: number; - taux_GuyMay: number; + bareme_ir_depuis_1945: { + seuils: number[]; + taux: number[]; }; - celib: number; - celib_enf: number; - maries_ou_pacses: number; - reduc_postplafond: number; - reduc_postplafond_veuf: number; - }; - calculNombreParts: { - partsSelonNombrePAC: { - veuf: number; - mariesOuPacses: number; - celibataire: number; - divorce: number - }[]; - partsParPACAuDela: number; - partsParPACChargePartagee: { - zeroChargePrincipale: { - deuxPremiers: number; - suivants: number + calculNombreParts: { + partsSelonNombrePAC: { + veuf: number; + mariesOuPacses: number; + celibataire: number; + divorce: number; + }[]; + partsParPACAuDela: number; + partsParPACChargePartagee: { + zeroChargePrincipale: { + deuxPremiers: number; + suivants: number; + }; + unChargePrincipale: { + premier: number; + suivants: number; + }; + deuxOuPlusChargePrincipale: { + suivants: number; + }; }; - unChargePrincipale: { - premier: number; - suivants: number - }; - deuxOuPlusChargePrincipale: { - suivants: number + bonusParentIsole: { + auMoinsUnChargePrincipale: number; + zeroChargePrincipaleUnPartage: number; + zeroChargeprincipaleDeuxOuPlusPartage: number; }; }; - bonusParentIsole: { - auMoinsUnChargePrincipale: number; - zeroChargePrincipaleUnPartage: number; - zeroChargeprincipaleDeuxOuPlusPartage: number; + calcul_impot_revenu: { + plaf_qf: { + decote: { + seuil_celib: number; + seuil_couple: number; + taux: number; + }; + abat_dom: { + plaf_GuadMarReu: number; + plaf_GuyMay: number; + taux_GuadMarReu: number; + taux_GuyMay: number; + }; + celib: number; + celib_enf: number; + maries_ou_pacses: number; + reduc_postplafond: number; + reduc_postplafond_veuf: number; + }; }; - } } diff --git a/redux/reducers/parameters/plf/ir.ts b/redux/reducers/parameters/plf/ir.ts index 225fbb2b..1259dc45 100644 --- a/redux/reducers/parameters/plf/ir.ts +++ b/redux/reducers/parameters/plf/ir.ts @@ -4,64 +4,87 @@ import { IRState } from "../interfaces"; export const PLF_IR_DEFAULT_STATE: IRState = { // PLF 2023 désactivé tant que égal à la loi en vigueur // dans : redux/reducers/parameters/base/ir.ts - bareme: { - seuils: [10777, 27478, 78570, 168994], - taux: [11, 30, 41, 45], - }, - calculNombreParts: { - bonusParentIsole: { - auMoinsUnChargePrincipale: 0.5, - zeroChargePrincipaleUnPartage: 0.25, - zeroChargeprincipaleDeuxOuPlusPartage: 0.5, + bareme_ir_depuis_1945: { + seuils: [10777, 27478, 78570, 168994], + taux: [11, 30, 41, 45], }, - partsParPACAuDela: 1, - partsParPACChargePartagee: { - deuxOuPlusChargePrincipale: { suivants: 0.5 }, - unChargePrincipale: { premier: 0.25, suivants: 0.5 }, - zeroChargePrincipale: { deuxPremiers: 0.25, suivants: 0.5 }, - }, - partsSelonNombrePAC: [ - { - celibataire: 1, divorce: 1, mariesOuPacses: 2, veuf: 1, - }, - { - celibataire: 1.5, divorce: 1.5, mariesOuPacses: 2.5, veuf: 2.5, - }, - { - celibataire: 2, divorce: 2, mariesOuPacses: 3, veuf: 3, + calculNombreParts: { + bonusParentIsole: { + auMoinsUnChargePrincipale: 0.5, + zeroChargePrincipaleUnPartage: 0.25, + zeroChargeprincipaleDeuxOuPlusPartage: 0.5, }, - { - celibataire: 3, divorce: 3, mariesOuPacses: 4, veuf: 4, + partsParPACAuDela: 1, + partsParPACChargePartagee: { + deuxOuPlusChargePrincipale: { suivants: 0.5 }, + unChargePrincipale: { premier: 0.25, suivants: 0.5 }, + zeroChargePrincipale: { deuxPremiers: 0.25, suivants: 0.5 }, }, - { - celibataire: 4, divorce: 4, mariesOuPacses: 5, veuf: 5, - }, - { - celibataire: 5, divorce: 5, mariesOuPacses: 6, veuf: 6, - }, - { - celibataire: 6, divorce: 6, mariesOuPacses: 7, veuf: 7, + partsSelonNombrePAC: [ + { + celibataire: 1, + divorce: 1, + mariesOuPacses: 2, + veuf: 1, + }, + { + celibataire: 1.5, + divorce: 1.5, + mariesOuPacses: 2.5, + veuf: 2.5, + }, + { + celibataire: 2, + divorce: 2, + mariesOuPacses: 3, + veuf: 3, + }, + { + celibataire: 3, + divorce: 3, + mariesOuPacses: 4, + veuf: 4, + }, + { + celibataire: 4, + divorce: 4, + mariesOuPacses: 5, + veuf: 5, + }, + { + celibataire: 5, + divorce: 5, + mariesOuPacses: 6, + veuf: 6, + }, + { + celibataire: 6, + divorce: 6, + mariesOuPacses: 7, + veuf: 7, + }, + ], + }, + calcul_impot_revenu: { + plaf_qf: { + decote: { + seuil_celib: 833, + seuil_couple: 1378, + taux: 45.25, + }, + abat_dom: { + plaf_GuadMarReu: 2450, + plaf_GuyMay: 4050, + taux_GuadMarReu: 30, + taux_GuyMay: 40, + }, + celib: 1002, + celib_enf: 3959, + maries_ou_pacses: 1678, + reduc_postplafond: 1673, + reduc_postplafond_veuf: 1868, }, - ], - }, - decote: { - seuil_celib: 833, - seuil_couple: 1378, - taux: 45.25, - }, - plafond_qf: { - abat_dom: { - plaf_GuadMarReu: 2450, - plaf_GuyMay: 4050, - taux_GuadMarReu: 30, - taux_GuyMay: 40, }, - celib: 1002, - celib_enf: 3959, - maries_ou_pacses: 1678, - reduc_postplafond: 1673, - reduc_postplafond_veuf: 1868, - }, }; export const ir = (state = PLF_IR_DEFAULT_STATE) => state; -- GitLab