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