From 1fac31903e342c13970b4f7639feb1ad33eabae0 Mon Sep 17 00:00:00 2001 From: Victor Zeinstra Date: Wed, 28 Feb 2024 14:52:09 +0100 Subject: [PATCH] =?UTF-8?q?refactor:=20anciennet=C3=A9=20dans=20modele=20(?= =?UTF-8?q?#5601)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor: ancienneté dans modele * chore: fix tests * refactor: gestion des extraInfos * chore: clean * fix: missing args * chore: review * refactor: 5602 refacto simulateur ajout du dcorateur de salaire de rfrence sur lindemnit licenciement (#5612) * refactor: salaire reference pour indemnite licenciement * feat: implement salary ref legal * feat: implement special cases * fix: TU fail * chore: clean * chore: clean fake test * feat: 5622 refacto simulateur gestion des inligibilits sur les modles (#5624) * refactor: passer ineligibilite dans les modeles * refacot * fix: TU * fix: TU * chore: clean * chore: clean * chore: clean * chore: clean * chore: clean salary * chore: clean console log * chore: clean * chore: fix tests * fix: update ineligibility * fix: inaptitude medicale --------- Co-authored-by: Victor --------- Co-authored-by: Victor --------- Co-authored-by: Victor --- .../CommonSteps/Informations/store/store.ts | 45 ++-- .../store/store.ts | 15 +- .../1516-organismes-formation/store/store.ts | 16 +- .../store/validator.ts | 13 +- .../16-transports-routiers/store/store.ts | 18 +- .../1672-societes-assurances/store/store.ts | 16 +- .../store/store.ts | 13 +- .../store/store.ts | 16 +- .../agreements/2120-banques/store/store.ts | 13 +- .../2148-telecommunications/store/store.ts | 13 +- .../agreements/2596-coiffure/store/store.ts | 13 +- .../2609-batiment-etam/store/store.ts | 4 +- .../2614-travaux-public/store/store.ts | 4 +- .../Component.tsx | 1 - .../store/store.ts | 11 +- .../44-industries-chimiques/store/store.ts | 22 +- .../IndemniteLicenciement/agreements/index.ts | 4 - .../agreements/salary/1483.ts | 24 -- .../agreements/salary/1486.ts | 36 --- .../agreements/salary/1516.ts | 24 -- .../agreements/salary/1527.ts | 24 -- .../agreements/salary/16.ts | 54 ----- .../agreements/salary/1672.ts | 24 -- .../agreements/salary/1702.ts | 24 -- .../agreements/salary/1740.ts | 24 -- .../agreements/salary/2120.ts | 51 ----- .../agreements/salary/2148.ts | 24 -- .../agreements/salary/2596.ts | 31 --- .../agreements/salary/2609.ts | 24 -- .../agreements/salary/2614.ts | 24 -- .../agreements/salary/29.ts | 35 --- .../agreements/salary/3239.ts | 29 --- .../agreements/salary/413.ts | 22 -- .../agreements/salary/44.ts | 33 --- .../agreements/salary/573.ts | 33 --- .../agreements/salary/675.ts | 56 ----- .../agreements/salary/index.ts | 130 ----------- .../agreements/seniority/16.ts | 57 ----- .../agreements/seniority/1672.ts | 57 ----- .../agreements/seniority/3248.ts | 118 ---------- .../agreements/seniority/413.ts | 60 ----- .../agreements/seniority/650.ts | 116 ---------- .../agreements/seniority/index.ts | 111 --------- .../steps/Anciennete/store/eligibility.ts | 88 ------- .../steps/Anciennete/store/store.ts | 44 +++- .../steps/ContratTravail/index.tsx | 2 + .../steps/ContratTravail/store/eligibility.ts | 23 -- .../steps/ContratTravail/store/store.ts | 25 +- .../steps/ContratTravail/store/types.ts | 2 +- .../steps/Resultat/store/store.ts | 102 +++------ .../steps/Resultat/store/types.ts | 1 - .../steps/Salaires/store/store.ts | 27 +-- .../steps/Salaires/store/types.ts | 1 - .../src/outils/IndemniteLicenciement/store.ts | 9 +- .../src/outils/common/situationStore.ts | 36 +++ .../publicodes/indemnite-licenciement.ts | 40 ++-- .../indemnite-licenciement/calculate.spec.ts | 140 ++++++++++++ .../modeles/base/indemnite-licenciement.yaml | 20 +- .../src/modeles/base/index.ts | 1 + .../src/modeles/base/ineligibility.ts | 60 +++++ .../src/modeles/common/factory/index.ts | 1 + .../modeles/common/factory/ineligibility.ts | 23 ++ .../src/modeles/common/factory/salary.ts | 2 +- .../src/modeles/common/factory/seniority.ts | 17 +- .../src/modeles/common/seniority.ts | 37 +++ .../src/modeles/common/types/ineligibility.ts | 11 + .../src/modeles/common/types/salary.ts | 3 + .../src/modeles/common/types/seniority.ts | 4 + .../conventions/1090_automobiles/seniority.ts | 8 +- .../indemnite-licenciement/calculate.spec.ts | 49 ++++ .../indemnite-licenciement/indemnite.spec.ts | 2 - .../modeles/conventions/1404_sedima/index.ts | 1 + .../conventions/1404_sedima/ineligibility.ts | 40 ++++ .../conventions/1404_sedima/seniority.ts | 8 +- .../salary.ts | 13 ++ .../1486_bureaux_etudes_techniques/salary.ts | 16 ++ .../seniority.ts | 8 +- .../1516_organismes_formation/salary.ts | 13 ++ .../1516_organismes_formation/seniority.ts | 6 +- .../conventions/1527_immobilier/salary.ts | 11 + .../conventions/1527_immobilier/seniority.ts | 8 +- .../1672_societes_assurances/salary.ts | 13 ++ .../1672_societes_assurances/seniority.ts | 24 +- .../16_transports_routiers/salary.ts | 34 +++ .../16_transports_routiers/seniority.ts | 24 +- .../1702_ouvriers_travaux_public/salary.ts | 13 ++ .../1740_batiment_region_parisienne/salary.ts | 13 ++ .../176_industrie_pharmaceutique/seniority.ts | 8 +- .../conventions/1996_pharmacie/seniority.ts | 8 +- .../modeles/conventions/2120_banque/salary.ts | 29 ++- .../2148_telecommunications/salary.ts | 13 ++ .../seniority.ts | 8 +- .../indemnite-licenciement/calculate.spec.ts | 49 ++++ .../conventions/2596_coiffure/index.ts | 1 + .../2596_coiffure/ineligibility.ts | 42 ++++ .../conventions/2596_coiffure/salary.ts | 16 ++ .../conventions/2609_batiment_etam/salary.ts | 11 + .../2614_travaux_publics/salary.ts | 11 + .../seniority.ts | 8 +- .../salary.ts | 19 ++ .../indemnite-licenciement/calculate.spec.ts | 64 ++++++ .../indemnite-licenciement.yaml | 2 +- .../index.ts | 1 + .../ineligibility.ts | 43 ++++ .../salary.ts | 13 ++ .../conventions/3248_metallurgie/seniority.ts | 46 ++++ .../conventions/413_handicap/seniority.ts | 27 ++- .../44_industries_chimiques/salary.ts | 19 ++ .../44_industries_chimiques/seniority.ts | 8 +- .../573_commerces_de_gros/salary.ts | 13 ++ .../seniority.ts | 46 ++++ .../salary.ts | 17 ++ .../IndemniteLicenciementPublicodes.ts | 216 +++++++++++++++++- .../publicodes/PreavisRetraitePublicodes.ts | 9 +- .../src/publicodes/Publicodes.ts | 4 + .../src/publicodes/PublicodesBase.ts | 18 +- .../src/publicodes/types.ts | 3 + 117 files changed, 1639 insertions(+), 1638 deletions(-) delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1483.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1486.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1516.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1527.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/16.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1672.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1702.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1740.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2120.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2148.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2596.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2609.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2614.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/29.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/3239.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/413.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/44.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/573.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/675.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/index.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/16.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/1672.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/3248.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/413.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/650.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/eligibility.ts delete mode 100644 packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/eligibility.ts create mode 100644 packages/code-du-travail-frontend/src/outils/common/situationStore.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/base/__tests__/indemnite-licenciement/calculate.spec.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/base/ineligibility.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/common/factory/ineligibility.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/common/types/ineligibility.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/calculate.spec.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/ineligibility.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/__tests__/indemnite-licenciement/calculate.spec.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/ineligibility.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/__tests__/indemnite-licenciement/calculate.spec.ts create mode 100644 packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/ineligibility.ts diff --git a/packages/code-du-travail-frontend/src/outils/CommonSteps/Informations/store/store.ts b/packages/code-du-travail-frontend/src/outils/CommonSteps/Informations/store/store.ts index a875f8a92c..1beac5b862 100644 --- a/packages/code-du-travail-frontend/src/outils/CommonSteps/Informations/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/CommonSteps/Informations/store/store.ts @@ -53,16 +53,17 @@ const createCommonInformationsStore: StoreSlice< get().contratTravailData.input.licenciementInaptitude === "oui"; try { if (agreement && isAgreementSupportedIndemniteLicenciement) { - const missingArgs = publicodes - .setSituation( - mapToPublicodesSituationForIndemniteLicenciementConventionnel( - agreement.num, - isLicenciementInaptitude, - false - ), - "contrat salarié . indemnité de licenciement . résultat conventionnel" - ) - .missingArgs.filter((item) => item.rawNode.cdtn); + const result = publicodes.setSituation( + mapToPublicodesSituationForIndemniteLicenciementConventionnel( + agreement.num, + isLicenciementInaptitude, + false + ), + "contrat salarié . indemnité de licenciement . résultat conventionnel" + ); + const missingArgs = result.missingArgs.filter( + (item) => item.rawNode.cdtn + ); if (missingArgs.length > 0) { const question = missingArgs.map((arg) => ({ name: arg.name, @@ -110,6 +111,9 @@ const createCommonInformationsStore: StoreSlice< get().informationsData.input.publicodesInformations; const isLicenciementInaptitude = get().contratTravailData.input.licenciementInaptitude === "oui"; + const contractType = get().contratTravailData.input.typeContratTravail; + const isDismissalSeriousMisconduct = + get().contratTravailData.input.licenciementFauteGrave; const questionAnswered = publicodesInformations.find( (question) => question.question.rule.nom === key ); @@ -135,17 +139,16 @@ const createCommonInformationsStore: StoreSlice< let missingArgs: MissingArgs[] = []; let blockingNotification: any = undefined; try { - missingArgs = publicodes - .setSituation( - mapToPublicodesSituationForIndemniteLicenciementConventionnel( - agreement.num, - isLicenciementInaptitude, - false, - rules - ), - "contrat salarié . indemnité de licenciement . résultat conventionnel" - ) - .missingArgs.filter((item) => item.rawNode.cdtn); + const result = publicodes.setSituation( + mapToPublicodesSituationForIndemniteLicenciementConventionnel( + agreement.num, + isLicenciementInaptitude, + false, + rules + ), + "contrat salarié . indemnité de licenciement . résultat conventionnel" + ); + missingArgs = result.missingArgs.filter((item) => item.rawNode.cdtn); const notifBloquante = publicodes.getNotificationsBloquantes(); if (notifBloquante.length > 0) { blockingNotification = notifBloquante[0].description; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1483-habillement-textiles-commerce-de-detail/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1483-habillement-textiles-commerce-de-detail/store/store.ts index 1b72ef55c6..e51e46ef0e 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1483-habillement-textiles-commerce-de-detail/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1483-habillement-textiles-commerce-de-detail/store/store.ts @@ -13,6 +13,7 @@ import { } from "./types"; import { validateStep } from "./validator"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement1483StoreData = { input: { @@ -25,7 +26,10 @@ const initialState: Agreement1483StoreData = { export const createAgreement1483StoreSalaires: StoreSlice< Agreement1483StoreSlice, - SalairesStoreSlice & AncienneteStoreSlice & ContratTravailStoreSlice + SalairesStoreSlice & + AncienneteStoreSlice & + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement1483Data: { ...initialState }, agreement1483Function: { @@ -33,6 +37,7 @@ export const createAgreement1483StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation("noticeSalaryPeriods", "[]"); return set( produce((state: Agreement1483StoreSlice) => { state.agreement1483Data.input.noticeSalaryPeriods = []; @@ -60,6 +65,10 @@ export const createAgreement1483StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement1483StoreSlice) => { state.agreement1483Data.input.noticeSalaryPeriods = @@ -74,6 +83,10 @@ export const createAgreement1483StoreSalaires: StoreSlice< get().agreement1483Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/store.ts index 64f20f71df..1f854efb8a 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/store.ts @@ -13,6 +13,7 @@ import { } from "./types"; import { validateStep } from "./validator"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement1516StoreData = { input: { @@ -25,7 +26,10 @@ const initialState: Agreement1516StoreData = { export const createAgreement1516StoreSalaires: StoreSlice< Agreement1516StoreSlice, - SalairesStoreSlice & AncienneteStoreSlice & ContratTravailStoreSlice + SalairesStoreSlice & + AncienneteStoreSlice & + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement1516Data: { ...initialState }, agreement1516Function: { @@ -33,6 +37,7 @@ export const createAgreement1516StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation("noticeSalaryPeriods", "[]"); return set( produce((state: Agreement1516StoreSlice) => { state.agreement1516Data.input.noticeSalaryPeriods = []; @@ -59,7 +64,10 @@ export const createAgreement1516StoreSalaires: StoreSlice< agreementSalaryPeriod, "month" ); - + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement1516StoreSlice) => { state.agreement1516Data.input.noticeSalaryPeriods = @@ -74,6 +82,10 @@ export const createAgreement1516StoreSalaires: StoreSlice< get().agreement1516Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/validator.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/validator.ts index 723abde091..2bd6220667 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/validator.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1516-organismes-formation/store/validator.ts @@ -47,11 +47,10 @@ export const validateStep = (state: Agreement1516StoreInput) => { }; } - return { - isValid: deepEqualObject(errorState, { - errorHasReceivedSalaries: undefined, - errorNoticeSalaryPeriods: undefined, - }), - errorState, - }; + const isValid = deepEqualObject(errorState, { + errorHasReceivedSalaries: undefined, + errorNoticeSalaryPeriods: undefined, + }); + + return { isValid, errorState }; }; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/16-transports-routiers/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/16-transports-routiers/store/store.ts index a0a503e75f..e1673aa825 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/16-transports-routiers/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/16-transports-routiers/store/store.ts @@ -10,6 +10,7 @@ import { } from "./types"; import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement16StoreData = { input: { @@ -22,16 +23,20 @@ const initialState: Agreement16StoreData = { export const createAgreement16StoreSalaires: StoreSlice< Agreement16StoreSlice, - SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice + SalairesStoreSlice & + AncienneteStoreSlice & + CommonInformationsStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement16Data: { ...initialState }, agreement16Function: { onInit: () => { - const categoryPro = get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle" - )?.info; + const categoryPro = + get().informationsData.input.publicodesInformations.find( + (item) => + item.question.name === + "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle" + )?.info; set( produce((state: Agreement16StoreSlice) => { state.agreement16Data.input.showVariablePay = @@ -42,6 +47,7 @@ export const createAgreement16StoreSalaires: StoreSlice< ); }, onChangeHasVariablePay: (value) => { + get().situationFunction.setSituation("hasVariablePay", value); applyGenericValidation(get, set, "hasVariablePay", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1672-societes-assurances/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1672-societes-assurances/store/store.ts index 58ab8c23f0..40ef4c19af 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1672-societes-assurances/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1672-societes-assurances/store/store.ts @@ -14,6 +14,7 @@ import { import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement1672StoreData = { input: { @@ -29,7 +30,8 @@ export const createAgreement1672StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement1672Data: { ...initialState }, agreement1672Function: { @@ -37,6 +39,10 @@ export const createAgreement1672StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify([]) + ); return set( produce((state: Agreement1672StoreSlice) => { state.agreement1672Data.input.noticeSalaryPeriods = []; @@ -62,6 +68,10 @@ export const createAgreement1672StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement1672StoreSlice) => { state.agreement1672Data.input.noticeSalaryPeriods = @@ -74,6 +84,10 @@ export const createAgreement1672StoreSalaires: StoreSlice< get().agreement1672Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1702-ouvriers-travaux-public/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1702-ouvriers-travaux-public/store/store.ts index a254f29c83..f5ce3ba651 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1702-ouvriers-travaux-public/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1702-ouvriers-travaux-public/store/store.ts @@ -14,6 +14,7 @@ import { import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement1702StoreData = { input: { @@ -29,7 +30,8 @@ export const createAgreement1702StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement1702Data: { ...initialState }, agreement1702Function: { @@ -37,6 +39,7 @@ export const createAgreement1702StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation("noticeSalaryPeriods", "[]"); return set( produce((state: Agreement1702StoreSlice) => { state.agreement1702Data.input.noticeSalaryPeriods = []; @@ -62,6 +65,10 @@ export const createAgreement1702StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement1702StoreSlice) => { state.agreement1702Data.input.noticeSalaryPeriods = @@ -74,6 +81,10 @@ export const createAgreement1702StoreSalaires: StoreSlice< get().agreement1702Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1740-batiment-region-parisienne/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1740-batiment-region-parisienne/store/store.ts index 13c0885870..af78d80f18 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1740-batiment-region-parisienne/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/1740-batiment-region-parisienne/store/store.ts @@ -14,6 +14,7 @@ import { import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement1740StoreData = { input: { @@ -29,7 +30,8 @@ export const createAgreement1740StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement1740Data: { ...initialState }, agreement1740Function: { @@ -37,6 +39,10 @@ export const createAgreement1740StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify("[]") + ); return set( produce((state: Agreement1740StoreSlice) => { state.agreement1740Data.input.noticeSalaryPeriods = []; @@ -62,6 +68,10 @@ export const createAgreement1740StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement1740StoreSlice) => { state.agreement1740Data.input.noticeSalaryPeriods = @@ -74,6 +84,10 @@ export const createAgreement1740StoreSalaires: StoreSlice< get().agreement1740Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2120-banques/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2120-banques/store/store.ts index 19f8905412..287d4b12be 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2120-banques/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2120-banques/store/store.ts @@ -9,6 +9,7 @@ import { } from "./types"; import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement2120StoreData = { input: { @@ -22,7 +23,7 @@ const initialState: Agreement2120StoreData = { export const createAgreement2120StoreSalaires: StoreSlice< Agreement2120StoreSlice, - SalairesStoreSlice & CommonInformationsStoreSlice + SalairesStoreSlice & CommonInformationsStoreSlice & CommonSituationStoreSlice > = (set, get) => ({ agreement2120Data: { ...initialState }, agreement2120Function: { @@ -44,13 +45,13 @@ export const createAgreement2120StoreSalaires: StoreSlice< ); }, onChangeSalariesVariablePart: (value: string) => { - const valueNumber = parseInt(value, 10); - applyGenericValidation( - get, - set, + const number = parseInt(value, 10); + const valueNumber = isNaN(number) ? undefined : number; + get().situationFunction.setSituation( "salariesVariablePart", - isNaN(valueNumber) ? undefined : valueNumber + valueNumber ? valueNumber.toString() : "" ); + applyGenericValidation(get, set, "salariesVariablePart", valueNumber); }, }, }); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2148-telecommunications/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2148-telecommunications/store/store.ts index cb21f7460a..07c3abf1da 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2148-telecommunications/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2148-telecommunications/store/store.ts @@ -14,6 +14,7 @@ import { import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement2148StoreData = { input: { @@ -29,7 +30,8 @@ export const createAgreement2148StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement2148Data: { ...initialState }, agreement2148Function: { @@ -37,6 +39,7 @@ export const createAgreement2148StoreSalaires: StoreSlice< const dateArretTravail = get().contratTravailData.input.dateArretTravail; if (dateArretTravail) { + get().situationFunction.setSituation("noticeSalaryPeriods", "[]"); return set( produce((state: Agreement2148StoreSlice) => { state.agreement2148Data.input.noticeSalaryPeriods = []; @@ -62,6 +65,10 @@ export const createAgreement2148StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement2148StoreSlice) => { state.agreement2148Data.input.noticeSalaryPeriods = @@ -74,6 +81,10 @@ export const createAgreement2148StoreSalaires: StoreSlice< get().agreement2148Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2596-coiffure/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2596-coiffure/store/store.ts index 20edf93271..0e87fe54b4 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2596-coiffure/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2596-coiffure/store/store.ts @@ -14,6 +14,7 @@ import { import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement2596StoreData = { input: { @@ -29,7 +30,8 @@ export const createAgreement2596StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement2596Data: { ...initialState }, agreement2596Function: { @@ -47,6 +49,7 @@ export const createAgreement2596StoreSalaires: StoreSlice< categoryPro !== "'Agents de maîtrise'") || dateArretTravail ) { + get().situationFunction.setSituation("noticeSalaryPeriods", "[]"); return set( produce((state: Agreement2596StoreSlice) => { state.agreement2596Data.input.noticeSalaryPeriods = []; @@ -72,6 +75,10 @@ export const createAgreement2596StoreSalaires: StoreSlice< "month" ); + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(noticeSalaryPeriods) + ); set( produce((state: Agreement2596StoreSlice) => { state.agreement2596Data.input.noticeSalaryPeriods = @@ -84,6 +91,10 @@ export const createAgreement2596StoreSalaires: StoreSlice< get().agreement2596Function.onInit(); }, onSalariesChange: (value) => { + get().situationFunction.setSituation( + "noticeSalaryPeriods", + JSON.stringify(value) + ); applyGenericValidation(get, set, "noticeSalaryPeriods", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2609-batiment-etam/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2609-batiment-etam/store/store.ts index 6f7940c761..4ae006d18e 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2609-batiment-etam/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2609-batiment-etam/store/store.ts @@ -8,6 +8,7 @@ import { Agreement2609StoreSlice, } from "./types"; import { validateStep } from "./validator"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement2609StoreData = { input: {}, @@ -18,11 +19,12 @@ const initialState: Agreement2609StoreData = { export const createAgreement2609StoreSalaires: StoreSlice< Agreement2609StoreSlice, - SalairesStoreSlice + SalairesStoreSlice & CommonSituationStoreSlice > = (set, get) => ({ agreement2609Data: { ...initialState }, agreement2609Function: { onChangeHasVariablePay: (value) => { + get().situationFunction.setSituation("hasVariablePay", value); applyGenericValidation(get, set, "hasVariablePay", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2614-travaux-public/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2614-travaux-public/store/store.ts index 7c56698585..d85587a7ad 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2614-travaux-public/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/2614-travaux-public/store/store.ts @@ -8,6 +8,7 @@ import { Agreement2614StoreSlice, } from "./types"; import { validateStep } from "./validator"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement2614StoreData = { input: {}, @@ -18,11 +19,12 @@ const initialState: Agreement2614StoreData = { export const createAgreement2614StoreSalaires: StoreSlice< Agreement2614StoreSlice, - SalairesStoreSlice + SalairesStoreSlice & CommonSituationStoreSlice > = (set, get) => ({ agreement2614Data: { ...initialState }, agreement2614Function: { onChangeHasVariablePay: (value) => { + get().situationFunction.setSituation("hasVariablePay", value); applyGenericValidation(get, set, "hasVariablePay", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/Component.tsx b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/Component.tsx index 5bebb61f30..9252aa4f46 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/Component.tsx +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/Component.tsx @@ -4,7 +4,6 @@ import { IndemniteLicenciementContext, useIndemniteLicenciementStore, } from "../../store"; -import { icons } from "@socialgouv/cdtn-ui"; export default function Agreement29() { const store = useContext(IndemniteLicenciementContext); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/store/store.ts index 861d6b7863..221b902704 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/29-hospitalisation-privee-but-non-lucratif/store/store.ts @@ -10,6 +10,7 @@ import { } from "./types"; import { validateStep } from "./validator"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: Agreement29StoreData = { input: { @@ -22,7 +23,10 @@ const initialState: Agreement29StoreData = { export const createAgreement29StoreSalaires: StoreSlice< Agreement29StoreSlice, - SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice + SalairesStoreSlice & + AncienneteStoreSlice & + CommonInformationsStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement29Data: { ...initialState }, agreement29Function: { @@ -36,14 +40,17 @@ export const createAgreement29StoreSalaires: StoreSlice< "'Assistants familiaux des services de placements familiaux spécialisés'"; set( produce((state: Agreement29StoreSlice) => { - state.agreement29Data.input.shouldAskSixBestSalaries = shouldAskSixBestSalaries; + state.agreement29Data.input.shouldAskSixBestSalaries = + shouldAskSixBestSalaries; }) ); }, onChangeSixBestSalariesTotal: (value) => { + get().situationFunction.setSituation("sixBestSalariesTotal", value); applyGenericValidation(get, set, "sixBestSalariesTotal", value); }, onChangeHasSixBestSalaries: (value) => { + get().situationFunction.setSituation("hasSixBestSalaries", value); applyGenericValidation(get, set, "hasSixBestSalaries", value); }, }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/44-industries-chimiques/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/44-industries-chimiques/store/store.ts index 8fe3a1d697..404fcda9b5 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/44-industries-chimiques/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/44-industries-chimiques/store/store.ts @@ -15,6 +15,7 @@ import { parse } from "../../../../common/utils"; import { SalaryPeriods } from "@socialgouv/modeles-social"; import { generateFrenchDate } from "../../../../utils"; import { ContratTravailStoreSlice } from "../../../steps/ContratTravail/store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialInputState = { showVariablePay: false, @@ -34,7 +35,8 @@ export const createAgreement44StoreSalaires: StoreSlice< SalairesStoreSlice & AncienneteStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ agreement44Data: { ...initialState }, agreement44Function: { @@ -120,6 +122,7 @@ export const createAgreement44StoreSalaires: StoreSlice< categoryPro === "'Ouvriers et collaborateurs (Groupes I à III)'" || categoryPro === "'Agents de maîtrise et techniciens (Groupe IV)'"; const dateArretTravail = get().contratTravailData.input.dateArretTravail; + get().situationFunction.setSituation("hasVariablePay", value); applyGenericValidation(get, set, [ { paramName: "hasVariablePay", value: value }, { @@ -146,19 +149,28 @@ export const createAgreement44StoreSalaires: StoreSlice< dateNotification: ancienneteInput.dateSortie!, }); const lastMonthSalaryProcess: SalaryPeriods = { month: periods[0] }; + const lastMonthSalaryValue = + value === "non" + ? lastMonthSalaryProcess + : get().agreement44Data.input.lastMonthSalary; + get().situationFunction.setSituation( + "lastMonthSalary", + JSON.stringify(lastMonthSalaryValue) + ); applyGenericValidation(get, set, [ { paramName: "showLastMonthSalary", value: value === "oui" }, { paramName: "knowingLastSalary", value }, { paramName: "lastMonthSalary", - value: - value === "non" - ? lastMonthSalaryProcess - : get().agreement44Data.input.lastMonthSalary, + value: lastMonthSalaryValue, }, ]); }, onChangeLastMonthSalary: (value) => { + get().situationFunction.setSituation( + "lastMonthSalary", + JSON.stringify(value) + ); applyGenericValidation(get, set, [ { paramName: "lastMonthSalary", value }, ]); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/index.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/index.ts index 99c0e1b2e1..bb3c584a75 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/index.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/index.ts @@ -2,8 +2,4 @@ export * from "./types"; export * from "./index"; export { default as AgreementsInjector } from "./AgreementsInjector"; export { default as validatorAgreement } from "./validator"; -export { - getAgreementReferenceSalary, - getAgreementExtraInfoSalary, -} from "./salary"; export * from "./ui-customizations"; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1483.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1483.ts deleted file mode 100644 index 7ecb72c611..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1483.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1483 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1483Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1483 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1486.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1486.ts deleted file mode 100644 index b139d797fa..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1486.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1486 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1486 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - catPro: get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . bureaux études techniques . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any, - typeLicenciement: get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . bureaux études techniques . indemnité de licenciement . type de licenciement" - ) - ?.info?.slice(1, -1) as any, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1516.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1516.ts deleted file mode 100644 index 2070dc695b..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1516.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1516 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1516Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1516 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1527.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1527.ts deleted file mode 100644 index edb9ea9617..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1527.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1527 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1527Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1527 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - hasCommission: ccInput.hasCommission === "oui", - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/16.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/16.ts deleted file mode 100644 index 0146a60906..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/16.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { - CategoryPro16, - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary16 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement16Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0016 - ); - const category: CategoryPro16 = get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle" - )?.info as CategoryPro16; - let driveInability; - if (category === "'Ouvriers'") { - const driveInabilityTemporary = get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle - Ouvriers - incapacité de conduite" - )?.info; - - const driveInabilityDefinitive = get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle - Ouvriers - incapacité de conduite définitive" - )?.info; - driveInability = - driveInabilityTemporary === "'Oui'" && - driveInabilityDefinitive === "'Oui'" - ? "definitive" - : driveInabilityTemporary === "'Oui'" - ? "temporary" - : undefined; - } - - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - category, - hasVariablePay: ccInput.hasVariablePay === "oui", - driveInability, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1672.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1672.ts deleted file mode 100644 index 5bbf52a558..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1672.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1672 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1672Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1672 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1702.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1702.ts deleted file mode 100644 index 90d9096703..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1702.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1702 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1702Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1702 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1740.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1740.ts deleted file mode 100644 index 5a4e1daba3..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/1740.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary1740 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement1740Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC1740 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2120.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2120.ts deleted file mode 100644 index a1693c8cd2..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2120.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { - QuestionOuiNon, - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary2120 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC2120 - ); - - const isLicenciementInaptitude = - get().contratTravailData.input.licenciementInaptitude === "oui"; - - const isLicenciementDisciplinaire = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . banque . licenciement disciplinaire" - ) - ?.info?.slice(1, -1) as QuestionOuiNon; - - const isLicenciementEco = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . banque . licenciement économique" - ) - ?.info?.slice(1, -1) as QuestionOuiNon; - - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - salariesVariablePart: - get().agreement2120Data.input.salariesVariablePart ?? 0, - isLicenciementDisciplinaire: isLicenciementInaptitude - ? QuestionOuiNon.non - : isLicenciementDisciplinaire, - isLicenciementEco: isLicenciementInaptitude - ? QuestionOuiNon.non - : isLicenciementEco, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2148.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2148.ts deleted file mode 100644 index 7424a0f296..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2148.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary2148 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement2148Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC2148 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2596.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2596.ts deleted file mode 100644 index e03641e7d8..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2596.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary2596 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement2596Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC2596 - ); - return sReference.computeReferenceSalary({ - salairesPendantPreavis: ccInput.noticeSalaryPeriods ?? [], - salaires: salaryPeriods, - catPro: get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2609.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2609.ts deleted file mode 100644 index 2314f44119..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2609.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { GetState } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary2609 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: GetState - ): number => { - const ccInput = get().agreement2609Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC2609 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - hasVariablePay: ccInput.hasVariablePay === "oui", - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2614.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2614.ts deleted file mode 100644 index 5e178df3fd..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/2614.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary2614 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement2614Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC2614 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - hasVariablePay: ccInput.hasVariablePay === "oui", - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/29.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/29.ts deleted file mode 100644 index 0a19cf55f8..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/29.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary29 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const ccInput = get().agreement29Data.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0029 - ); - const category = get() - .informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - hospitalisation privée à but non lucratif - indemnité de licenciement - catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any; - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - professionalCategory: category, - bestSalariesTotal: - ccInput.hasSixBestSalaries === "oui" - ? Number(ccInput.sixBestSalariesTotal) - : undefined, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/3239.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/3239.ts deleted file mode 100644 index 9ef876313e..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/3239.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary3239 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC3239 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - catPro: get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/413.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/413.ts deleted file mode 100644 index c7065b07d9..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/413.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary413 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - _get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC413 - ); - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/44.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/44.ts deleted file mode 100644 index c2edbb0ff2..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/44.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary44 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0044 - ); - const ccInput = get().agreement44Data.input; - const category = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . industries chimiques . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any; - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - category, - hasVariablePay: ccInput.hasVariablePay === "oui", - lastMonthSalary: ccInput.lastMonthSalary, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/573.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/573.ts deleted file mode 100644 index 6f61114f67..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/573.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { - QuestionOuiNon, - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary573 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0573 - ); - - const firingType = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . agents . licenciement économique" - ) - ?.info?.slice(1, -1) as QuestionOuiNon | undefined; - - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - licenciementEco: firingType ?? QuestionOuiNon.non, - }); - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/675.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/675.ts deleted file mode 100644 index 134b6be4ef..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/675.ts +++ /dev/null @@ -1,56 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { AgreementSalary } from "."; -import { MainStore } from "../../store"; - -export class AgreementSalary675 implements AgreementSalary { - computeSalary = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): number => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0675 - ); - const catPro = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . habillement commerce succursales . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any; - const isAgentMaitriseOrCadre = - catPro === "Agents de maîtrise" || catPro === "Cadres"; - return sReference.computeReferenceSalary({ - salaires: salaryPeriods, - isAgentMaitriseOrCadre, - }); - }; - - computeExtraInfo = ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ): Record => { - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.IDCC0675 - ); - const catPro = get() - .informationsData.input.publicodesInformations.find( - (v) => - v.question.rule.nom === - "contrat salarié . convention collective . habillement commerce succursales . indemnité de licenciement . catégorie professionnelle" - ) - ?.info?.slice(1, -1) as any; - const isAgentMaitriseOrCadre = - catPro === "Agents de maîtrise" || catPro === "Cadres"; - return sReference.computeExtraInfo - ? sReference.computeExtraInfo({ - salaires: salaryPeriods, - isAgentMaitriseOrCadre, - }) - : {}; - }; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/index.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/index.ts deleted file mode 100644 index 832df07be2..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/salary/index.ts +++ /dev/null @@ -1,130 +0,0 @@ -import { - ReferenceSalaryFactory, - SalaryPeriods, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { MainStore } from "../../store"; -import { AgreementSalary1486 } from "./1486"; -import { AgreementSalary1516 } from "./1516"; -import { AgreementSalary1527 } from "./1527"; -import { AgreementSalary3239 } from "./3239"; -import { AgreementSalary413 } from "./413"; -import { AgreementSalary16 } from "./16"; -import { AgreementSalary44 } from "./44"; -import { AgreementSalary29 } from "./29"; -import { AgreementSalary573 } from "./573"; -import { AgreementSalary2609 } from "./2609"; -import { AgreementSalary2596 } from "./2596"; -import { AgreementSalary2148 } from "./2148"; -import { AgreementSalary2614 } from "./2614"; -import { AgreementSalary675 } from "./675"; -import { AgreementSalary1672 } from "./1672"; -import { AgreementSalary1483 } from "./1483"; -import { AgreementSalary1702 } from "./1702"; -import { AgreementSalary1740 } from "./1740"; -import { AgreementSalary2120 } from "./2120"; - -export const getAgreementReferenceSalary = ( - idcc: SupportedCcIndemniteLicenciement | null, - get: StoreApi["getState"] -): number => { - const salaryInput = get().salairesData.input; - let salaries = salaryInput.salaryPeriods; - const { salary } = salaryInput; - - if (salary) { - const parseSalary = parseFloat(salary); - salaries = salaryInput.salaryPeriods.map((v) => ({ - ...v, - value: parseSalary, - prime: undefined, - })); - } - - switch (true) { - case SupportedCcIndemniteLicenciement.IDCC1516 === idcc: - return new AgreementSalary1516().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC413 === idcc: - return new AgreementSalary413().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1486 === idcc: - return new AgreementSalary1486().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1527 === idcc: - return new AgreementSalary1527().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC3239 === idcc: - return new AgreementSalary3239().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC0016 === idcc: - return new AgreementSalary16().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC0029 === idcc: - return new AgreementSalary29().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC0044 === idcc: - return new AgreementSalary44().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC0573 === idcc: - return new AgreementSalary573().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC2596 === idcc: - return new AgreementSalary2596().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC2609 === idcc: - return new AgreementSalary2609().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC2148 === idcc: - return new AgreementSalary2148().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC2614 === idcc: - return new AgreementSalary2614().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC0675 === idcc: - return new AgreementSalary675().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1672 === idcc: - return new AgreementSalary1672().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1483 === idcc: - return new AgreementSalary1483().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1702 === idcc: - return new AgreementSalary1702().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC1740 === idcc: - return new AgreementSalary1740().computeSalary(salaries, get); - case SupportedCcIndemniteLicenciement.IDCC2120 === idcc: - return new AgreementSalary2120().computeSalary(salaries, get); - default: { - const sReference = new ReferenceSalaryFactory().create( - idcc ?? SupportedCcIndemniteLicenciement.default - ); - return sReference.computeReferenceSalary({ - salaires: salaries, - }); - } - } -}; - -export const getAgreementExtraInfoSalary = ( - idcc: SupportedCcIndemniteLicenciement | null, - get: StoreApi["getState"] -): Record => { - const salaryInput = get().salairesData.input; - let salaries = salaryInput.salaryPeriods; - const { salary } = salaryInput; - - if (salary) { - const parseSalary = parseFloat(salary); - salaries = salaryInput.salaryPeriods.map((v) => ({ - ...v, - value: parseSalary, - prime: undefined, - })); - } - - switch (true) { - case SupportedCcIndemniteLicenciement.IDCC0675 === idcc: - return new AgreementSalary675().computeExtraInfo(salaries, get); - default: { - return {}; - } - } -}; - -export interface AgreementSalary { - computeSalary: ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ) => number; - computeExtraInfo?: ( - salaryPeriods: SalaryPeriods[], - get: StoreApi["getState"] - ) => Record; -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/16.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/16.ts deleted file mode 100644 index 846426a66c..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/16.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { AgreementSeniority } from "."; - -export class AgreementSeniority16 implements AgreementSeniority { - computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - get, - }): SeniorityResult { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle" - ).info; - const becameExecutiveAt = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle - Ingénieurs et cadres - date du statut cadre" - )?.info; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC0016 - ); - return seniority.computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - isExecutive: categoriePro === "'Ingénieurs et cadres'", - becameExecutiveAt, - }); - } - - computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - get, - }) { - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC1672 - ); - return seniority.computeRequiredSeniority({ - dateEntree, - dateSortie, - dateNotification, - absencePeriods, - }); - } -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/1672.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/1672.ts deleted file mode 100644 index f25ce902c7..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/1672.ts +++ /dev/null @@ -1,57 +0,0 @@ -import { AgreementSeniority } from "."; -import { - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; - -export class AgreementSeniority1672 implements AgreementSeniority { - computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - get, - }): SeniorityResult { - const professionalCategory = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - sociétés d'assurances - catégorie professionnelle" - )?.info; - const becameExecutiveAt = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - sociétés d'assurances - catégorie professionnelle - cadres - date du statut cadre" - )?.info; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC1672 - ); - return seniority.computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - isExecutive: professionalCategory === "'Cadres (Classes 5 à 7)'", - becameExecutiveAt, - }); - } - - computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - get, - }) { - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC1672 - ); - return seniority.computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - }); - } -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/3248.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/3248.ts deleted file mode 100644 index 61ba4b37c0..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/3248.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { AgreementSeniority } from "."; -import { - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; - -export class AgreementSeniority3248 implements AgreementSeniority { - computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - get, - }): SeniorityResult { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle" - ).info; - const hasBeenExecutive = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - avant cadre" - )?.info; - const hasBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour" - )?.info; - const hasAllwaysBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - toujours au forfait jour" - )?.info; - - const dateBeginDayContract = - hasAllwaysBeenDayContract === "'Non'" - ? get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour - date" - )?.info - : undefined; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC3248 - ); - return seniority.computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - categoriePro, - hasBeenDayContract: hasBeenDayContract === "'Oui'", - dateBecomeDayContract: dateBeginDayContract, - hasBeenExecutive: hasBeenExecutive === "'Oui'", - }); - } - - computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - get, - }) { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle" - ).info; - const hasBeenExecutive = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - avant cadre" - )?.info; - const hasBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour" - )?.info; - const hasAllwaysBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - toujours au forfait jour" - )?.info; - - const dateBeginDayContract = - hasAllwaysBeenDayContract === "'Non'" - ? get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour - date" - )?.info - : undefined; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC3248 - ); - return seniority.computeRequiredSeniority({ - dateEntree, - dateSortie, - dateNotification, - absencePeriods, - categoriePro, - hasBeenDayContract: hasBeenDayContract === "'Oui'", - dateBecomeDayContract: dateBeginDayContract, - hasBeenExecutive: hasBeenExecutive === "'Oui'", - }); - } -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/413.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/413.ts deleted file mode 100644 index 796e9e5af9..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/413.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { AgreementSeniority } from "."; - -export class AgreementSeniority413 implements AgreementSeniority { - computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - get, - }): SeniorityResult { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.rule.nom === - "contrat salarié . convention collective . établissement handicap . indemnité de licenciement . catégorie professionnelle" - ).info; - const becameExecutiveAt = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.rule.nom === - "contrat salarié . convention collective . établissement handicap . indemnité de licenciement . catégorie professionnelle . non cadre durant une période . temps" - )?.info; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC413 - ); - return seniority.computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - isExecutive: - categoriePro === "'Cadres'" || - categoriePro === - "'Cadres directeurs généraux, directeurs de centre de formation en travail social et directeurs d'établissement ou de service'", - becameExecutiveAt, - }); - } - - computeRequiredSeniority({ - dateEntree, - dateSortie, - dateNotification, - absencePeriods, - get, - }) { - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC1672 - ); - return seniority.computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - }); - } -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/650.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/650.ts deleted file mode 100644 index d4bccc5a61..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/650.ts +++ /dev/null @@ -1,116 +0,0 @@ -import { - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { AgreementSeniority } from "."; - -export class AgreementSeniority650 implements AgreementSeniority { - computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - get, - }): SeniorityResult { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle" - )?.info; - const hasBeenExecutive = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - avant cadre" - )?.info; - const hasBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour" - )?.info; - const hasAllwaysBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - toujours au forfait jour" - )?.info; - const dateBeginDayContract = - hasAllwaysBeenDayContract === "'Non'" - ? get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour - date" - )?.info - : undefined; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC650 - ); - return seniority.computeSeniority({ - dateEntree, - dateSortie, - absencePeriods, - categoriePro, - hasBeenDayContract: hasBeenDayContract === "'Oui'", - dateBecomeDayContract: dateBeginDayContract, - hasBeenExecutive: hasBeenExecutive === "'Oui'", - }); - } - - computeRequiredSeniority({ - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - get, - }) { - const categoriePro = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle" - )?.info; - const hasBeenExecutive = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - avant cadre" - )?.info; - const hasBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour" - )?.info; - const hasAllwaysBeenDayContract = - get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - toujours au forfait jour" - )?.info; - const dateBeginDayContract = - hasAllwaysBeenDayContract === "'Non'" - ? get().informationsData.input.publicodesInformations.find( - (item) => - item.question.name === - "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour - date" - )?.info - : undefined; - - const seniority = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.IDCC650 - ); - return seniority.computeRequiredSeniority({ - dateEntree, - dateSortie, - dateNotification, - absencePeriods, - categoriePro, - hasBeenDayContract: hasBeenDayContract === "'Oui'", - dateBecomeDayContract: dateBeginDayContract, - hasBeenExecutive: hasBeenExecutive === "'Oui'", - }); - } -} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/index.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/index.ts index 15a2731b5d..c23d239883 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/index.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/agreements/seniority/index.ts @@ -1,112 +1 @@ -import { - Absence, - RequiredSeniorityResult, - SeniorityFactory, - SeniorityResult, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { StoreApi } from "zustand"; -import { MainStore } from "../../store"; -import { AgreementSeniority16 } from "./16"; -import { AgreementSeniority413 } from "./413"; -import { AgreementSeniority1672 } from "./1672"; -import { AgreementSeniority3248 } from "./3248"; -import { AgreementSeniority650 } from "./650"; - -export const getAgreementSeniority = ( - idcc: SupportedCcIndemniteLicenciement | null, - get: StoreApi["getState"] -): SeniorityResult => { - const dateEntree = get().ancienneteData.input.dateEntree!; - const dateSortie = get().ancienneteData.input.dateSortie!; - const absencePeriods = get().ancienneteData.input.absencePeriods; - const defaultValues = { dateEntree, dateSortie, absencePeriods }; - - switch (true) { - case SupportedCcIndemniteLicenciement.IDCC0016 === idcc: - return new AgreementSeniority16().computeSeniority({ - ...defaultValues, - get, - }); - case SupportedCcIndemniteLicenciement.IDCC1672 === idcc: - return new AgreementSeniority1672().computeSeniority({ - ...defaultValues, - get, - }); - case SupportedCcIndemniteLicenciement.IDCC413 === idcc: - return new AgreementSeniority413().computeSeniority({ - ...defaultValues, - get, - }); - case SupportedCcIndemniteLicenciement.IDCC3248 === idcc: - return new AgreementSeniority3248().computeSeniority({ - ...defaultValues, - get, - }); - case SupportedCcIndemniteLicenciement.IDCC650 === idcc: - return new AgreementSeniority650().computeSeniority({ - ...defaultValues, - get, - }); - default: { - return new SeniorityFactory() - .create(idcc) - .computeSeniority(defaultValues); - } - } -}; - -export const getAgreementRequiredSeniority = ( - idcc: SupportedCcIndemniteLicenciement | null, - get: StoreApi["getState"] -): RequiredSeniorityResult => { - const dateEntree = get().ancienneteData.input.dateEntree!; - const dateSortie = get().ancienneteData.input.dateSortie!; - const dateNotification = get().ancienneteData.input.dateNotification!; - const absencePeriods = get().ancienneteData.input.absencePeriods; - const defaultValues = { - dateEntree, - dateNotification, - dateSortie, - absencePeriods, - }; - - switch (true) { - case SupportedCcIndemniteLicenciement.IDCC3248 === idcc: - return new AgreementSeniority3248().computeSeniority({ - ...defaultValues, - dateSortie: dateNotification, - get, - }); - case SupportedCcIndemniteLicenciement.IDCC650 === idcc: - return new AgreementSeniority650().computeSeniority({ - ...defaultValues, - dateSortie: dateNotification, - get, - }); - default: { - return new SeniorityFactory() - .create(idcc) - .computeRequiredSeniority(defaultValues); - } - } -}; - -export interface AgreementSeniority { - computeSeniority: (data: { - dateEntree: string; - dateSortie: string; - absencePeriods: Absence[]; - get: StoreApi["getState"]; - }) => SeniorityResult; - - computeRequiredSeniority: (data: { - dateEntree: string; - dateNotification: string; - dateSortie: string; - absencePeriods: Absence[]; - get: StoreApi["getState"]; - }) => SeniorityResult; -} - export * from "./validator"; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/eligibility.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/eligibility.ts deleted file mode 100644 index cfcc5cf681..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/eligibility.ts +++ /dev/null @@ -1,88 +0,0 @@ -import { - getSupportedAgreement, - SeniorityFactory, - SupportedCcIndemniteLicenciement, -} from "@socialgouv/modeles-social"; -import { AncienneteStoreInput } from "./types"; -import { Agreement } from "@socialgouv/cdtn-utils"; -import { CommonInformationsStoreInput } from "../../../../CommonSteps/Informations/store"; -import { - getAgreementRequiredSeniority, - getAgreementSeniority, -} from "../../../agreements/seniority"; -import { StoreApi } from "zustand"; -import { MainStore } from "../../../store"; - -export const getErrorEligibility = ( - get: StoreApi["getState"], - state: AncienneteStoreInput, - stateInfo: CommonInformationsStoreInput, - isInaptitude: boolean, - agreement?: Agreement -) => { - if ( - isInaptitude || - !state.dateEntree || - !state.dateNotification || - !state.dateSortie - ) { - return; - } - - const factory = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.default - ); - const requiredSeniorityLegal = factory.computeRequiredSeniority({ - dateEntree: state.dateEntree, - dateNotification: state.dateNotification, - dateSortie: state.dateSortie, - absencePeriods: state.absencePeriods, - }).value; - - let requiredSeniorityAgreement = 0; - if (agreement) { - requiredSeniorityAgreement = getAgreementRequiredSeniority( - getSupportedAgreement(agreement.num), - get as StoreApi["getState"] - ).value; - } - - let minimalSeniorityInMonth = 8; - let minimalSeniorityError = - "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois."; - let requiredSeniorityInYear = Math.max( - requiredSeniorityLegal, - requiredSeniorityAgreement - ); - switch (agreement?.num) { - case 3239: - requiredSeniorityInYear = requiredSeniorityAgreement; - if (stateInfo.publicodesInformations[0].info === "'Assistant maternel'") { - minimalSeniorityInMonth = 9; - minimalSeniorityError = - "L’indemnité de licenciement n’est pas due lorsque l’ancienneté de l'assistant maternel est inférieure à 9 mois."; - } - break; - case 2596: - requiredSeniorityInYear = requiredSeniorityAgreement; - if ( - stateInfo.publicodesInformations?.length > 0 && - (stateInfo.publicodesInformations[0]?.info === "'Cadres'" || - stateInfo.publicodesInformations[0]?.info === "'Agents de maîtrise'") - ) { - minimalSeniorityInMonth = 0; - } - break; - case 1404: - requiredSeniorityInYear = requiredSeniorityAgreement; - if ( - stateInfo.publicodesInformations?.length > 0 && - stateInfo.publicodesInformations[0]?.info === "'Oui'" // CDI d'opération - ) { - minimalSeniorityInMonth = 0; - } - break; - } - const isEligible = requiredSeniorityInYear >= minimalSeniorityInMonth / 12; - return !isEligible ? minimalSeniorityError : undefined; -}; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/store.ts index 68767648e8..4e2a449631 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete/store/store.ts @@ -18,11 +18,10 @@ import { SupportedCcIndemniteLicenciement, } from "@socialgouv/modeles-social"; import { informationToSituation } from "../../../../CommonSteps/Informations/utils"; -import { getErrorEligibility } from "./eligibility"; import { customSeniorityValidator } from "../../../agreements/seniority"; import { ContratTravailStoreSlice } from "../../ContratTravail/store"; import { ValidationResponse } from "../../../../Components/SimulatorLayout"; -import { MainStore } from "../../../store"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: AncienneteStoreData = { hasBeenSubmit: false, @@ -39,7 +38,8 @@ const createAncienneteStore: StoreSlice< SalairesStoreSlice & CommonAgreementStoreSlice & CommonInformationsStoreSlice & - ContratTravailStoreSlice + ContratTravailStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ ancienneteData: { ...initialState }, ancienneteFunction: { @@ -118,15 +118,37 @@ const createAncienneteStore: StoreSlice< get().agreementData.input.agreement ); + const publicodes = get().agreementData.publicodes; + const infos = informationToSituation( + get().informationsData.input.publicodesInformations + ); + const { licenciementInaptitude, arretTravail } = + get().contratTravailData.input; + const { dateEntree, dateNotification, dateSortie, absencePeriods } = + get().ancienneteData.input; + const situation = { + ...get().situationData.situation, + ...infos, + "contrat salarié . indemnité de licenciement . date d'entrée": + dateEntree, + "contrat salarié . indemnité de licenciement . date de notification": + dateNotification, + "contrat salarié . indemnité de licenciement . date de sortie": + dateSortie, + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + licenciementInaptitude, + "contrat salarié . indemnité de licenciement . arrêt de travail": + arretTravail, + absencePeriods: + absencePeriods && absencePeriods.length + ? JSON.stringify(absencePeriods) + : undefined, + }; + const { result, ineligibility } = publicodes.calculate(situation); let errorEligibility; - if (isValid) { - errorEligibility = getErrorEligibility( - get as StoreApi["getState"], - get().ancienneteData.input, - get().informationsData.input, - get().contratTravailData.input.licenciementInaptitude === "oui", - get().agreementData.input.agreement - ); + + if (isValid && result.value === 0 && ineligibility) { + errorEligibility = ineligibility; } set( diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/index.tsx b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/index.tsx index 9b046adc1a..a7c647cd65 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/index.tsx +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/index.tsx @@ -9,6 +9,7 @@ import { const StepContratTravail = (): JSX.Element => { const store = useContext(IndemniteLicenciementContext); const { + data, licenciementFauteGrave, onChangeLicenciementFauteGrave, licenciementInaptitude, @@ -25,6 +26,7 @@ const StepContratTravail = (): JSX.Element => { onChangeDateArretTravail, errorDateArretTravail, } = useIndemniteLicenciementStore(store, (state) => ({ + data: state.contratTravailData.input, licenciementFauteGrave: state.contratTravailData.input.licenciementFauteGrave, onChangeLicenciementFauteGrave: diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/eligibility.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/eligibility.ts deleted file mode 100644 index 9d2fa0d194..0000000000 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/eligibility.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { ContratTravailStoreInput } from "./types"; - -export const getErrorEligibility = (state: ContratTravailStoreInput) => { - const elligibilityCheck: { - errorEligibility: string; - isIneligible: (input: ContratTravailStoreInput) => boolean; - }[] = [ - { - isIneligible: ({ typeContratTravail }) => typeContratTravail === "cdd", - errorEligibility: `L’indemnité de licenciement n’est pas due pour les CDD et contrats de travail temporaires. Sous certaines conditions, le salarié peut avoir le droit à une indemnité de précarité.`, - }, - { - isIneligible: ({ licenciementFauteGrave }) => - licenciementFauteGrave === "oui", - errorEligibility: `L’indemnité de licenciement n’est pas due en cas de faute grave (ou lourde). - Lorsqu’il est invoqué, le motif de faute grave doit apparaître précisément dans le courrier. Reportez-vous à la lettre de notification de licenciement.`, - }, - ]; - const { errorEligibility } = elligibilityCheck.find(({ isIneligible }) => - isIneligible(state) - ) ?? { errorEligibility: "" }; - return errorEligibility; -}; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/store.ts index 8fe5c04ad5..ed4335b3d2 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/store.ts @@ -7,10 +7,12 @@ import { import produce from "immer"; import { StoreSlice } from "../../../../types"; import { validateStep } from "./validator"; -import { getErrorEligibility } from "./eligibility"; import { AncienneteStoreSlice } from "../../Anciennete/store"; import { ValidationResponse } from "../../../../Components/SimulatorLayout"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; +import { loadPublicodes } from "../../../../api"; +import { PublicodesSimulator } from "@socialgouv/modeles-social"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: ContratTravailStoreData = { input: {}, @@ -24,14 +26,18 @@ const initialState: ContratTravailStoreData = { const createContratTravailStore: StoreSlice< ContratTravailStoreSlice, - AncienneteStoreSlice & CommonInformationsStoreSlice + AncienneteStoreSlice & + CommonInformationsStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ contratTravailData: { ...initialState }, contratTravailFunction: { onChangeTypeContratTravail: (value) => { + get().situationFunction.setSituation("typeContratTravail", value); applyGenericValidation(get, set, "typeContratTravail", value); }, onChangeLicenciementFauteGrave: (value) => { + get().situationFunction.setSituation("licenciementFauteGrave", value); applyGenericValidation(get, set, "licenciementFauteGrave", value); }, onChangeLicenciementInaptitude: (value) => { @@ -53,10 +59,17 @@ const createContratTravailStore: StoreSlice< onNextStep: () => { const state = get().contratTravailData.input; const { isValid, errorState } = validateStep(state); + const publicodes = + loadPublicodes( + PublicodesSimulator.INDEMNITE_LICENCIEMENT + ); + const { result, ineligibility } = publicodes.calculate( + get().situationData.situation + ); let errorEligibility; - if (isValid) { - errorEligibility = getErrorEligibility(state); + if (result.value === 0 && ineligibility) { + errorEligibility = ineligibility; } set( @@ -77,7 +90,9 @@ const createContratTravailStore: StoreSlice< }); const applyGenericValidation = ( - get: StoreApi["getState"], + get: StoreApi< + ContratTravailStoreSlice & CommonSituationStoreSlice + >["getState"], set: StoreApi["setState"], paramName: keyof ContratTravailStoreInput, value: any diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/types.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/types.ts index 23f490cfaa..4838cfd2ac 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/types.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/ContratTravail/store/types.ts @@ -2,7 +2,7 @@ import { StepData } from "../../../store"; import { OuiNon } from "../../../common/types"; import { ValidationResponse } from "../../../../Components/SimulatorLayout"; -type CdiCdd = "cdi" | "cdd"; +export type CdiCdd = "cdi" | "cdd"; export type ContratTravailStoreInput = { typeContratTravail?: CdiCdd; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/store.ts index c152e15032..9a7bd15aa1 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/store.ts @@ -5,14 +5,12 @@ import { PublicodesIndemniteLicenciementResult, PublicodesSimulator, References, - SeniorityFactory, SeniorityResult, - SupportedCcIndemniteLicenciement, } from "@socialgouv/modeles-social"; import { StoreSlice } from "../../../../types"; import { + mapToPublicodesSituationForCalculation, mapToPublicodesSituationForIndemniteLicenciementConventionnelWithValues, - mapToPublicodesSituationForIndemniteLicenciementLegal, } from "../../../../publicodes"; import { AncienneteStoreSlice } from "../../Anciennete/store"; import { ContratTravailStoreSlice } from "../../ContratTravail/store"; @@ -22,22 +20,12 @@ import produce from "immer"; import { ResultStoreData, ResultStoreSlice } from "./types"; import { CommonAgreementStoreSlice } from "../../../../CommonSteps/Agreement/store"; import { CommonInformationsStoreSlice } from "../../../../CommonSteps/Informations/store"; -import { - getAgreementExtraInfoSalary, - getAgreementReferenceSalary, -} from "../../../agreements"; import { isParentalNoticeHiddenForAgreement } from "../../../agreements/ui-customizations/messages"; import { AgreementInformation, hasNoLegalIndemnity, hasNoBetterAllowance, } from "../../../common"; -import { MainStore } from "../../../store"; -import { StoreApi } from "zustand"; -import { - getAgreementRequiredSeniority, - getAgreementSeniority, -} from "../../../agreements/seniority"; import { informationToSituation } from "../../../../CommonSteps/Informations/utils"; import { getInfoWarning } from "./service"; import { IndemniteLicenciementStepName } from "../../.."; @@ -49,11 +37,11 @@ import { import { push as matopush } from "@socialgouv/matomo-next"; import getSupportedCcIndemniteLicenciement from "../../../common/usecase/getSupportedCc"; import * as Sentry from "@sentry/nextjs"; +import { CommonSituationStoreSlice } from "../../../../common/situationStore"; const initialState: ResultStoreData = { input: { legalFormula: { formula: "", explanations: [] }, - legalSeniority: 0, legalReferences: [], publicodesLegalResult: { value: "" }, isAgreementBetter: false, @@ -93,7 +81,8 @@ const createResultStore: StoreSlice< ContratTravailStoreSlice & SalairesStoreSlice & CommonAgreementStoreSlice & - CommonInformationsStoreSlice + CommonInformationsStoreSlice & + CommonSituationStoreSlice > = (set, get) => ({ resultData: { ...initialState, @@ -156,13 +145,14 @@ const createResultStore: StoreSlice< ); }, getPublicodesResult: () => { - const refSalary = get().salairesData.input.refSalary; + const salaryPeriods = get().salairesData.input.salaryPeriods; const agreement = get().agreementData.input.agreement; const isLicenciementInaptitude = get().contratTravailData.input.licenciementInaptitude === "oui"; const longTermDisability = get().contratTravailData.input.arretTravail === "oui"; const publicodes = get().agreementData.publicodes; + const dateEntree = get().ancienneteData.input.dateEntree!; const dateNotification = get().ancienneteData.input.dateNotification!; const dateSortie = get().ancienneteData.input.dateSortie!; const isAgreementSupported = @@ -172,36 +162,28 @@ const createResultStore: StoreSlice< throw new Error("Publicodes is not defined"); } - const factory = new SeniorityFactory().create( - SupportedCcIndemniteLicenciement.default - ); - const legalSeniority = factory.computeSeniority({ - dateEntree: get().ancienneteData.input.dateEntree!, - dateSortie, - absencePeriods: get().ancienneteData.input.absencePeriods, - }); - - const legalRequiredSeniority = factory.computeRequiredSeniority({ - dateEntree: get().ancienneteData.input.dateEntree!, - dateNotification, - dateSortie: get().ancienneteData.input.dateSortie!, - absencePeriods: get().ancienneteData.input.absencePeriods, - }); let publicodesSituationLegal: PublicodesIndemniteLicenciementResult = { value: null, }; let errorPublicodes = false; + const absencePeriods = get().ancienneteData.input.absencePeriods; try { - publicodesSituationLegal = publicodes.setSituation( - mapToPublicodesSituationForIndemniteLicenciementLegal( - legalSeniority.value, - legalRequiredSeniority.value, - refSalary, + const situationLegal = { + ...mapToPublicodesSituationForCalculation( + dateEntree, + dateNotification, + dateSortie, + salaryPeriods, isLicenciementInaptitude, longTermDisability - ) - ).result; + ), + absencePeriods: + absencePeriods && absencePeriods.length + ? JSON.stringify(absencePeriods) + : undefined, + }; + publicodesSituationLegal = publicodes.calculate(situationLegal).result; } catch (e) { errorPublicodes = true; Sentry.captureException(e); @@ -215,8 +197,6 @@ const createResultStore: StoreSlice< { value: null, }; - let agreementSeniority: SeniorityResult; - let agreementRefSalary: number; let agreementReferences: References[]; let agreementFormula: Formula; let isAgreementBetter = false; @@ -226,7 +206,6 @@ const createResultStore: StoreSlice< let notifications: Notification[]; let agreementHasNoLegalIndemnity: boolean; let agreementHasNoBetterAllowance: boolean; - let agreementSalaryExtraInfo: Record = {}; let isParentalNoticeHidden = false; if ( @@ -239,16 +218,6 @@ const createResultStore: StoreSlice< get().informationsData.input.publicodesInformations ); - agreementRefSalary = getAgreementReferenceSalary( - getSupportedAgreement(agreement.num), - get as StoreApi["getState"] - ); - - agreementSalaryExtraInfo = getAgreementExtraInfoSalary( - getSupportedAgreement(agreement.num), - get as StoreApi["getState"] - ); - agreementInformations = get() .informationsData.input.publicodesInformations.map( (v) => @@ -261,29 +230,26 @@ const createResultStore: StoreSlice< ) .filter((v) => v !== "") as AgreementInformation[]; - agreementSeniority = getAgreementSeniority( - getSupportedAgreement(agreement.num), - get as StoreApi["getState"] - ); - - const agreementRequiredSeniority = getAgreementRequiredSeniority( - getSupportedAgreement(agreement.num), - get as StoreApi["getState"] - ); - try { - publicodesSituationConventionnel = publicodes.setSituation( - mapToPublicodesSituationForIndemniteLicenciementConventionnelWithValues( + const situation = { + ...mapToPublicodesSituationForIndemniteLicenciementConventionnelWithValues( agreement.num, - agreementSeniority, - agreementRefSalary, - agreementRequiredSeniority.value, + salaryPeriods, get().ancienneteData.input.dateNotification!, get().ancienneteData.input.dateEntree!, + get().ancienneteData.input.dateSortie!, isLicenciementInaptitude, longTermDisability, - { ...infos, ...agreementSalaryExtraInfo } + { ...infos } ), + absencePeriods: + absencePeriods && absencePeriods.length + ? JSON.stringify(absencePeriods) + : undefined, + ...get().situationData.situation, + }; + publicodesSituationConventionnel = publicodes.calculate( + situation, "contrat salarié . indemnité de licenciement . résultat conventionnel" ).result; } catch (e) { @@ -356,14 +322,12 @@ const createResultStore: StoreSlice< set( produce((state: ResultStoreSlice) => { state.resultData.error.errorPublicodes = errorPublicodes; - state.resultData.input.legalSeniority = legalSeniority.value; state.resultData.input.legalFormula = legalFormula; state.resultData.input.legalReferences = legalReferences; state.resultData.input.publicodesLegalResult = publicodesSituationLegal; state.resultData.input.publicodesAgreementResult = publicodesSituationConventionnel; - state.resultData.input.agreementSeniority = agreementSeniority; state.resultData.input.agreementReferences = agreementReferences; state.resultData.input.agreementFormula = agreementFormula; state.resultData.input.isAgreementBetter = isAgreementBetter; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/types.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/types.ts index 1b68db982e..3f71e762e0 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/types.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Resultat/store/types.ts @@ -13,7 +13,6 @@ export type ResultStoreInput = { publicodesLegalResult: PublicodesIndemniteLicenciementResult; publicodesAgreementResult?: PublicodesIndemniteLicenciementResult; agreementSeniority?: SeniorityResult; - legalSeniority: number; legalFormula: Formula; agreementFormula?: Formula; legalReferences: References[]; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/store.ts index 8d33cef257..c0ff0de3d6 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/store.ts @@ -13,9 +13,7 @@ import { validatorAgreement } from "../../../agreements"; import { getSupportedAgreement, PublicodesSimulator, - ReferenceSalaryFactory, SalaryPeriods, - SupportedCcIndemniteLicenciement, } from "@socialgouv/modeles-social"; import { IndemniteLicenciementStepName } from "../../.."; import { deepMergeArray } from "../../../../../lib"; @@ -27,9 +25,8 @@ import { add } from "date-fns"; const initialState: SalairesStoreData = { input: { - salaryPeriods: [], - refSalary: 0, showHasTempsPartiel: true, + salaryPeriods: [], }, error: {}, hasBeenSubmit: false, @@ -62,7 +59,7 @@ const createSalairesStore: StoreSlice< month: v, value: undefined, })); - const salaryPeriods = deepMergeArray( + let salaryPeriods = deepMergeArray( p, get().salairesData.input.salaryPeriods, "month" @@ -106,10 +103,6 @@ const createSalairesStore: StoreSlice< if (isValid) { const salaryInput = get().salairesData.input; - const sReference = new ReferenceSalaryFactory().create( - SupportedCcIndemniteLicenciement.default - ); - let salaries = salaryInput.salaryPeriods; const { salary } = salaryInput; @@ -119,19 +112,13 @@ const createSalairesStore: StoreSlice< salaries = salaryInput.salaryPeriods.map((v) => ({ ...v, value: parseSalary, - prime: undefined, })); + set( + produce((state: SalairesStoreSlice) => { + state.salairesData.input.salaryPeriods = salaries; + }) + ); } - - const refSalary = sReference.computeReferenceSalary({ - salaires: salaries, - }); - - set( - produce((state: SalairesStoreSlice) => { - state.salairesData.input.refSalary = refSalary; - }) - ); } const agreement = get().agreementData.input.agreement; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/types.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/types.ts index a33b98aae6..0118c7fc63 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/types.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Salaires/store/types.ts @@ -6,7 +6,6 @@ import { ValidationResponse } from "../../../../Components/SimulatorLayout"; export type SalairesStoreInput = { hasTempsPartiel?: OuiNon; salaryPeriods: SalaryPeriods[]; - refSalary: number; hasSameSalary?: OuiNon; salary?: string; showHasTempsPartiel: boolean; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/store.ts b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/store.ts index 5698f2d396..50724d208f 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/store.ts +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/store.ts @@ -42,6 +42,11 @@ import { createCommonInformationsStore, } from "../CommonSteps/Informations/store"; +import { + createCommonSituationStore, + CommonSituationStoreSlice, +} from "../common/situationStore"; + import { ToolName } from "../types"; import { createContext, useContext } from "react"; import { PublicodesSimulator } from "@socialgouv/modeles-social"; @@ -52,7 +57,8 @@ export type MainStore = ContratTravailStoreSlice & ResultStoreSlice & AgreementStoreSlice & CommonAgreementStoreSlice & - CommonInformationsStoreSlice; + CommonInformationsStoreSlice & + CommonSituationStoreSlice; export type StepData< T extends @@ -95,6 +101,7 @@ const createRootSlice = ( ...createRootAgreementsStore(set, get, { toolName }), ...createCommonAgreementStore(set, get, { toolName, simulatorName }), ...createCommonInformationsStore(set, get, { toolName }), + ...createCommonSituationStore(set, get, { toolName }), }); const createStore = (simulatorName: PublicodesSimulator, toolName: ToolName) => diff --git a/packages/code-du-travail-frontend/src/outils/common/situationStore.ts b/packages/code-du-travail-frontend/src/outils/common/situationStore.ts new file mode 100644 index 0000000000..598065ded0 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/common/situationStore.ts @@ -0,0 +1,36 @@ +import produce from "immer"; +import { StoreSlice } from "../types"; + +type CommonSituationStoreData = { + situation: Record; +}; + +type CommonSituationStoreFn = { + setSituation: (key: string, value: string) => void; +}; + +export type CommonSituationStoreSlice = { + situationData: CommonSituationStoreData; + situationFunction: CommonSituationStoreFn; +}; + +const initialState: CommonSituationStoreData = { + situation: {}, +}; + +export const createCommonSituationStore: StoreSlice< + CommonSituationStoreSlice +> = (set) => ({ + situationData: { + ...initialState, + }, + situationFunction: { + setSituation(key, value) { + set( + produce((state: CommonSituationStoreSlice) => { + state.situationData.situation[key] = value; + }) + ); + }, + }, +}); diff --git a/packages/code-du-travail-frontend/src/outils/publicodes/indemnite-licenciement.ts b/packages/code-du-travail-frontend/src/outils/publicodes/indemnite-licenciement.ts index abefa1f17b..6b571ee7fc 100644 --- a/packages/code-du-travail-frontend/src/outils/publicodes/indemnite-licenciement.ts +++ b/packages/code-du-travail-frontend/src/outils/publicodes/indemnite-licenciement.ts @@ -1,20 +1,21 @@ -import { formatNumberAsString } from "./common"; -import { formatIdcc, SeniorityResult } from "@socialgouv/modeles-social"; +import { OuiNon } from "../IndemniteLicenciement/common"; +import { CdiCdd } from "../IndemniteLicenciement/steps/ContratTravail/store"; +import { formatIdcc, SalaryPeriods } from "@socialgouv/modeles-social"; -export const mapToPublicodesSituationForIndemniteLicenciementLegal = ( - seniority: number, - requiredSeniority: number, - salaireRef: number, +export const mapToPublicodesSituationForCalculation = ( + startDate: string, + notificationDate: string, + endDate: string, + salaryPeriods: SalaryPeriods[], inaptitude: boolean, longTermDisability: boolean ): Record => { return { - "contrat salarié . indemnité de licenciement . salaire de référence": - formatNumberAsString(salaireRef), - "contrat salarié . indemnité de licenciement . ancienneté en année": - formatNumberAsString(seniority), - "contrat salarié . indemnité de licenciement . ancienneté requise en année": - formatNumberAsString(requiredSeniority), + salaryPeriods: JSON.stringify(salaryPeriods), + "contrat salarié . indemnité de licenciement . date d'entrée": startDate, + "contrat salarié . indemnité de licenciement . date de notification": + notificationDate, + "contrat salarié . indemnité de licenciement . date de sortie": endDate, "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": inaptitude ? "oui" : "non", "contrat salarié . indemnité de licenciement . arrêt de travail": @@ -43,11 +44,10 @@ export const mapToPublicodesSituationForIndemniteLicenciementConventionnel = ( export const mapToPublicodesSituationForIndemniteLicenciementConventionnelWithValues = ( ccn: number, - agreementSeniority: SeniorityResult, - agreementSalaireRef: number, - requiredSeniority: number, + salaryPeriods: SalaryPeriods[], notificationDate: string, entryDate: string, + endDate: string, inaptitude: boolean, longTermDisability: boolean, agreementParameters?: Record @@ -58,18 +58,14 @@ export const mapToPublicodesSituationForIndemniteLicenciementConventionnelWithVa longTermDisability, { ...agreementParameters, - ...(agreementSeniority?.extraInfos ?? {}), ...{ - "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année": - formatNumberAsString(agreementSeniority.value), - "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": - formatNumberAsString(agreementSalaireRef), + salaryPeriods: JSON.stringify(salaryPeriods), "contrat salarié . indemnité de licenciement . date de notification": notificationDate, "contrat salarié . indemnité de licenciement . date d'entrée": entryDate, - "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année": - requiredSeniority, + "contrat salarié . indemnité de licenciement . date de sortie": + endDate, }, } ); diff --git a/packages/code-du-travail-modeles/src/modeles/base/__tests__/indemnite-licenciement/calculate.spec.ts b/packages/code-du-travail-modeles/src/modeles/base/__tests__/indemnite-licenciement/calculate.spec.ts new file mode 100644 index 0000000000..02ae932828 --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/base/__tests__/indemnite-licenciement/calculate.spec.ts @@ -0,0 +1,140 @@ +import { IndemniteLicenciementPublicodes } from "../../../../publicodes"; +import type { SalaryPeriods } from "../../../common"; + +const engine = new IndemniteLicenciementPublicodes(modelsIndemniteLicenciement); + +describe("Test de la fonctionnalité 'calculate'", () => { + test("Vérifier que l'ancienneté peut être remplacer par les dates en input", () => { + const { result, missingArgs } = engine.calculate({ + absencePeriods: "[]", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2022", + "contrat salarié . indemnité de licenciement . date de notification": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/01/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence": + "2000", + licenciementFauteGrave: "non", + typeContratTravail: "cdi", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(1000); + expect(result.unit?.numerators).toEqual(["€"]); + }); + + test("Vérifier qu'un missing args s'affiche lorsque la date d'entrée est manquante", () => { + const { missingArgs } = engine.calculate({ + "contrat salarié . indemnité de licenciement . date de notification": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/01/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence": + "2000", + licenciementFauteGrave: "non", + typeContratTravail: "cdi", + }); + expect(missingArgs[0].name).toEqual( + "contrat salarié . indemnité de licenciement . date d'entrée" + ); + }); + + test("Vérifier que l'ancienneté est bien calculé avec les congés", () => { + const { result, missingArgs } = engine.calculate({ + absencePeriods: JSON.stringify([ + { motif: { key: "absenceMaladieNonPro" }, value: 6 }, + ]), + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/04/2022", + "contrat salarié . indemnité de licenciement . date de notification": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/01/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence": + "2000", + licenciementFauteGrave: "non", + typeContratTravail: "cdi", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(875); + expect(result.unit?.numerators).toEqual(["€"]); + }); + + test("Vérifier que la grille de salaire est bien prise en compte", () => { + const salaryPeriods: SalaryPeriods[] = [ + { month: "1", prime: 500, value: 2000 }, + { month: "2", prime: 500, value: 1000 }, + { month: "3", prime: 500, value: 3000 }, + ]; + const { result, missingArgs } = engine.calculate({ + absencePeriods: JSON.stringify([ + { motif: { key: "absenceMaladieNonPro" }, value: 6 }, + ]), + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/04/2022", + "contrat salarié . indemnité de licenciement . date de notification": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/01/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + licenciementFauteGrave: "non", + salaryPeriods: JSON.stringify(salaryPeriods), + typeContratTravail: "cdi", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(875); + expect(result.unit?.numerators).toEqual(["€"]); + }); + describe("Vérification que les ineligibilités fonctionnent", () => { + test("Vérifier l'ineligibilite CDD", () => { + const { result, missingArgs, ineligibility } = engine.calculate({ + typeContratTravail: "cdd", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(0); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due pour les CDD et contrats de travail temporaires. Sous certaines conditions, le salarié peut avoir le droit à une indemnité de précarité." + ); + }); + + test("Vérifier l'ineligibilite Faute grave", () => { + const { result, missingArgs, ineligibility } = engine.calculate({ + licenciementFauteGrave: "oui", + typeContratTravail: "cdi", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(0); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due en cas de faute grave (ou lourde). Lorsqu’il est invoqué, le motif de faute grave doit apparaître précisément dans le courrier. Reportez-vous à la lettre de notification de licenciement." + ); + }); + + test("Vérifier l'ineligibilite Anciennete legal inférieur 8 mois", () => { + const { result, missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . indemnité de licenciement . arrêt de travail": "non", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/06/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/06/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + licenciementFauteGrave: "non", + typeContratTravail: "cdi", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(0); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois." + ); + }); + }); +}); diff --git a/packages/code-du-travail-modeles/src/modeles/base/indemnite-licenciement.yaml b/packages/code-du-travail-modeles/src/modeles/base/indemnite-licenciement.yaml index d0e975981d..3a252890ad 100644 --- a/packages/code-du-travail-modeles/src/modeles/base/indemnite-licenciement.yaml +++ b/packages/code-du-travail-modeles/src/modeles/base/indemnite-licenciement.yaml @@ -1,7 +1,7 @@ contrat salarié . indemnité de licenciement: valeur: oui -contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle: +contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle: non contrat salarié . indemnité de licenciement . arrêt de travail: non @@ -11,6 +11,18 @@ contrat salarié . indemnité de licenciement . salaire de référence: contrat salarié . indemnité de licenciement . salaire de référence conventionnel: unité: € +contrat salarié . indemnité de licenciement . date d'entrée: + valeur: 01/01/2024 # mettre une valeur par défaut pour éviter les erreurs liées aux missing-args + +contrat salarié . indemnité de licenciement . date de notification: + valeur: 01/01/2024 # mettre une valeur par défaut pour éviter les erreurs liées aux missing-args + +contrat salarié . indemnité de licenciement . date de sortie: + valeur: non + +contrat salarié . indemnité de licenciement . avec congé maladie non professionnelle: + valeur: non + contrat salarié . indemnité de licenciement . ancienneté en année: titre: Ancienneté calculée pour le calcul de l'indemnité de licenciement unité: an @@ -189,9 +201,3 @@ contrat salarié . indemnité de licenciement . résultat conventionnel identiqu contrat salarié . indemnité de licenciement . résultat conventionnel: valeur: 0 unité: € - -contrat salarié . indemnité de licenciement . date de notification: - valeur: 01/01/2024 # mettre une valeur par défaut pour éviter les erreurs liées aux missing-args - -contrat salarié . indemnité de licenciement . date d'entrée: - valeur: 01/01/2024 # mettre une valeur par défaut pour éviter les erreurs liées aux missing-args diff --git a/packages/code-du-travail-modeles/src/modeles/base/index.ts b/packages/code-du-travail-modeles/src/modeles/base/index.ts index 028889ad2e..9bd33966dc 100644 --- a/packages/code-du-travail-modeles/src/modeles/base/index.ts +++ b/packages/code-du-travail-modeles/src/modeles/base/index.ts @@ -1,2 +1,3 @@ +export * from "./ineligibility"; export * from "./salary"; export * from "./seniority"; diff --git a/packages/code-du-travail-modeles/src/modeles/base/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/base/ineligibility.ts new file mode 100644 index 0000000000..fff99cc271 --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/base/ineligibility.ts @@ -0,0 +1,60 @@ +import type { IInegibility } from "../common/types/ineligibility"; + +export class IneligibilityLegal implements IInegibility { + getContractIneligibility( + args: Record + ): string | undefined { + if (args.typeContratTravail && args.typeContratTravail === "cdd") { + return "L’indemnité de licenciement n’est pas due pour les CDD et contrats de travail temporaires. Sous certaines conditions, le salarié peut avoir le droit à une indemnité de précarité."; + } else if ( + args.licenciementFauteGrave && + args.licenciementFauteGrave === "oui" + ) { + return "L’indemnité de licenciement n’est pas due en cas de faute grave (ou lourde). Lorsqu’il est invoqué, le motif de faute grave doit apparaître précisément dans le courrier. Reportez-vous à la lettre de notification de licenciement."; + } + } + + getSeniorityIneligibility( + args: Record + ): string | undefined { + if ( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] && + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] && + args[ + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle" + ] === "non" && + Math.max( + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] + ), + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] + ) + ) < + 8 / 12 + ) { + return "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois."; + } + } + + getIneligibility( + args: Record + ): string | undefined { + const contractIneligility = this.getContractIneligibility(args); + if (contractIneligility) { + return contractIneligility; + } + const seniorityIneligibility = this.getSeniorityIneligibility(args); + if (seniorityIneligibility) { + return seniorityIneligibility; + } + } +} diff --git a/packages/code-du-travail-modeles/src/modeles/common/factory/index.ts b/packages/code-du-travail-modeles/src/modeles/common/factory/index.ts index 028889ad2e..9bd33966dc 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/factory/index.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/factory/index.ts @@ -1,2 +1,3 @@ +export * from "./ineligibility"; export * from "./salary"; export * from "./seniority"; diff --git a/packages/code-du-travail-modeles/src/modeles/common/factory/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/common/factory/ineligibility.ts new file mode 100644 index 0000000000..3b5e8612a4 --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/common/factory/ineligibility.ts @@ -0,0 +1,23 @@ +import { IneligibilityLegal } from "../../base"; +import { + Ineligibility1404, + Ineligibility2596, + Ineligibility3239, +} from "../../conventions"; +import { SupportedCcIndemniteLicenciement } from ".."; +import type { IInegibility } from "../types/ineligibility"; + +export class IneligibilityFactory { + create(idcc: T): IInegibility { + switch (idcc) { + case SupportedCcIndemniteLicenciement.IDCC3239: + return new Ineligibility3239(); + case SupportedCcIndemniteLicenciement.IDCC2596: + return new Ineligibility2596(); + case SupportedCcIndemniteLicenciement.IDCC1404: + return new Ineligibility1404(); + default: + return new IneligibilityLegal(); + } + } +} diff --git a/packages/code-du-travail-modeles/src/modeles/common/factory/salary.ts b/packages/code-du-travail-modeles/src/modeles/common/factory/salary.ts index 59be2f1794..41c91f5795 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/factory/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/factory/salary.ts @@ -45,7 +45,7 @@ export class ReferenceSalaryFactory { case SupportedCcIndemniteLicenciement.IDCC3239: return new ReferenceSalary3239() as IReferenceSalary; case SupportedCcIndemniteLicenciement.IDCC0016: - return new ReferenceSalary16() as IReferenceSalary; + return new ReferenceSalary16() as any; case SupportedCcIndemniteLicenciement.IDCC0044: return new ReferenceSalary44() as IReferenceSalary; case SupportedCcIndemniteLicenciement.IDCC0573: diff --git a/packages/code-du-travail-modeles/src/modeles/common/factory/seniority.ts b/packages/code-du-travail-modeles/src/modeles/common/factory/seniority.ts index fc903187df..b83a32e8f8 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/factory/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/factory/seniority.ts @@ -36,12 +36,9 @@ import { Seniority3248, } from "../../conventions"; import { SupportedCcIndemniteLicenciement } from "../index"; -import type { ISeniority } from "../types"; export class SeniorityFactory { - create( - idcc: T | null - ): ISeniority { + create(idcc: T | null): any { switch (idcc) { case SupportedCcIndemniteLicenciement.IDCC2511: return new Seniority2511(); @@ -58,13 +55,13 @@ export class SeniorityFactory { case SupportedCcIndemniteLicenciement.IDCC1527: return new Seniority1527(); case SupportedCcIndemniteLicenciement.IDCC0016: - return new Seniority16() as ISeniority; + return new Seniority16(); case SupportedCcIndemniteLicenciement.IDCC0292: - return new Seniority0292() as ISeniority; + return new Seniority0292(); case SupportedCcIndemniteLicenciement.IDCC3239: return new Seniority3239(); case SupportedCcIndemniteLicenciement.IDCC650: - return new Seniority650() as ISeniority; + return new Seniority650(); case SupportedCcIndemniteLicenciement.IDCC2216: return new Seniority2216(); case SupportedCcIndemniteLicenciement.IDCC0044: @@ -76,7 +73,7 @@ export class SeniorityFactory { case SupportedCcIndemniteLicenciement.IDCC2609: return new Seniority2609(); case SupportedCcIndemniteLicenciement.IDCC413: - return new Seniority413() as ISeniority; + return new Seniority413(); case SupportedCcIndemniteLicenciement.IDCC1516: return new Seniority1516(); case SupportedCcIndemniteLicenciement.IDCC1517: @@ -96,7 +93,7 @@ export class SeniorityFactory { case SupportedCcIndemniteLicenciement.IDCC1606: return new Seniority1606(); case SupportedCcIndemniteLicenciement.IDCC1672: - return new Seniority1672() as ISeniority; + return new Seniority1672(); case SupportedCcIndemniteLicenciement.IDCC1483: return new Seniority1483(); case SupportedCcIndemniteLicenciement.IDCC1702: @@ -110,7 +107,7 @@ export class SeniorityFactory { case SupportedCcIndemniteLicenciement.IDCC2120: return new Seniority2120(); case SupportedCcIndemniteLicenciement.IDCC3248: - return new Seniority3248() as ISeniority; + return new Seniority3248(); case SupportedCcIndemniteLicenciement.default: default: return new SeniorityLegal(); diff --git a/packages/code-du-travail-modeles/src/modeles/common/seniority.ts b/packages/code-du-travail-modeles/src/modeles/common/seniority.ts index e8cda1051c..cd912a05a8 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/seniority.ts @@ -6,6 +6,7 @@ import type { Motif, RequiredSeniorityResult, SeniorityProps, + SeniorityRequiredProps, SeniorityResult, SupportedCcIndemniteLicenciement, } from "./index"; @@ -25,6 +26,42 @@ export abstract class SeniorityDefault< T extends SupportedCcIndemniteLicenciement > implements ISeniority { + mapSituation(args: Record): SeniorityProps { + const absencePeriods: Absence[] = args.absencePeriods + ? JSON.parse(args.absencePeriods) + : []; + return { + absencePeriods, + dateEntree: + args["contrat salarié . indemnité de licenciement . date d'entrée"] ?? + "", + dateSortie: + args["contrat salarié . indemnité de licenciement . date de sortie"] ?? + "", + } as SeniorityProps; + } + + mapRequiredSituation( + args: Record + ): SeniorityRequiredProps { + const absencePeriods: Absence[] = args.absencePeriods + ? JSON.parse(args.absencePeriods) + : []; + return { + absencePeriods, + dateEntree: + args["contrat salarié . indemnité de licenciement . date d'entrée"] ?? + "", + dateNotification: + args[ + "contrat salarié . indemnité de licenciement . date de notification" + ] ?? "", + dateSortie: + args["contrat salarié . indemnité de licenciement . date de sortie"] ?? + "", + } as SeniorityRequiredProps; + } + computeSeniority({ dateEntree, dateSortie, diff --git a/packages/code-du-travail-modeles/src/modeles/common/types/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/common/types/ineligibility.ts new file mode 100644 index 0000000000..d96caf0c7b --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/common/types/ineligibility.ts @@ -0,0 +1,11 @@ +export interface IInegibility { + getContractIneligibility: ( + args: Record + ) => string | undefined; + getSeniorityIneligibility: ( + args: Record + ) => string | undefined; + getIneligibility: ( + args: Record + ) => string | undefined; +} diff --git a/packages/code-du-travail-modeles/src/modeles/common/types/salary.ts b/packages/code-du-travail-modeles/src/modeles/common/types/salary.ts index 94eacd578f..3ed3376016 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/types/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/types/salary.ts @@ -33,6 +33,9 @@ export interface IReferenceSalary { computeExtraInfo?: ( args: ReferenceSalaryProps ) => Record; + mapSituation?: ( + args: Record + ) => ReferenceSalaryProps; } export type ReferenceSalaryProps = diff --git a/packages/code-du-travail-modeles/src/modeles/common/types/seniority.ts b/packages/code-du-travail-modeles/src/modeles/common/types/seniority.ts index 398878c63a..97f2068890 100644 --- a/packages/code-du-travail-modeles/src/modeles/common/types/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/common/types/seniority.ts @@ -33,6 +33,10 @@ export type Motif = { }; export interface ISeniority { + mapSituation: (args: Record) => SeniorityProps; + mapRequiredSituation: ( + args: Record + ) => SeniorityRequiredProps; computeSeniority: (args: SeniorityProps) => SeniorityResult; computeRequiredSeniority: ( args: SeniorityRequiredProps diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1090_automobiles/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1090_automobiles/seniority.ts index 5cda94fe18..1ff0e7eff6 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1090_automobiles/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1090_automobiles/seniority.ts @@ -2,7 +2,6 @@ import { addDays, differenceInMonths } from "date-fns"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -12,10 +11,9 @@ import type { } from "../../common"; import { parseDate } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority1090 - implements ISeniority -{ +export class Seniority1090 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -36,7 +34,7 @@ export class Seniority1090 return MOTIFS_1090; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/calculate.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/calculate.spec.ts new file mode 100644 index 0000000000..b456b07067 --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/calculate.spec.ts @@ -0,0 +1,49 @@ +import { IndemniteLicenciementPublicodes } from "../../../../../publicodes"; + +const engine = new IndemniteLicenciementPublicodes( + modelsIndemniteLicenciement, + "1404" +); + +describe("Test de la fonctionnalité 'calculate'", () => { + test("Vérifier qu'il n'y a pas l'eligibilite Anciennete inférieur 8 mois quand cdi opération", () => { + const { missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective": "'IDCC1404'", + "contrat salarié . convention collective . sedima . question cdi opération": + "oui", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/08/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/08/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + "2600", + }); + expect(missingArgs).toEqual([]); + expect(ineligibility).toBeUndefined(); + }); + test("Vérifier qu'il n'y a pas l'eligibilite Anciennete inférieur 8 mois quand pas cdi opération", () => { + const { missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective": "'IDCC1404'", + "contrat salarié . convention collective . sedima . question cdi opération": + "non", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/08/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/08/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + "2600", + }); + expect(missingArgs).toEqual([]); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois." + ); + }); +}); diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/indemnite.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/indemnite.spec.ts index 272c639299..3c981d3537 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/indemnite.spec.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/__tests__/indemnite-licenciement/indemnite.spec.ts @@ -121,8 +121,6 @@ describe("Calcul de l'indemnité de licenciement pour CC 1404", () => { "contrat salarié . indemnité de licenciement . résultat conventionnel" ); - console.log(result); - expect(missingArgs).toEqual([]); expect(result.value).toEqual(expectedCompensation); expect(result.unit?.numerators).toEqual(["€"]); diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/index.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/index.ts index 33e2c6495e..ad5c2c716c 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/index.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/index.ts @@ -1 +1,2 @@ +export * from "./ineligibility"; export * from "./seniority"; diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/ineligibility.ts new file mode 100644 index 0000000000..3ab232ed7b --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/ineligibility.ts @@ -0,0 +1,40 @@ +import { IneligibilityLegal } from "../../base"; + +export class Ineligibility1404 extends IneligibilityLegal { + getIneligibility( + args: Record + ): string | undefined { + const contractIneligibility = this.getContractIneligibility(args); + if (contractIneligibility) { + return contractIneligibility; + } + if ( + args[ + "contrat salarié . convention collective . sedima . question cdi opération" + ] && + args[ + "contrat salarié . convention collective . sedima . question cdi opération" + ] === "non" && + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] && + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] && + Math.max( + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] + ), + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] + ) + ) < 8 + ) { + return "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois."; + } + } +} diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/seniority.ts index fe3aa6e2da..3ebe8b8f7e 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1404_sedima/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -17,6 +16,7 @@ import { splitBySeniorityCalendarYear, } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; const getTotalAbsenceNonPro = ( dEntree: Date, @@ -35,9 +35,7 @@ const getTotalAbsenceNonPro = ( }, 0); }; -export class Seniority1404 - implements ISeniority -{ +export class Seniority1404 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -66,7 +64,7 @@ export class Seniority1404 }); } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1483_habillement_textiles_commerce_de_detail/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1483_habillement_textiles_commerce_de_detail/salary.ts index 730a770d08..f5ab235a61 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1483_habillement_textiles_commerce_de_detail/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1483_habillement_textiles_commerce_de_detail/salary.ts @@ -14,6 +14,19 @@ export type CC1483ReferenceSalaryProps = { export class ReferenceSalary1483 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.salairesPendantPreavis + ? JSON.parse(args.salairesPendantPreavis) + : undefined, + }; + } + /** * Règle : * - soit 1/12 * S diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/salary.ts index 7522b76a58..18521994b8 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/salary.ts @@ -27,6 +27,22 @@ export type CC1486ReferenceSalaryProps = { export class ReferenceSalary1486 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + catPro: args[ + "contrat salarié . convention collective . bureaux études techniques . indemnité de licenciement . catégorie professionnelle" + ] as CatPro1486, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + typeLicenciement: args[ + "contrat salarié . convention collective . bureaux études techniques . indemnité de licenciement . type de licenciement" + ] as TypeLicenciement1486, + }; + } + /** * Règle : * ETAM, Ingénieurs et Cadres - Autres licenciements : diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/seniority.ts index ec2a09b664..4c9df948e1 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1486_bureaux_etudes_techniques/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths, isBefore } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -12,10 +11,9 @@ import type { SupportedCcIndemniteLicenciement, } from "../../common"; import { MotifKeys, parseDate } from "../../common"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority1486 - implements ISeniority -{ +export class Seniority1486 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -36,7 +34,7 @@ export class Seniority1486 return LEGAL_MOTIFS; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/salary.ts index c91854a316..3b7b6ac28e 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/salary.ts @@ -14,6 +14,19 @@ export type CC1516ReferenceSalaryProps = { export class ReferenceSalary1516 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + /** * Règle : * - soit 1/12*S diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/seniority.ts index f4862a88e3..96b4fc89ba 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1516_organismes_formation/seniority.ts @@ -4,7 +4,6 @@ import { LEGAL_MOTIFS } from "../../base"; import type { Absence, DefaultSeniorityRequiredProps, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -12,10 +11,9 @@ import type { SupportedCcIndemniteLicenciement, } from "../../common"; import { MotifKeys, parseDate } from "../../common"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority1516 - implements ISeniority -{ +export class Seniority1516 extends SeniorityDefault { getMotifs(): Motif[] { return LEGAL_MOTIFS; } diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/salary.ts index fe970acc1d..aef2e649d9 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/salary.ts @@ -14,6 +14,17 @@ export type CC1527ReferenceSalaryProps = { export class ReferenceSalary1527 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + hasCommission: args.hasCommission === "oui", + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * Règle : * - si les commissions ne constituent pas un élément contractuel de rémunération : S diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/seniority.ts index 24b57b65ab..06d285c7ea 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1527_immobilier/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -17,10 +16,9 @@ import { splitByTwelveMonthsRolling, } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority1527 - implements ISeniority -{ +export class Seniority1527 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -41,7 +39,7 @@ export class Seniority1527 return MOTIFS_1527; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/salary.ts index 1b1c3d851d..ed897629a5 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/salary.ts @@ -14,6 +14,19 @@ export type CC1672ReferenceSalaryProps = { export class ReferenceSalary1672 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + computeReferenceSalary({ salaires, salairesPendantPreavis, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/seniority.ts index 06dd4a510e..4f6efde073 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1672_societes_assurances/seniority.ts @@ -4,7 +4,6 @@ import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, DefaultSeniorityProps, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -14,15 +13,32 @@ import type { YearDetail, } from "../../common"; import { accumulateAbsenceByYear, MotifKeys } from "../../common"; +import { SeniorityDefault } from "../../common/seniority"; export type CC1672SeniorityProps = DefaultSeniorityProps & { isExecutive: boolean; becameExecutiveAt?: string; }; -export class Seniority1672 - implements ISeniority -{ +export class Seniority1672 extends SeniorityDefault { + mapSituation( + args: Record + ): SeniorityProps { + const professionalCategory = + args[ + "contrat salarié - convention collective - sociétés d'assurances - catégorie professionnelle" + ]; + const becameExecutiveAt = + args[ + "contrat salarié - convention collective - sociétés d'assurances - catégorie professionnelle - cadres - date du statut cadre" + ]; + return { + ...super.mapSituation(args), + becameExecutiveAt, + isExecutive: professionalCategory === "'Cadres (Classes 5 à 7)'", + }; + } + computeSeniority({ dateEntree, dateSortie, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/salary.ts index 6d8c39385d..6bacd3de6c 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/salary.ts @@ -23,6 +23,40 @@ export type CategoryPro16 = export class ReferenceSalary16 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + const category = args[ + "contrat salarié . convention collective . transports routiers . indemnité de licenciement . catégorie professionnelle" + ] as CategoryPro16; + let driveInability: "definitive" | "temporary" | undefined = undefined; + if (category === "'Ouvriers'") { + const driveInabilityTemporary = + args[ + "contrat salarié . convention collective . transports routiers . indemnité de licenciement . catégorie professionnelle . Ouvriers . incapacité de conduite" + ]; + const driveInabilityDefinitive = + args[ + "contrat salarié . convention collective . transports routiers . indemnité de licenciement . catégorie professionnelle . Ouvriers . incapacité de conduite définitive" + ]; + driveInability = + driveInabilityTemporary === "'Oui'" && + driveInabilityDefinitive === "'Oui'" + ? "definitive" + : driveInabilityTemporary === "'Oui'" + ? "temporary" + : undefined; + } + return { + category, + driveInability, + hasVariablePay: args.hasVariablePay === "oui", + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + computeReferenceSalary( props: ReferenceSalaryProps ): number { diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/seniority.ts index 7159a38f58..a2698cfab9 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/16_transports_routiers/seniority.ts @@ -3,7 +3,6 @@ import { differenceInMonths, isBefore, parse } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { DefaultSeniorityProps, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -13,15 +12,32 @@ import type { YearDetail, } from "../../common"; import { accumulateAbsenceByYear } from "../../common"; +import { SeniorityDefault } from "../../common/seniority"; export type CC0016SeniorityProps = DefaultSeniorityProps & { isExecutive: boolean; becameExecutiveAt?: string; }; -export class Seniority16 - implements ISeniority -{ +export class Seniority16 extends SeniorityDefault { + mapSituation( + args: Record + ): SeniorityProps { + const categoriePro = + args[ + "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle" + ]; + const becameExecutiveAt = + args[ + "contrat salarié - convention collective - transports routiers - indemnité de licenciement - catégorie professionnelle - Ingénieurs et cadres - date du statut cadre" + ]; + return { + ...super.mapSituation(args), + becameExecutiveAt, + isExecutive: categoriePro === "'Ingénieurs et cadres'", + }; + } + computeSeniority({ dateEntree, dateSortie, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1702_ouvriers_travaux_public/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1702_ouvriers_travaux_public/salary.ts index 9a263461d0..fbab93b703 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1702_ouvriers_travaux_public/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1702_ouvriers_travaux_public/salary.ts @@ -14,6 +14,19 @@ export type CC1702ReferenceSalaryProps = { export class ReferenceSalary1702 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + /** * Règle : * - soit (S + ((P/12)*3))/3 diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1740_batiment_region_parisienne/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1740_batiment_region_parisienne/salary.ts index 13eafeb181..f871ef4191 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1740_batiment_region_parisienne/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1740_batiment_region_parisienne/salary.ts @@ -14,6 +14,19 @@ export type CC1740ReferenceSalaryProps = { export class ReferenceSalary1740 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + /** * - soit (S + ((P/12)*3))/3 * S : total des salaires perçus lors des 3 derniers mois précédant le jour de l'envoi de la lettre de licenciement (brut) (brut) diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/176_industrie_pharmaceutique/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/176_industrie_pharmaceutique/seniority.ts index c2bf964687..cbe7569391 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/176_industrie_pharmaceutique/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/176_industrie_pharmaceutique/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -17,6 +16,7 @@ import { splitBySeniorityCalendarYear, } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; const getTotalAbsenceNonPro = ( dEntree: Date, @@ -38,9 +38,7 @@ const getTotalAbsenceNonPro = ( }, 0); }; -export class Seniority176 - implements ISeniority -{ +export class Seniority176 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -69,7 +67,7 @@ export class Seniority176 }); } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/1996_pharmacie/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/1996_pharmacie/seniority.ts index 02f980f1ce..5bc0634a90 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/1996_pharmacie/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/1996_pharmacie/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -17,6 +16,7 @@ import { splitBySeniorityCalendarYear, } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; const getTotalAbsenceNonPro = ( dEntree: Date, @@ -35,9 +35,7 @@ const getTotalAbsenceNonPro = ( }, 0); }; -export class Seniority1996 - implements ISeniority -{ +export class Seniority1996 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -58,7 +56,7 @@ export class Seniority1996 return MOTIFS_1996; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2120_banque/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2120_banque/salary.ts index ca351be832..0734859c57 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2120_banque/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2120_banque/salary.ts @@ -1,12 +1,11 @@ import { ReferenceSalaryLegal } from "../../base"; import type { IReferenceSalary, - QuestionOuiNon, ReferenceSalaryProps, SalaryPeriods, SupportedCcIndemniteLicenciement, } from "../../common"; -import { rankByMonthArrayDescFrench } from "../../common"; +import { QuestionOuiNon, rankByMonthArrayDescFrench } from "../../common"; export type CC2120ReferenceSalaryProps = { salaires: SalaryPeriods[]; @@ -18,6 +17,32 @@ export type CC2120ReferenceSalaryProps = { export class ReferenceSalary2120 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + const isLicenciementInaptitude = args.licenciementInaptitude === "oui"; + const isLicenciementDisciplinaire = args[ + "contrat salarié . convention collective . banque . licenciement disciplinaire" + ] as QuestionOuiNon; + const isLicenciementEco = args[ + "contrat salarié . convention collective . banque . licenciement économique" + ] as QuestionOuiNon; + return { + isLicenciementDisciplinaire: isLicenciementInaptitude + ? QuestionOuiNon.non + : isLicenciementDisciplinaire, + isLicenciementEco: isLicenciementInaptitude + ? QuestionOuiNon.non + : isLicenciementEco, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salariesVariablePart: args.salariesVariablePart + ? parseInt(args.salariesVariablePart) + : 0, + }; + } + computeReferenceSalary({ salaires, salariesVariablePart, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2148_telecommunications/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2148_telecommunications/salary.ts index 63ac7a804f..cce50c6a6d 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2148_telecommunications/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2148_telecommunications/salary.ts @@ -14,6 +14,19 @@ export type CC2148ReferenceSalaryProps = { export class ReferenceSalary2148 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + /** * Règle : * S/12 diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2216_commerces_detail_alimentation/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2216_commerces_detail_alimentation/seniority.ts index 540297d0b2..328e604b28 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2216_commerces_detail_alimentation/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2216_commerces_detail_alimentation/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -13,10 +12,9 @@ import type { } from "../../common"; import { parseDate } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority2216 - implements ISeniority -{ +export class Seniority2216 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -37,7 +35,7 @@ export class Seniority2216 return LEGAL_MOTIFS; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/__tests__/indemnite-licenciement/calculate.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/__tests__/indemnite-licenciement/calculate.spec.ts new file mode 100644 index 0000000000..208567b704 --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/__tests__/indemnite-licenciement/calculate.spec.ts @@ -0,0 +1,49 @@ +import { IndemniteLicenciementPublicodes } from "../../../../../publicodes"; + +const engine = new IndemniteLicenciementPublicodes( + modelsIndemniteLicenciement, + "2596" +); + +describe("Test de la fonctionnalité 'calculate'", () => { + test("Vérifier qu'il n'y a pas l'eligibilite Anciennete inférieur 8 mois", () => { + const { missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective": "'IDCC2596'", + "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle": + "'Cadres'", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/08/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/08/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + "2600", + }); + expect(missingArgs).toEqual([]); + expect(ineligibility).toBeUndefined(); + }); + test("Vérifier qu'il n'y a pas l'eligibilite Anciennete inférieur 8 mois quand pas cdi opération", () => { + const { missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective": "'IDCC2596'", + "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle": + "'Emplois techniques et de coiffeurs'", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/08/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/08/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + "2600", + }); + expect(missingArgs).toEqual([]); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois." + ); + }); +}); diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/index.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/index.ts index 0a1260c68f..f0b8309100 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/index.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/index.ts @@ -1 +1,2 @@ +export * from "./ineligibility"; export * from "./salary"; diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/ineligibility.ts new file mode 100644 index 0000000000..a1cf27112b --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/ineligibility.ts @@ -0,0 +1,42 @@ +import { IneligibilityLegal } from "../../base"; + +export class Ineligibility2596 extends IneligibilityLegal { + getIneligibility( + args: Record + ): string | undefined { + const contractIneligibility = this.getContractIneligibility(args); + if (contractIneligibility) { + return contractIneligibility; + } + if ( + args[ + "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle" + ] && + !["'Cadres'", "'Agents de maîtrise'"].includes( + args[ + "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle" + ] + ) && + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] && + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] && + Math.max( + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] + ), + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] + ) + ) < 8 + ) { + return "L’indemnité de licenciement n’est pas due lorsque l’ancienneté dans l’entreprise est inférieure à 8 mois."; + } + } +} diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/salary.ts index 532ab30b25..675a52d148 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2596_coiffure/salary.ts @@ -24,6 +24,22 @@ export type CC2596ReferenceSalaryProps = { export class ReferenceSalary2596 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + catPro: args[ + "contrat salarié . convention collective . coiffure . indemnité de licenciement . catégorie professionnelle" + ] as CatPro2596, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + salairesPendantPreavis: args.noticeSalaryPeriods + ? JSON.parse(args.noticeSalaryPeriods) + : [], + }; + } + computeReferenceSalary({ salaires = [], salairesPendantPreavis = [], diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2609_batiment_etam/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2609_batiment_etam/salary.ts index e5cca5e5cc..083704c86e 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2609_batiment_etam/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2609_batiment_etam/salary.ts @@ -14,6 +14,17 @@ export type CC2609ReferenceSalaryProps = { export class ReferenceSalary2609 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + hasVariablePay: args.hasVariablePay === "oui", + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + computeReferenceSalary({ hasVariablePay, salaires, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2614_travaux_publics/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2614_travaux_publics/salary.ts index 91cd216eb4..51f04f8a51 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2614_travaux_publics/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2614_travaux_publics/salary.ts @@ -14,6 +14,17 @@ export type CC2614ReferenceSalaryProps = { export class ReferenceSalary2614 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + hasVariablePay: args.hasVariablePay === "oui", + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * Règle : * Si le salaire n'est pas variable diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/2941_aide_accompagnement_soins_services_domicile/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/2941_aide_accompagnement_soins_services_domicile/seniority.ts index 39891cbd43..4a060ed37f 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/2941_aide_accompagnement_soins_services_domicile/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/2941_aide_accompagnement_soins_services_domicile/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -17,10 +16,9 @@ import { splitBySeniorityYear, } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority2941 - implements ISeniority -{ +export class Seniority2941 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -41,7 +39,7 @@ export class Seniority2941 return MOTIFS_2941; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/29_hospitalisation_privee_but_non_lucratif/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/29_hospitalisation_privee_but_non_lucratif/salary.ts index 7eed15a273..7a7064b5a7 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/29_hospitalisation_privee_but_non_lucratif/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/29_hospitalisation_privee_but_non_lucratif/salary.ts @@ -22,6 +22,25 @@ export enum CategoryPro29 { export class ReferenceSalary0029 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + const category = + args[ + "contrat salarié - convention collective - hospitalisation privée à but non lucratif - indemnité de licenciement - catégorie professionnelle" + ] ?? ""; + return { + bestSalariesTotal: + args.hasSixBestSalaries === "oui" + ? Number(args.sixBestSalariesTotal) + : undefined, + professionalCategory: category, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * Règle : * Pour la catégorie pro : diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/__tests__/indemnite-licenciement/calculate.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/__tests__/indemnite-licenciement/calculate.spec.ts new file mode 100644 index 0000000000..81340e6adf --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/__tests__/indemnite-licenciement/calculate.spec.ts @@ -0,0 +1,64 @@ +import { IndemniteLicenciementPublicodes } from "../../../../../publicodes"; +import { CatPro3239 } from "../../salary"; + +const engine = new IndemniteLicenciementPublicodes( + modelsIndemniteLicenciement, + "3239" +); + +describe("Test de la fonctionnalité 'calculate'", () => { + test("Vérifier l'ineligibilite Anciennete legal inférieur 9 mois", () => { + const { result, missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective": "'IDCC3239'", + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle": `'${CatPro3239.assistantMaternel}'`, + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle . assistante maternelle . type de licenciement": `'Non'`, + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle . assistante maternelle . type de licenciement . autres . total salaires": + "2000", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/05/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/05/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . licenciement pour faute grave": + "non", + "contrat salarié . indemnité de licenciement . type du contrat de travail": + "'cdi'", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(0); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due lorsque l’ancienneté de l'assistant maternel est inférieure à 9 mois." + ); + }); + test("Vérifier l'ineligibilite Anciennete legal inférieur 9 mois bis", () => { + const { result, missingArgs, ineligibility } = engine.calculate({ + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle": + "'Assistant maternel'", + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle . assistante maternelle . type de licenciement": + "'Non'", + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle . assistante maternelle . type de licenciement . autres . total salaires": + "3000", + "contrat salarié . indemnité de licenciement . arrêt de travail": "non", + "contrat salarié . indemnité de licenciement . date d'entrée": + "01/01/2024", + "contrat salarié . indemnité de licenciement . date de notification": + "01/06/2024", + "contrat salarié . indemnité de licenciement . date de sortie": + "01/06/2024", + "contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle": + "non", + "contrat salarié . indemnité de licenciement . licenciement pour faute grave": + "non", + "contrat salarié . indemnité de licenciement . type du contrat de travail": + "'cdi'", + }); + expect(missingArgs).toEqual([]); + expect(result.value).toEqual(0); + expect(ineligibility).toEqual( + "L’indemnité de licenciement n’est pas due lorsque l’ancienneté de l'assistant maternel est inférieure à 9 mois." + ); + }); +}); diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/indemnite-licenciement.yaml b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/indemnite-licenciement.yaml index d3a842d231..ba570506ac 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/indemnite-licenciement.yaml +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/indemnite-licenciement.yaml @@ -102,4 +102,4 @@ contrat salarié . convention collective . particuliers employeurs et emploi à - catégorie professionnelle = 'Assistant maternel' - contrat salarié . indemnité de licenciement . date de notification < 01/01/2022 description: "Si la rupture du contrat de travail a été notifiée avant le 01/01/2022, l’indemnité de licenciement peut ne pas correspondre au résultat donné. En effet, jusqu’au 31/12/2021 c’est la convention collective “Assistants maternels du particulier employeur (IDCC 2395)” qui s’appliquait. Celle-ci a fusionné avec la convention collective “Salariés du particulier employeur (IDCC 2111)” pour former la convention collective “Particuliers employeurs et emploi à domicile (IDCC 3239)” applicable depuis le 01/01/2022." - valeur: oui \ No newline at end of file + valeur: oui diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/index.ts b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/index.ts index 028889ad2e..9bd33966dc 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/index.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/index.ts @@ -1,2 +1,3 @@ +export * from "./ineligibility"; export * from "./salary"; export * from "./seniority"; diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/ineligibility.ts b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/ineligibility.ts new file mode 100644 index 0000000000..40dc3e926c --- /dev/null +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/ineligibility.ts @@ -0,0 +1,43 @@ +import { IneligibilityLegal } from "../../base"; +import { CatPro3239 } from "./salary"; + +export class Ineligibility3239 extends IneligibilityLegal { + getIneligibility( + args: Record + ): string | undefined { + const contractIneligibility = this.getContractIneligibility(args); + if (contractIneligibility) { + return contractIneligibility; + } + if ( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] && + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] && + Math.max( + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] + ), + parseFloat( + args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] + ) + ) < + 9 / 12 && + args[ + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle" + ] === `'${CatPro3239.assistantMaternel}'` + ) { + return "L’indemnité de licenciement n’est pas due lorsque l’ancienneté de l'assistant maternel est inférieure à 9 mois."; + } + const seniorityIneligibility = this.getSeniorityIneligibility(args); + if (seniorityIneligibility) { + return seniorityIneligibility; + } + } +} diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/salary.ts index 01ad983737..0483475389 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3239_particuliers_employeurs_domicile/salary.ts @@ -19,6 +19,19 @@ export type CC3239ReferenceSalaryProps = { export class ReferenceSalary3239 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + catPro: args[ + "contrat salarié . convention collective . particuliers employeurs et emploi à domicile . indemnité de licenciement . catégorie professionnelle" + ] as CatPro3239, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * Règle : * - si la catégorie professionnelle est "Assistant maternel" et que le licenciement n'est pas dû à un retrait d'Agrément diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/3248_metallurgie/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/3248_metallurgie/seniority.ts index 0fa3613ecb..a0afb5085d 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/3248_metallurgie/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/3248_metallurgie/seniority.ts @@ -37,6 +37,18 @@ export type CC3248SeniorityRequiredProps = DefaultSeniorityRequiredProps & { }; export class Seniority3248 extends SeniorityDefault { + mapSituation( + args: Record + ): SeniorityProps { + return this.map(args); + } + + mapRequiredSituation( + args: Record + ): SeniorityRequiredProps { + return this.map(args); + } + getMotifs(): Motif[] { return MOTIFS_3248; } @@ -148,6 +160,40 @@ export class Seniority3248 extends SeniorityDefault + ): SeniorityRequiredProps { + const categoriePro = args[ + "contrat salarié . convention collective . métallurgie . indemnité de licenciement . catégorie professionnelle" + ] as "'A, B, C, D ou E'" | "'F, G, H ou I'"; + const hasBeenExecutive = + args[ + "contrat salarié . convention collective . métallurgie . indemnité de licenciement . catégorie professionnelle . ABCDE . avant cadre" + ]; + const hasBeenDayContract = + args[ + "contrat salarié . convention collective . métallurgie . indemnité de licenciement . catégorie professionnelle . ABCDE . forfait jour" + ]; + const hasAllwaysBeenDayContract = + args[ + "contrat salarié . convention collective . métallurgie . indemnité de licenciement . catégorie professionnelle . ABCDE . toujours au forfait jour" + ]; + + const dateBeginDayContract = + hasAllwaysBeenDayContract === "'Non'" + ? args[ + "contrat salarié . convention collective . métallurgie . indemnité de licenciement . catégorie professionnelle . ABCDE . forfait jour . date" + ] + : undefined; + return { + ...super.mapRequiredSituation(args), + categoriePro, + dateBecomeDayContract: dateBeginDayContract, + hasBeenDayContract: hasBeenDayContract === "'Oui'", + hasBeenExecutive: hasBeenExecutive === "'Oui'", + } as SeniorityRequiredProps; + } + private calculateDayContractIncrease( dEntree: Date, dSortie: Date, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/413_handicap/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/413_handicap/seniority.ts index 314ce93970..6e521fae6f 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/413_handicap/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/413_handicap/seniority.ts @@ -3,7 +3,6 @@ import { differenceInMonths, isBefore, parse } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { DefaultSeniorityProps, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -13,15 +12,35 @@ import type { YearDetail, } from "../../common"; import { accumulateAbsenceByYear } from "../../common"; +import { SeniorityDefault } from "../../common/seniority"; export type CC0413SeniorityProps = DefaultSeniorityProps & { isExecutive: boolean; becameExecutiveAt?: string; }; -export class Seniority413 - implements ISeniority -{ +export class Seniority413 extends SeniorityDefault { + mapSituation( + args: Record + ): SeniorityProps { + const categoriePro = + args[ + "contrat salarié . convention collective . établissement handicap . indemnité de licenciement . catégorie professionnelle" + ]; + const becameExecutiveAt = + args[ + "contrat salarié . convention collective . établissement handicap . indemnité de licenciement . catégorie professionnelle . non cadre durant une période . temps" + ]; + return { + ...super.mapSituation(args), + becameExecutiveAt, + isExecutive: + categoriePro === "'Cadres'" || + categoriePro === + "'Cadres directeurs généraux, directeurs de centre de formation en travail social et directeurs d'établissement ou de service'", + }; + } + computeSeniority({ dateEntree, dateSortie, diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/salary.ts index 4bfcfd57d9..5d3b1e7354 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/salary.ts @@ -22,6 +22,25 @@ export type CC44ReferenceSalaryProps = { export class ReferenceSalary44 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + const category = + args[ + "contrat salarié - convention collective - industries chimiques - indemnité de licenciement - catégorie professionnelle" + ] ?? ""; + return { + category: category as CategoryPro44, + hasVariablePay: args.hasVariablePay === "oui", + lastMonthSalary: args.lastMonthSalary + ? JSON.parse(args.lastMonthSalary) + : undefined, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * (si le salaire ne comporte pas une partie fixe et une partie variable et Ouvriers et collaborateurs & Agents de maîtrise et techniciens) ou (Ingénieurs et Cadres) * - S1 + P / 12 (si >= S2/12) diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/seniority.ts index d2c244f24c..67a80bd677 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/44_industries_chimiques/seniority.ts @@ -3,7 +3,6 @@ import { addDays, differenceInMonths } from "date-fns"; import { LEGAL_MOTIFS } from "../../base/seniority"; import type { Absence, - ISeniority, Motif, RequiredSeniorityResult, SeniorityProps, @@ -13,10 +12,9 @@ import type { } from "../../common"; import { parseDate } from "../../common"; import { MotifKeys } from "../../common/motif-keys"; +import { SeniorityDefault } from "../../common/seniority"; -export class Seniority44 - implements ISeniority -{ +export class Seniority44 extends SeniorityDefault { computeSeniority({ dateEntree, dateSortie, @@ -37,7 +35,7 @@ export class Seniority44 return MOTIFS_44; } - private compute( + protected compute( from: string, to: string, absences: Absence[] diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/salary.ts index 8af3945476..635c76ea9f 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/salary.ts @@ -26,6 +26,19 @@ export type CC573ReferenceSalaryProps = { export class ReferenceSalary573 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + return { + licenciementEco: args[ + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . agents . licenciement économique" + ] as QuestionOuiNon, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * Règle : * - si le licenciement est pour des raisons économiques diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/650_metallurgie_ingenieurs_cadres/seniority.ts b/packages/code-du-travail-modeles/src/modeles/conventions/650_metallurgie_ingenieurs_cadres/seniority.ts index 33f0811689..d75530d704 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/650_metallurgie_ingenieurs_cadres/seniority.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/650_metallurgie_ingenieurs_cadres/seniority.ts @@ -43,6 +43,18 @@ const MOTIFS_650: Motif[] = LEGAL_MOTIFS.map((item) => ({ })); export class Seniority650 extends SeniorityDefault { + mapSituation( + args: Record + ): SeniorityProps { + return this.map(args); + } + + mapRequiredSituation( + args: Record + ): SeniorityRequiredProps { + return this.map(args); + } + computeSeniority({ dateEntree, dateSortie, @@ -119,4 +131,38 @@ export class Seniority650 extends SeniorityDefault + ): SeniorityRequiredProps { + const categoriePro = args[ + "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle" + ] as "'A, B, C, D ou E'" | "'F, G, H ou I'"; + const hasBeenExecutive = + args[ + "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - avant cadre" + ]; + const hasBeenDayContract = + args[ + "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour" + ]; + const hasAllwaysBeenDayContract = + args[ + "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - toujours au forfait jour" + ]; + + const dateBeginDayContract = + hasAllwaysBeenDayContract === "'Non'" + ? args[ + "contrat salarié - convention collective - métallurgie - indemnité de licenciement - catégorie professionnelle - ABCDE - forfait jour - date" + ] + : undefined; + return { + ...super.mapRequiredSituation(args), + categoriePro, + dateBecomeDayContract: dateBeginDayContract, + hasBeenDayContract: hasBeenDayContract === "'Oui'", + hasBeenExecutive: hasBeenExecutive === "'Oui'", + }; + } } diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/675_habillement_commerce_succursales/salary.ts b/packages/code-du-travail-modeles/src/modeles/conventions/675_habillement_commerce_succursales/salary.ts index 2e60e8ba80..42b02ab5b9 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/675_habillement_commerce_succursales/salary.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/675_habillement_commerce_succursales/salary.ts @@ -14,6 +14,23 @@ export type CC675ReferenceSalaryProps = { export class ReferenceSalary675 implements IReferenceSalary { + mapSituation( + args: Record + ): ReferenceSalaryProps { + const catPro = + args[ + "contrat salarié . convention collective . habillement commerce succursales . indemnité de licenciement . catégorie professionnelle" + ]; + const isAgentMaitriseOrCadre = + catPro === "Agents de maîtrise" || catPro === "Cadres"; + return { + isAgentMaitriseOrCadre, + salaires: args.salaryPeriods + ? (JSON.parse(args.salaryPeriods) as SalaryPeriods[]) + : [], + }; + } + /** * si Agents de maîtrise et techniciens ou Cadres * - S/12 diff --git a/packages/code-du-travail-modeles/src/publicodes/IndemniteLicenciementPublicodes.ts b/packages/code-du-travail-modeles/src/publicodes/IndemniteLicenciementPublicodes.ts index ba316e295d..6329764b00 100644 --- a/packages/code-du-travail-modeles/src/publicodes/IndemniteLicenciementPublicodes.ts +++ b/packages/code-du-travail-modeles/src/publicodes/IndemniteLicenciementPublicodes.ts @@ -1,8 +1,21 @@ import type { EvaluatedNode } from "publicodes"; +import type { + RequiredSeniorityResult, + SeniorityResult, +} from "../modeles/common"; +import { + IneligibilityFactory, + ReferenceSalaryFactory, + SeniorityFactory, + SupportedCcIndemniteLicenciement, +} from "../modeles/common"; import type { Publicodes } from "./Publicodes"; import { PublicodesBase } from "./PublicodesBase"; -import type { PublicodesIndemniteLicenciementResult } from "./types"; +import type { + PublicodesData, + PublicodesIndemniteLicenciementResult, +} from "./types"; import { PublicodesDefaultRules, PublicodesSimulator } from "./types"; class IndemniteLicenciementPublicodes @@ -16,10 +29,209 @@ class IndemniteLicenciementPublicodes }; super( rules, - PublicodesDefaultRules[PublicodesSimulator.INDEMNITE_LICENCIEMENT] + PublicodesDefaultRules[PublicodesSimulator.INDEMNITE_LICENCIEMENT], + idcc as SupportedCcIndemniteLicenciement ); } + getMissingArg( + args: Record, + names: string[] + ): string | undefined { + let missingArg: string | undefined = undefined; + names.some((name) => { + if (!args[name]) { + missingArg = name; + return true; + } + return false; + }); + return missingArg; + } + + mapMissingArg( + name: string + ): PublicodesData { + return { + missingArgs: [ + { + indice: 0, + name, + rawNode: { + nom: name, + }, + }, + ], + result: { value: 0 }, + situation: [], + }; + } + + mapIneligibility( + text: string + ): PublicodesData { + return { + ineligibility: text, + missingArgs: [], + result: { value: 0 }, + situation: [], + }; + } + + removeNonPublicodeFields( + args: Record + ): Record { + return Object.keys(args).reduce((filteredObj, key) => { + if (key.startsWith("contrat salarié . ") && args[key]) { + return { + ...filteredObj, + [key]: args[key], + }; + } + return filteredObj; + }, {}); + } + + calculate( + args: Record, + targetRule?: string + ): PublicodesData { + let newArgs = args; + const ineligibilityInstance = new IneligibilityFactory().create(this.idcc); + const ineligibility = ineligibilityInstance.getIneligibility(newArgs); + if (ineligibility) { + return this.mapIneligibility(ineligibility); + } + if ( + !args[ + "contrat salarié . indemnité de licenciement . ancienneté en année" + ] || + !args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année" + ] + ) { + const missingArg = this.getMissingArg(args, [ + "contrat salarié . indemnité de licenciement . date d'entrée", + "contrat salarié . indemnité de licenciement . date de sortie", + ]); + if (missingArg) { + return this.mapMissingArg(missingArg); + } + const agreement = new SeniorityFactory().create(this.idcc); + const agreementSeniority: SeniorityResult = agreement.computeSeniority( + agreement.mapSituation(args) + ); + const legal = new SeniorityFactory().create( + SupportedCcIndemniteLicenciement.default + ); + const legalSeniority: SeniorityResult = legal.computeSeniority( + legal.mapSituation(args) + ); + if (legalSeniority.value) { + newArgs = { + ...newArgs, + "contrat salarié . indemnité de licenciement . ancienneté en année": + legalSeniority.value.toString(), + ...legalSeniority.extraInfos, + }; + } + if (agreementSeniority.value) { + newArgs = { + ...newArgs, + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année": + agreementSeniority.value.toString(), + ...agreementSeniority.extraInfos, + }; + } + } + if ( + !args[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] || + !args[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] + ) { + const missingArg = this.getMissingArg(args, [ + "contrat salarié . indemnité de licenciement . date d'entrée", + "contrat salarié . indemnité de licenciement . date de sortie", + "contrat salarié . indemnité de licenciement . date de notification", + ]); + if (missingArg) { + return this.mapMissingArg(missingArg); + } + const agreement = new SeniorityFactory().create(this.idcc); + const agreementRequiredSeniority: RequiredSeniorityResult = + agreement.computeRequiredSeniority( + agreement.mapRequiredSituation(args) + ); + const legal = new SeniorityFactory().create( + SupportedCcIndemniteLicenciement.default + ); + const legalRequiredSeniority: RequiredSeniorityResult = + legal.computeRequiredSeniority(legal.mapRequiredSituation(args)); + if (legalRequiredSeniority.value) { + newArgs[ + "contrat salarié . indemnité de licenciement . ancienneté requise en année" + ] = legalRequiredSeniority.value.toString(); + } + if (agreementRequiredSeniority.value) { + newArgs[ + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année" + ] = agreementRequiredSeniority.value.toString(); + } + } + const ineligibilityWithSeniority = + ineligibilityInstance.getIneligibility(newArgs); + if (ineligibilityWithSeniority) { + return this.mapIneligibility(ineligibilityWithSeniority); + } + if ( + !args[ + "contrat salarié . indemnité de licenciement . salaire de référence" + ] + ) { + const s = new ReferenceSalaryFactory().create( + SupportedCcIndemniteLicenciement.default + ); + const value = s.computeReferenceSalary({ + salaires: args.salaryPeriods ? JSON.parse(args.salaryPeriods) : [], + }); + if (value) { + newArgs = { + ...newArgs, + "contrat salarié . indemnité de licenciement . salaire de référence": + value.toString(), + }; + } + } + if ( + !args[ + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel" + ] + ) { + const s = new ReferenceSalaryFactory().create(this.idcc); + const value = s.computeReferenceSalary( + s.mapSituation + ? s.mapSituation(args) + : { + salaires: args.salaryPeriods + ? JSON.parse(args.salaryPeriods) + : [], + } + ); + if (value) { + newArgs = { + ...newArgs, + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + value.toString(), + }; + } + } + const situation = this.removeNonPublicodeFields(newArgs); + return super.setSituation(situation, targetRule); + } + protected convertedResult( evaluatedNode: EvaluatedNode ): PublicodesIndemniteLicenciementResult { diff --git a/packages/code-du-travail-modeles/src/publicodes/PreavisRetraitePublicodes.ts b/packages/code-du-travail-modeles/src/publicodes/PreavisRetraitePublicodes.ts index 8c64ae430c..303f166e18 100644 --- a/packages/code-du-travail-modeles/src/publicodes/PreavisRetraitePublicodes.ts +++ b/packages/code-du-travail-modeles/src/publicodes/PreavisRetraitePublicodes.ts @@ -2,7 +2,7 @@ import type { EvaluatedNode } from "publicodes"; import type { Publicodes } from "./Publicodes"; import { PublicodesBase } from "./PublicodesBase"; -import type { PublicodesPreavisRetraiteResult } from "./types"; +import type { PublicodesData, PublicodesPreavisRetraiteResult } from "./types"; import { PublicodesDefaultRules, PublicodesSimulator } from "./types"; import { convertDaysIntoBetterUnit } from "./utils/preavis-retraite"; @@ -14,6 +14,13 @@ class PreavisRetraitePublicodes super(rules, PublicodesDefaultRules[PublicodesSimulator.PREAVIS_RETRAITE]); } + calculate( + args: Record, + target?: string + ): PublicodesData { + return this.setSituation(args, target); + } + protected convertedResult( evaluatedNode: EvaluatedNode ): PublicodesPreavisRetraiteResult { diff --git a/packages/code-du-travail-modeles/src/publicodes/Publicodes.ts b/packages/code-du-travail-modeles/src/publicodes/Publicodes.ts index bd6393cdae..23cb2cb0df 100644 --- a/packages/code-du-travail-modeles/src/publicodes/Publicodes.ts +++ b/packages/code-du-travail-modeles/src/publicodes/Publicodes.ts @@ -4,6 +4,10 @@ import type { PublicodesData } from "./types"; export interface Publicodes { readonly data: PublicodesData; execute: (rule: string) => TResult; + calculate: ( + args: Record, + target?: string + ) => PublicodesData; setSituation: (args: Record) => PublicodesData; getNotifications: () => Notification[]; getNotificationsBloquantes: () => Notification[]; diff --git a/packages/code-du-travail-modeles/src/publicodes/PublicodesBase.ts b/packages/code-du-travail-modeles/src/publicodes/PublicodesBase.ts index f2335c3e3c..08afe7a0d3 100644 --- a/packages/code-du-travail-modeles/src/publicodes/PublicodesBase.ts +++ b/packages/code-du-travail-modeles/src/publicodes/PublicodesBase.ts @@ -7,11 +7,14 @@ import { getNotifications, getNotificationsBloquantes, getReferences, + SupportedCcIndemniteLicenciement, } from "../modeles/common"; import type { Publicodes } from "./Publicodes"; import type { MissingArgs, PublicodesData, SituationElement } from "./types"; export abstract class PublicodesBase implements Publicodes { + idcc: SupportedCcIndemniteLicenciement; + engine: Engine; targetRule: string; @@ -22,9 +25,14 @@ export abstract class PublicodesBase implements Publicodes { situation: [], }; - protected constructor(rules: any, targetRule: string) { + protected constructor( + rules: any, + targetRule: string, + idcc?: SupportedCcIndemniteLicenciement + ) { this.engine = new Engine(rules); this.targetRule = targetRule; + this.idcc = idcc ?? SupportedCcIndemniteLicenciement.default; } execute(rule: string): TResult { @@ -36,6 +44,13 @@ export abstract class PublicodesBase implements Publicodes { return this.convertedResult(result); } + calculate( + args: Record, + target?: string + ): PublicodesData { + return this.setSituation(args, target); + } + setSituation( args: Record, targetRule?: string @@ -147,7 +162,6 @@ export abstract class PublicodesBase implements Publicodes { }); const result = this.handleExecute(newSituation, targetRule); - if (!result) throw new Error( `Unable to evaluate ${targetRule} with ${JSON.stringify(newSituation)}` diff --git a/packages/code-du-travail-modeles/src/publicodes/types.ts b/packages/code-du-travail-modeles/src/publicodes/types.ts index 5a227b0d95..3920299740 100644 --- a/packages/code-du-travail-modeles/src/publicodes/types.ts +++ b/packages/code-du-travail-modeles/src/publicodes/types.ts @@ -73,6 +73,7 @@ export type PublicodesData = { situation: SituationElement[]; missingArgs: MissingArgs[]; result: TResult; + ineligibility?: string; }; export type PublicodesProviderRule = { @@ -119,6 +120,7 @@ export type PublicodesPreavisRetraiteResult = { export type PublicodesIndemniteLicenciementResult = { value: Evaluation; unit?: Unit; + ineligibility?: string; }; export type PublicodesContextType = { @@ -128,6 +130,7 @@ export type PublicodesContextType = { result: PublicodesIndemniteLicenciementResult; missingArgs: MissingArgs[]; situation: SituationElement[]; + calculate: (values: Record) => void; setSituation: (values: Record) => void; };