From 890bb63ab1046de141a033b1f1628b7c69bec7d5 Mon Sep 17 00:00:00 2001 From: Antoine Pierlot-Garcin Date: Thu, 23 Nov 2023 15:52:48 +0100 Subject: [PATCH] salaire : ajout des valeurs historiques -> 2020 --- src/lib/truncateFloat.ts | 16 ++ src/routes/SalaireInterne.svelte | 17 +- src/routes/basesLegales.ts | 344 ++++++++++++++++++++++++++----- 3 files changed, 318 insertions(+), 59 deletions(-) create mode 100644 src/lib/truncateFloat.ts diff --git a/src/lib/truncateFloat.ts b/src/lib/truncateFloat.ts new file mode 100644 index 0000000..26ff8d6 --- /dev/null +++ b/src/lib/truncateFloat.ts @@ -0,0 +1,16 @@ +/** + * Round half away from zero ('commercial' rounding) + * Uses correction to offset floating-point inaccuracies. + * Works symmetrically for positive and negative numbers. + */ +export function round(num : number, decimalPlaces : number = 0) : number { + const p = Math.pow(10, decimalPlaces); + const n = (num * p) * (1 + Number.EPSILON); + return Math.round(n) / p; +} + +export function floor(num : number, decimalPlaces : number = 0) : number { + const p = Math.pow(10, decimalPlaces); + const n = (num * p) * (1 + Number.EPSILON); + return Math.floor(n) / p; +} \ No newline at end of file diff --git a/src/routes/SalaireInterne.svelte b/src/routes/SalaireInterne.svelte index b3d12bf..9cf87ee 100644 --- a/src/routes/SalaireInterne.svelte +++ b/src/routes/SalaireInterne.svelte @@ -17,14 +17,14 @@ let aIndemniteZipZac: boolean = false; let estUltramarin: boolean = false; - let nbDemiGardes: number = 0; + let nbDemiGardesSem: number = 0; let nbGardesSem: number = 0; let nbGardesWE: number = 0; let nbAstreintes: number = 0; let nbDeplacements: number = 0; let dateCourante: Date = new Date(); - $: bases = recupBasesLegales(dateCourante.getFullYear(), dateCourante.getMonth() + 1); + $: bases = recupBasesLegales(dateCourante); // Options pour le monthpicker flatpicker-plus const mp_options: Options = { @@ -36,7 +36,6 @@ maxDate: new Date(), onChange: (dates: Date[], currentDateString: string, self: any, data?: any) => { dateCourante = dates[0]; - console.log('Nouvelle date : ' + dateCourante); } }; @@ -136,7 +135,7 @@ $: tauxPrimeOutremer = estUltramarin ? parseFloat(bases.tauxPrimeOutremer) : 0; // Gardes et astreintes - $: valDemiGarde = parseFloat(bases.demigarde); + $: valDemiGardeSem = parseFloat(bases.demigardeSem); $: valGardeSem = parseFloat(bases.gardeSem); // Pas de gestion des gardes au dela du service normal pour le moment $: valGardeWE = parseFloat(bases.gardeWE); // Pas de gestion des gardes au dela du service normal pour le moment $: valAstreinte = parseFloat(bases.astreinte); @@ -151,7 +150,7 @@ indemniteTransport + indemniteHebergement + (tauxPrimeOutremer * base) / 100 + - nbDemiGardes * valDemiGarde + + nbDemiGardesSem * valDemiGardeSem + nbGardesSem * valGardeSem + nbGardesWE * valGardeWE + nbAstreintes * valAstreinte + @@ -237,7 +236,7 @@
- Demi-gardes + Demi-gardes
Gardes semaine @@ -282,10 +281,10 @@ 2020 : - */ - "baseDJ2": "28495.49", - "baseDJ1": "28495.49", - "base5e": "28448.22", - "base4e": "28430.36", - "base3e": "28408.30", - "base2e": "21483.24", - "base1ere": "19406.35", - "baseFFI": "17745.47", - "baseAnneeRecherche": "25931.90", - "indemniteSujetion": "435.18", - "primeDJ2eme": "6000", - "primeDJ1re": "5000", // https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655 - "primeResp5eme": "4273.93", - "primeResp4eme": "2154.10", - "primeNonLogeNonNourri": "1010.64", - "primeNonLogeNourri": "336.32", - "primeLogeNonNourri": "674.31", - "primeSASPAS": "125", - "indemniteDeplacement": "130", - "indemniteHebergement": "300", - "tauxPrimeOutremer": "40", - - "gardeSem": "156.53", - "gardeWE": "171.24", - "demigarde": "78.26", - "astreinte": "21.26", - "deplaAstreinte": "78.26", - - "tauxCSGDeductible": "6.8", // janvier 2019 - "tauxCSGNonDeductible": "2.40", // janvier 2019 - "tauxCRDS": "0.50", // février 1996 - "assietteCSGCRDS": "0.9825", - - // Retraite : https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec - "IRCANTECTrA": "2.8", - "IRCANTECTrB": "6.95", - "plafondSS": "3666", - "tauxAssuranceViellessePlafonee": "6.9", - "tauxAssuranceViellesseDeplaf": "0.4", +interface montant { + label: string, + basesDatees : montantDates, } - return base; -} \ No newline at end of file + +type basesLegales = montant[]; +type montantDates = Array<[string | null, number]>; + +function montantEnVigueur(vigueur : Date, bases : montantDates) : number { + for (let b of bases) { + const [date, montant] = b; + if (date === null || vigueur >= new Date(date)) return montant; + } + return 0; +} + +export function recupBasesLegales(vigueur : Date) { + let base = { /* VALEURS EN VIGUEUR (DERNIERE MAJ NOV 2023) - cf 2e partie pour valeurs historiques */ + "baseDJ2": "28495.49", // juil 2023 - cf. historique + "baseDJ1": "28495.49", // juil 2023 - cf. historique + "base5e": "28448.22", // juil 2023 - cf. historique + "base4e": "28430.36", // juil 2023 - cf. historique + "base3e": "28408.30", // juil 2023 - cf. historique + "base2e": "21483.24", // juil 2023 - cf. historique + "base1ere": "19406.35", // juil 2023 - cf. historique + "baseFFI": "17745.47", // juil 2023 - cf. historique + "baseAnneeRecherche": "25931.90", // juil 2023 - cf. historique + "indemniteSujetion": "435.18", // juil 2023 - cf. historique + "primeDJ2eme": "6000", // fev 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655 + "primeDJ1re": "5000", // fev 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000041582655 + "primeResp5eme": "4273.93", // juil 2023 - cf. historique + "primeResp4eme": "2154.10", // juil 2023 - cf. historique + "primeNonLogeNonNourri": "1010.64", // juil 2023 - cf. historique + "primeNonLogeNourri": "336.32", // juil 2023 - cf. historique + "primeLogeNonNourri": "674.31", // juil 2023 - cf. historique + "primeSASPAS": "125", // mars 2014 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000028684829 + "indemniteDeplacement": "130", // mars 2014 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000028684837 + "indemniteHebergement": "300", // nov 2020 - cf. historique + "tauxPrimeOutremer": "40", // harmonisation avril 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047387836 + "tauxPrimeOutremerNiv1" : "40", // TODO + "tauxPrimeOutremerNiv2" : "40", // TODO + + "gardeSem": "156.53", // juil 2023 - cf. historique + "gardeWE": "171.24", // juil 2023 - cf. historique + "demigardeSem": "78.26", // juil 2023 - cf. historique + "demigardeWE": "84.35", // juil 2023 - cf. historique + "astreinte": "21.26", // juil 2023 - cf. historique + "deplaAstreinte": "78.26", // juil 2023 - cf. historique + + "tauxCSGDeductible": "6.8", // janvier 2019 + "tauxCSGNonDeductible": "2.40", // janvier 2019 + "tauxCRDS": "0.50", // février 1996 + "assietteCSGCRDS": "0.9825", + + // Retraite : https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec + "IRCANTECTrA": "2.8", // jan 2017 + "IRCANTECTrB": "6.95", // jan 2017 + "plafondSS": "3666", // jan 2023 - cf. historique + "tauxAssuranceViellessePlafonee": "6.9", // janvier 2017 - https://www.legifrance.gouv.fr/codes/article_lc/LEGIARTI000029924557 + "tauxAssuranceViellesseDeplaf": "0.4", // ^ idem ^ + } + + // Mise à jour avec les valeurs historiques (si nécessaire) - cf. ci-dessous + basesHistoriques.forEach(bb => { + const montant = montantEnVigueur(vigueur, bb.basesDatees); + const label = bb.label as keyof typeof base; + base[label] = montant.toFixed(2); + }); + + return base; +} + +const basesHistoriques : basesLegales = [ + /* Les bases légales sont inscrites ci-dessous pour des dates à partir de janvier 2020 (sauf les DJ : fév 2020) */ + + /* DJ : + A partir de juillet 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047774474 + De juil 2022 à juin 2023 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000046032168/2022-07-11/ + De nov 2020 à juin 2022 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042351456/2020-11-01/ + De fev 2020 à oct 2020 : https://www.legifrance.gouv.fr/loda/id/LEGIARTI000041572708/2020-02-14/ + */ + { label: 'baseDJ2', basesDatees: [ + [ '2023-07', 28495.49 ], + [ '2022-07', 28074.38 ], + [ '2020-11', 27015 ], + [ null, 27025 ] + ] + }, + { label: 'baseDJ1', basesDatees: [ + [ '2023-07', 28495.49 ], + [ '2022-07', 28074.38 ], + [ '2020-11', 27015 ], + [ null, 27025 ] + ] + }, + + /* Salaires et indemnités / primes de base pour internes et FFI : + A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046032166 + A partir de juillet 2022 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046147521/2022-08-06 + De nov 2020 à juin 2022 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042352097 + De fev 2017 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000032841019 + */ + { label: 'base5e', basesDatees: [ + [ '2023-07', 28448.22 ], + [ '2022-07', 28027.80 ], + [ '2020-11', 27080 ], + [ null, 25500.55 ] + ] + }, + { label: 'base4e', basesDatees: [ + [ '2023-07', 28430.36 ], + [ '2022-07', 28010.20 ], + [ '2020-11', 27063 ], + [ null, 25500.55 ] + ] + }, + { label: 'base3e', basesDatees: [ + [ '2023-07', 28408.30 ], + [ '2022-07', 27988.47 ], + [ '2020-11', 27042 ], + [ null, 25500.55 ] + ] + }, + { label: 'base2e', basesDatees: [ + [ '2023-07', 21483.24 ], + [ '2022-07', 21165.75 ], + [ '2020-11', 20450 ], + [ null, 18383.46 ] + ] + }, + { label: 'base1ere', basesDatees: [ + [ '2023-07', 19406.35 ], + [ '2022-07', 19119.55 ], + [ '2020-11', 18473 ], + [ null, 16605.13 ] + ] + }, + { label: 'baseFFI', basesDatees: [ + [ '2023-07', 17745.47 ], + [ '2022-07', 17483.22 ], + [ '2020-11', 16892 ], + [ null, 15196.51 ] + ] + }, + { label: 'baseAnneeRecherche', basesDatees: [ + [ '2023-07', 27596.01 ], + [ '2022-07', 27188.19 ], + [ '2020-11', 24684.71 ], + [ null, 24182.74 ] + ] + }, + { label: 'indemniteSujetion', basesDatees: [ + [ '2020-11', 435.18 ], + [ null, 432.58 ] + ] + }, + { label: 'primeNonLogeNonNourri', basesDatees: [ + [ '2020-11', 1010.64 ], + [ null, 1004.61 ] + ] + }, + { label: 'primeNonLogeNourri', basesDatees: [ + [ '2020-11', 336.32 ], + [ null, 334.32 ] + ] + }, + { label: 'primeLogeNonNourri', basesDatees: [ + [ '2020-11', 674.31 ], + [ null, 670.29 ] + ] + }, + { label: 'primeResp5eme', basesDatees: [ + [ '2023-07', 4273.93 ], + [ '2022-07', 4210.77 ], + [ '2020-11', 4068.38 ], + [ null, 4044.12 ] + ] + }, + { label: 'primeResp4eme', basesDatees: [ + [ '2023-07', 2154.10 ], + [ '2022-07', 2122.27 ], + [ '2020-11', 2050.50 ], + [ null, 2038.27 ] + ] + }, + + /* Gardes d'internes + A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000032575975 + De juil 2022 à juil 2023 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000046209558/2022-07-01/ + De nov 2020 à juil 2022 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000042485121/2020-11-01/ + De mai 2016 à oct 2020 - https://www.legifrance.gouv.fr/loda/id/LEGIARTI000032582930/2016-05-01/ + + NB: les montants des gardes et demi-gardes supplémentaires sont égaux à ceux du week-end + + + revalorisation de 50 % : en continu depuis aout 2022 + A partir de janvier 2024 - non publié pour le moment + De sept 2023 à dec 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000048095628 + De avr 2023 à aout 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000047387923 + De déc 2022 à mars 2023 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000046727758 + De sept 2022 à nov 2022 - https://www.srp-img.com/wp-content/uploads/2023/01/Courrier-%EF%BF%BD- + lensemble-des-directeurs-detablissements-hospitaliers-et-aux-comptables-publics.pdf + D'aout 2022 à sept 2022 - https://www.legifrance.gouv.fr/jorf/article_jo/JORFARTI000046229342 + */ + { label: 'gardeSem', basesDatees: [ + [ '2023-07', floor(156.23 * 1.5, 2) ], + [ '2022-08', floor(154.22 * 1.5, 2) ], + [ '2022-07', 154.22 ], + [ '2020-11', 149 ], + [ null, 119.02 ] + ] + }, + { label: 'gardeWE', basesDatees: [ + [ '2023-07', floor(171.24 * 1.5, 2) ], + [ '2022-08', floor(168.71 * 1.5, 2) ], + [ '2022-07', 168.71 ], + [ '2020-11', 163 ], + [ null, 130.02 ] + ] + }, + { label: 'demigardeSem', basesDatees: [ + [ '2023-07', floor(78.26 * 1.5, 2) ], + [ '2022-08', floor(77.11 * 1.5, 2) ], + [ '2022-07', 77.11 ], + [ '2020-11', 74.5 ], + [ null, 59.50 ] + ] + }, + { label: 'demigardeWE', basesDatees: [ + [ '2023-07', floor(85.62 * 1.5, 2) ], + [ '2022-08', floor(84.35 * 1.5, 2) ], + [ '2022-07', 84.35 ], + [ '2020-11', 81.5 ], + [ null, 65.01 ] + ] + }, + + /* Astreintes d'internes + A partir de juillet 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000048244852 + De juil 2022 à juil 2023 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000046209612/2022-07-01/ + De nov 2020 à juil 2022 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000042485117/2020-11-01/ + De nov 2015 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000031027721/2015-11-01/ + */ + { label: 'astreinte', basesDatees: [ + [ '2023-07', 21.26 ], + [ '2022-07', 20.95 ], + [ null, 20 ] + ] + }, + { label: 'deplaAstreinte', basesDatees: [ + [ '2023-07', 78.26 ], + [ '2022-07', 77.11 ], + [ '2020-11', 74.5 ], + [ null, 59.50 ] + ] + }, + + /* Indemnité forfaitaire d'hébergement (zones sous-denses) + A partir de novembre 2020 - https://www.legifrance.gouv.fr/loda/id/JORFTEXT000037152345 + De nov 2018 à oct 2020 - https://www.legifrance.gouv.fr/loda/article_lc/LEGIARTI000037154721/2018-11-01 + */ + { label: 'indemniteHebergement', basesDatees: [ + [ '2020-11', 300 ], + [ null, 200 ] + ] + }, + + /* Majoration des émoluments pour les internes d'outre-mer + Harmonisation à 40 % à partir de avril 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000047387836 + De oct 2020 à mars 2023 - https://www.legifrance.gouv.fr/jorf/id/JORFTEXT000042331244/ + */ + { label: 'tauxPrimeOutremerNiv1', basesDatees: [ + [ '2023-04', 40 ], + [ '2020-10', 20 ], + [ null, 0 ] + ] + }, + { label: 'tauxPrimeOutremerNiv2', basesDatees: [ + [ '2020-10', 40 ], + [ null, 0 ] + ] + }, + + /* Plafond mensuel de la sécurité sociale + https://www.ircantec.retraites.fr/employeur/parametres-utilises-ircantec + modifications en 2020, 2023 et 2024 + (https://boss.gouv.fr/portail/accueil/actualites-boss/2023/octobre/le-plafond-de-securite-sociale-a.html) + */ + { label: 'plafondSS', basesDatees: [ + [ '2024-01', 3864 ], + [ '2023-01', 3666 ], + [ null, 3428 ] + ] + }, +] \ No newline at end of file