From 5783ec30b95194e703a0d246db8f1d233d74ab55 Mon Sep 17 00:00:00 2001 From: louispaulb Date: Mon, 6 Jul 2026 20:23:21 -0400 Subject: [PATCH] =?UTF-8?q?sync-legacy:=20scoreboard=20abos=20=3D=20F=20br?= =?UTF-8?q?ut=20status=3D1=20(=C3=A9cart=20positif=20=3D=20fant=C3=B4mes?= =?UTF-8?q?=20retir=C3=A9s=20d'ERPNext)=20+=20note=20clarifi=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 --- services/targo-hub/lib/legacy-sync.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/services/targo-hub/lib/legacy-sync.js b/services/targo-hub/lib/legacy-sync.js index c875f5a..8ca28d8 100644 --- a/services/targo-hub/lib/legacy-sync.js +++ b/services/targo-hub/lib/legacy-sync.js @@ -540,8 +540,8 @@ async function scoreboard () { const [fAcct, fSvcActive, fDelivery, fTicket, fInvoice, fPayment, fDevice, eCust, eSubActif, eLoc, eIssue, eInv, ePay, eDevice, ghost] = await Promise.all([ myc('SELECT COUNT(*) c FROM account'), - // F actif = service.status=1 SUR compte non-résilié (F ne cascade pas la résiliation → comptage brut gonflé) : comparé pomme-à-pomme au 'Actif' ERPNext maintenant nettoyé - myc('SELECT COUNT(*) c FROM service s JOIN delivery d ON d.id=s.delivery_id JOIN account a ON a.id=d.account_id WHERE s.status=1 AND a.status NOT IN (3,4,5)'), + // F actif = service.status=1 BRUT (ce que F croit actif, fantômes F-non-cascadés inclus) ; l'écart positif = fantômes avérés qu'ERPNext a retirés (raffinage 2026-07-06) + myc('SELECT COUNT(*) c FROM service WHERE status=1'), myc('SELECT COUNT(*) c FROM delivery'), myc('SELECT COUNT(*) c FROM ticket'), myc('SELECT COUNT(*) c FROM invoice'), @@ -564,7 +564,7 @@ async function scoreboard () { entities: [ row('customers', 'Clients', fAcct, eCust, 'F account ↔ Customer'), row('locations', 'Lieux de service', fDelivery, eLoc, 'F delivery ↔ Service Location'), - row('subscriptions', 'Abonnements actifs', fSvcActive, eSubActif, ghost ? `${ghost} actifs sur compte résilié — à revoir (fantômes payants >24 mois auto-annulés)` : 'F actif hors compte résilié ↔ Actif'), + row('subscriptions', 'Abonnements actifs', fSvcActive, eSubActif, `écart = fantômes avérés retirés d'ERPNext (payants, résiliés, F silencieux >24 mois) ; ${ghost} actifs sur compte résilié restants à revoir`), row('devices', 'Appareils', fDevice, eDevice, 'F device ↔ Service Equipment (liens orphelins possibles)'), row('tickets', 'Tickets', fTicket, eIssue, 'F ticket ↔ Issue (import à réparer)'), row('invoices', 'Factures', fInvoice, eInv, 'F invoice ↔ Sales Invoice'),