Skip to content

Commit

Permalink
feat(simulateurs): handle retirement for idcc16 (#3482)
Browse files Browse the repository at this point in the history
* feat(simulateurs): handle volontary retirement for idcc16

* feat(simulateurs): handle retirement for idcc16

* feat(simulateur): handle unit in result
  • Loading branch information
lionelB committed May 11, 2021
1 parent 81da96d commit af00de3
Show file tree
Hide file tree
Showing 7 changed files with 276 additions and 5 deletions.
@@ -1,7 +1,7 @@
import { Action, ActionName, State } from "../common/type/WizardType";
import Steps from "./steps";

const supportedCcn = [176, 292];
const supportedCcn = [16, 176, 292];

export const initialState: State = {
stepIndex: 0,
Expand Down
Expand Up @@ -13,6 +13,7 @@ function ResultStep({ form }: WizardStepProps): JSX.Element {
publicodesContext.setSituation(
mapToPublicodesSituation(form.getState().values)
);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [form]);

const notifications = publicodesContext.getNotifications();
Expand All @@ -22,7 +23,11 @@ function ResultStep({ form }: WizardStepProps): JSX.Element {
<p>
À partir des éléments que vous avez saisis, la durée du préavis de
départ à la retraite est estimée à&nbsp;
<Highlight>{publicodesContext.result}</Highlight> mois.
<Highlight>
{publicodesContext.result.value}{" "}
{publicodesContext.result.unit.numerators[0]}
</Highlight>
.
</p>
{notifications.length > 0 && (
<Alert>
Expand Down
Expand Up @@ -61,7 +61,12 @@ const usePublicodesHandler = ({
const result = engine
?.setSituation(buildSituation(situation))
.evaluate(targetRule);
return result?.nodeValue ?? null;

if (result === null) {
return null;
}

return { unit: result.unit, value: result.nodeValue };
}, [engine, targetRule, situation]);

return {
Expand Down
@@ -1,5 +1,5 @@
import { Notification } from "@socialgouv/modeles-social";
import Engine, { Evaluation, Rule as PubliRule } from "publicodes";
import Engine, { Evaluation, Rule as PubliRule, Unit } from "publicodes";
import React, { createContext, useContext } from "react";

import usePublicodesHandler from "./Handler";
Expand Down Expand Up @@ -32,9 +32,14 @@ export interface SituationElement {
value: string;
}

export interface PublicodesResult {
value: Evaluation;
unit?: Unit;
}

export interface PublicodesContextInterface {
getNotifications: () => Notification[];
result: Evaluation;
result?: PublicodesResult;
missingArgs: MissingArgs[];
situation: SituationElement[];
setSituation: (values: Record<string, string>) => void;
Expand Down
1 change: 1 addition & 0 deletions packages/code-du-travail-modeles/package.json
Expand Up @@ -18,6 +18,7 @@
},
"scripts": {
"prebuild": "tsc",
"test": "jest",
"build": "node bin/build.js",
"clean": "rimraf bin lib"
},
Expand Down
@@ -0,0 +1,137 @@
import Engine from "publicodes";
import { mergeModels } from "../internal/merger";
import { getNotifications } from "../utils/GetNotifications";

const engine = new Engine(mergeModels());

test.each`
seniority | category | expectedNotice
${3} | ${"Ingénieurs et cadres"} | ${6}
${12} | ${"Ingénieurs et cadres"} | ${1}
${23} | ${"Ingénieurs et cadres"} | ${1}
${24} | ${"Ingénieurs et cadres"} | ${2}
${25} | ${"Ingénieurs et cadres"} | ${2}
${3} | ${"Employés"} | ${0}
${6} | ${"Employés"} | ${1}
${23} | ${"Employés"} | ${1}
${24} | ${"Employés"} | ${2}
${25} | ${"Employés"} | ${2}
${3} | ${"Ouvriers"} | ${0}
${6} | ${"Ouvriers"} | ${1}
${23} | ${"Ouvriers"} | ${1}
${24} | ${"Ouvriers"} | ${2}
${25} | ${"Ouvriers"} | ${2}
${3} | ${"TAM"} | ${0}
${6} | ${"TAM"} | ${1}
${23} | ${"TAM"} | ${1}
${24} | ${"TAM"} | ${2}
${25} | ${"TAM"} | ${2}
`(
"Pour un $category possédant $seniority mois d'ancienneté, son préavis de départ à la retraite devrait être de $expectedNotice mois",
({ seniority, category, expectedNotice }) => {
const result = engine
.setSituation({
"contrat salarié . convention collective": "'IDCC0016'",
"contrat salarié . mise à la retraite": "non",
"contrat salarié . ancienneté": seniority,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle": `'${category}'`,
})
.evaluate("contrat salarié . préavis de retraite");

expect(result.nodeValue).toEqual(expectedNotice);
expect(result.unit?.numerators).toEqual(["mois"]);
}
);

test.each`
seniority | category | group | expectedNotice | expectedUnit
${5} | ${"Ingénieurs et cadres"} | ${0} | ${6} | ${"mois"}
${6} | ${"Ingénieurs et cadres"} | ${0} | ${6} | ${"mois"}
${24} | ${"Ingénieurs et cadres"} | ${0} | ${6} | ${"mois"}
${3} | ${"Ouvriers"} | ${0} | ${1} | ${"semaine"}
${6} | ${"Ouvriers"} | ${0} | ${1} | ${"mois"}
${23} | ${"Ouvriers"} | ${0} | ${1} | ${"mois"}
${24} | ${"Ouvriers"} | ${0} | ${2} | ${"mois"}
${25} | ${"Ouvriers"} | ${0} | ${2} | ${"mois"}
${0} | ${"Employés"} | ${0} | ${0} | ${"mois"}
${1} | ${"Employés"} | ${0} | ${1} | ${"mois"}
${23} | ${"Employés"} | ${0} | ${1} | ${"mois"}
${24} | ${"Employés"} | ${0} | ${2} | ${"mois"}
${25} | ${"Employés"} | ${0} | ${2} | ${"mois"}
${0} | ${"TAM"} | ${5} | ${0} | ${"mois"}
${1} | ${"TAM"} | ${5} | ${1} | ${"mois"}
${23} | ${"TAM"} | ${5} | ${1} | ${"mois"}
${24} | ${"TAM"} | ${5} | ${2} | ${"mois"}
${25} | ${"TAM"} | ${5} | ${2} | ${"mois"}
${1} | ${"TAM"} | ${6} | ${2} | ${"mois"}
${25} | ${"TAM"} | ${6} | ${2} | ${"mois"}
`(
"Pour un $category ($group) possédant $seniority mois d'ancienneté, son préavis de mise à la retraite devrait être de $expectedNotice $expectedUnit",
({ seniority, category, group, expectedNotice, expectedUnit }) => {
const result = engine
.setSituation({
"contrat salarié . convention collective": "'IDCC0016'",
"contrat salarié . mise à la retraite": "oui",
"contrat salarié . ancienneté": seniority,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle": `'${category}'`,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . groupe": group,
})
.evaluate("contrat salarié . préavis de retraite");

expect(result.nodeValue).toEqual(expectedNotice);
expect(result.unit?.numerators).toEqual([expectedUnit]);
}
);

test("Pour un employé dans les transports routiers avec la catgorie TAM dans le groupe 6 lors d'une mise à la retraite, on attend la notification", () => {
const notifications = getNotifications(
engine.setSituation({
"contrat salarié . convention collective": "'IDCC0016'",
"contrat salarié . mise à la retraite": "oui",
"contrat salarié . ancienneté": 5,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle": `'TAM'`,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . groupe": 6,
})
);
expect(notifications).toHaveLength(1);
expect(notifications[0].description).toBe(
`Le salarié pourra quitter son emploi après avoir exécuté un préavis de 1 mois sous réserve d’en avoir informé son employeur au moins 10 jours à l’avance. Dans ce cas, il n’a droit qu’à la rémunération correspondant au temps qu’il a effectivement travaillé (et éventuellement une indemnité de congédiement).`
);
});

test.each`
seniority | category | group
${5} | ${"Ingénieurs et cadres"} | ${0}
${6} | ${"Ingénieurs et cadres"} | ${0}
${24} | ${"Ingénieurs et cadres"} | ${0}
${3} | ${"Ouvriers"} | ${0}
${6} | ${"Ouvriers"} | ${0}
${23} | ${"Ouvriers"} | ${0}
${24} | ${"Ouvriers"} | ${0}
${25} | ${"Ouvriers"} | ${0}
${0} | ${"Employés"} | ${0}
${1} | ${"Employés"} | ${0}
${23} | ${"Employés"} | ${0}
${24} | ${"Employés"} | ${0}
${25} | ${"Employés"} | ${0}
${0} | ${"TAM"} | ${5}
${1} | ${"TAM"} | ${5}
${23} | ${"TAM"} | ${5}
${24} | ${"TAM"} | ${5}
${25} | ${"TAM"} | ${5}
`(
"Pour un employé dans les transports routiers de la catégorie $category dans le groupe $group lors d'une mise à la retraite, on n'attend pas de notification",
({ seniority, group, category }) => {
const notifications = getNotifications(
engine.setSituation({
"contrat salarié . convention collective": "'IDCC0016'",
"contrat salarié . mise à la retraite": "oui",
"contrat salarié . ancienneté": seniority,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle": `'${category}'`,
"contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . groupe": group,
})
);

expect(notifications).toHaveLength(0);
}
);
@@ -0,0 +1,118 @@
# Convention collective nationale transport routiers (idcc 16)
contrat salarié . convention collective . transports routiers:
description: Convention collective nationale des transports routiers
applicable si: convention collective = 'IDCC0016'
valeur: oui

contrat salarié . convention collective . transports routiers . catégorie professionnelle:
question: Quelle est votre catégorie professionelle ?
cdtn:
type: liste
valeurs:
Ingénieurs et cadres: "'Ingénieurs et cadres'"
Ouvriers: "'Ouvriers'"
Employés: "'Employés'"
Technicien et agents de maîtrise (TAM): "'TAM'"

contrat salarié . convention collective . transports routiers . catégorie professionnelle . Ingénieurs et cadres:
applicable si: catégorie professionnelle = 'Ingénieurs et cadres'
valeur: oui

contrat salarié . convention collective . transports routiers . catégorie professionnelle . Ingénieurs et cadres . préavis de retaite:
titre: Préavis de retraite pour un ingénieurs et cadres
remplace: contrat salarié . préavis de retraite collective
valeur: 6 mois
références:
- article: Accord du 30 octobre 1951 relatif aux ingénieurs et cadres - Annexe IV, article 18
url: https://www.legifrance.gouv.fr/conv_coll/id/KALIARTI000005849573/?idConteneur=KALICONT000005635624


contrat salarié . convention collective . transports routiers . catégorie professionnelle . Ouvriers:
applicable si: catégorie professionnelle = 'Ouvriers'
valeur: oui

contrat salarié . convention collective . transports routiers . catégorie professionnelle . Employés:
applicable si: catégorie professionnelle = 'Employés'
valeur: oui


contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM:
applicable si: catégorie professionnelle = 'TAM'
valeur: oui

contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . groupe:
question: Quelle est votre groupe ?
cdtn:
type: liste
valeurs:
1 à 5: 5
6 à 8: 6

contrat salarié . convention collective . transports routiers . catégorie professionnelle . Ouvriers . préavis de retraite tranche:
applicable si: contrat salarié . mise à la retraite
remplace: contrat salarié . préavis de retraite collective
grille:
assiette: ancienneté
tranches:
- montant: 1 semaine
plafond: 6 mois
- montant: 1 mois
plafond: 24 mois
- montant: 2 mois
références:
- article: Accord du 16 juin 1961 relatifs aux ouvriers - annexe I, article 5
url: https://www.legifrance.gouv.fr/conv_coll/id/KALIARTI000005849372/?idConteneur=KALICONT000005635624

contrat salarié . convention collective . transports routiers . catégorie professionnelle . Employés . préavis de retraite tranche:
applicable si: contrat salarié . mise à la retraite
remplace: contrat salarié . préavis de retraite collective
grille:
assiette: ancienneté
tranches:
- montant: 0 mois
plafond: 1 mois
- montant: 1 mois
plafond: 24 mois
- montant: 2 mois
références:
- article: Accord du 27 février 1951 relatif aux employés Annexe II, article 13
url: https://www.legifrance.gouv.fr/conv_coll/id/KALIARTI000005849509/?idConteneur=KALICONT000005635624

contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . préavis de retraite tranche groupe 1 à 5:
applicable si:
toutes ces conditions:
- contrat salarié . mise à la retraite
- groupe < 6
remplace: contrat salarié . préavis de retraite collective
grille:
assiette: ancienneté
tranches:
- montant: 0 mois
plafond: 1 mois
- montant: 1 mois
plafond: 24 mois
- montant: 2 mois
références:
- article: Accord du 30 mars 1951 relatif aux techniciens et agents de maîtrise Annexe III, article 17
url: https://www.legifrance.gouv.fr/conv_coll/id/KALIARTI000005849262/?idConteneur=KALICONT000005635624

contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . préavis de retraite groupe 6 à 8:
applicable si:
toutes ces conditions:
- contrat salarié . mise à la retraite
- groupe >= 6
remplace: contrat salarié . préavis de retraite collective
valeur: 2 mois
références:
- article: Accord du 30 mars 1951 relatif aux techniciens et agents de maîtrise Annexe III, article 17
url: https://www.legifrance.gouv.fr/conv_coll/id/KALIARTI000005849262/?idConteneur=KALICONT000005635624


contrat salarié . convention collective . transports routiers . catégorie professionnelle . TAM . préavis de retraite groupe 6 à 8 . notification:
applicable si:
toutes ces conditions:
- contrat salarié . mise à la retraite
- groupe >= 6
type: notification
description: Le salarié pourra quitter son emploi après avoir exécuté un préavis de 1 mois sous réserve d’en avoir informé son employeur au moins 10 jours à l’avance. Dans ce cas, il n’a droit qu’à la rémunération correspondant au temps qu’il a effectivement travaillé (et éventuellement une indemnité de congédiement).
valeur: oui

0 comments on commit af00de3

Please sign in to comment.