From ea19c5771eba344b52c633a8061de404171991c0 Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 6 Jul 2026 21:15:44 +0000 Subject: [PATCH] =?UTF-8?q?fix(hit-parade):=20exclut=20les=20lignes=20de?= =?UTF-8?q?=20quantit=C3=A9=20sans=20montant=20(corrections)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cas réel : codein 487673 site 579 affichait 38 vendus au lieu de 24, avec un CA pourtant exact (215,76 €) — mvtart contient des lignes genremvt=3 portant une quantité mais aucun montant TTC (corrections / régularisations), que les endpoints officiels de l'API excluent. Ajout du filtre mntmvtttc IS NOT NULL AND <> 0 dans l'agrégation : une vente réelle a toujours un montant TTC non nul. Validé sur PostgreSQL local en reproduisant le cas : sans filtre 38/215,76 € (= symptôme), avec filtre 24/215,76 € (= réalité). Le CA et les requêtes Analytics ne changent pas (ces lignes valent 0 €). --- src/lib/pg-ff-client.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/lib/pg-ff-client.ts b/src/lib/pg-ff-client.ts index 080767d..530530d 100644 --- a/src/lib/pg-ff-client.ts +++ b/src/lib/pg-ff-client.ts @@ -769,6 +769,11 @@ export interface HitParadeRow { * joints APRÈS l'agrégation, par codein : aucune jointure ne peut dupliquer les * mouvements et fausser les sommes, et le LATERAL fournisseur ne s'exécute que * par article vendu (et non par ligne de mouvement). + * + * Filtre mntmvtttc <> 0 : mvtart contient des lignes genremvt=3 de quantité + * sans montant (corrections/régularisations, ex: codein 487673 site 579 — + * 38 affiché au lieu de 24 réels, CA exact). Une vente réelle a toujours un + * montant TTC non nul ; les endpoints officiels de l'API les excluent aussi. */ export async function pgGetHitParade(dateDebut: string, dateFin: string): Promise { const result = await pgNoParallel(sql` @@ -784,6 +789,8 @@ export async function pgGetHitParade(dateDebut: string, dateFin: string): Promis WHERE m.datmvt BETWEEN ${dateDebut}::date AND ${dateFin}::date AND m.site IN ('292', '579') AND m.genremvt = 3 + AND m.mntmvtttc IS NOT NULL + AND m.mntmvtttc <> 0 AND a.codein IS NOT NULL GROUP BY TRIM(a.codein::text), m.site ),