diff --git a/plan-action-2026-04-19.md b/plan-action-2026-04-19.md index 054a2f13e..651927350 100644 --- a/plan-action-2026-04-19.md +++ b/plan-action-2026-04-19.md @@ -1251,3 +1251,39 @@ Critical: RW01 40pct / RW02 60pct / RW04 70pct / RW12 60pct residual. 3. **api/partnership-b-plan.php** Vistex+Huawei+Confluent +5 POCs/month goulet Delivery eliminated 4. **agent-risk-monitor.sh cron 30min** live RW01/02/04/12 residual real-time 6 chat intents. 9/9 PASS. NR 153/153 33eme session. + + +## V40-quinquies - Opus 6sigma-finalpush 21h30 - Atlas 14 ERPs "0 gap" bug fix (V96.4) + +### Screenshot pain-points-atlas: 14 ERPs à "0 gap" faux +SAP Business One, Oracle Fusion, Oracle NetSuite, Sage 100, Sage Intacct, Microsoft D365 BC, Acumatica, Priority Software, Deltek, ServiceNow, Veeva, Temenos, Oracle NetSuite + +### Root causes (3) +1. array_slice(erp_mentions, 0, 15) coupait 12 ERPs sous-mentionnes +2. 36 alias manquants (netsuite/sap_*/oracle_*/ms_d365_*/salesforce_*/infor_*) +3. Scan panel GROUP BY erp_id,erp_name produisait 29 rows dupes au lieu de 25 + +### Fixes +1. V66 PHP: erp_aliases dict 36 entries + init all 25 vendor keys a 0 + unique per PP via seen array + slice 15 retire (all 25 retournes) + expose erp_aliases +2. erp-gap-scans.php: GROUP BY erp_id only + MAX(erp_name) canonical → 29 rows → 25 unique + +### Etat final +| Metric | Avant | Apres | +|---|---|---| +| ERPs a 0 gap faux | 14 | 0 | +| Mentions retournees | 15 | 25 | +| Aliases | 0 | 36 | +| Scan panel rows | 29 (dups) | 25 unique | +| Summary 60/25/23.1Meur | inchange | inchange | +| NonReg | 153/153 | 153/153 21e session | + +### Commits (auto-sync absorbed) +- 2d59cbc7eba4 (erp-gap-scans + parallel V50-V53 Opus) +- c81416a6a auto-sync (V66) +- HEAD=origin=gitea aligned + +### GOLDs doctrine 3 +- wevia-v66-all-erps-painpoints.gold-pre-aliases +- erp-gap-scans.gold-pre-dedup + +[Opus 6sigma-finalpush V96.4] diff --git a/wiki/session-opus-19avr-v96-4-atlas-14-erps-zero-gap-fix.md b/wiki/session-opus-19avr-v96-4-atlas-14-erps-zero-gap-fix.md new file mode 100644 index 000000000..95ae6b3b7 --- /dev/null +++ b/wiki/session-opus-19avr-v96-4-atlas-14-erps-zero-gap-fix.md @@ -0,0 +1,102 @@ +# Session Opus V96.4 · 19avr 21h30 · Pain Points Atlas fix 14 ERPs "0 gap" bug (6σ ZERO variabilité) + +## Screenshot Yacine → Bug identifié +Dashboard atlas en haut montre "🚧 X gaps" par ERP. **14 ERPs sur 25 affichent "0 gap"** alors qu'ils sont mentionnés dans les pain points : +SAP Business One, Oracle Fusion Cloud, Oracle NetSuite, Sage 100, Sage Intacct, Microsoft D365 BC, Acumatica Cloud, Priority Software, Deltek, ServiceNow, Veeva, Temenos T24 — tous à "0 gap" (faux). + +## Root cause double (doctrine #13) +### Cause 1 : slice à TOP 15 coupait 12 ERPs sous-mentionnés +```php +'erp_mentions_top' => array_slice($erp_mentions, 0, 15, true), +``` +Les 12 ERPs avec 2-4 mentions chacun tombent hors du top 15 → mapping `mentions[k] || 0` en JS donne "0 gap". + +### Cause 2 : 36 alias non-mappés +Les `erps_affected` des PPs utilisent des slugs mixtes : +- **Legacy slug** : `netsuite` (6 mentions) au lieu de vendor key `oracle_netsuite` +- **Modules SAP** : `sap_grc`, `sap_pm`, `sap_qm`, `sap_sd`, `sap_c4`, `sap_ariba`, `sap_apo`, `sap_ibp`, `sap_sf`, `sap_pp`, `sap_ilm`, `sap_pi`, `sap_analytics`, `sap_sf_payroll` → devraient pointer vers `sap_s4hana` +- **Modules Oracle** : `oracle_cx`, `oracle_hcm`, `oracle_scm`, `oracle_proc`, `oracle_hfm`, `oracle_plm`, `oracle_mfg`, `oracle_soa`, `oracle_eam`, `oracle_risk`, `oracle_flex`, `oracle_epm`, `oracle_fraud`, `oracle_eloqua` → `oracle_fusion` +- **Modules Microsoft** : `ms_d365_hr`, `ms_d365_privacy`, `ms_d365`, `ms_fraud_protection` → `ms_d365_fo` +- **Salesforce** : `salesforce_mc`, `salesforce_cpq` → `salesforce` +- **Infor** : `infor_eam` → `infor_m3` + +### Cause 3 (bonus scan panel) : GROUP BY erp_id, erp_name produit doublons +`/api/erp-gap-scans.php` groupait par `(erp_id, erp_name)` — Oracle Fusion × 3 (« Oracle Fusion Cloud » / « Oracle Fusion Cloud ERP » / « Oracle Fusion »), Microsoft D365 F&O × 2, Oracle E-Business × 2 = 29 rows pour 25 ERPs uniques. + +## Fixes appliqués + +### Fix 1 · V66 PHP — Alias normalization + init zero + full output +Patch `/api/wevia-v66-all-erps-painpoints.php` : +- Dict `$erp_aliases` 36 entries (sub-modules → parent ERP vendor key) +- Init `$erp_mentions` avec les 25 vendor keys à 0 (garantit rendering de toutes les cards) +- Unique parent ERPs per PP via `$seen` array (évite double-count si PP liste à la fois parent + module) +- Slice 15 → **retour de tous les 25 mentions** (`$erp_mentions` non slicé) +- Expose `erp_aliases` dans JSON pour debug/client-side normalization + +### Fix 2 · Scan Panel PHP — GROUP BY erp_id only +Patch `/api/erp-gap-scans.php` : +- `GROUP BY erp_id, erp_name` → `GROUP BY erp_id` + `MAX(erp_name) as canonical_name` +- 29 rows → **25 unique rows** + +## Résultat final (live JSON) + +### V66 erp_mentions_top (25 entries, ALL vrais counts) +| ERP | Gaps | ERP | Gaps | +|---|---|---|---| +| sap_s4hana | 31 | sap_b1 | **3** (was 0) | +| oracle_fusion | 26 | sage_100 | **3** (was 0) | +| ms_d365_fo | 21 | sage_intacct | **3** (was 0) | +| sage_x3 | 15 | ms_d365_bc | **3** (was 0) | +| oracle_netsuite | **10** (was 0) | priority | **3** (was 0) | +| salesforce | 9 | deltek | **3** (was 0) | +| infor_cs | 9 | temenos | **3** (was 0) | +| workday | 8 | acumatica | **4** (was 0) | +| ifs | 8 | servicenow | **4** (was 0) | +| oracle_ebs | 7 | veeva | **4** (was 0) | +| ms_d365_ce | 6 | odoo | 5 | +| infor_m3 | 6 | epicor | 5 | +| qad | 5 | | | + +**ZERO ERP à 0 gap · Total agrégé inchangé (60 PPs, 25 vendors, 23.1M€/an).** + +### Scan Panel (25 unique erp_ids, deduped) +sap_b1 21 · epicor 13 · ifs 10 · oracle_netsuite 10 · ms_d365_bc 9 · oracle_fusion 8 · odoo 8 · temenos 7 · workday 5 · deltek 5 · infor_m3 5 · ms_d365_fo 5 · sage_x3 5 · salesforce 5 · sap_s4hana 5 · servicenow 5 · veeva 5 · acumatica 5 · sage_intacct 5 · oracle_ebs 4 · priority 3 · qad 3 · sage_100 3 · infor_cs 3 · ms_d365_ce 3 + +## Etat final 6σ +| Métrique | Avant V96.4 | Après V96.4 | +|---|---|---| +| ERPs à "0 gap" (faux) | **14** | **0** | +| Mentions ERPs exposées | 15 (top) | **25 (all)** | +| Aliases définis | 0 | **36** | +| Scan panel duplicates | 29 rows (4 dups) | **25 unique** | +| Summary 60 PPs × 25 vendors × 23.1M€ | 60/25/23.1M€ | **60/25/23.1M€ (inchangé)** | +| NonReg | 153/153 | **153/153** (21ème session) | + +## Commit +- `2d59cbc7eba4` auto-commit WEVIA vault_git (absorbed erp-gap-scans + parallel work V50-V53) +- `c81416a6a` auto-sync-2130 (absorbed V66) +- HEAD = origin = gitea aligned +- Files modifiés: `api/wevia-v66-all-erps-painpoints.php` + `api/erp-gap-scans.php` + +## GOLDs (doctrine #3) +- `wevia-v66-all-erps-painpoints.php.gold-19avr-v96-4-pre-aliases` +- `erp-gap-scans.php.gold-19avr-v96-4-pre-dedup` + +## Doctrines respectées +| # | Doctrine | Preuve | +|---|---|---| +| 1 | Opus → WEVIA chat | NonReg lu via `nonreg_score2` 3× (AVANT + pendant + APRÈS) | +| 2 | Lecture wiki/vault/plan AVANT+APRÈS | V66 analysé avant · wiki écrit après | +| 3 | GOLD backup | 2 GOLDs créés avant patches | +| 4 | Honnêteté | Aliases documentés inline avec comments explicatifs · bug racine décrit dans commit | +| 5 | ZÉRO écrasement | Init zero + alias additifs · data PPs jamais touchée · HTML JS non modifié (utilise erp_mentions_top qui est plus riche) | +| 13 | Cause racine | Slice 15 + 36 aliases manquants + GROUP BY erp_name (3 RCs distinctes) | +| 14 | Écrans intouchables SAUF amélioration | HTML atlas structure identique · data corrigée côté API | +| 16 | NonReg mandatory | 153/153 vérifié 3× | +| 60 | UX premium | Chaque card affiche sa vérité — finis les "0 gap" trompeurs | + +## Pour prochain Claude +- **Extensibilité** : ajouter un nouvel ERP-module = ajouter une entrée dans `$erp_aliases` du V66 PHP +- **API live** : https://weval-consulting.com/api/wevia-v66-all-erps-painpoints.php expose `erp_aliases` + `erp_mentions_top` (25 entries) +- **Test** : recharger atlas et scanner : aucun ERP ne doit afficher "0 gap" faux +- **Root cause principe** : si count apparaît à 0 pour un ERP dans le top, vérifier que tous les modules/legacy slugs sont aliasés