mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-21 14:08:08 +02:00
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:
1 file changed
+4
-7
@@ -770,10 +770,9 @@ export interface HitParadeRow {
|
|||||||
* mouvements et fausser les sommes, et le LATERAL fournisseur ne s'exécute que
|
* mouvements et fausser les sommes, et le LATERAL fournisseur ne s'exécute que
|
||||||
* par article vendu (et non par ligne de mouvement).
|
* par article vendu (et non par ligne de mouvement).
|
||||||
*
|
*
|
||||||
* Filtre mntmvtttc <> 0 : mvtart contient des lignes genremvt=3 de quantité
|
* Cas vérifié (codein 487673, site 579, jan→juil 2026) : 31 ventes brutes,
|
||||||
* sans montant (corrections/régularisations, ex: codein 487673 site 579 —
|
* 7 retours clients → 24 net. L'ancien SUM(ABS(qtemvt)) affichait 38 (retours
|
||||||
* 38 affiché au lieu de 24 réels, CA exact). Une vente réelle a toujours un
|
* additionnés) ; SUM(-qtemvt) donne 24, identique à l'API mensuel officielle.
|
||||||
* montant TTC non nul ; les endpoints officiels de l'API les excluent aussi.
|
|
||||||
*/
|
*/
|
||||||
export async function pgGetHitParade(dateDebut: string, dateFin: string): Promise<HitParadeRow[]> {
|
export async function pgGetHitParade(dateDebut: string, dateFin: string): Promise<HitParadeRow[]> {
|
||||||
const result = await pgNoParallel(sql`
|
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
|
WHERE m.datmvt BETWEEN ${dateDebut}::date AND ${dateFin}::date
|
||||||
AND m.site IN ('292', '579')
|
AND m.site IN ('292', '579')
|
||||||
AND m.genremvt = 3
|
AND m.genremvt = 3
|
||||||
AND m.mntmvtttc IS NOT NULL
|
|
||||||
AND m.mntmvtttc <> 0
|
|
||||||
AND a.codein IS NOT NULL
|
AND a.codein IS NOT NULL
|
||||||
GROUP BY TRIM(a.codein::text), m.site
|
GROUP BY TRIM(a.codein::text), m.site
|
||||||
),
|
),
|
||||||
@@ -979,7 +976,7 @@ export async function pgGetStockNegatif(site?: string): Promise<PgStockNegatifRo
|
|||||||
WHERE cs.qte < 0
|
WHERE cs.qte < 0
|
||||||
AND cs.site IN ('292', '579')
|
AND cs.site IN ('292', '579')
|
||||||
${siteFilter}
|
${siteFilter}
|
||||||
ORDER BY cs.stockdispo ASC
|
ORDER BY cs.qte ASC
|
||||||
`);
|
`);
|
||||||
return result.rows as PgStockNegatifRow[];
|
return result.rows as PgStockNegatifRow[];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user