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:
20
scripts/diagnoseMasseSalarialeWorkbook.ts
Normal file
20
scripts/diagnoseMasseSalarialeWorkbook.ts
Normal file
@@ -0,0 +1,20 @@
|
||||
import XLSX from "xlsx";
|
||||
|
||||
const workbook = XLSX.readFile("/home/ubuntu/upload/TableaurecapMassesalarialeSANTINOVA-28.08.26.xlsx", { 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<unknown>>(sheet, { header: 1, raw: true, defval: null });
|
||||
const candidates = rows.slice(5).filter((row) => row[1] !== null && row[1] !== undefined && row[1] !== "");
|
||||
const typeCount = (index: number) => candidates.reduce<Record<string, number>>((counts, row) => {
|
||||
const kind = row[index] === null ? "null" : row[index] instanceof Date ? "date" : typeof row[index];
|
||||
counts[kind] = (counts[kind] ?? 0) + 1;
|
||||
return counts;
|
||||
}, {});
|
||||
console.log(JSON.stringify({
|
||||
candidates: candidates.length,
|
||||
matriculeTypes: typeCount(1),
|
||||
nomTypes: typeCount(2),
|
||||
prenomTypes: typeCount(3),
|
||||
posteTypes: typeCount(4),
|
||||
dateEmbaucheTypes: typeCount(5),
|
||||
}));
|
||||
Reference in New Issue
Block a user