fix(hit-parade,stock): retire le filtre montant (théorie invalidée) + tri stock négatif

Analyse de cohérence de stock sur le cas 487673 site 579 : 24 réceptions,
31 ventes brutes, 7 retours clients → 24 ventes nettes, stock final 3.
Le « 38 » affiché = 31 + 7 : signature de l'ancienne formule SUM(ABS)
qui additionnait les retours. La formule nette SUM(-qtemvt) déjà en place
donne 24 — le filtre mntmvtttc <> 0 (hypothèse de lignes fantômes 0 €)
était inutile : aucune ligne de ce type dans les données réelles. Retiré
pour rester strictement aligné sur le calcul de la Grille.

Gestion de stock : ORDER BY cs.qte (colonne affichée) au lieu de
cs.stockdispo (colonne différente) dans pgGetStockNegatif.
This commit is contained in:
Claude committed 2026-07-07 06:46:45 +00:00
1 parent ea19c5771e
commit eba4cb0774
1 file changed
+4 -7
+4 -7
View File
@@ -770,10 +770,9 @@ export interface HitParadeRow {
* 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.
* Cas vérifié (codein 487673, site 579, jan→juil 2026) : 31 ventes brutes,
* 7 retours clients → 24 net. L'ancien SUM(ABS(qtemvt)) affichait 38 (retours
* additionnés) ; SUM(-qtemvt) donne 24, identique à l'API mensuel officielle.
*/
export async function pgGetHitParade(dateDebut: string, dateFin: string): Promise<HitParadeRow[]> {
const result = await pgNoParallel(sql`
@@ -789,8 +788,6 @@ 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
),
@@ -979,7 +976,7 @@ export async function pgGetStockNegatif(site?: string): Promise<PgStockNegatifRo
WHERE cs.qte < 0
AND cs.site IN ('292', '579')
${siteFilter}
ORDER BY cs.stockdispo ASC
ORDER BY cs.qte ASC
`);
return result.rows as PgStockNegatifRow[];
}