import { describe, expect, it } from "vitest"; import { parseMasseSalarialeWorkbookRows } from "./masseSalarialeWorkbookImport"; describe("import du modèle Masse salariale", () => { it("importe les prévisionnels sans confondre taux, primes et évolutions", () => { const rows: Array> = Array.from({ length: 5 }, () => []); rows.push([ null, "000001", "NOM", "PRENOM", "Poste", new Date("2024-01-01T00:00:00.000Z"), 35_000, 37_000, 2_000, 2_916.67, 0.45, 1_000, 36_000, 39_000, 2_500, 3_000, 0.46, 1_500, 40_000, 43_000, 2_000, 3_333.33, null, 2_000, 0.5, ]); const parsed = parseMasseSalarialeWorkbookRows(rows); expect(parsed.salaries).toHaveLength(1); expect(parsed.remunerations).toHaveLength(3); expect(parsed.remunerations.find((row) => row.annee === 2026)).toMatchObject({ salaireAnnuelBrutHorsPrimesCents: 3_600_000, salaireAnnuelBrutAvecPrimesCents: 3_900_000, primeAstreinteCents: 250_000, evolutionCents: 150_000, tauxChargeBps: 4_600, primeCents: 0, }); expect(parsed.remunerations.find((row) => row.annee === 2027)).toMatchObject({ primeCents: 50, evolutionCents: 200_000, tauxChargeBps: null, }); }); it("accepte les lignes SheetJS sans cellule A vide et les dates Excel numériques", () => { const rows: Array> = Array.from({ length: 5 }, () => []); rows.push([ "000002", "NOM", "PRENOM", "Poste", 45_292, 35_000, 37_000, 2_000, 2_916.67, 0.45, 1_000, 36_000, 39_000, 2_500, 3_000, 0.46, 1_500, 40_000, 43_000, 2_000, 3_333.33, null, 2_000, 0.5, ]); const parsed = parseMasseSalarialeWorkbookRows(rows); expect(parsed.salaries).toMatchObject([{ matricule: "000002", dateEmbauche: "2024-01-01" }]); expect(parsed.remunerations).toHaveLength(3); }); });