Skip to content

Commit

Permalink
fix(3248): application des retours métiers (#5617)
Browse files Browse the repository at this point in the history
* fix: reference

* empty

* fix: doc

* fix: retours

* fix: retours

* fix: modif

* fix: test
  • Loading branch information
maxgfr authored Feb 26, 2024
1 parent 1fb81b7 commit 5e75576
Show file tree
Hide file tree
Showing 15 changed files with 423 additions and 284 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -48,16 +48,15 @@ function StepResult({ form }: WizardStepProps): JSX.Element {

const [situation] = possibleSituations;

const refs: OldReference[] = [
{
ref: situation.ref,
refUrl: situation.refUrl,
},
{
ref: situation.ref2 ?? null,
refUrl: situation.ref2Url ?? null,
},
];
const refs: OldReference[] =
situation.ref && situation.refUrl
? [
{
ref: situation.ref,
refUrl: situation.refUrl,
},
]
: situation.refs ?? [];
if (!situation.disableLegal) {
refs.unshift(refLegal);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ export const getRefs = ({ legal, agreement }: Situations): OldReference[] => {
if (agreement.ref && agreement.refUrl) {
refs.push({ ref: agreement.ref, refUrl: agreement.refUrl });
}
if (agreement.ref2 && agreement.ref2Url) {
refs.push({ ref: agreement.ref2, refUrl: agreement.ref2Url });
if (agreement.refs) {
refs.push(...agreement.refs);
}
}
return refs;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,17 +16,25 @@ export const getResult = ({
if (durationMax === 0) {
return "Aucun préavis";
}
const durationHandicappedMax = 90;
let durationHandicapped = 1;
if (durationMax < durationHandicappedMax) {
durationHandicapped = Math.min(durationHandicappedMax / durationMax, 2);
}
const isLegalSituationBetterThanAgreement =
(legalSituation?.duration ?? 0) > (agreementSituation?.duration ?? 0);

if (disabledWorker) {
const durationHandicappedMax = 90;
let durationHandicapped = 1;
if (durationMax < durationHandicappedMax) {
durationHandicapped = Math.min(durationHandicappedMax / durationMax, 2);
}

const result = disabledWorker
? durationMax * durationHandicapped
: durationMax;
const result = durationMax * durationHandicapped;

return result >= 30
? `${result / 30} mois`
: `${result} jour${result > 1 ? "s" : ""}`;
return result >= 30
? `${result / 30} mois`
: `${result} jour${result > 1 ? "s" : ""}`;
} else if (isLegalSituationBetterThanAgreement && legalSituation) {
return legalSituation.answer;
} else if (!isLegalSituationBetterThanAgreement && agreementSituation) {
return agreementSituation.answer;
}
return "";
};
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,8 @@ export const getSituations = (
answer: agreementSituation.answer ?? "",
ref: agreementSituation.ref ?? undefined,
refUrl: agreementSituation.refUrl ?? undefined,
ref2: agreementSituation.ref2,
ref2Url: agreementSituation.ref2Url,
note: agreementSituation.note
refs: agreementSituation.refs ?? [],
note: agreementSituation.note,
},
};
}
Expand Down Expand Up @@ -63,9 +62,8 @@ export const getSituations = (
answer: agreementSituation.answer ?? "",
ref: agreementSituation.ref ?? undefined,
refUrl: agreementSituation.refUrl ?? undefined,
ref2: agreementSituation.ref2,
ref2Url: agreementSituation.ref2Url,
note: agreementSituation.note
refs: agreementSituation.refs ?? [],
note: agreementSituation.note,
},
};
};
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,7 @@ export type LicenciementSituation = {
note?: string | string[];
ref?: string;
refUrl?: string;
ref2?: string;
ref2Url?: string;
refs?: Array<{ ref: string; refUrl: string }>;
};

export type Situations = {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import { heuresRechercheEmploiData as data } from "@socialgouv/modeles-social";
import {
OldReference,
heuresRechercheEmploiData as data,
} from "@socialgouv/modeles-social";
import { Paragraph } from "@socialgouv/cdtn-ui";
import React from "react";

Expand All @@ -11,7 +14,11 @@ import {
getSituationsFor,
recapSituation,
} from "../../common/situations.utils";
import { HighlightResult, SectionTitle, SmallText } from "../../common/stepStyles";
import {
HighlightResult,
SectionTitle,
SmallText,
} from "../../common/stepStyles";
import { formatRefs } from "../../publicodes";
import { WizardStepProps } from "../../common/type/WizardType";
import { NoticeNote } from "../../common/NoticeNote";
Expand All @@ -37,31 +44,37 @@ function Duration({ situation }) {
return (
<>
<p>
{wording}&nbsp;:<br/><HighlightResult>{situation.answer}</HighlightResult>
{wording}&nbsp;:
<br />
<HighlightResult>{situation.answer}</HighlightResult>
&nbsp;
<NoticeNote
isList
numberOfElements={Array.isArray(note) ? note.length : calculateNumberOfElements(note)}
numberOfElements={
Array.isArray(note) ? note.length : calculateNumberOfElements(note)
}
/>
.
{note && !Array.isArray(note) && (
<SmallText>
<NoticeNote
numberOfElements={calculateNumberOfElements(note)}
currentElement={calculateNumberOfElements(note)}
/>
{note}
</SmallText>
)}
{note && Array.isArray(note) && (
note.map((text, index) => <SmallText key={index}>
<NoticeNote
numberOfElements={note.length}
currentElement={index + 1}
/>
{text}
</SmallText>)
)}
<SmallText>
<NoticeNote
numberOfElements={calculateNumberOfElements(note)}
currentElement={calculateNumberOfElements(note)}
/>
{note}
</SmallText>
)}
{note &&
Array.isArray(note) &&
note.map((text, index) => (
<SmallText key={index}>
<NoticeNote
numberOfElements={note.length}
currentElement={index + 1}
/>
{text}
</SmallText>
))}
</p>
{situation.answer2 && (
<>
Expand Down Expand Up @@ -176,6 +189,17 @@ export function StepResult({ form }: WizardStepProps): JSX.Element {
}

const [situation] = possibleSituations;

const refs: OldReference[] =
situation.ref && situation.refUrl
? [
{
ref: situation.ref,
refUrl: situation.refUrl,
},
]
: situation.refs ?? [];

return (
<>
<SectionTitle>
Expand All @@ -192,7 +216,7 @@ export function StepResult({ form }: WizardStepProps): JSX.Element {
...situation.criteria,
})}

<PubliReferences references={formatRefs([situation])} />
<PubliReferences references={formatRefs(refs)} />
</ShowDetails>
<DisclaimerBox duration={situation.answer} />
</>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ describe("extractDates", () => {
period | fromDate | result
${"1 jour"} | ${new Date("2022-01-14")} | ${null}
${"2 jours"} | ${new Date("2022-01-14")} | ${"15 janvier"}
${"7 jours"} | ${new Date("2022-01-14")} | ${"20 janvier"}
${"1 mois"} | ${new Date("2022-01-14")} | ${"13 février"}
${"2 mois"} | ${new Date("2022-01-14")} | ${"13 mars"}
${"12 mois"} | ${new Date("2022-01-14")} | ${"13 janvier"}
Expand All @@ -40,7 +39,17 @@ describe("extractDates", () => {
${"1 an et demi"} | ${new Date("2022-01-14")} | ${null}
${"1 mois de date à date"} | ${new Date("2022-01-14")} | ${"14 février"}
${"1 semaine de date à date"} | ${new Date("2022-01-14")} | ${"21 janvier"}
${"7 jours calendaires"} | ${new Date("2022-04-05")} | ${"11 avril"}
${"7 jours"} | ${new Date("2022-04-05")} | ${"11 avril"}
${"2 semaines calendaires"} | ${new Date("2022-04-05")} | ${"19 avril"}
${"2 semaines"} | ${new Date("2022-04-05")} | ${"18 avril"}
${"3 mois calendaires"} | ${new Date("2022-04-05")} | ${"5 juillet"}
${"3 mois"} | ${new Date("2022-04-05")} | ${"4 juillet"}
${"7 jours calendaires"} | ${new Date("2022-01-14")} | ${"20 janvier"}
${"1 semaine calendaire"} | ${new Date("2022-01-14")} | ${"21 janvier"}
${"2 semaines calendaire"} | ${new Date("2022-01-14")} | ${"28 janvier"}
${"1 mois calendaire"} | ${new Date("2022-01-14")} | ${"14 février"}
${"2 mois calendaires"} | ${new Date("2022-01-14")} | ${"14 mars"}
${"blabla"} | ${new Date("2022-01-14")} | ${null}
${"blabla jours"} | ${new Date("2022-01-14")} | ${null}
`(
Expand All @@ -61,6 +70,8 @@ describe("extractDates", () => {
${"1 mois de date à date"} | ${Extra.FROM_TO}
${"blabla"} | ${null}
${"7 jours calendaires"} | ${Extra.CALENDAR}
${"1 mois calendaire"} | ${Extra.CALENDAR}
${"2 mois calendaires"} | ${Extra.CALENDAR}
${"1 semaine de date à date"} | ${Extra.FROM_TO}
`("should return $result for $period", ({ period, result }) => {
expect(getExtra(period)).toBe(result);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ describe("Notification bloquante pour la CC 3248", () => {
const notifications = engine.getNotifications();
expect(notifications).toHaveLength(1);
expect(notifications[0].description).toBe(
"Attention, comme le licenciement a été notifié avant le 01/01/2024, le montant de l'indemnité peut ne pas correspondre au résultat donné. En effet, jusqu'au 31/12/2023 ce sont les conventions locales de la métallurgie ainsi que la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) qui s’appliquaient. Toutes ces conventions ont été regroupées pour former la convention collective nationale de la métallurgie (IDCC 3248) applicable depuis le 01/01/2024. Si le licenciement a été notifié avant le 01/01/2024 et que le salarié dépendait de la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) il faut sélectionner cette convention collective à l'étape n°3 du simulateur pour obtenir le résultat correspondant."
"Attention, comme le licenciement a été notifié avant le 01/01/2024, le montant de l'indemnité peut ne pas correspondre au résultat donné. En effet, jusqu'au 31/12/2023 ce sont les conventions locales de la métallurgie ainsi que la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) qui s’appliquaient. Toutes ces conventions ont disparu au profit d’une nouvelle convention collective nationale applicable depuis le 01/01/2024. Si le licenciement a été notifié avant le 01/01/2024 et que le salarié dépendait de la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) il faut sélectionner cette convention collective à l'étape n°3 du simulateur pour obtenir le résultat correspondant."
);
expect(notifications[0].show).toBe("légal et conventionnel");
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,8 @@ contrat salarié . convention collective . métallurgie . indemnité de licencie
F, G, H ou I: "'F, G, H ou I'"

contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées:
titre: "Le salarié est licencié pour le motif suivant : \"absence prolongée ou absences répétées justifiées perturbant le fonctionnement de l'entreprise\""
question: "Le salarié est-il licencié pour le motif suivant : \"absence prolongée ou absences répétées justifiées perturbant le fonctionnement de l'entreprise\" ?"
titre: 'Le salarié est licencié pour le motif suivant : "absence prolongée ou absences répétées justifiées perturbant le fonctionnement de l''entreprise"'
question: 'Le salarié est-il licencié pour le motif suivant : "absence prolongée ou absences répétées justifiées perturbant le fonctionnement de l''entreprise" ?'
cdtn:
type: oui-non

Expand Down Expand Up @@ -52,22 +52,22 @@ contrat salarié . convention collective . métallurgie . indemnité de licencie
applicable si:
une de ces conditions:
- toutes ces conditions:
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 1 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'moins de 2 mois'
- toutes ces conditions:
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 5 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- une de ces conditions:
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 1 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'moins de 2 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 2 mois à moins de 4 mois'
- toutes ces conditions:
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 10 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- une de ces conditions:
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'moins de 2 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 2 mois à moins de 4 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 4 mois à moins 6 mois'
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 5 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- une de ces conditions:
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'moins de 2 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 2 mois à moins de 4 mois'
- toutes ces conditions:
- contrat salarié . indemnité de licenciement . ancienneté conventionnelle en année >= 10 an
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées = 'Oui'
- une de ces conditions:
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'moins de 2 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 2 mois à moins de 4 mois'
- contrat salarié . convention collective . métallurgie . indemnité de licenciement . licenciement pour motif absence prolongée ou répétées durée = 'de 4 mois à moins 6 mois'
remplace: majoration
valeur: 1.5

Expand Down Expand Up @@ -107,7 +107,7 @@ contrat salarié . convention collective . métallurgie . indemnité de licencie
- forfait jour . date
- forfait jour = 'Non'
titre: Le salarié était cadre dans l'ancienne convention collective de la métallurgie (avant le 01/01/2024)
description: Si le salarié dépendait précédemment de la convention collective des ingénieurs et cadres de la métallurgie (IDCC 650) et qu’il est désormais classé non-cadre en raison de la nouvelle classification des emplois (depuis le 01/01/2024), il bénéficie quand même du calcul de l'indemnité qui s’applique aux cadres.
description: Si l'emploi du salarié était précédemment cadre (en application de l’ancienne Convention collective - Ingénieurs et cadres (IDCC 650)) et qu’il est classé non-cadre à partir du 1er janvier 2024, en raison de la nouvelle classification des emplois, le salarié bénéficie quand même du calcul de lindemnité qui s’applique aux cadres.
question: Le salarié était-il cadre dans l'ancienne convention collective de la métallurgie (avant le 01/01/2024)&nbsp;?
cdtn:
type: oui-non
Expand Down Expand Up @@ -488,7 +488,7 @@ contrat salarié . convention collective . métallurgie . indemnité de licencie
contrat salarié . convention collective . métallurgie . indemnité de licenciement . pas supportée:
applicable si: contrat salarié . indemnité de licenciement . date de notification < 01/01/2024
type: notification
description: Attention, comme le licenciement a été notifié avant le 01/01/2024, le montant de l'indemnité peut ne pas correspondre au résultat donné. En effet, jusqu'au 31/12/2023 ce sont les conventions locales de la métallurgie ainsi que la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) qui s’appliquaient. Toutes ces conventions ont été regroupées pour former la convention collective nationale de la métallurgie (IDCC 3248) applicable depuis le 01/01/2024. Si le licenciement a été notifié avant le 01/01/2024 et que le salarié dépendait de la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) il faut sélectionner cette convention collective à l'étape n°3 du simulateur pour obtenir le résultat correspondant.
description: Attention, comme le licenciement a été notifié avant le 01/01/2024, le montant de l'indemnité peut ne pas correspondre au résultat donné. En effet, jusqu'au 31/12/2023 ce sont les conventions locales de la métallurgie ainsi que la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) qui s’appliquaient. Toutes ces conventions ont disparu au profit d’une nouvelle convention collective nationale applicable depuis le 01/01/2024. Si le licenciement a été notifié avant le 01/01/2024 et que le salarié dépendait de la convention spécifique aux ingénieurs et cadres de la métallurgie (IDCC 650) il faut sélectionner cette convention collective à l'étape n°3 du simulateur pour obtenir le résultat correspondant.
valeur: oui
cdtn:
affichage: légal et conventionnel
Loading

0 comments on commit 5e75576

Please sign in to comment.