Checkpoint: - Ajout table opex_bases_repartition (11e table) avec 58 bases de répartition 2026 seedées depuis le JSON source

- Ajout procédure tRPC opex.getBasesRepartition et opex.setBaseRepartition
- DsiOpex utilise maintenant les bases de répartition depuis la BDD (priorité BDD > JSON fallback pour 2025)
- Total en bas à droite de la vue établissements affiche totalGlobal (somme postes BDD = 1 257 678 €) au lieu de la somme des arrondis par établissement (1 259 641 €)
- 0 erreur TypeScript
This commit is contained in:
Manus
2026-06-11 06:24:31 +00:00
parent 7d4ac0721d
commit 14a660892a
9 changed files with 1066 additions and 9 deletions

View File

@@ -10,6 +10,7 @@ import {
InsertUser,
inventaireMeta,
inventairePostes,
opexBasesRepartition,
opexMontantsEtab,
opexPostes,
opexValidated,
@@ -326,3 +327,37 @@ export async function insertCapexLignes(rows: InsertCapexLigne[]) {
await db.insert(capexLignes).values(rows.slice(i, i + 100));
}
}
// ── OPEX Bases de répartition ────────────────────────────────────────────────
export async function getOpexBasesRepartition(annee: number) {
const db = await getDb();
if (!db) throw new Error("Database not available");
return db
.select()
.from(opexBasesRepartition)
.where(eq(opexBasesRepartition.annee, annee));
}
export async function upsertOpexBaseRepartition(input: {
annee: number;
etablissementCode: string;
etablissementNom?: string | null;
baseRepartition: number;
}) {
const db = await getDb();
if (!db) throw new Error("Database not available");
await db
.insert(opexBasesRepartition)
.values({
annee: input.annee,
etablissementCode: input.etablissementCode,
etablissementNom: input.etablissementNom ?? null,
baseRepartition: String(input.baseRepartition),
})
.onDuplicateKeyUpdate({
set: {
baseRepartition: String(input.baseRepartition),
etablissementNom: input.etablissementNom ?? null,
},
});
}