The source MSSQL FOUCAD table can return several rows for the same
FOUCODE, but the PostgreSQL foucad table uses foucode as PRIMARY KEY.
The bulk INSERT in fullRefresh has no conflict handling, so duplicate
FOUCODE values triggered:
duplicate key value violates unique constraint "foucad_pkey"
Deduplicate by foucode before insert, keeping the most recently
modified row (suividatemodif). Routes join foucad 1:1 on foucode, so
one config row per supplier code is the intended shape.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011ad1qwhDEHNniSUDveTQHL
Add codefou query param (ILIKE partial match) to /api/performance/hitparade.
Also return CODE_FOURNISSEUR and FOURNISSEUR (nom) columns in each result row.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- CA était négatif (MntMvtTTC brut) → filtre mntmvtttc < 0 + ABS comme le endpoint /ca
- GenreMvt=3 uniquement → IN(3,4,9)
- Niveau 1/2 retournait vide (articles au niveau 3) → remontée via chemin_pere
chemin_pere = "no_id_niv1.no_id_niv2" → SPLIT_PART + JOIN NOMENCLATURE parent
- Ajout taux_marge dans la réponse
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- List endpoint now returns total count and pages for pagination
- Added statut filter (en_cours/passees/futures) to list endpoint
- Added GET /historique using pub_entetes for complete pub history
(pub_ecoulement only has recent data; pub_entetes has all 95 pubs)
- /historique returns nb_sites, ca_total, qte_totale via LEFT JOIN
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
FOUCAD ne couvre que 53/153 fournisseurs actifs (commande auto uniquement).
FOUPORT2.SEUIL est la source officielle de l'ERP et couvre 108 fournisseurs.
4 fournisseurs dans COMMANDE_AUTO_QTEPROPO n'avaient pas de franco visible
(IMDIFA, MYCANDYSHOP, PTIT CLOWN, PUCKATOR BV).
- Sync : ajout de FOUPORT et FOUPORT2 dans le pipeline de synchronisation
- API : franco = COALESCE(fouport2.seuil, foucad.franco) dans les deux routes
- Schema PG : création des tables fouport et fouport2
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- Nouvelle route GET /api/commandes-auto : propositions par site et fournisseur
avec comparaison au franco (franco_atteint, ecart_franco)
- Nouvelle route GET /api/commandes-auto/:codefou : détail articles d'un fournisseur
- Sync FOUCAD (config commande auto + franco) vers PostgreSQL
- Ajout table foucad dans init.sql
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- ranking.js: déduplique par (gencod, site) avant batchUpsert pour éviter
"ON CONFLICT DO UPDATE command cannot affect row a second time"
- server.js: bouton "Copier les logs" utilise execCommand fallback quand
navigator.clipboard indisponible (accès HTTP sans HTTPS)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- requestTimeout 300000ms pour éviter timeout sur grosses tables (MvtArt)
- Chaque étape sync est wrappée en try/catch pour ne pas bloquer les suivantes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>