From b961f10027e7e7b9254c5e988740f2dd154b8101 Mon Sep 17 00:00:00 2001 From: Martial Maillot Date: Thu, 25 Jan 2024 09:37:16 +0100 Subject: [PATCH] fix(indemnite-licenciement): mise en place d'un plafond sur la CC 573 (#5579) --- .../indemnite-licenciement/formule.spec.ts | 3 + .../indemnite-licenciement/indemnite.spec.ts | 147 ++++++++++++------ .../indemnite-licenciement.yaml | 38 ++++- 3 files changed, 133 insertions(+), 55 deletions(-) diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/formule.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/formule.spec.ts index 53d8cb9c5b..7d05fba492 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/formule.spec.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/formule.spec.ts @@ -90,13 +90,16 @@ describe("Formules pour la CC 573", () => { ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${6} | ${"3 / 10 * Sref * A1"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (6 ans)", "Sref : Salaire de référence (1000 €)"]} ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${10} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (1 an)", "Sref : Salaire de référence (1000 €)"]} ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${23} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2 + 5 / 10 * Sref * A3"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (10 ans)", "A3 : Années de présence dans la tranche à partir de 20 ans (4 ans)", "Sref : Salaire de référence (1000 €)"]} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${40} | ${"12 * Sref"} | ${["Sref : Salaire de référence (1000 €)"]} ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${6} | ${"3 / 10 * Sref * A1"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (6 ans)", "Sref : Salaire de référence (1000 €)"]} ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${10} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (1 an)", "Sref : Salaire de référence (1000 €)"]} ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${23} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2 + 5 / 10 * Sref * A3 + 15% * (3 / 10 * Sref * A1) + 15% * (4 / 10 * Sref * A2) + 15% * (5 / 10 * Sref * A3)"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (10 ans)", "A3 : Années de présence dans la tranche à partir de 20 ans (4 ans)", "Sref : Salaire de référence (1000 €)"]} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${40} | ${"12 * Sref + (15% * 12 * Sref)"} | ${["Sref : Salaire de référence (1000 €)"]} ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${23} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2 + 5 / 10 * Sref * A3"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (10 ans)", "A3 : Années de présence dans la tranche à partir de 20 ans (4 ans)", "Sref : Salaire de référence (1000 €)"]} ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${6} | ${"3 / 10 * Sref * A1"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (6 ans)", "Sref : Salaire de référence (1000 €)"]} ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${10} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (1 an)", "Sref : Salaire de référence (1000 €)"]} ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${23} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2 + 5 / 10 * Sref * A3 + 20% * (3 / 10 * Sref * A1) + 20% * (4 / 10 * Sref * A2) + 20% * (5 / 10 * Sref * A3)"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (10 ans)", "A3 : Années de présence dans la tranche à partir de 20 ans (4 ans)", "Sref : Salaire de référence (1000 €)"]} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${40} | ${"12 * Sref + (20% * 12 * Sref)"} | ${["Sref : Salaire de référence (1000 €)"]} ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${23} | ${"3 / 10 * Sref * A1 + 4 / 10 * Sref * A2 + 5 / 10 * Sref * A3"} | ${["A1 : Années de présence dans la tranche de 0 à 9 ans inclus (9 ans)", "A2 : Années de présence dans la tranche de 10 à 19 ans inclus (10 ans)", "A3 : Années de présence dans la tranche à partir de 20 ans (4 ans)", "Sref : Salaire de référence (1000 €)"]} `( "ancienneté: $seniority an, age $age, type de licenciement $typeLicenciement, catégorie $category => $expectedCompensation €", diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/indemnite.spec.ts b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/indemnite.spec.ts index 7b32cc3cb1..0a1bcc6d9f 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/indemnite.spec.ts +++ b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/__tests__/indemnite-licenciement/indemnite.spec.ts @@ -116,57 +116,102 @@ describe("Indemnité conventionnel de licenciement pour la CC 573", () => { }); describe("Cadres", () => { - test.each` - age | category | auMoins15AnsCadre | seniorityRight | seniority | salary | expectedCompensation - ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${0.99} | ${0.99} | ${3200} | ${0} - ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${0.99} | ${1} | ${3200} | ${0} - ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${1} | ${3200} | ${640} - ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${4} | ${3200} | ${2560} - ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${5} | ${3200} | ${3200} - ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} - ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} - ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${27840} - ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} - ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} - ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} - ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${32016} - ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} - ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} - ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} - ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${33408} - ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} - `( - "ancienneté: $seniority an, salaire de référence: $salary, age $age, type de licenciement $typeLicenciement, catégorie $category => $expectedCompensation €", - ({ - seniority, - seniorityRight, - salary, - expectedCompensation, - category, - auMoins15AnsCadre, - age, - }) => { - const { result, missingArgs } = engine.setSituation( - { - "contrat salarié . convention collective": "'IDCC0573'", - "contrat salarié . convention collective . commerces de gros . catégorie professionnelle": `'${category}'`, - "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans . age": - age, - "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans question": `'${auMoins15AnsCadre}'`, - "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année": - seniority, - "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année": - seniorityRight, - "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": - salary, - }, - "contrat salarié . indemnité de licenciement . résultat conventionnel" - ); + describe("moins de 50 ans", () => { + test.each` + age | category | auMoins15AnsCadre | seniorityRight | seniority | salary | expectedCompensation + ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${0.99} | ${0.99} | ${3200} | ${0} + ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${0.99} | ${1} | ${3200} | ${0} + ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${1} | ${3200} | ${640} + ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${4} | ${3200} | ${2560} + ${32} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${5} | ${3200} | ${3200} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${27840} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} + ${40} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${40} | ${3200} | ${38400} + `( + "ancienneté: $seniority an, salaire de référence: $salary, age $age, type de licenciement $typeLicenciement, catégorie $category => $expectedCompensation €", + ({ + seniority, + seniorityRight, + salary, + expectedCompensation, + category, + auMoins15AnsCadre, + age, + }) => { + const { result, missingArgs } = engine.setSituation( + { + "contrat salarié . convention collective": "'IDCC0573'", + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle": `'${category}'`, + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans . age": + age, + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans question": `'${auMoins15AnsCadre}'`, + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année": + seniority, + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année": + seniorityRight, + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + salary, + }, + "contrat salarié . indemnité de licenciement . résultat conventionnel" + ); - expect(result.value).toEqual(expectedCompensation); - expect(missingArgs).toEqual([]); - expect(result.unit?.numerators).toEqual(["€"]); - } - ); + expect(result.value).toEqual(expectedCompensation); + expect(missingArgs).toEqual([]); + expect(result.unit?.numerators).toEqual(["€"]); + } + ); + }); + describe("plus de 50 ans", () => { + // plafond : 12*Sref + (20%x12xSref) + test.each` + age | category | auMoins15AnsCadre | seniorityRight | seniority | salary | expectedCompensation + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${32016} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${40} | ${3200} | ${44160} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} + ${52} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${40} | ${3200} | ${38400} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${6} | ${3200} | ${5760} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${10} | ${3200} | ${9920} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${23} | ${3200} | ${33408} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.oui} | ${1} | ${40} | ${3200} | ${46080} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${23} | ${3200} | ${27840} + ${57} | ${CatPro573.cadres} | ${QuestionOuiNon.non} | ${1} | ${40} | ${3200} | ${38400} + `( + "ancienneté: $seniority an, salaire de référence: $salary, age $age, type de licenciement $typeLicenciement, catégorie $category => $expectedCompensation €", + ({ + seniority, + seniorityRight, + salary, + expectedCompensation, + category, + auMoins15AnsCadre, + age, + }) => { + const { result, missingArgs } = engine.setSituation( + { + "contrat salarié . convention collective": "'IDCC0573'", + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle": `'${category}'`, + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans . age": + age, + "contrat salarié . convention collective . commerces de gros . catégorie professionnelle . cadres . cadre durant au moins de 15 ans question": `'${auMoins15AnsCadre}'`, + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année": + seniority, + "contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année": + seniorityRight, + "contrat salarié . indemnité de licenciement . salaire de référence conventionnel": + salary, + }, + "contrat salarié . indemnité de licenciement . résultat conventionnel" + ); + + expect(result.value).toEqual(expectedCompensation); + expect(missingArgs).toEqual([]); + expect(result.unit?.numerators).toEqual(["€"]); + } + ); + }); }); }); diff --git a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/indemnite-licenciement.yaml b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/indemnite-licenciement.yaml index 41f8ab7b28..95ef0357e9 100644 --- a/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/indemnite-licenciement.yaml +++ b/packages/code-du-travail-modeles/src/modeles/conventions/573_commerces_de_gros/indemnite-licenciement.yaml @@ -316,7 +316,7 @@ contrat salarié . convention collective . commerces de gros . catégorie profes - contrat salarié . indemnité de licenciement . ancienneté conventionnelle requise en année >= 1 - contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année <= 5 valeur: formule 3 agent - plafond: contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 12 + plafond: plafond 12 mois unité: € arrondi: 2 décimales références: @@ -338,6 +338,7 @@ contrat salarié . convention collective . commerces de gros . catégorie profes valeur: somme cadre avec majoration 20% unité: € arrondi: 2 décimales + plafond: plafond 12 mois majoré de 20 pourcent références: Article 37: https://www.legifrance.gouv.fr/conv_coll/article/KALIARTI000026802009?idConteneur=KALICONT000005635373 Article 4 de l’Avenant I relatif aux cadres: https://www.legifrance.gouv.fr/conv_coll/article/KALIARTI000026802057?idConteneur=KALICONT000005635373 @@ -359,6 +360,7 @@ contrat salarié . convention collective . commerces de gros . catégorie profes - age < 55 valeur: somme cadre avec majoration 15% unité: € + plafond: plafond 12 mois majoré de 15 pourcent arrondi: 2 décimales références: Article 37: https://www.legifrance.gouv.fr/conv_coll/article/KALIARTI000026802009?idConteneur=KALICONT000005635373 @@ -380,7 +382,7 @@ contrat salarié . convention collective . commerces de gros . catégorie profes - cadre durant au moins de 15 ans . age . résultat conventionnel 50 ans applicable si: contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année > 5 valeur: somme cadre sans majoration - plafond: contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 12 + plafond: plafond 12 mois unité: € arrondi: 2 décimales références: @@ -404,12 +406,40 @@ contrat salarié . convention collective . commerces de gros . formule max 6: explanations: - "Sref : Salaire de référence": contrat salarié . indemnité de licenciement . salaire de référence conventionnel +## Plafonds -contrat salarié . convention collective . commerces de gros . formule max 12: - applicable si: contrat salarié . indemnité de licenciement . résultat conventionnel = contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 12 +contrat salarié . convention collective . commerces de gros . plafond 12 mois: + valeur: contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 12 + +contrat salarié . convention collective . commerces de gros . formule plafond 12 mois: + applicable si: contrat salarié . indemnité de licenciement . résultat conventionnel = plafond 12 mois valeur: oui cdtn: formule: formula: 12 * Sref explanations: - "Sref : Salaire de référence": contrat salarié . indemnité de licenciement . salaire de référence conventionnel + +contrat salarié . convention collective . commerces de gros . plafond 12 mois majoré de 15 pourcent: + valeur: 12 * contrat salarié . indemnité de licenciement . salaire de référence conventionnel + (12 * contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 0.15) + +contrat salarié . convention collective . commerces de gros . formule plafond 12 mois majoré de 15 pourcent: + applicable si: contrat salarié . indemnité de licenciement . résultat conventionnel >= plafond 12 mois majoré de 15 pourcent + valeur: oui + cdtn: + formule: + formula: 12 * Sref + (15% * 12 * Sref) + explanations: + - "Sref : Salaire de référence": contrat salarié . indemnité de licenciement . salaire de référence conventionnel + +contrat salarié . convention collective . commerces de gros . plafond 12 mois majoré de 20 pourcent: + valeur: 12 * contrat salarié . indemnité de licenciement . salaire de référence conventionnel + (12 * contrat salarié . indemnité de licenciement . salaire de référence conventionnel * 0.2) + +contrat salarié . convention collective . commerces de gros . formule plafond 12 mois majoré de 20 pourcent: + applicable si: contrat salarié . indemnité de licenciement . résultat conventionnel >= plafond 12 mois majoré de 20 pourcent + valeur: oui + cdtn: + formule: + formula: 12 * Sref + (20% * 12 * Sref) + explanations: + - "Sref : Salaire de référence": contrat salarié . indemnité de licenciement . salaire de référence conventionnel