diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/__tests__/stepReducer.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/__tests__/stepReducer.test.js index 48f7bcee34..3a12b4207f 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/__tests__/stepReducer.test.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/__tests__/stepReducer.test.js @@ -1,6 +1,6 @@ -import { stepReducer, initialSteps } from "../stepReducer"; +import { stepPrime, stepReducer, initialSteps } from "../stepReducer"; -describe("getInitialSteps()", () => { +describe("initialSteps", () => { it("should return default steps", () => { expect(initialSteps).toMatchInlineSnapshot(` Array [ @@ -12,7 +12,7 @@ Array [ Object { "component": [Function], "label": "Informations générales", - "name": "infoGenerales", + "name": "info_generales", }, Object { "component": [Function], @@ -27,7 +27,7 @@ Array [ Object { "component": [Function], "label": "Indemnité légale", - "name": "indemniteLegale", + "name": "indemnite_legale", }, ] `); @@ -35,32 +35,49 @@ Array [ }); describe("reducer", () => { - it("should handle reset action", () => { + it("handles reset action", () => { expect(stepReducer([], { type: "reset" })).toEqual(initialSteps); }); - it("should handle add_primes after salaires", () => { + it("handles add_step after salaires", () => { const initialSteps = [{ name: "salaires" }]; - const newState = stepReducer(initialSteps, { type: "add_primes" }); + const newState = stepReducer(initialSteps, { + type: "add_step", + payload: { insertAfter: "salaires", step: stepPrime } + }); - expect(newState.findIndex(step => step.name === "primes")).toEqual(1); + expect(newState.findIndex(step => step.name === "primes")).toBe(1); + expect(newState[1]).toEqual(stepPrime); }); - it("should handle add_primes after salaires", () => { - const initialSteps = []; - const newState = stepReducer(initialSteps, { type: "add_primes" }); + it("does not add step at all if there is no previous step that matches", () => { + const initialSteps = [{}, {}]; + const newState = stepReducer(initialSteps, { + type: "add_step", + payload: { insertAfter: "salaires", step: stepPrime } + }); - expect(newState.findIndex(step => step.name === "primes")).toEqual(0); + expect(newState.findIndex(step => step.name === stepPrime.name)).toEqual(0); }); - it("should handle remove_primes", () => { - const initialSteps = []; - const newState = stepReducer(initialSteps, { type: "remove_primes" }); + it("handles remove_step", () => { + const initialSteps = [{}, stepPrime, {}]; + const newState = stepReducer(initialSteps, { + type: "remove_step", + payload: stepPrime.name + }); - expect(newState.findIndex(step => step.name === "primes")).toEqual(-1); + expect(newState.findIndex(step => step.name === stepPrime.name)).toEqual( + -1 + ); }); - it("should not fail when handle remove_primes", () => { - const initialSteps = []; - const newState = stepReducer(initialSteps, { type: "remove_primes" }); + it("does not fail when removing unexisting step", () => { + const initialSteps = [{}]; + const newState = stepReducer(initialSteps, { + type: "remove_step", + payload: { insertAfter: "salaires", stepPrime } + }); - expect(newState.findIndex(step => step.name === "primes")).toEqual(-1); + expect(newState.findIndex(step => step.name === stepPrime.name)).toEqual( + -1 + ); }); it("should handle add_branche", () => { const initialSteps = []; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/branches.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/branches.js index 520947c410..a94056d433 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/branches.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/branches.js @@ -27,6 +27,11 @@ export const branches = [ value: "1351", label: "Convention collective nationale de la Prévention et sécurité" }, + { + value: "1486", + label: + "Convention collective nationale des bureaux d'études techniques, des cabinets d'ingénieurs-conseils et des sociétés de conseils du 15 décembre 1987" + }, { value: "1534", label: diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/__snapshots__/Result.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/__snapshots__/Result.test.js.snap index b1dbed9fdb..fba8f4cf27 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/__snapshots__/Result.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/__snapshots__/Result.test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` should render 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -23,13 +23,13 @@ exports[` should render 1`] = ` border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -37,7 +37,7 @@ exports[` should render 1`] = ` outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -46,21 +46,21 @@ exports[` should render 1`] = ` box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -82,7 +82,7 @@ exports[` should render 1`] = ` box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -103,7 +103,7 @@ exports[` should render 1`] = ` background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -142,7 +142,7 @@ exports[` should render 1`] = ` .c6 { border-radius: 0.25rem; background-color: #53657d; - width: 50%; + width: calc(50% * 0.9533911504424778); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -158,7 +158,7 @@ exports[` should render 1`] = ` .c15 { border-radius: 0.25rem; background-color: #0053b3; - width: 50%; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -212,10 +212,6 @@ exports[` should render 1`] = ` -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c3 { @@ -236,6 +232,44 @@ exports[` should render 1`] = ` font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 0.9533911504424778); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} +

should render 1`] = `

should render 1`] = `
-
-
diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/indemnite.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/indemnite.test.js index 6205f37b8f..5937ec2498 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/indemnite.test.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/__tests__/indemnite.test.js @@ -5,7 +5,7 @@ import { import { getIndemnite, getSalaireRef } from "../../../indemnite"; import { OUVRIER, TAM, CADRE } from "../Categorie"; -const initialData = { +const initialValues = { salaires: Array.from({ length: 12 }).fill({ salary: 2000 }), hasTempsPartiel: false, anciennete: 1, @@ -17,14 +17,14 @@ const tests = [ { title: "2k, 12mois d'ancienneté, 55ans, ouvrier", data: { - ...initialData + ...initialValues }, result: 0 }, { title: "2k, 24mois d'ancienneté, 55ans, ouvrier", data: { - ...initialData, + ...initialValues, anciennete: 2 }, result: 400 @@ -32,7 +32,7 @@ const tests = [ { title: "2k, 24mois d'ancienneté, 61ans, ouvrier, retraite possible", data: { - ...initialData, + ...initialValues, anciennete: 2, age: 61, hasRetirementAge: true @@ -42,7 +42,7 @@ const tests = [ { title: "2k, 36mois d'ancienneté, 55ans, ouvrier", data: { - ...initialData, + ...initialValues, anciennete: 3 }, result: 1200 @@ -50,7 +50,7 @@ const tests = [ { title: "2k, 24mois d'ancienneté, 55ans, TAM", data: { - ...initialData, + ...initialValues, anciennete: 2, categorie: TAM }, @@ -59,7 +59,7 @@ const tests = [ { title: "2k, 36mois d'ancienneté, 55ans, TAM", data: { - ...initialData, + ...initialValues, anciennete: 3, categorie: TAM }, @@ -68,7 +68,7 @@ const tests = [ { title: "2k, 24mois d'ancienneté, 55ans, cadre", data: { - ...initialData, + ...initialValues, anciennete: 2, categorie: CADRE }, @@ -77,7 +77,7 @@ const tests = [ { title: "2k, 36mois d'ancienneté, 55ans, cadre", data: { - ...initialData, + ...initialValues, anciennete: 3, tamDuration: 12, cadreDuration: 24, @@ -88,7 +88,7 @@ const tests = [ { title: "2k, 36mois d'ancienneté, 61ans, cadre, retraite possible", data: { - ...initialData, + ...initialValues, anciennete: 3, age: 61, hasRetirementAge: true, @@ -101,7 +101,7 @@ const tests = [ { title: "2k, 6ans d'ancienneté, 61ans, cadre, retraite possible", data: { - ...initialData, + ...initialValues, anciennete: 6, age: 61, hasRetirementAge: true, @@ -114,7 +114,7 @@ const tests = [ { title: "2k, 10ans d'ancienneté, 61ans, cadre, retraite possible", data: { - ...initialData, + ...initialValues, anciennete: 10, age: 61, hasRetirementAge: true, @@ -127,7 +127,7 @@ const tests = [ { title: "2k, 10ans d'ancienneté, 61ans, cadre, retraite possible", data: { - ...initialData, + ...initialValues, anciennete: 10.3, age: 64, hasRetirementAge: true, @@ -158,23 +158,23 @@ describe("getIndemnite", () => { }); }); it("should return an error for anciennete < 2", () => { - const salaireRef = getSalaireRef({ ...initialData }); + const salaireRef = getSalaireRef({ ...initialValues }); const { indemnite } = getIndemnite({ salaireRef, - ...initialData + ...initialValues }); const salaireRefConventionnel = getSalaireRefConventionnel({ - ...initialData + ...initialValues }); const res = getIndemniteConventionnelle({ salaireRef: salaireRefConventionnel, indemnite, - ...initialData + ...initialValues }); expect(res.error).toMatchInlineSnapshot( - `"Aucune indemnité de licenciement n’est prévue en deça de 2 ans d’ancienneté."` + `"Aucune indemnité de licenciement n’est prévue en deçà de 2 ans d’ancienneté."` ); }); }); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/indemnite.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/indemnite.js index b6452f2b3b..c93c4655a7 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/indemnite.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0016/indemnite.js @@ -69,7 +69,7 @@ export function getIndemnite({ if (Math.floor(anciennete) < 2) { error = - "Aucune indemnité de licenciement n’est prévue en deça de 2 ans d’ancienneté."; + "Aucune indemnité de licenciement n’est prévue en deçà de 2 ans d’ancienneté."; } else if (categorie === OUVRIER || categorie === TAM) { const bareme2_3 = { [OUVRIER]: { value: 1 / 10, label: "1/10" }, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0044/__tests__/__snapshots__/Result.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0044/__tests__/__snapshots__/Result.test.js.snap index d93cfb4e8e..6c7ba1814f 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0044/__tests__/__snapshots__/Result.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/0044/__tests__/__snapshots__/Result.test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` should render 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -23,13 +23,13 @@ exports[` should render 1`] = ` border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -37,7 +37,7 @@ exports[` should render 1`] = ` outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -46,21 +46,21 @@ exports[` should render 1`] = ` box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -82,7 +82,7 @@ exports[` should render 1`] = ` box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -103,7 +103,7 @@ exports[` should render 1`] = ` background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -142,7 +142,7 @@ exports[` should render 1`] = ` .c6 { border-radius: 0.25rem; background-color: #53657d; - width: 50%; + width: calc(50% * 0.8333333333333334); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -158,7 +158,7 @@ exports[` should render 1`] = ` .c15 { border-radius: 0.25rem; background-color: #0053b3; - width: 50%; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -212,10 +212,6 @@ exports[` should render 1`] = ` -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c3 { @@ -236,6 +232,44 @@ exports[` should render 1`] = ` font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 0.8333333333333334); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} +

should render 1`] = `

should render 1`] = `
-
-
diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/__snapshots__/indemnite.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/__snapshots__/indemnite.test.js.snap new file mode 100644 index 0000000000..e16d1fd69d --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/__snapshots__/indemnite.test.js.snap @@ -0,0 +1,58 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`getIndemnite CEI 1`] = ` +Object { + "formula": "(C * Sref * A)", + "labels": Object { + "Ancienneté conventionnelle (A)": 9.25, + "Coefficient d'indemnité conventionnel (C)": 0.2, + "Salaire de référence (Sref)": 4500, + }, +} +`; + +exports[`getIndemnite CENI avec ajustement salaire 1`] = ` +Object { + "formula": "(C * Sref * A)", + "labels": Object { + "Ancienneté conventionnelle (A)": 10.25, + "Coefficient d'indemnité conventionnel (C)": 0.25, + "Salaire de référence (Sref)": 2441.66, + }, +} +`; + +exports[`getIndemnite ETAM avec contrats précédents 1`] = ` +Object { + "formula": "(C * Sref * A - I)", + "labels": Object { + "Ancienneté conventionnelle (A)": 14.08, + "Coefficient d'indemnité conventionnel (C)": 0.25, + "Indemnité de licenciement perçue précédemment ( I )": 200, + "Salaire de référence (Sref)": 4500, + }, +} +`; + +exports[`getIndemnite ETAM avec contrats précédents et ajustement salaire 1`] = ` +Object { + "formula": "(C * Sref * A - I)", + "labels": Object { + "Ancienneté conventionnelle (A)": 14.08, + "Coefficient d'indemnité conventionnel (C)": 0.25, + "Indemnité de licenciement perçue précédemment ( I )": 200, + "Salaire de référence (Sref)": 3000, + }, +} +`; + +exports[`getIndemnite IC sans contrats précédents 1`] = ` +Object { + "formula": "(C * Sref * A)", + "labels": Object { + "Ancienneté conventionnelle (A)": 13.08, + "Coefficient d'indemnité conventionnel (C)": 0.33, + "Salaire de référence (Sref)": 4500, + }, +} +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/indemnite.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/indemnite.test.js new file mode 100644 index 0000000000..cc066f400d --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/__tests__/indemnite.test.js @@ -0,0 +1,154 @@ +import { ERROR_LABEL, getIndemniteConventionnelle } from "../indemnite"; + +const initialValues = { + contrat: "cdi", + fauteGrave: false, + inaptitude: false, + dateEntree: "2006-06-15", + anciennete: 13.083333333333334, + dateNotification: "2019-07-18", + dateSortie: "2019-07-29", + hasAbsenceProlonge: false, + hasTempsPartiel: false, + hasSameSalaire: true, + salaires: [], + salaire: "4500", + branche: "1486" +}; +const tests = [ + { + title: "ETAM avec contrats précédents", + data: { + ...initialValues, + brancheCategorie: "ETAM", + hasBrancheContrat: true, + brancheContrat: { + indemnite: "200", + duration: "12", + considered: true + } + }, + result: 15643.75 + }, + { + title: "ETAM avec contrats précédents et ajustement salaire", + data: { + ...initialValues, + brancheCategorie: "ETAM", + hasBrancheContrat: true, + brancheContrat: { + indemnite: "200", + duration: "12", + considered: true + }, + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: true, + brancheNewRegularSalaire: "3000" + }, + result: 10362.5 + }, + { + title: "IC sans contrats précédents", + data: { + ...initialValues, + brancheCategorie: "IC", + hasBrancheContrat: false + }, + result: 19625 + }, + { + title: "CEI", + data: { + ...initialValues, + brancheCategorie: "CEI", + hasBrancheContrat: false, + brancheAncienneteEnqueteur: "3", + brancheAncienneteCE: "75" + }, + result: 8325 + }, + { + title: "CENI avec ajustement salaire", + data: { + ...initialValues, + brancheCategorie: "CENI", + brancheAncienneteEnqueteur: "4", + brancheAncienneteCE: "75", + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: false, + brancheNewIrregularSalaire: [ + { + label: "juillet 2019", + salary: 2300 + }, + { + label: "juin 2019", + salary: 2300 + }, + { + label: "mai 2019", + salary: 2300 + }, + { + label: "avril 2019", + salary: 2300 + }, + { + label: "mars 2019", + salary: 2300 + }, + { + label: "février 2019", + salary: 4000 + }, + { + label: "janvier 2019", + salary: 2300 + }, + { + label: "décembre 2018", + salary: 2300 + }, + { + label: "novembre 2018", + salary: 2300 + }, + { + label: "octobre 2018", + salary: 2300 + }, + { + label: "septembre 2018", + salary: 2300 + }, + { + label: "août 2018", + salary: 2300 + } + ] + }, + result: 6256.77 + } +]; +describe("getIndemnite", () => { + tests.forEach(({ title, data, result }) => { + it(title, () => { + const { + indemniteConventionnelle, + infoCalculConventionnel + } = getIndemniteConventionnelle(data); + expect(indemniteConventionnelle).toBe(result); + expect(infoCalculConventionnel).toMatchSnapshot(); + }); + }); + it("should return an error for anciennete < 2", () => { + const { error } = getIndemniteConventionnelle({ + ...initialValues, + anciennete: 0.5, + brancheCategorie: "ETAM", + hasBrancheContrat: false + }); + + expect(error).toBe(ERROR_LABEL); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/indemnite.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/indemnite.js new file mode 100644 index 0000000000..4e0ff82894 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/indemnite.js @@ -0,0 +1,188 @@ +import { round, sum } from "../../../common/math"; +import { getSalaireRef } from "../../indemnite"; + +const COEFF_ETAM_0 = 1 / 4; +const COEFF_ETAM_1 = 0.3; +const MAX_MONTH_INDEMNITE_ETAM = 10; +const COEFF_IC = 1 / 3; +const MAX_MONTH_INDEMNITE_IC = 12; +const COEFF_CEI = 1 / 5; +const MAX_MONTH_INDEMNITE_CEI = 7; + +export const ERROR_LABEL = + "Aucune indemnité de licenciement conventionnelle n’est prévue en deçà de 2 ans d’ancienneté."; + +function getAncienneteConventionnelle({ + brancheCategorie, + ancienneteLegale, + hasBrancheContrat, + brancheContrat, + brancheAncienneteCE, + brancheAncienneteEnqueteur +}) { + let ancienneteConventionnelle = 0; + if (brancheCategorie === "CEI" || brancheCategorie === "CENI") { + ancienneteConventionnelle += + parseFloat(brancheAncienneteCE) / 12 + + Math.floor(brancheAncienneteEnqueteur); // We only accept round years + } else { + // categorie is ETAM or IC + ancienneteConventionnelle += parseFloat(ancienneteLegale); + if (hasBrancheContrat) { + ancienneteConventionnelle += parseFloat(brancheContrat.duration) / 12; + } + } + return ancienneteConventionnelle; +} + +function getSalaireRefConventionnel({ + anciennete, + salaire, + hasTempsPartiel = false, + salairePeriods = [], + hasSameSalaire = false, + salaires = [] +}) { + // beware this one below is a code duplication from indemniteLegale which does not take primes into account + if (hasTempsPartiel) { + return salairePeriods.reduce( + (salaire, period) => + parseFloat(salaire) + + (parseFloat(period.salary, 10) * parseFloat(period.duration, 10)) / + 12 / + parseFloat(anciennete), + 0 + ); + } else { + const moyenneSalaires = hasSameSalaire + ? parseFloat(salaire) + : sum(salaires.map(a => parseFloat(a.salary))) / salaires.length; + + return moyenneSalaires; + } +} + +export function getIndemniteConventionnelle(data) { + const { + // Generiques + anciennete: ancienneteLegale, + salaire, + hasSameSalaire, + salaires, + hasTempsPartiel, + salairePeriods, + // Specifiques branches + brancheCategorie, + // Ancienneté ETAM/CI + hasBrancheContrat, + brancheContrat, + // Ancienneté CE + brancheAncienneteCE, + brancheAncienneteEnqueteur, + // Ajustement Salaire + hasBrancheNewSalaire, + hasBrancheNewRegularSalaire, + brancheNewRegularSalaire, + brancheNewIrregularSalaire + } = data; + // First of all, compute the new anciennete + const ancienneteConventionnelle = getAncienneteConventionnelle({ + brancheCategorie, + ancienneteLegale, + hasBrancheContrat, + brancheContrat, + brancheAncienneteCE, + brancheAncienneteEnqueteur + }); + + let salaireRefConventionnel; + let formula; + let error; + if (brancheCategorie === "CEI") { + salaireRefConventionnel = round(getSalaireRef(data)); + } else if (hasBrancheNewSalaire) { + salaireRefConventionnel = getSalaireRefConventionnel({ + hasTempsPartiel: false, + hasSameSalaire: hasBrancheNewRegularSalaire, + salaire: brancheNewRegularSalaire, + salaires: brancheNewIrregularSalaire + }); + } else { + salaireRefConventionnel = getSalaireRefConventionnel({ + anciennete: ancienneteLegale, + salaire, + hasTempsPartiel, + salairePeriods, + hasSameSalaire, + salaires + }); + } + + let coefficient = 0; + let maxMonthIndemnite = 0; + if (ancienneteConventionnelle >= 2) { + if (brancheCategorie === "ETAM" || brancheCategorie === "CENI") { + maxMonthIndemnite = MAX_MONTH_INDEMNITE_ETAM; + if (ancienneteConventionnelle < 20) { + coefficient = COEFF_ETAM_0; + } else { + coefficient = COEFF_ETAM_1; + } + } else { + // categorie IC or CEI + if (brancheCategorie === "CEI") { + maxMonthIndemnite = MAX_MONTH_INDEMNITE_CEI; + coefficient = COEFF_CEI; + } else { + maxMonthIndemnite = MAX_MONTH_INDEMNITE_IC; + coefficient = COEFF_IC; + } + } + } else { + error = ERROR_LABEL; + } + + const indemniteMax = maxMonthIndemnite * salaireRefConventionnel; + const previousIndemnites = + hasBrancheContrat && + brancheContrat.considered && + parseFloat(brancheContrat.indemnite); + + const indemniteConventionnelleNotCeiled = round( + coefficient * salaireRefConventionnel * ancienneteConventionnelle - + (previousIndemnites || 0) + ); + + const isCeilingReached = indemniteMax <= indemniteConventionnelleNotCeiled; + + const indemniteConventionnelle = isCeilingReached + ? indemniteMax + : indemniteConventionnelleNotCeiled; + + let labels = { + "Salaire de référence (Sref)": round(salaireRefConventionnel), + ...(isCeilingReached && { + "Plafond d'indemnité conventionnel en mois (Pmois)": maxMonthIndemnite + }), + ...(!isCeilingReached && { + "Coefficient d'indemnité conventionnel (C)": round(coefficient) + }), + ...(!isCeilingReached && { + "Ancienneté conventionnelle (A)": round(ancienneteConventionnelle) + }), + ...(!isCeilingReached && + previousIndemnites && { + "Indemnité de licenciement perçue précédemment ( I )": previousIndemnites + }) + }; + + formula = isCeilingReached + ? `Pmois * Sref` + : `(C * Sref * A${previousIndemnites ? " - I" : ""})`; + + return { + indemniteConventionnelle, + infoCalculConventionnel: { formula, labels }, + error + }; +} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/index.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/index.js new file mode 100644 index 0000000000..5445ce72d7 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/index.js @@ -0,0 +1,27 @@ +import { Result } from "./steps/Result"; +import { Categorie } from "./steps/Categorie"; +import { Anciennete } from "./steps/Anciennete"; +import { Salaire } from "./steps/Salaire"; + +export const stepAnciennete = { + component: Anciennete, + name: "branche_anciennete", + label: "Ajustement ancienneté" +}; + +export const stepSalaire = { + component: Salaire, + name: "branche_salaire", + label: "Ajustement salaire" +}; + +export const steps = [ + { component: Categorie, name: "branche_category", label: "Catégorie" }, + stepAnciennete, + stepSalaire, + { + component: Result, + name: "branche_result", + label: "Indemnité conventionnelle" + } +]; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Anciennete.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Anciennete.js new file mode 100644 index 0000000000..31edb4cf61 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Anciennete.js @@ -0,0 +1,12 @@ +import React from "react"; +import { CATEGORIE_KEY } from "./Categorie"; +import { AncienneteETAMIC } from "./AncienneteETAMIC"; +import { AncienneteCE } from "./AncienneteCE"; + +export const Anciennete = ({ form }) => { + const categorie = form.getState().values[CATEGORIE_KEY]; + if (categorie === "CEI" || categorie === "CENI") { + return ; + } + return ; +}; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteCE.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteCE.js new file mode 100644 index 0000000000..8a75528fca --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteCE.js @@ -0,0 +1,79 @@ +import React from "react"; +import styled from "styled-components"; +import { Field } from "react-final-form"; +import { theme } from "@cdt/ui"; + +import { + InlineError, + Input, + Label, + SectionTitle +} from "../../../../common/stepStyles"; +import { isNumber } from "../../../../common/validators"; + +export const AncienneteCE = () => { + return ( + <> + Activité exclusive et régulière +

+ Renseignez la durée pendant laquelle le salarié a exercé une activité + exclusive et régulière pour le compte de la société. +

+ + ( + <> + Durée (en mois): + + {error && touched && {error}} + + )} + /> + Activité supplémentaire +

+ Renseignez le nombre d’années pendant lesquelles le salarié a perçu au + moins 11 bulletins de salaire sur 12 et au moins 3 fois la valeur du + SMIC. +

+ ( + <> + + Total (en années): + + + {error && touched && {error}} + + )} + /> + + ); +}; + +const { spacing } = theme; + +const StyledLabel = styled(Label)` + margin-top: ${spacing.interComponent}; + margin-bottom: ${spacing.small}; +`; + +const StyledInlineError = styled(InlineError)` + margin-left: ${spacing.interComponent}; +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteETAMIC.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteETAMIC.js new file mode 100644 index 0000000000..10094623ed --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/AncienneteETAMIC.js @@ -0,0 +1,105 @@ +import React from "react"; +import styled from "styled-components"; +import { Field } from "react-final-form"; +import { Toast, theme } from "@cdt/ui"; + +import { + BlockError, + Label, + Input, + SectionTitle +} from "../../../../common/stepStyles"; +import { isNumber } from "../../../../common/validators"; +import { YesNoQuestion } from "../../../components/YesNoQuestion"; +import { CurrencyField } from "../../../../common/CurrencyField"; + +export const CONTRAT_KEY = "brancheContrat"; +export const HAS_CONTRAT_KEY = "hasBrancheContrat"; + +export const AncienneteETAMIC = ({ form }) => { + const data = form.getState().values; + const hasContrats = data[HAS_CONTRAT_KEY]; + + return ( + <> + Contrats antérieurs +

+ Si vous avez été auparavant employé par la même société et que la fin + du/des contrat(s) n’est pas imputable à l’une des raisons suivantes: +

+
    +
  • démission
  • +
  • licenciement pour faute grave ou faute lourde
  • +
+

+ alors{" "} + + la durée de ce(s) contrat(s) s’ajoute à votre ancienneté + + . +

+ + Dans le cas de la démission, l’employeur peut accepter de prendre en + compte la durée du contrat de travail correspondant pour l’appréciation + de l’ancienneté. + + { + HAS_CONTRAT_KEY + ? form.change(CONTRAT_KEY, { + duration: "", + indemnite: "0", + considered: false + }) + : form.change(CONTRAT_KEY, undefined); + }} + /> + {hasContrats && ( + <> + ( + <> + + + {error && touched && {error}} + + )} + /> + + Il est important de préciser l’indemnité de licenciement + éventuellement perçue lors d’un précédent licenciement dans la même + entreprise. L’employeur actuel peut la déduire de l’indemnité de + licenciement en train d’être calculée. + + + + + )} + + ); +}; + +const { spacing } = theme; + +const StyledToast = styled(Toast)` + margin-top: ${spacing.interComponent}; +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Categorie.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Categorie.js new file mode 100644 index 0000000000..00252b6bf5 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Categorie.js @@ -0,0 +1,55 @@ +import React from "react"; +import { Field } from "react-final-form"; +import { OnChange } from "react-final-form-listeners"; + +import { SectionTitle, Label } from "../../../../common/stepStyles"; +import { required } from "../../../../common/validators"; +import { stepAnciennete, stepSalaire } from "../index"; + +export const CATEGORIE_KEY = "brancheCategorie"; + +const CATEGORIES = { + ETAM: "Employé, Technicien, Agent de Maîtrise", + IC: "Ingénieur Cadre", + CENI: "Chargé d'enquête non intermittent", + CEI: "Chargé d'enquête intermittent" +}; + +export const Categorie = ({ dispatch }) => ( + <> + Catégorie +

+ Quel est votre catégorie dans la convention collective ?
+ Vous pouvez le trouver sur votre bulletin de paie +

+ + {({ input }) => ( + <> + + + + )} + + + {currentCategorie => { + if (currentCategorie === "CEI") { + dispatch({ type: "remove_step", payload: stepSalaire.name }); + } else { + dispatch({ + type: "add_step", + payload: { insertAfter: stepAnciennete.name, step: stepSalaire } + }); + } + }} + + +); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Result.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Result.js new file mode 100644 index 0000000000..4f6ad5c497 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Result.js @@ -0,0 +1,60 @@ +import React from "react"; +import styled from "styled-components"; +import { Toast, theme } from "@cdt/ui"; + +import { getIndemniteConventionnelle } from "../indemnite"; +import { getIndemniteFromFinalForm } from "../../../indemnite"; +import { round } from "../../../../common/math"; +import { Highlight } from "../../../../common/stepStyles"; +import { IndemniteCCn } from "../../../components/IndemniteConventionnelle"; + +function Result({ form }) { + const data = form.getState().values; + + const { indemniteLegale, infoCalculLegal } = getIndemniteFromFinalForm(form); + + const { + indemniteConventionnelle, + infoCalculConventionnel, + error + } = getIndemniteConventionnelle(data); + + const IndemniteWarning = () => ( + + Si un emploi équivalent a été trouvé +
    +
  • par votre employeur
  • +
  • dans une autre entreprise
  • +
  • avant la fin du préavis
  • +
  • et que vous l’acceptez
  • +
+ Alors l’indemnité de licenciement conventionnelle est réduite d’un tiers + et passe donc à{" "} + {round((indemniteConventionnelle * 2) / 3)} € +
+ Attention, ce tiers ({round(indemniteConventionnelle / 3)} €) vous + est dû si la période d’essai dans ce nouvel emploi reste sans suite. +
+ ); + + return ( + + {indemniteConventionnelle > indemniteLegale ? : null} + + ); +} + +export { Result }; + +const { spacing } = theme; + +const StyledToast = styled(Toast)` + margin: ${spacing.interComponent} 0; +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Salaire.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Salaire.js new file mode 100644 index 0000000000..b1924b7c62 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/Salaire.js @@ -0,0 +1,217 @@ +import React from "react"; +import { Field } from "react-final-form"; +import { FieldArray } from "react-final-form-arrays"; +import styled from "styled-components"; +import { subMonths, format } from "date-fns"; +import frLocale from "date-fns/locale/fr"; +import { Table as UITable, theme, Toast } from "@cdt/ui"; + +import { Input, InlineError } from "../../../../common/stepStyles"; +import { isNumber } from "../../../../common/validators"; +import { YesNoQuestion } from "../../../components/YesNoQuestion"; + +export const Salaire = ({ form }) => { + const data = form.getState().values; + return ( + <> + + + {data.hasBrancheNewSalaire && ( + <> + { + if (hasSameSalaire) { + form.change("brancheNewIrregularSalaire", undefined); + } else { + form.change( + "brancheNewIrregularSalaire", + Array.from({ length: 12 }).map((_, index) => ({ + label: format( + subMonths(data.dateSortie, index), + "MMMM YYYY", + { + locale: frLocale + } + ), + salary: null + })) + ); + form.change("brancheNewRegularSalaire", undefined); + } + }} + /> + {data.hasBrancheNewRegularSalaire === true && } + {data.hasBrancheNewRegularSalaire === false && ( + + )} + + )} + + ); +}; + +const RegularNewSalaire = () => ( + <> + + {({ input, meta: { touched, error, invalid } }) => ( + <> +

Salaire mensuel ajusté (primes et temps partiel inclus)

+ + + + + {error && touched && invalid && {error}} + + )} +
+ +); + +const IrregularNewSalaire = () => ( + <> + + {({ fields }) => ( + <> + + + + + + + + + {fields.map((name, index) => ( + + + + + ))} + +
MoisSalaire mensuel ajusté (primes et temps partiel inclus)
+ + + { + // Hack auto fill + fields.value.forEach((field, fieldIndex) => { + if ( + fieldIndex > index && + fields.value[fieldIndex].salary === null + ) { + fields.value[fieldIndex].salary = + parseFloat(value) || null; + } + }); + return parseFloat(value) || null; + }} + subscribe={{ + blur: true, + error: true, + touched: true + }} + render={({ + input, + meta: { touched, error, invalid } + }) => ( + <> + + + + + {error && touched && invalid && ( + {error} + )} + + )} + /> +
+ + )} +
+ +); + +const Notice = () => ( + <> +

Le salaire à renseigner pour cette convention collective inclut:

+
    +
  • les primes prévues au contrat de travail
  • +
+ mais elle exclut: +
    +
  • + les heures supplémentaires au delà de l’heure normale de l’entreprise +
  • +
  • + les majorations/indemnités liées à un déplacement ou un détachement +
  • +
+ + Attention, les éventuelles primes renseignées + précédemment ne seront pas prises en compte dans le calcul de l’indemnité + de votre convention collective. Si vous en avez perçues, merci de les + intégrer à votre rémunération ci-après. +
+ Aussi, si il y en a, les mois effectués en + temps partiel + {" "} + sont à considérer comme ceux effectués en temps plein. +
+ +); + +const { colors, spacing } = theme; + +const StyledToast = styled(Toast)` + margin-top: ${spacing.interComponent}; +`; + +const Table = styled(UITable)` + & tr > td:nth-child(2) { + text-align: left; + width: 70%; + } +`; +const NumberInput = styled(Input)` + text-align: right; + padding-right: ${spacing.base}; +`; + +const CurrencyWrapper = styled.div` + display: inline-block; + position: relative; + margin-right: ${spacing.interComponent}; +`; + +const Currency = styled.span` + color: ${colors.grey}; + position: absolute; + right: 0.25rem; + top: 50%; + transform: translateY(-50%); +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Anciennete.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Anciennete.test.js new file mode 100644 index 0000000000..58e2721b36 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Anciennete.test.js @@ -0,0 +1,39 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import { CATEGORIE_KEY } from "../Categorie"; +import { Anciennete } from "../Anciennete"; + +describe("", () => { + it("renders AncienneteETAMIC component", () => { + const onSubmit = jest.fn(); + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders AncienneteCE component", () => { + const onSubmit = jest.fn(); + const initialValues = {}; + initialValues[CATEGORIE_KEY] = "CEI"; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders AncienneteCE component", () => { + const onSubmit = jest.fn(); + const initialValues = {}; + initialValues[CATEGORIE_KEY] = "CENI"; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteCE.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteCE.test.js new file mode 100644 index 0000000000..f546b3cca5 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteCE.test.js @@ -0,0 +1,16 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import { AncienneteCE } from "../AncienneteCE.js"; + +describe("", () => { + it("renders", () => { + const onSubmit = jest.fn(); + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteETAMIC.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteETAMIC.test.js new file mode 100644 index 0000000000..6acf35052f --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/AncienneteETAMIC.test.js @@ -0,0 +1,33 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import { AncienneteETAMIC } from "../AncienneteETAMIC.js"; + +describe("", () => { + it("renders", () => { + const onSubmit = jest.fn(); + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("asks to fill duration, indemnité and consideration", () => { + const onSubmit = jest.fn(); + const initialValues = { + hasBrancheContrat: true, + brancheContrat: { + duration: "3", + indemnite: "0", + considered: false + } + }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Categorie.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Categorie.test.js new file mode 100644 index 0000000000..496070f227 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Categorie.test.js @@ -0,0 +1,14 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import { Categorie } from "../Categorie"; + +describe("", () => { + it("renders", () => { + const onSubmit = jest.fn(); + const { container } = render( +
{({ form }) => } + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Result.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Result.test.js new file mode 100644 index 0000000000..a134aa4c2e --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Result.test.js @@ -0,0 +1,51 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import { Result } from "../Result"; + +describe("", () => { + it("renders legal indemnite", () => { + const onSubmit = jest.fn(); + const initialValues = { + anciennete: 13.083333333333334, + hasAbsenceProlonge: false, + hasTempsPartiel: false, + hasSameSalaire: true, + salaire: "4500", + branche: "1486", + brancheCategorie: "IC", + hasBrancheContrat: false, + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: true, + brancheNewRegularSalaire: "2000" + }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders conventionnal indemnite with warning toast", () => { + const onSubmit = jest.fn(); + const initialValues = { + anciennete: 13.083333333333334, + hasAbsenceProlonge: false, + hasTempsPartiel: false, + hasSameSalaire: true, + salaire: "4500", + branche: "1486", + brancheCategorie: "IC", + hasBrancheContrat: false, + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: true, + brancheNewRegularSalaire: "4000" + }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Salaire.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Salaire.test.js new file mode 100644 index 0000000000..3889bae7ea --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/Salaire.test.js @@ -0,0 +1,86 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Form } from "react-final-form"; +import arrayMutators from "final-form-arrays"; +import { Salaire } from "../Salaire"; + +describe("", () => { + it("renders", () => { + const onSubmit = jest.fn(); + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders a question asking about income's regularity", () => { + const onSubmit = jest.fn(); + const initialValues = { hasBrancheNewSalaire: true }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders an input field of type number", () => { + const onSubmit = jest.fn(); + const initialValues = { + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: true + }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); + it("renders a table of fields of type number", () => { + const onSubmit = jest.fn(); + const initialValues = { + hasBrancheNewSalaire: true, + hasBrancheNewRegularSalaire: false, + brancheNewIrregularSalaire: [ + { + label: "juillet 2019", + salary: null + }, + { + label: "juin 2019", + salary: null + } + ] + }; + const { container } = render( +
+ {({ form }) => } + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Anciennete.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Anciennete.test.js.snap new file mode 100644 index 0000000000..6f6ecc80f8 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Anciennete.test.js.snap @@ -0,0 +1,392 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders AncienneteCE component 1`] = ` +.c2 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 7em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; +} + +.c2::-webkit-outer-spin-button, +.c2::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +
+

+ Activité exclusive et régulière +

+

+ Renseignez la durée pendant laquelle le salarié a exercé une activité exclusive et régulière pour le compte de la société. +

+ + +

+ Activité supplémentaire +

+

+ Renseignez le nombre d’années pendant lesquelles le salarié a perçu au moins 11 bulletins de salaire sur 12 et au moins 3 fois la valeur du SMIC. +

+ + +
+`; + +exports[` renders AncienneteCE component 2`] = ` +.c2 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 7em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; +} + +.c2::-webkit-outer-spin-button, +.c2::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +
+

+ Activité exclusive et régulière +

+

+ Renseignez la durée pendant laquelle le salarié a exercé une activité exclusive et régulière pour le compte de la société. +

+ + +

+ Activité supplémentaire +

+

+ Renseignez le nombre d’années pendant lesquelles le salarié a perçu au moins 11 bulletins de salaire sur 12 et au moins 3 fois la valeur du SMIC. +

+ + +
+`; + +exports[` renders AncienneteETAMIC component 1`] = ` +.c2 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c3 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c4 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c7 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c5 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + margin-top: 1.25rem; +} + +
+

+ Contrats antérieurs +

+

+ Si vous avez été auparavant employé par la même société et que la fin du/des contrat(s) n’est pas imputable à l’une des raisons suivantes: +

+
    +
  • + démission +
  • +
  • + licenciement pour faute grave ou faute lourde +
  • +
+

+ alors + + + la durée de ce(s) contrat(s) s’ajoute à votre ancienneté + + . +

+
+
+ + + + + +
+ +
+

+ Avez-vous un/des contrat(s) antérieur(s) à déclarer ? +

+
+ + +
+
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteCE.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteCE.test.js.snap new file mode 100644 index 0000000000..3e4e73a055 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteCE.test.js.snap @@ -0,0 +1,92 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders 1`] = ` +.c2 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 7em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; +} + +.c2::-webkit-outer-spin-button, +.c2::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +
+

+ Activité exclusive et régulière +

+

+ Renseignez la durée pendant laquelle le salarié a exercé une activité exclusive et régulière pour le compte de la société. +

+ + +

+ Activité supplémentaire +

+

+ Renseignez le nombre d’années pendant lesquelles le salarié a perçu au moins 11 bulletins de salaire sur 12 et au moins 3 fois la valeur du SMIC. +

+ + +
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteETAMIC.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteETAMIC.test.js.snap new file mode 100644 index 0000000000..b0a6bce4db --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/AncienneteETAMIC.test.js.snap @@ -0,0 +1,632 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` asks to fill duration, indemnité and consideration 1`] = ` +.c2 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c9 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #d7e8f9; + box-shadow: none; +} + +.c3 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c10 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #d7e8f9; +} + +.c4 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c8 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 7em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; +} + +.c8::-webkit-outer-spin-button, +.c8::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c7 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c5 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c12 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 10em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; + text-align: right; + padding-right: 1rem; +} + +.c12::-webkit-outer-spin-button, +.c12::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c11 { + display: inline-block; + position: relative; + margin-right: 1rem; +} + +.c13 { + color: #adb9c9; + position: absolute; + right: 0.25rem; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} + +.c1 { + margin-top: 1.25rem; +} + +
+

+ Contrats antérieurs +

+

+ Si vous avez été auparavant employé par la même société et que la fin du/des contrat(s) n’est pas imputable à l’une des raisons suivantes: +

+
    +
  • + démission +
  • +
  • + licenciement pour faute grave ou faute lourde +
  • +
+

+ alors + + + la durée de ce(s) contrat(s) s’ajoute à votre ancienneté + + . +

+
+
+ + + + + +
+ +
+

+ Avez-vous un/des contrat(s) antérieur(s) à déclarer ? +

+
+ + +
+ + +
+
+ + + + + +
+ +
+

+ Indemnité de licenciement précédemment perçue +

+
+ + +
+

+ Souhaitez vous déduire cette indemnité ? +

+
+ + +
+
+`; + +exports[` renders 1`] = ` +.c2 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c3 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c4 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c7 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c6 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c5 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + margin-top: 1.25rem; +} + +
+

+ Contrats antérieurs +

+

+ Si vous avez été auparavant employé par la même société et que la fin du/des contrat(s) n’est pas imputable à l’une des raisons suivantes: +

+
    +
  • + démission +
  • +
  • + licenciement pour faute grave ou faute lourde +
  • +
+

+ alors + + + la durée de ce(s) contrat(s) s’ajoute à votre ancienneté + + . +

+
+
+ + + + + +
+ +
+

+ Avez-vous un/des contrat(s) antérieur(s) à déclarer ? +

+
+ + +
+
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Categorie.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Categorie.test.js.snap new file mode 100644 index 0000000000..5de6fe7ba0 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Categorie.test.js.snap @@ -0,0 +1,73 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders 1`] = ` +.c1 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +
+

+ Catégorie +

+

+ Quel est votre catégorie dans la convention collective ? +
+ Vous pouvez le trouver sur votre bulletin de paie +

+ + +
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Result.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Result.test.js.snap new file mode 100644 index 0000000000..77e83f937b --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Result.test.js.snap @@ -0,0 +1,1135 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders conventionnal indemnite with warning toast 1`] = ` +.c24 { + padding: 0.625rem 1rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + line-height: inherit; + font-size: 1rem; + font-weight: 600; + vertical-align: middle; + border-style: solid; + border-width: 1px 1px 2px 1px; + border-radius: 0.25rem; + cursor: pointer; + -webkit-transition: background-color 250ms ease; + transition: background-color 250ms ease; + color: #fff; + background: #006be6; + border-color: #006be6; + border-bottom-color: #0053b3; +} + +.c24:not([disabled]):hover, +.c24:not([disabled]):focus { + background: #07f; + color: #fff; +} + +.c24:not([disabled]):active { + color: #fff; + background: #1a85ff; + border-width: 2px 1px 1px 1px; + border-color: #006be6; + outline: none; +} + +.c24[aria-pressed="true"] { + color: #fff; + background: #07f; + border-width: 2px 1px 1px 1px; + border-color: #006be6; + border-top-color: #0053b3; + box-shadow: inset 0 1px 2px 0 #0053b3; +} + +.c24[aria-pressed="true"]:not([disabled]):hover, +.c24[aria-pressed="true"]:not([disabled]):focus { + background-color: #006be6; +} + +.c24[aria-pressed="true"]:not([disabled]):active { + border-top-color: #0053b3; +} + +.c24[disabled] { + cursor: not-allowed; + color: rgba(255,255,255,0.4); +} + +.c22 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #d7e8f9; + box-shadow: none; +} + +.c18 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c23 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #d7e8f9; +} + +.c19 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c20 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + font-size: 1.375rem; + font-weight: 700; + color: #0053b3; +} + +.c9 { + margin-bottom: 1rem; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.c15 { + border-radius: 0.25rem; + background-color: #0053b3; + width: calc(50% * 1); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c6 { + border-radius: 0.25rem; + background-color: #53657d; + width: calc(50% * 0.9100320789890648); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c16 { + margin-left: 1rem; + color: #0053b3; + font-size: 1.875rem; +} + +.c7 { + margin-left: 1rem; + color: #53657d; + font-size: 1.375rem; +} + +.c8 { + margin-top: 1.25rem; +} + +.c10 { + font-weight: bold; + font-size: 0.875rem; +} + +.c11 { + list-style-image: url("data:image/svg+xml;,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%206%2010%22%3E%3Cpath%20fill%3D%22%238393a7%22%20d%3D%22M0%204h5v1H0z%22%2F%3E%3C%2Fsvg%3E"); +} + +.c12 { + font-size: 0.875rem; +} + +.c13 { + margin: 1rem 0; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.c14 { + padding: 0 0.625rem; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; +} + +.c3 { + padding: 0 0.625rem; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; +} + +.c4 { + font-size: 1.375rem; +} + +.c21 { + margin: 1.25rem 0; +} + +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 0.9100320789890648); + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +
+

+ Convention collective nationale des bureaux d'études techniques, des cabinets d'ingénieurs-conseils et des sociétés de conseils du 15 décembre 1987 +

+

+ À partir des éléments que vous avez saisis, votre indémnité de licenciement est estimée à + + + 17,444.44 +  € brut + +

+

+ Il s’agit du montant le plus favorable entre votre indemnité légale et votre indemnité conventionnelle. +

+
+
+

+ Votre indemnite légale +

+
+
+ + 15,875.00 +  € brut + +
+
+ + Voir le detail du calcul + + + Élements saisis : + +
    +
  • + Salaire de réference (Sref) +  : + 4500 +
  • +
  • + Licenciement pour inaptitude +  : + non +
  • +
  • + Ancienneté totale (A) +  : + 13.08 +
  • +
  • + Ancienneté au delà de 10ans (A2) +  : + 3.08 +
  • +
+ + Formule + +
+
+
+ \`(1/4 * Sref * 10) + (1/3 * Sref * "A2")\` +
+
+
+
+
+
+

+ Votre indemnite conventionnelle +

+
+
+ + 17,444.44 +  € brut + +
+
+ + Voir le detail du calcul + + + Élements saisis : + +
    +
  • + Salaire de référence (Sref) +  : + 4000 +
  • +
  • + Coefficient d'indemnité conventionnel (C) +  : + 0.33 +
  • +
  • + Ancienneté conventionnelle (A) +  : + 13.08 +
  • +
+ + Formule + +
+
+
+ \`(C * Sref * A)\` +
+
+
+
+
+
+
+
+ + + + + +
+ +
+
+
+ + + + + +
+ +
+ +
+`; + +exports[` renders legal indemnite 1`] = ` +.c21 { + padding: 0.625rem 1rem; + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + text-align: center; + line-height: inherit; + font-size: 1rem; + font-weight: 600; + vertical-align: middle; + border-style: solid; + border-width: 1px 1px 2px 1px; + border-radius: 0.25rem; + cursor: pointer; + -webkit-transition: background-color 250ms ease; + transition: background-color 250ms ease; + color: #fff; + background: #006be6; + border-color: #006be6; + border-bottom-color: #0053b3; +} + +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { + background: #07f; + color: #fff; +} + +.c21:not([disabled]):active { + color: #fff; + background: #1a85ff; + border-width: 2px 1px 1px 1px; + border-color: #006be6; + outline: none; +} + +.c21[aria-pressed="true"] { + color: #fff; + background: #07f; + border-width: 2px 1px 1px 1px; + border-color: #006be6; + border-top-color: #0053b3; + box-shadow: inset 0 1px 2px 0 #0053b3; +} + +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { + background-color: #006be6; +} + +.c21[aria-pressed="true"]:not([disabled]):active { + border-top-color: #0053b3; +} + +.c21[disabled] { + cursor: not-allowed; + color: rgba(255,255,255,0.4); +} + +.c18 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #d7e8f9; + box-shadow: none; +} + +.c19 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #d7e8f9; +} + +.c20 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c0 { + font-size: 1.625rem; + margin-top: 2rem; + margin-bottom: 1.25rem; +} + +.c1 { + font-size: 1.375rem; + font-weight: 700; + color: #0053b3; +} + +.c9 { + margin-bottom: 1rem; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.c6 { + border-radius: 0.25rem; + background-color: #0053b3; + width: calc(50% * 1); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c15 { + border-radius: 0.25rem; + background-color: #53657d; + width: calc(50% * 0.5494311811023621); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c7 { + margin-left: 1rem; + color: #0053b3; + font-size: 1.875rem; +} + +.c16 { + margin-left: 1rem; + color: #53657d; + font-size: 1.375rem; +} + +.c8 { + margin-top: 1.25rem; +} + +.c10 { + font-weight: bold; + font-size: 0.875rem; +} + +.c11 { + list-style-image: url("data:image/svg+xml;,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20viewBox%3D%220%206%2010%22%3E%3Cpath%20fill%3D%22%238393a7%22%20d%3D%22M0%204h5v1H0z%22%2F%3E%3C%2Fsvg%3E"); +} + +.c12 { + font-size: 0.875rem; +} + +.c13 { + margin: 1rem 0; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; +} + +.c3 { + padding: 0 0.625rem; + -webkit-order: 0; + -ms-flex-order: 0; + order: 0; +} + +.c14 { + padding: 0 0.625rem; + -webkit-order: 1; + -ms-flex-order: 1; + order: 1; +} + +.c4 { + font-size: 1.375rem; +} + +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 0.5494311811023621); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} + +
+

+ Convention collective nationale des bureaux d'études techniques, des cabinets d'ingénieurs-conseils et des sociétés de conseils du 15 décembre 1987 +

+

+ À partir des éléments que vous avez saisis, votre indémnité de licenciement est estimée à + + + 15,875.00 +  € brut + +

+

+ Il s’agit du montant le plus favorable entre votre indemnité légale et votre indemnité conventionnelle. +

+
+
+

+ Votre indemnite légale +

+
+
+ + 15,875.00 +  € brut + +
+
+ + Voir le detail du calcul + + + Élements saisis : + +
    +
  • + Salaire de réference (Sref) +  : + 4500 +
  • +
  • + Licenciement pour inaptitude +  : + non +
  • +
  • + Ancienneté totale (A) +  : + 13.08 +
  • +
  • + Ancienneté au delà de 10ans (A2) +  : + 3.08 +
  • +
+ + Formule + +
+
+
+ \`(1/4 * Sref * 10) + (1/3 * Sref * "A2")\` +
+
+
+
+
+
+

+ Votre indemnite conventionnelle +

+
+
+ + 8,722.22 +  € brut + +
+
+ + Voir le detail du calcul + + + Élements saisis : + +
    +
  • + Salaire de référence (Sref) +  : + 2000 +
  • +
  • + Coefficient d'indemnité conventionnel (C) +  : + 0.33 +
  • +
  • + Ancienneté conventionnelle (A) +  : + 13.08 +
  • +
+ + Formule + +
+
+
+ \`(C * Sref * A)\` +
+
+
+
+
+
+
+
+ + + + + +
+ +
+ +
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Salaire.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Salaire.test.js.snap new file mode 100644 index 0000000000..955f502f56 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/1486/steps/__tests__/__snapshots__/Salaire.test.js.snap @@ -0,0 +1,1196 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders 1`] = ` +.c1 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c3 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c6 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c4 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + margin-top: 1.25rem; +} + +
+

+ Le salaire à renseigner pour cette convention collective inclut: +

+
    +
  • + les primes prévues au contrat de travail +
  • +
+ + mais elle exclut + + : +
    +
  • + les heures supplémentaires au delà de l’heure normale de l’entreprise +
  • +
  • + les majorations/indemnités liées à un déplacement ou un détachement +
  • +
+
+
+ + + + + +
+ +
+

+ De ce fait, avez-vous une modification à faire dans la déclaration de votre salaire ? +

+
+ + +
+
+`; + +exports[` renders a question asking about income's regularity 1`] = ` +.c1 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c3 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c6 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c4 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + margin-top: 1.25rem; +} + +
+

+ Le salaire à renseigner pour cette convention collective inclut: +

+
    +
  • + les primes prévues au contrat de travail +
  • +
+ + mais elle exclut + + : +
    +
  • + les heures supplémentaires au delà de l’heure normale de l’entreprise +
  • +
  • + les majorations/indemnités liées à un déplacement ou un détachement +
  • +
+
+
+ + + + + +
+ +
+

+ De ce fait, avez-vous une modification à faire dans la déclaration de votre salaire ? +

+
+ + +
+

+ Avez-vous eu le même salaire lors des 12 derniers mois ? +

+
+ + +
+
+`; + +exports[` renders a table of fields of type number 1`] = ` +.c7 { + position: relative; + overflow: hidden; +} + +.c7:before, +.c7:after { + content: ""; + position: absolute; + top: 0; + bottom: 0; + display: block; + width: 4rem; + pointer-events: none; + opacity: 0; + -webkit-transition: opacity 0.3s linear; + transition: opacity 0.3s linear; + background: radial-gradient( ellipse at center, #fff 15%, rgba(255,255,255,0) 80% ); +} + +.c7:before { + left: -2rem; +} + +.c7:after { + right: -2rem; +} + +.c8 { + overflow-x: auto; +} + +.c10 { + text-align: left; + empty-cells: show; + background-color: #fff; + border-collapse: collapse; + border-spacing: 0; + border: 1px solid #c9d3df; +} + +.c10 caption { + padding: 0.625rem 0; + text-align: center; + font-style: italic; +} + +.c10 td, +.c10 th { + padding: 0.625rem 1rem; + border: 1px solid #c9d3df; +} + +.c10 th { + background: #ebeff3; +} + +.c10 thead, +.c10 tfoot { + padding: 0.625rem 1rem; + vertical-align: bottom; + background: #f5f7fa; +} + +.c10 tfoot { + vertical-align: top; +} + +.c1 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c3 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c6 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c4 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + margin-top: 1.25rem; +} + +.c9 tr > td:nth-child(2) { + text-align: left; + width: 70%; +} + +.c12 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 10em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; + text-align: right; + padding-right: 1rem; +} + +.c12::-webkit-outer-spin-button, +.c12::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c11 { + display: inline-block; + position: relative; + margin-right: 1.25rem; +} + +.c13 { + color: #adb9c9; + position: absolute; + right: 0.25rem; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} + +
+

+ Le salaire à renseigner pour cette convention collective inclut: +

+
    +
  • + les primes prévues au contrat de travail +
  • +
+ + mais elle exclut + + : +
    +
  • + les heures supplémentaires au delà de l’heure normale de l’entreprise +
  • +
  • + les majorations/indemnités liées à un déplacement ou un détachement +
  • +
+
+
+ + + + + +
+ +
+

+ De ce fait, avez-vous une modification à faire dans la déclaration de votre salaire ? +

+
+ + +
+

+ Avez-vous eu le même salaire lors des 12 derniers mois ? +

+
+ + +
+
+
+ + + + + + + + + + + + + + + + + +
+ Mois + + Salaire mensuel ajusté (primes et temps partiel inclus) +
+ + +
+ + +
+
+ + +
+ + +
+
+
+
+
+`; + +exports[` renders an input field of type number 1`] = ` +.c1 { + box-sizing: border-box; + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-box-pack: justify; + -webkit-justify-content: space-between; + -ms-flex-pack: justify; + justify-content: space-between; + min-height: 48px; + width: auto; + background-color: white; + border-style: solid; + border-width: 1px; + border-radius: 0.25rem; + -webkit-animation: none; + animation: none; + border-color: #fee5ad; + box-shadow: none; +} + +.c2 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-flex: 0; + -webkit-flex-grow: 0; + -ms-flex-positive: 0; + flex-grow: 0; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-box-pack: center; + -webkit-justify-content: center; + -ms-flex-pack: center; + justify-content: center; + padding: 1rem; + background-color: #fee5ad; +} + +.c3 { + -webkit-box-flex: 1; + -webkit-flex-grow: 1; + -ms-flex-positive: 1; + flex-grow: 1; + -webkit-align-self: center; + -ms-flex-item-align: center; + align-self: center; + padding: 1rem; + color: #434956; + text-align: left; +} + +.c6 { + padding: 0; + font-size: 1.15rem; + margin-right: 2em; + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; +} + +.c5 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; + -webkit-box-pack: start; + -webkit-justify-content: flex-start; + -ms-flex-pack: start; + justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; + -webkit-flex-direction: column; + -ms-flex-direction: column; + flex-direction: column; + margin-bottom: 1.25rem; +} + +.c4 { + font-size: 1.25rem; + display: block; + margin-top: 1.25rem; + margin-bottom: 0.625rem; +} + +.c0 { + margin-top: 1.25rem; +} + +.c8 { + padding: 0; + font-size: 1rem; + text-align: right; + line-height: inherit; + width: 10em; + border-radius: 0.25rem; + border: 1px solid #c9d3df; + padding: 0.625rem 0.25rem; + border-color: #c9d3df; + text-align: right; + padding-right: 1rem; +} + +.c8::-webkit-outer-spin-button, +.c8::-webkit-inner-spin-button { + -webkit-appearance: none; + -moz-appearance: none; + appearance: none; + margin: 0; +} + +.c7 { + display: inline-block; + position: relative; + margin-right: 1.25rem; +} + +.c9 { + color: #adb9c9; + position: absolute; + right: 0.25rem; + top: 50%; + -webkit-transform: translateY(-50%); + -ms-transform: translateY(-50%); + transform: translateY(-50%); +} + +
+

+ Le salaire à renseigner pour cette convention collective inclut: +

+
    +
  • + les primes prévues au contrat de travail +
  • +
+ + mais elle exclut + + : +
    +
  • + les heures supplémentaires au delà de l’heure normale de l’entreprise +
  • +
  • + les majorations/indemnités liées à un déplacement ou un détachement +
  • +
+
+
+ + + + + +
+ +
+

+ De ce fait, avez-vous une modification à faire dans la déclaration de votre salaire ? +

+
+ + +
+

+ Avez-vous eu le même salaire lors des 12 derniers mois ? +

+
+ + +
+

+ Salaire mensuel ajusté (primes et temps partiel inclus) +

+
+ + +
+
+`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/__snapshots__/Result.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/__snapshots__/Result.test.js.snap index ca22b5d87c..93b4caef64 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/__snapshots__/Result.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/__snapshots__/Result.test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` should render 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -23,13 +23,13 @@ exports[` should render 1`] = ` border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -37,7 +37,7 @@ exports[` should render 1`] = ` outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -46,21 +46,21 @@ exports[` should render 1`] = ` box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -82,7 +82,7 @@ exports[` should render 1`] = ` box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -103,7 +103,7 @@ exports[` should render 1`] = ` background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -142,7 +142,7 @@ exports[` should render 1`] = ` .c6 { border-radius: 0.25rem; background-color: #53657d; - width: 50%; + width: calc(50% * 0.5583239213914615); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -158,7 +158,7 @@ exports[` should render 1`] = ` .c15 { border-radius: 0.25rem; background-color: #0053b3; - width: 50%; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -212,10 +212,6 @@ exports[` should render 1`] = ` -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c3 { @@ -236,6 +232,44 @@ exports[` should render 1`] = ` font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 0.5583239213914615); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} +

should render 1`] = ` > Ancienneté totale (A)  : - 20.667 + 20.66
  • should render 1`] = `
  • should render 1`] = `
    -
    -
    diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/indemnite.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/indemnite.test.js index 5051f495a8..dbfec40df1 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/indemnite.test.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/2120/__tests__/indemnite.test.js @@ -12,7 +12,7 @@ import { ECONOMIQUE } from "../Step"; -const initialData = { +const initialValues = { salaires: Array.from({ length: 12 }).fill({ salary: 2000 }), hasTempsPartiel: false, categorie: NE_SAIT_PAS, @@ -28,14 +28,14 @@ const tests = [ { title: "2k, 12mois d'ancienneté", data: { - ...initialData + ...initialValues }, result: 0 }, { title: "2k, 10ans et 8mois d'ancienneté, motif disciplinaire", data: { - ...initialData, + ...initialValues, dateEntree: "2009-01-01", dateSortie: "2019-09-01", motif: DISCIPLINAIRE, @@ -46,7 +46,7 @@ const tests = [ { title: "2k, 10ans et 8mois d'ancienneté, motif disciplinaire", data: { - ...initialData, + ...initialValues, dateEntree: "2009-01-01", dateSortie: "2019-09-01", anciennete: 10.667 @@ -56,7 +56,7 @@ const tests = [ { title: "2k, 10ans et 8mois d'ancienneté, motif economique", data: { - ...initialData, + ...initialValues, dateEntree: "2009-01-01", dateSortie: "2019-09-01", anciennete: 10.667, @@ -67,7 +67,7 @@ const tests = [ { title: "2k, 19ans et 8mois d'ancienneté", data: { - ...initialData, + ...initialValues, dateEntree: "2000-01-01", dateSortie: "2019-09-01", anciennete: 19.667 @@ -77,7 +77,7 @@ const tests = [ { title: "2k, 19ans et 8mois d'ancienneté, motif economique", data: { - ...initialData, + ...initialValues, dateEntree: "2000-01-01", dateSortie: "2019-09-01", anciennete: 19.667, @@ -88,7 +88,7 @@ const tests = [ { title: "2k, 20ans et 8mois d'ancienneté, cadre, embauche avant le 2000", data: { - ...initialData, + ...initialValues, dateEntree: "1999-01-01", dateSortie: "2019-09-01", anciennete: 20.667, @@ -100,7 +100,7 @@ const tests = [ title: "2k, 20ans et 8mois d'ancienneté, motif economique, embauche avant le 2000", data: { - ...initialData, + ...initialValues, dateEntree: "1999-01-01", dateSortie: "2019-09-01", anciennete: 20.667, @@ -112,7 +112,7 @@ const tests = [ { title: "2k, 20ans et 8mois d'ancienneté, non cadre, embauche avant le 2000", data: { - ...initialData, + ...initialValues, dateEntree: "1999-01-01", dateSortie: "2019-09-01", anciennete: 20.667, @@ -124,7 +124,7 @@ const tests = [ title: "2k, 20ans et 8mois d'ancienneté, ne-sait-pas, embauche avant le 2000", data: { - ...initialData, + ...initialValues, dateEntree: "1999-01-01", dateSortie: "2019-09-01", anciennete: 20.667, @@ -149,19 +149,19 @@ describe("getIndemnite", () => { }); it("should return an error for anciennete < 2", () => { - const salaireRef = getSalaireRef({ ...initialData }); + const salaireRef = getSalaireRef({ ...initialValues }); const { indemnite } = getIndemnite({ salaireRef, - ...initialData + ...initialValues }); const salaireRefConventionnel = getSalaireRefConventionnel({ - ...initialData + ...initialValues }); const res = getIndemniteConventionnelle({ salaireRef: salaireRefConventionnel, indemnite, - ...initialData + ...initialValues }); expect(res.error).toMatchInlineSnapshot( @@ -169,19 +169,19 @@ describe("getIndemnite", () => { ); }); it("should return an error for motif disciplinaire", () => { - const salaireRef = getSalaireRef({ ...initialData }); + const salaireRef = getSalaireRef({ ...initialValues }); const { indemnite } = getIndemnite({ salaireRef, - ...initialData + ...initialValues }); const salaireRefConventionnel = getSalaireRefConventionnel({ - ...initialData + ...initialValues }); const res = getIndemniteConventionnelle({ salaireRef: salaireRefConventionnel, indemnite, - ...initialData, + ...initialValues, dateEntree: "2009-01-01", dateSortie: "2019-09-01", anciennete: 10.667, diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/3043/__tests__/__snapshots__/Result.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/3043/__tests__/__snapshots__/Result.test.js.snap index 4079a88ae3..381710dfab 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/3043/__tests__/__snapshots__/Result.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/ccn/3043/__tests__/__snapshots__/Result.test.js.snap @@ -1,7 +1,7 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` should render 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -23,13 +23,13 @@ exports[` should render 1`] = ` border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -37,7 +37,7 @@ exports[` should render 1`] = ` outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -46,21 +46,21 @@ exports[` should render 1`] = ` box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -82,7 +82,7 @@ exports[` should render 1`] = ` box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -103,7 +103,7 @@ exports[` should render 1`] = ` background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -142,7 +142,7 @@ exports[` should render 1`] = ` .c6 { border-radius: 0.25rem; background-color: #0053b3; - width: 50%; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -158,7 +158,7 @@ exports[` should render 1`] = ` .c15 { border-radius: 0.25rem; background-color: #53657d; - width: 50%; + width: calc(50% * 0.4); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -212,10 +212,6 @@ exports[` should render 1`] = ` -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c3 { @@ -236,6 +232,44 @@ exports[` should render 1`] = ` font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 0.4); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} +

    should render 1`] = `

    should render 1`] = `
    -
    -
    diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/AbsencePeriods.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/AbsencePeriods.js index e34d796f34..bca5e36fe1 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/AbsencePeriods.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/AbsencePeriods.js @@ -4,7 +4,7 @@ import styled from "styled-components"; import { Field } from "react-final-form"; import { FieldArray } from "react-final-form-arrays"; import { Button, theme } from "@cdt/ui"; -import { Input, InlineError } from "../../common/stepStyles"; +import { Input, BlockError } from "../../common/stepStyles"; import { isNumber } from "../../common/validators"; import { OnChange } from "react-final-form-listeners"; @@ -15,7 +15,7 @@ function AbsencePeriods({ name, onChange }) { <>

    Les congés maternité, arrêts de travail liés à une maladie - professionnelle, congés individuel de formation (Cif) et stage de + professionnelle, congés individuels de formation (Cif) et stage de fin d’étude de plus de 2 mois ne sont pas considérés comme des absences. Merci de ne pas les renseigner.

    @@ -39,7 +39,12 @@ function AbsencePeriods({ name, onChange }) { subscribe={{ error: true, touched: true }} render={({ input, meta: { touched, error, invalid } }) => ( <> - + Supprimer - {error && touched && invalid ? ( - {error} - ) : null} + {error && touched && invalid && ( + {error} + )} )} /> @@ -93,6 +98,7 @@ const AddButton = styled(Button)` const Row = styled.div` display: flex; justify-content: flex-start; + align-items: flex-start; margin-bottom: ${spacing.tiny}; `; const MotifCell = styled.div` diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/IndemniteConventionnelle.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/IndemniteConventionnelle.js index d5e28de425..1bef370fb1 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/IndemniteConventionnelle.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/IndemniteConventionnelle.js @@ -1,6 +1,6 @@ import React from "react"; import PropTypes from "prop-types"; -import { theme, Alert, Button, Toast } from "@cdt/ui"; +import { Alert, Button, theme, Toast } from "@cdt/ui"; import styled from "styled-components"; import { branches } from "../branches"; @@ -10,6 +10,7 @@ import { FormulaDetails } from "./FormulaDetails"; function IndemniteCCn({ branche, + children, indemniteConventionnelle, indemniteLegale, infoCalculLegal, @@ -18,13 +19,16 @@ function IndemniteCCn({ }) { const selectedBranche = branches.find(br => br.value === branche); + const isIndemniteConventionnelleBigger = + indemniteConventionnelle > indemniteLegale; + return ( <> {selectedBranche.label} {error ? ( {error} ) : ( - + <>

    À partir des éléments que vous avez saisis, votre indémnité de licenciement est estimée à{" "} @@ -32,7 +36,7 @@ function IndemniteCCn({ {Math.max( indemniteLegale, indemniteConventionnelle - ).toLocaleString(undefined, { + ).toLocaleString("fr-FR", { maximumFractionDigits: 2, minimumFractionDigits: 2 })} @@ -43,34 +47,42 @@ function IndemniteCCn({ Il s’agit du montant le plus favorable entre votre indemnité légale et votre indemnité conventionnelle.

    - - + + Votre indemnite légale - - indemniteLegale}> + + Votre indemnite conventionnelle indemniteLegale} + primary={isIndemniteConventionnelleBigger} value={indemniteConventionnelle} + ratio={ + isIndemniteConventionnelleBigger + ? 1 + : indemniteConventionnelle / indemniteLegale + } /> - - - - - Un accord collectif d’entreprise, le contrat de travail et un usage - peuvent prévoir une formule de calcul plus avantageuse pour le - salarié. Dans ce cas, le salarié perçoit l’indemnité la plus élevée.{" "} - -
    + + + {children} + )} -
    -
    + + Un accord collectif d’entreprise, le contrat de travail et un usage + peuvent prévoir une formule de calcul plus avantageuse pour le salarié. + Dans ce cas, le salarié perçoit l’indemnité la plus élevée. + ); @@ -94,14 +106,12 @@ export { IndemniteCCn }; const { spacing, fonts } = theme; -const ColumnWrapper = styled.div` +const RowWrapper = styled.div` display: flex; flex-direction: column; - margin: ${spacing.large} -${spacing.small}; - flex-wrap: wrap; `; -const Column = styled.section` +const Row = styled.section` padding: 0 ${spacing.small}; order: ${({ first }) => (first ? 0 : 1)}; `; @@ -109,3 +119,7 @@ const Column = styled.section` const Heading = styled.h2` font-size: ${fonts.sizeH4}; `; + +const StyledToast = styled(Toast)` + margin: ${spacing.interComponent} 0; +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/Montant.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/Montant.js index 9fe1f2a69a..5257cecea5 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/Montant.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/Montant.js @@ -2,10 +2,10 @@ import React from "react"; import { theme } from "@cdt/ui"; import styled from "styled-components"; -function Montant({ value, primary }) { +function Montant({ value, primary, ratio = 1 }) { return ( - + {value.toLocaleString("fr-FR", { maximumFractionDigit: 2, @@ -18,24 +18,34 @@ function Montant({ value, primary }) { } export { Montant }; -const { box, colors, fonts, spacing } = theme; +const { box, breakpoints, colors, fonts, spacing } = theme; const Wrapper = styled.div` display: flex; + @media (max-width: ${breakpoints.tablet}) { + flex-flow: wrap; + } `; const Bar = styled.div` border-radius: ${box.borderRadius}; background-color: ${({ primary }) => primary ? colors.blue : colors.darkerGrey}; - width: 50%; + width: ${({ ratio }) => `calc(50% * ${ratio})`}; display: inline-flex; align-items: center; position: relative; padding: 1em; + @media (max-width: ${breakpoints.tablet}) { + width: ${({ ratio }) => `calc(100% * ${ratio})`}; + } `; const Value = styled.span` margin-left: ${spacing.base}; color: ${({ primary }) => (primary ? colors.blue : colors.darkerGrey)}; font-size: ${({ primary }) => (primary ? fonts.sizeH2 : fonts.sizeH4)}; + @media (max-width: ${breakpoints.tablet}) { + margin-left: 0; + width: 100%; + } `; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPartiel.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPartiel.js index 06a06eb909..6b7a1d6faf 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPartiel.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPartiel.js @@ -40,6 +40,7 @@ function SalaireTempsPartiel({ name, onChange }) { {error && touched && invalid ? ( @@ -60,6 +61,7 @@ function SalaireTempsPartiel({ name, onChange }) { diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPlein.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPlein.js index 39998ec256..bca6632a4c 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPlein.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/SalaireTempsPlein.js @@ -60,6 +60,7 @@ function SalaireTempsPlein({ name }) { diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/TextQuestion.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/TextQuestion.js index 9e3278e118..0495a707e3 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/TextQuestion.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/TextQuestion.js @@ -16,29 +16,24 @@ function TextQuestion({ name, label, inputType = "text", size }) { ( - + render={({ input, meta: { dirty, error, invalid, touched } }) => ( + <> + + {error && dirty && ( + + {error} + + )} + )} /> - - (error && dirty) || (error && touched) ? ( - - {error} - - ) : null - } - /> )} diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/Montant.test.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/Montant.test.js new file mode 100644 index 0000000000..96b439711a --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/Montant.test.js @@ -0,0 +1,16 @@ +import React from "react"; +import { render } from "react-testing-library"; +import { Montant } from "../Montant"; + +describe("", () => { + it("renders with ratio", () => { + const { container } = render(); + expect(container).toMatchSnapshot(); + }); + it("renders with primary and first", () => { + const { container } = render( + + ); + expect(container).toMatchSnapshot(); + }); +}); diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/AbsencePeriods.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/AbsencePeriods.test.js.snap index 3c413b859a..1a66f06a3f 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/AbsencePeriods.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/AbsencePeriods.test.js.snap @@ -4,7 +4,7 @@ exports[` should add a period 1`] = ` .c4 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 7em; border-radius: 0.25rem; @@ -68,6 +68,10 @@ exports[` should add a period 1`] = ` -webkit-justify-content: flex-start; -ms-flex-pack: start; justify-content: flex-start; + -webkit-align-items: flex-start; + -webkit-box-align: flex-start; + -ms-flex-align: flex-start; + align-items: flex-start; margin-bottom: 0.25rem; } @@ -127,7 +131,7 @@ exports[` should add a period 1`] = `

    - Les congés maternité, arrêts de travail liés à une maladie professionnelle, congés individuel de formation (Cif) et stage de fin d’étude de plus de 2 mois ne sont pas considérés comme des absences. Merci de ne pas les renseigner. + Les congés maternité, arrêts de travail liés à une maladie professionnelle, congés individuels de formation (Cif) et stage de fin d’étude de plus de 2 mois ne sont pas considérés comme des absences. Merci de ne pas les renseigner.

    should add a period 1`] = ` class="c4" name="absences[0].duration" size="7" + type="number" value="" /> @@ -107,7 +208,7 @@ exports[` should render error 1`] = ` `; exports[` should render results with highlight on indemnité conventionnelle 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -129,13 +230,13 @@ exports[` should render results with highlight on indemnité con border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -143,7 +244,7 @@ exports[` should render results with highlight on indemnité con outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -152,21 +253,21 @@ exports[` should render results with highlight on indemnité con box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -188,7 +289,7 @@ exports[` should render results with highlight on indemnité con box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -209,7 +310,7 @@ exports[` should render results with highlight on indemnité con background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -248,7 +349,7 @@ exports[` should render results with highlight on indemnité con .c6 { border-radius: 0.25rem; background-color: #53657d; - width: 50%; + width: calc(50% * 0.021); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -264,7 +365,7 @@ exports[` should render results with highlight on indemnité con .c15 { border-radius: 0.25rem; background-color: #0053b3; - width: 50%; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -318,10 +419,6 @@ exports[` should render results with highlight on indemnité con -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c3 { @@ -342,6 +439,44 @@ exports[` should render results with highlight on indemnité con font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 0.021); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} +

    should render results with highlight on indemnité con

    should render results with highlight on indemnité con
    -
    -
    @@ -565,7 +697,7 @@ exports[` should render results with highlight on indemnité con `; exports[` should render results with highlight on indemnité legale 1`] = ` -.c20 { +.c21 { padding: 0.625rem 1rem; -webkit-appearance: none; -moz-appearance: none; @@ -587,13 +719,13 @@ exports[` should render results with highlight on indemnité leg border-bottom-color: #0053b3; } -.c20:not([disabled]):hover, -.c20:not([disabled]):focus { +.c21:not([disabled]):hover, +.c21:not([disabled]):focus { background: #07f; color: #fff; } -.c20:not([disabled]):active { +.c21:not([disabled]):active { color: #fff; background: #1a85ff; border-width: 2px 1px 1px 1px; @@ -601,7 +733,7 @@ exports[` should render results with highlight on indemnité leg outline: none; } -.c20[aria-pressed="true"] { +.c21[aria-pressed="true"] { color: #fff; background: #07f; border-width: 2px 1px 1px 1px; @@ -610,21 +742,21 @@ exports[` should render results with highlight on indemnité leg box-shadow: inset 0 1px 2px 0 #0053b3; } -.c20[aria-pressed="true"]:not([disabled]):hover, -.c20[aria-pressed="true"]:not([disabled]):focus { +.c21[aria-pressed="true"]:not([disabled]):hover, +.c21[aria-pressed="true"]:not([disabled]):focus { background-color: #006be6; } -.c20[aria-pressed="true"]:not([disabled]):active { +.c21[aria-pressed="true"]:not([disabled]):active { border-top-color: #0053b3; } -.c20[disabled] { +.c21[disabled] { cursor: not-allowed; color: rgba(255,255,255,0.4); } -.c17 { +.c18 { box-sizing: border-box; display: -webkit-inline-box; display: -webkit-inline-flex; @@ -646,7 +778,7 @@ exports[` should render results with highlight on indemnité leg box-shadow: none; } -.c18 { +.c19 { display: -webkit-box; display: -webkit-flex; display: -ms-flexbox; @@ -667,7 +799,7 @@ exports[` should render results with highlight on indemnité leg background-color: #d7e8f9; } -.c19 { +.c20 { -webkit-box-flex: 1; -webkit-flex-grow: 1; -ms-flex-positive: 1; @@ -703,10 +835,10 @@ exports[` should render results with highlight on indemnité leg display: flex; } -.c15 { +.c6 { border-radius: 0.25rem; - background-color: #53657d; - width: 50%; + background-color: #0053b3; + width: calc(50% * 1); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -719,10 +851,10 @@ exports[` should render results with highlight on indemnité leg padding: 1em; } -.c6 { +.c15 { border-radius: 0.25rem; - background-color: #0053b3; - width: 50%; + background-color: #53657d; + width: calc(50% * 0.6685); display: -webkit-inline-box; display: -webkit-inline-flex; display: -ms-inline-flexbox; @@ -776,10 +908,6 @@ exports[` should render results with highlight on indemnité leg -webkit-flex-direction: column; -ms-flex-direction: column; flex-direction: column; - margin: 2rem -0.625rem; - -webkit-flex-wrap: wrap; - -ms-flex-wrap: wrap; - flex-wrap: wrap; } .c14 { @@ -800,6 +928,44 @@ exports[` should render results with highlight on indemnité leg font-size: 1.375rem; } +.c17 { + margin: 1.25rem 0; +} + +@media (max-width:980px) { + .c5 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c6 { + width: calc(100% * 1); + } +} + +@media (max-width:980px) { + .c15 { + width: calc(100% * 0.6685); + } +} + +@media (max-width:980px) { + .c16 { + margin-left: 0; + width: 100%; + } +} + +@media (max-width:980px) { + .c7 { + margin-left: 0; + width: 100%; + } +} +

    should render results with highlight on indemnité leg

    should render results with highlight on indemnité leg
    -
    -
    diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/Montant.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/Montant.test.js.snap new file mode 100644 index 0000000000..c8169537d1 --- /dev/null +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/Montant.test.js.snap @@ -0,0 +1,137 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[` renders with primary and first 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.c1 { + border-radius: 0.25rem; + background-color: #0053b3; + width: calc(50% * 0.7); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c2 { + margin-left: 1rem; + color: #0053b3; + font-size: 1.875rem; +} + +@media (max-width:980px) { + .c0 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c1 { + width: calc(100% * 0.7); + } +} + +@media (max-width:980px) { + .c2 { + margin-left: 0; + width: 100%; + } +} + +
    +
    +
    + + 10.00 +  € brut + +
    +
    +`; + +exports[` renders with ratio 1`] = ` +.c0 { + display: -webkit-box; + display: -webkit-flex; + display: -ms-flexbox; + display: flex; +} + +.c1 { + border-radius: 0.25rem; + background-color: #53657d; + width: calc(50% * 0.7); + display: -webkit-inline-box; + display: -webkit-inline-flex; + display: -ms-inline-flexbox; + display: inline-flex; + -webkit-align-items: center; + -webkit-box-align: center; + -ms-flex-align: center; + align-items: center; + position: relative; + padding: 1em; +} + +.c2 { + margin-left: 1rem; + color: #53657d; + font-size: 1.375rem; +} + +@media (max-width:980px) { + .c0 { + -webkit-flex-flow: wrap; + -ms-flex-flow: wrap; + flex-flow: wrap; + } +} + +@media (max-width:980px) { + .c1 { + width: calc(100% * 0.7); + } +} + +@media (max-width:980px) { + .c2 { + margin-left: 0; + width: 100%; + } +} + +
    +
    +
    + + 10.00 +  € brut + +
    +
    +`; diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/SalaireTempsPartiel.test.js.snap b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/SalaireTempsPartiel.test.js.snap index 4a5a2e3de8..a23e0c9823 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/SalaireTempsPartiel.test.js.snap +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/components/__tests__/__snapshots__/SalaireTempsPartiel.test.js.snap @@ -76,7 +76,7 @@ exports[` should add a period 1`] = ` .c5 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 8em; border-radius: 0.25rem; @@ -98,7 +98,7 @@ exports[` should add a period 1`] = ` .c7 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 10em; border-radius: 0.25rem; @@ -216,6 +216,7 @@ exports[` should add a period 1`] = ` class="c5" name="periods[0].duration" size="8" + type="number" value="" />
    @@ -227,6 +228,7 @@ exports[` should add a period 1`] = ` class="c7" name="periods[0].salary" size="10" + type="number" value="" /> should delete a period 1`] = ` .c5 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 8em; border-radius: 0.25rem; @@ -353,7 +355,7 @@ exports[` should delete a period 1`] = ` .c7 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 10em; border-radius: 0.25rem; @@ -471,6 +473,7 @@ exports[` should delete a period 1`] = ` class="c5" name="periods[0].duration" size="8" + type="number" value="6" />
    @@ -482,6 +485,7 @@ exports[` should delete a period 1`] = ` class="c7" name="periods[0].salary" size="10" + type="number" value="1000" /> should render 1`] = ` .c5 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 8em; border-radius: 0.25rem; @@ -608,7 +612,7 @@ exports[` should render 1`] = ` .c7 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 10em; border-radius: 0.25rem; @@ -726,6 +730,7 @@ exports[` should render 1`] = ` class="c5" name="periods[0].duration" size="8" + type="number" value="12" />
    @@ -737,6 +742,7 @@ exports[` should render 1`] = ` class="c7" name="periods[0].salary" size="10" + type="number" value="2000" /> should render 1`] = ` class="c5" name="periods[1].duration" size="8" + type="number" value="6" />
    @@ -791,6 +798,7 @@ exports[` should render 1`] = ` class="c7" name="periods[1].salary" size="10" + type="number" value="1000" /> should autofill blank input 1`] = ` .c5 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 10em; border-radius: 0.25rem; @@ -153,6 +153,7 @@ exports[` should autofill blank input 1`] = ` id="salary0" name="periods[0].salary" size="10" + type="number" value="2000" /> should autofill blank input 1`] = ` id="salary1" name="periods[1].salary" size="10" + type="number" value="2000" /> should render 1`] = ` .c5 { padding: 0; font-size: 1rem; - text-align: left; + text-align: right; line-height: inherit; width: 10em; border-radius: 0.25rem; @@ -352,6 +354,7 @@ exports[` should render 1`] = ` id="salary0" name="periods[0].salary" size="10" + type="number" value="2000" /> should render 1`] = ` id="salary1" name="periods[1].salary" size="10" + type="number" value="1000" /> 0 && { "Ancienneté au delà de 10ans (A2)": round(anciennete - 10) }) diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/index.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/index.js index 5815ceda7a..539a1a6cb1 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/index.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/index.js @@ -3,7 +3,12 @@ import PropTypes from "prop-types"; import { OnChange } from "react-final-form-listeners"; import { Section, Container, Wrapper } from "@cdt/ui"; -import { stepReducer, initialSteps } from "./stepReducer"; +import { + stepPrime, + stepSalaires, + stepReducer, + initialSteps +} from "./stepReducer"; import { Wizard } from "../common/Wizard"; function CalculateurIndemnite() { @@ -15,8 +20,11 @@ function CalculateurIndemnite() { {value => value === false - ? dispatch({ type: "add_primes" }) - : dispatch({ type: "remove_primes" }) + ? dispatch({ + type: "add_step", + payload: { insertAfter: stepSalaires.name, step: stepPrime } + }) + : dispatch({ type: "remove_step", payload: stepPrime.name }) } @@ -43,8 +51,6 @@ function CalculateurIndemnite() {
    diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/stepReducer.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/stepReducer.js index e449ee0a5a..978e14db3b 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/stepReducer.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/stepReducer.js @@ -5,6 +5,18 @@ import { StepAnciennete } from "./steps/Anciennete"; import { StepSalaires } from "./steps/Salaires"; import { StepPrimes } from "./steps/Primes"; +export const stepSalaires = { + component: StepSalaires, + name: "salaires", + label: "Salaires" +}; + +export const stepPrime = { + component: StepPrimes, + label: "Primes", + name: "primes" +}; + export const initialSteps = [ { component: StepIntro, @@ -13,7 +25,7 @@ export const initialSteps = [ }, { component: StepInfo, - name: "infoGenerales", + name: "info_generales", label: "Informations générales" }, { @@ -21,46 +33,40 @@ export const initialSteps = [ name: "anciennete", label: "Ancienneté" }, - { - component: StepSalaires, - name: "salaires", - label: "Salaires" - }, + stepSalaires, { component: StepIndemnite, - name: "indemniteLegale", + name: "indemnite_legale", label: "Indemnité légale" } ]; -export function stepReducer(steps, action) { - switch (action.type) { +export function stepReducer(steps, { type, payload }) { + switch (type) { case "reset": { return [...initialSteps]; } - case "add_primes": { - const salaireIndex = steps.findIndex(step => step.name === "salaires"); - const newSteps = steps.filter(step => step.name !== "primes"); - newSteps.splice(salaireIndex + 1, 0, { - component: StepPrimes, - label: "Primes", - name: "primes" - }); + case "add_step": { + const previousStepIndex = steps.findIndex( + step => step.name === payload.insertAfter + ); + const newSteps = steps.filter(step => step.name !== payload.step.name); + newSteps.splice(previousStepIndex + 1, 0, payload.step); return newSteps; } - case "remove_primes": { - return steps.filter(step => step.name !== "primes"); + case "remove_step": { + return steps.filter(step => step.name !== payload); } case "add_branche": { return steps .filter(step => !/branche_/.test(step.name)) - .concat(...action.payload); + .concat(...payload); } case "remove_branche": { return steps.filter(step => !/branche_/.test(step.name)); } default: - console.warn("action unknow", action); + console.warn("action unknow", { type, payload }); return steps; } } diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete.js index 0b69b73d84..f0831fe632 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Anciennete.js @@ -104,7 +104,7 @@ function StepAnciennete({ form }) { /> {({ input }) => - input.value === true ? ( + input.value && ( { @@ -113,7 +113,7 @@ function StepAnciennete({ form }) { } }} /> - ) : null + ) } diff --git a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Indemnite.js b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Indemnite.js index 032dac5f86..12156e66dc 100644 --- a/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Indemnite.js +++ b/packages/code-du-travail-frontend/src/outils/IndemniteLicenciement/steps/Indemnite.js @@ -9,13 +9,6 @@ import { Label, SectionTitle } from "../../common/stepStyles"; import { getIndemniteFromFinalForm } from "../indemnite"; import { IndemniteLegale } from "../components/IndemniteLegale"; -function validateCCn(idcc) { - const selectedBranche = branches.find(branche => branche.value === idcc); - if (!selectedBranche) { - return "Cette branche n’est pas encore intégrée."; - } -} - function StepIndemnite({ form }) { const { indemniteLegale, infoCalculLegal } = getIndemniteFromFinalForm(form); return ( @@ -32,11 +25,7 @@ function StepIndemnite({ form }) { votre indemnité de licenciement peut être supérieur au montant de l’indemnité légale.

    - + {({ input, meta: { error, dirty } }) => { return ( <> @@ -46,7 +35,7 @@ function StepIndemnite({ form }) {