fix(qlik): dérive les mois N-1 depuis Quantité COMP (vrais 12 mois)

Le cube [Article Code, Mois] ne renvoie que les mois de l'année N (les
mesures 'N' sont nulles ailleurs → lignes supprimées). Le code cherchait
des lignes d'année N-1 qui n'existent pas, donc 'Quantité COMP' n'était
jamais exploitée → seulement ~7 mois affichés.

'Quantité COMP' étant le comparable N-1, à la ligne Mois=YYYYMM elle donne
la quantité du MÊME mois l'année précédente. On dérive donc deux points
par ligne : YYYY-MM (Quantité N) et (YYYY-1)-MM (Quantité COMP) → 12 mois
sans ligne supplémentaire ni requête en plus.

UI : l'en-tête du modal affiche le nombre RÉEL de mois disponibles au lieu
de '12 derniers mois' en dur.
This commit is contained in:
Claude committed 2026-07-25 21:31:15 +00:00
1 parent 1633d5e407
commit 99097b6eca
2 files changed
+14 -4

No files matched your search

@@ -379,7 +379,7 @@ function NetworkMonthlyModal({ row, onClose }: { row: ProductRow; onClose: () =>
{row.libelle1}
</DialogTitle>
<p className="text-[12px] mt-0.5" style={{ color: "var(--text-muted)" }}>
Ventes réseau · 12 derniers mois
Ventes réseau · {labels.length > 0 ? `${labels.length} derniers mois` : "12 derniers mois"}
{row.nbMagasinsReseau != null && <> · <span className="font-semibold" style={{ color: "var(--text-secondary)" }}>{row.nbMagasinsReseau} magasins</span></>}
{pct != null && (
<> · <span className="font-bold" style={{ color }}>
+13 -3
View File
@@ -443,12 +443,22 @@ export async function fetchNetworkMetricsPlaywright(
const got = await timed("cube", "batch", () => fetchMonthCube((code, mois, ca, qte, nbMag, caMag, marge, qteComp) => {
if (!code || code === "-") return;
out.push([code, ca, qte, nbMag, caMag, marge]);
// 12 mois glissants : mois de l'année N → Quantité N, mois N-1 → Quantité COMP.
// 12 mois glissants. Le cube ne renvoie que les mois de l'année N
// (les mesures "N" sont nulles ailleurs → lignes supprimées).
// "Quantité COMP" = comparable N-1 : à la ligne Mois=YYYYMM elle
// donne la quantité du MÊME mois l'année précédente. On dérive donc
// deux points par ligne : YYYY-MM (N) et (YYYY-1)-MM (N-1).
const mm = normMois(mois);
const y = parseInt(mm.slice(0, 4), 10);
const qtyMonth = y === yearN ? qte : qteComp;
(monthlyByCode[code] ??= {});
monthlyByCode[code][mm] = (monthlyByCode[code][mm] ?? 0) + qtyMonth;
if (y === yearN) {
monthlyByCode[code][mm] = (monthlyByCode[code][mm] ?? 0) + qte;
const mmPrev = String(y - 1) + mm.slice(4); // "2026-03" → "2025-03"
monthlyByCode[code][mmPrev] = (monthlyByCode[code][mmPrev] ?? 0) + qteComp;
} else {
// Ligne d'une autre année (cas non observé) : on prend la mesure N.
monthlyByCode[code][mm] = (monthlyByCode[code][mm] ?? 0) + qte;
}
}, timings, () => { code15Retries++; }), timings);
aggBatches++;
aggCode15Retries += code15Retries;