Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(indemnite-licenciement): retour pour la cc 2120 #5309

Merged
merged 8 commits into from
Aug 23, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,34 @@ export class AgreementSalary2120 implements AgreementSalary {
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,
isLicenciementDisciplinaire: get()
.informationsData.input.publicodesInformations.find(
(v) =>
v.question.rule.nom ===
"contrat salarié . convention collective . banque . licenciement disciplinaire"
)
?.info?.slice(1, -1) as QuestionOuiNon,
isLicenciementEco: get()
.informationsData.input.publicodesInformations.find(
(v) =>
v.question.rule.nom ===
"contrat salarié . convention collective . banque . licenciement économique"
)
?.info?.slice(1, -1) as QuestionOuiNon,
isLicenciementDisciplinaire: isLicenciementInaptitude
? QuestionOuiNon.non
: isLicenciementDisciplinaire,
isLicenciementEco: isLicenciementInaptitude
? QuestionOuiNon.non
: isLicenciementEco,
});
};
}
Original file line number Diff line number Diff line change
Expand Up @@ -334,11 +334,17 @@ const createResultStore: StoreSlice<
);
}

if (isAgreementBetter || isAgreementEqualToLegal) {
if (isAgreementBetter) {
notifications = agreementNotifications?.filter(
(item) =>
item.show === "conventionnel" ||
item.show === "légal et conventionnel"
item.show === "légal et conventionnel" ||
item.show === "default"
);
} else if (isAgreementEqualToLegal) {
notifications = agreementNotifications?.filter(
(item) =>
item.show === "légal et conventionnel" || item.show === "default"
);
} else {
notifications = agreementNotifications?.filter(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ export function getNotifications(
.map(({ dottedName, rawNode: { description, cdtn } }) => ({
description,
dottedName,
show: cdtn?.affichage ?? "conventionnel",
show: cdtn?.affichage ?? "default",
}));
}

Expand Down Expand Up @@ -78,6 +78,6 @@ export function getNotificationsBloquantes(
.map(({ dottedName, rawNode: { description, cdtn } }) => ({
description,
dottedName,
show: cdtn?.affichage ?? "conventionnel",
show: cdtn?.affichage ?? "default",
}));
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,6 @@ contrat salarié . convention collective . ouvriers travaux public . indemnité
formule:
formula: ($formule) + (10% * ($formule))


contrat salarié . convention collective . ouvriers travaux public . indemnité de licenciement . majoration licenciement économique:
applicable si: licenciement économique = 'Oui'
valeur: 0
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,8 @@ describe("Formule indemnité licenciement pour la CC 2120", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -6,18 +6,28 @@ const engine = new IndemniteLicenciementPublicodes(
"2120"
);

const defaultNotification = [
{
description: `Si au cours des 12 derniers mois le salarié a perçu des primes, des éléments variables ou des avantages en nature, le montant de l’indemnité de licenciement pourrait être moins élevé. En effet, la convention collective prévoit que l’indemnité de licenciement doit être calculée sur la base du salaire sans ces éléments de rémunération alors que le simulateur les intègre.`,
},
];

const notification = [
{
description: `Si lors de l’absence pour maladie non professionnelle le salarié a bénéficié d’une indemnisation complémentaire versée par l'employeur (maintien de salaire), en plus des indemnités journalières de la sécurité sociale, le montant de l’indemnité de licenciement pourrait être plus élevé. En effet, dans ce cas, la période d’absence est intégrée dans l’ancienneté du salarié.
Par soucis de simplification, ce simulateur déduit toutes les absences pour maladie non professionnelle sans distinguer, pour calculer l’ancienneté du salarié, selon qu’elles ont été indemnisées ou pas.`,
Par soucis de simplification, ce simulateur déduit toutes les absences pour maladie non professionnelle sans distinguer, pour calculer l’ancienneté du salarié, selon qu’elles ont été indemnisées ou pas.
`,
},
...defaultNotification,
];

const notification2 = [
{
description: `Si lors de l’absence pour accident de trajet le salarié a bénéficié d’une indemnisation complémentaire versée par l'employeur (maintien de salaire), en plus des indemnités journalières de la sécurité sociale, le montant de l’indemnité de licenciement pourrait être plus élevé. En effet, dans ce cas, la période d’absence est intégrée dans l’ancienneté du salarié.
Par soucis de simplification, ce simulateur déduit toutes les absences pour accident de trajet sans distinguer, pour calculer l’ancienneté du salarié, selon qu’elles ont été indemnisées ou pas.`,
Par soucis de simplification, ce simulateur déduit toutes les absences pour accident de trajet sans distinguer, pour calculer l’ancienneté du salarié, selon qu’elles ont été indemnisées ou pas.
`,
},
...defaultNotification,
];

describe("Notifications pour la CC 650", () => {
Expand Down Expand Up @@ -64,6 +74,8 @@ describe("Notifications pour la CC 650", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand All @@ -78,21 +90,26 @@ describe("Notifications pour la CC 650", () => {

const notifs = engine.getNotifications();
expect(notifs).toHaveLength(expectedNotif.length);
expect(notifs[0].description).toContain(expectedNotif[0].description);
const notifsToCompare = notifs.map((notif) => {
return {
description: notif.description,
};
});
expect(notifsToCompare).toEqual(expectedNotif);
}
);
});

describe("N'affiche pas la notification", () => {
test.each`
entryDate | categoriePro | semestresAvant2002 | semestresApres2002 | licenciementEco | licenciementDisciplinaire | seniorityRight | seniority | salary | expectedNotif
${"01/01/1999"} | ${"Non-cadres"} | ${0} | ${0} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${0.67} | ${15} | ${2000} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${34} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${20} | ${3064} | ${[]}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${27} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${15.67} | ${1991} | ${[]}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${21} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${12.5} | ${1991} | ${[]}
${"01/01/1999"} | ${"Non-cadres"} | ${6} | ${34} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${20} | ${2772} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${24} | ${2772} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${1} | ${24} | ${2772} | ${notification}
${"01/01/1999"} | ${"Non-cadres"} | ${0} | ${0} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${0.67} | ${15} | ${2000} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${34} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${20} | ${3064} | ${defaultNotification}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${27} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${15.67} | ${1991} | ${defaultNotification}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${21} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${12.5} | ${1991} | ${defaultNotification}
${"01/01/1999"} | ${"Non-cadres"} | ${6} | ${34} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${20} | ${2772} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${24} | ${2772} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${1} | ${24} | ${2772} | ${defaultNotification}
`(
"$#) Catégorie pro $categoriePro, entryDate $entryDate, seniorityRight: $seniorityRight an, semestresAvant2002 $semestresAvant2002, semestresApres2002 $semestresApres2002, licenciementDisciplinaire $licenciementDisciplinaire, licenciementEco $licenciementEco, salaire de référence: $salary => $expectedRef",
({
Expand All @@ -105,6 +122,7 @@ describe("Notifications pour la CC 650", () => {
salary,
seniority,
entryDate,
expectedNotif,
}) => {
engine.setSituation(
Object.assign(
Expand All @@ -123,6 +141,8 @@ describe("Notifications pour la CC 650", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand All @@ -136,7 +156,13 @@ describe("Notifications pour la CC 650", () => {
);

const notifs = engine.getNotifications();
expect(notifs).toHaveLength(0);
expect(notifs).toHaveLength(expectedNotif.length);
const notifsToCompare = notifs.map((notif) => {
return {
description: notif.description,
};
});
expect(notifsToCompare).toEqual(expectedNotif);
}
);
});
Expand Down Expand Up @@ -184,6 +210,8 @@ describe("Notifications pour la CC 650", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand All @@ -198,21 +226,26 @@ describe("Notifications pour la CC 650", () => {

const notifs = engine.getNotifications();
expect(notifs).toHaveLength(expectedNotif.length);
expect(notifs[0].description).toContain(expectedNotif[0].description);
const notifsToCompare = notifs.map((notif) => {
return {
description: notif.description,
};
});
expect(notifsToCompare).toEqual(expectedNotif);
}
);
});

describe("N'affiche pas la notification", () => {
describe("N'affiche que la notification de base", () => {
test.each`
entryDate | categoriePro | semestresAvant2002 | semestresApres2002 | licenciementEco | licenciementDisciplinaire | seniorityRight | seniority | salary | expectedNotif
${"01/01/1999"} | ${"Non-cadres"} | ${0} | ${0} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${0.67} | ${15} | ${2000} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${34} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${20} | ${3064} | ${[]}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${27} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${15.67} | ${1991} | ${[]}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${21} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${12.5} | ${1991} | ${[]}
${"01/01/1999"} | ${"Non-cadres"} | ${6} | ${34} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${20} | ${2772} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${24} | ${2772} | ${[]}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${1} | ${24} | ${2772} | ${notification}
${"01/01/1999"} | ${"Non-cadres"} | ${0} | ${0} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${0.67} | ${15} | ${2000} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${34} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${20} | ${3064} | ${defaultNotification}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${27} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${15.67} | ${1991} | ${defaultNotification}
${"01/01/2000"} | ${"Non-cadres"} | ${4} | ${21} | ${QuestionOuiNon.oui} | ${undefined} | ${1} | ${12.5} | ${1991} | ${defaultNotification}
${"01/01/1999"} | ${"Non-cadres"} | ${6} | ${34} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${20} | ${2772} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.non} | ${1} | ${24} | ${2772} | ${defaultNotification}
${"01/01/1999"} | ${"Cadres"} | ${6} | ${42} | ${QuestionOuiNon.non} | ${QuestionOuiNon.oui} | ${1} | ${24} | ${2772} | ${defaultNotification}
`(
"$#) Catégorie pro $categoriePro, entryDate $entryDate, seniorityRight: $seniorityRight an, semestresAvant2002 $semestresAvant2002, semestresApres2002 $semestresApres2002, licenciementDisciplinaire $licenciementDisciplinaire, licenciementEco $licenciementEco, salaire de référence: $salary => $expectedRef",
({
Expand All @@ -225,6 +258,7 @@ describe("Notifications pour la CC 650", () => {
salary,
seniority,
entryDate,
expectedNotif,
}) => {
engine.setSituation(
Object.assign(
Expand All @@ -242,6 +276,8 @@ describe("Notifications pour la CC 650", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand All @@ -255,7 +291,13 @@ describe("Notifications pour la CC 650", () => {
);

const notifs = engine.getNotifications();
expect(notifs).toHaveLength(0);
expect(notifs).toHaveLength(expectedNotif.length);
const notifsToCompare = notifs.map((notif) => {
return {
description: notif.description,
};
});
expect(notifsToCompare).toEqual(expectedNotif);
}
);
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,6 @@ describe("Vérification des références juridiques pour la CC 2120", () => {
{
"contrat salarié . convention collective": "'IDCC2120'",
"contrat salarié . convention collective . banque . catégorie professionnelle": `'${categoriePro}'`,

"contrat salarié . convention collective . banque . licenciement économique": `'${licenciementEco}'`,
"contrat salarié . convention collective . banque . semestres complets après 2002":
semestresApres2002,
Expand All @@ -112,6 +111,8 @@ describe("Vérification des références juridiques pour la CC 2120", () => {
seniorityRight,
"contrat salarié . indemnité de licenciement . date d'entrée":
entryDate,
"contrat salarié . indemnité de licenciement . inaptitude suite à un accident ou maladie professionnelle":
"non",
"contrat salarié . indemnité de licenciement . salaire de référence conventionnel":
salary,
},
Expand Down
Loading
Loading