mirror of
https://github.com/R0m1k3/CollectFlow.git
synced 2026-10-11 17:26:32 +02:00
fix(hit-parade): ventes nettes par magasin — corrige les chiffres faussés (579)
La requête Hit Parade divergeait du calcul canonique de la Grille : - SUM(ABS(qtemvt)) additionnait les retours clients comme des ventes au lieu de les déduire → quantités et CA gonflés sur le magasin ayant des retours/avoirs sur la période (visible sur 579). - ABS(SUM(mntmvtttc)) inversait le signe d'un CA net négatif. - GROUP BY no_id + jointure artfou1 preference=1 non dédupliquée pouvait produire plusieurs lignes par (codein, site), écrasées par le pivot. Corrections : - Hit Parade : ventes nettes SUM(-qtemvt) / SUM(-mntmvtttc), agrégation par (codein, site), fournisseur préféré via LATERAL ... LIMIT 1, stock agrégé par codein ; pivot en accumulation (+=) par sécurité. - Analytics (même classe de bug) : pgGetCaByFournisseur et pgGetCaByNomenclature passent en CA net ; jointure fournisseur dédupliquée (LATERAL LIMIT 1) pour éviter le double comptage. - Gestion de stock : pgGetStockNegatif et pgGetSansVente6Mois dédupliquent le fournisseur préféré (LATERAL LIMIT 1) pour éviter les lignes en double. Audit complet du mapping par magasin (292/579) côté client : aucun champ inversé (hit-parade, analytics, dashboard, grid, heatmap). Build OK.
This commit is contained in:
2 files changed
+66
-26
No files matched your search
@@ -42,14 +42,17 @@ function pivotHitParade(rows: HitParadeRow[]): HitParadePivotRow[] {
|
||||
});
|
||||
}
|
||||
const entry = map.get(row.codein)!;
|
||||
if (row.site === "292") {
|
||||
entry.qte292 = row.qte_vendue;
|
||||
entry.ca292 = row.ca_ttc;
|
||||
entry.marge292 = row.marge;
|
||||
} else if (row.site === "579") {
|
||||
entry.qte579 = row.qte_vendue;
|
||||
entry.ca579 = row.ca_ttc;
|
||||
entry.marge579 = row.marge;
|
||||
// Accumulation (+=) et non affectation : si la requête renvoyait plusieurs
|
||||
// lignes pour un même (codein, site), aucune valeur ne serait écrasée.
|
||||
const site = String(row.site).trim();
|
||||
if (site === "292") {
|
||||
entry.qte292 += row.qte_vendue;
|
||||
entry.ca292 += row.ca_ttc;
|
||||
entry.marge292 += row.marge;
|
||||
} else if (site === "579") {
|
||||
entry.qte579 += row.qte_vendue;
|
||||
entry.ca579 += row.ca_ttc;
|
||||
entry.marge579 += row.marge;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user