Checkpoint: Ajout de la projection annuelle prévisionnel-réel dans Masse salariale : import contrôlé du fichier modèle 2025-2027, réel 2026 provenant uniquement des liasses Salaires, ajustements administrateur limités aux primes et évolutions de l'année courante/future, conservation des centimes, modèle de calcul testé et documentation. 72 tests, TypeScript et build validés.
This commit is contained in:
24
scripts/importMasseSalarialeWorkbook.ts
Normal file
24
scripts/importMasseSalarialeWorkbook.ts
Normal file
@@ -0,0 +1,24 @@
|
||||
import XLSX from "xlsx";
|
||||
import { importMasseSalariale } from "../server/db";
|
||||
import { parseMasseSalarialeWorkbookRows } from "../server/masseSalarialeWorkbookImport";
|
||||
|
||||
const workbookPath = "/home/ubuntu/upload/TableaurecapMassesalarialeSANTINOVA-28.08.26.xlsx";
|
||||
const workbook = XLSX.readFile(workbookPath, { cellDates: true });
|
||||
const sheet = workbook.Sheets["Masse salariale"];
|
||||
if (!sheet) throw new Error("Feuille Masse salariale introuvable");
|
||||
|
||||
const rows = XLSX.utils.sheet_to_json<Array<string | number | Date | null>>(sheet, {
|
||||
header: 1,
|
||||
raw: true,
|
||||
defval: null,
|
||||
});
|
||||
const parsed = parseMasseSalarialeWorkbookRows(rows);
|
||||
const result = await importMasseSalariale(parsed.salaries, parsed.remunerations, {
|
||||
replaceForecastYears: [2025, 2026, 2027],
|
||||
});
|
||||
|
||||
const byYear = parsed.remunerations.reduce<Record<number, number>>((counts, row) => {
|
||||
counts[row.annee] = (counts[row.annee] ?? 0) + 1;
|
||||
return counts;
|
||||
}, {});
|
||||
console.log(JSON.stringify({ salaries: result.salaries, remunerationsByYear: byYear }));
|
||||
Reference in New Issue
Block a user