Checkpoint: Audit de robustesse et maintenabilité : calcul dynamique des tendances OPEX par véritable année N-1, filtrage/validation centralisés des codes établissement, transactions d'import et d'écriture, contraintes uniques CAPEX/OPEX avec déduplication, suppression effective de postes OPEX, nettoyage des gabarits et scripts morts, chargement différé XLSX, documentation métier et 22 tests passants.
This commit is contained in:
50
client/src/lib/opexTrends.test.ts
Normal file
50
client/src/lib/opexTrends.test.ts
Normal file
@@ -0,0 +1,50 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import { calculateCategoryTrends } from "./opexTrends";
|
||||
|
||||
describe("calculateCategoryTrends", () => {
|
||||
it("compare les montants de l'exercice affiché à ceux de sa vraie année N-1", () => {
|
||||
const trends = calculateCategoryTrends(
|
||||
[
|
||||
{ categorie: "App global", montant: 504_980 },
|
||||
{ categorie: "App HEP", montant: 98_000 },
|
||||
],
|
||||
[
|
||||
{ categorie: "App global", montant: 505_730 },
|
||||
{ categorie: "App HEP", montant: 98_000 },
|
||||
],
|
||||
);
|
||||
|
||||
// Régression : 2027 ne doit jamais réutiliser le +26 % (comparaison 2026/2025).
|
||||
expect(trends["App global"]).toEqual({
|
||||
montantN1: 505_730,
|
||||
variationPct: -0.1,
|
||||
tendance: "stable",
|
||||
});
|
||||
expect(trends["App HEP"]).toEqual({
|
||||
montantN1: 98_000,
|
||||
variationPct: 0,
|
||||
tendance: "stable",
|
||||
});
|
||||
});
|
||||
|
||||
it("identifie une nouvelle catégorie et une variation significative", () => {
|
||||
const trends = calculateCategoryTrends(
|
||||
[
|
||||
{ categorie: "App global", montant: 1_050 },
|
||||
{ categorie: "Sécurité", montant: 20 },
|
||||
],
|
||||
[{ categorie: "App global", montant: 1_000 }],
|
||||
);
|
||||
|
||||
expect(trends["App global"]).toEqual({
|
||||
montantN1: 1_000,
|
||||
variationPct: 5,
|
||||
tendance: "hausse",
|
||||
});
|
||||
expect(trends["Sécurité"]).toEqual({
|
||||
montantN1: null,
|
||||
variationPct: null,
|
||||
tendance: "new",
|
||||
});
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user