@atlashub/smartstack-cli 4.29.0 → 4.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/.documentation/business-analyse.html +217 -0
  2. package/dist/index.js +17 -4
  3. package/dist/index.js.map +1 -1
  4. package/package.json +1 -1
  5. package/templates/skills/apex/references/code-generation.md +1 -1
  6. package/templates/skills/apex/references/person-extension-pattern.md +23 -2
  7. package/templates/skills/apex/references/post-checks.md +52 -0
  8. package/templates/skills/apex/references/smartstack-api.md +111 -0
  9. package/templates/skills/apex/references/smartstack-frontend.md +25 -2
  10. package/templates/skills/apex/references/smartstack-layers.md +1 -0
  11. package/templates/skills/apex/steps/step-03-execute.md +110 -7
  12. package/templates/skills/application/templates-frontend.md +1 -1
  13. package/templates/skills/ba-generate-html/SKILL.md +1 -1
  14. package/templates/skills/ba-generate-html/html/ba-interactive.html +234 -262
  15. package/templates/skills/ba-generate-html/html/src/partials/cadrage-context.html +9 -9
  16. package/templates/skills/ba-generate-html/html/src/partials/cadrage-scope.html +17 -39
  17. package/templates/skills/ba-generate-html/html/src/partials/cadrage-stakeholders.html +7 -7
  18. package/templates/skills/ba-generate-html/html/src/partials/cadrage-success.html +13 -13
  19. package/templates/skills/ba-generate-html/html/src/partials/consol-datamodel.html +4 -4
  20. package/templates/skills/ba-generate-html/html/src/partials/consol-flows.html +5 -5
  21. package/templates/skills/ba-generate-html/html/src/partials/consol-interactions.html +2 -2
  22. package/templates/skills/ba-generate-html/html/src/partials/consol-permissions.html +4 -4
  23. package/templates/skills/ba-generate-html/html/src/partials/decomp-dependencies.html +11 -11
  24. package/templates/skills/ba-generate-html/html/src/partials/decomp-modules.html +8 -16
  25. package/templates/skills/ba-generate-html/html/src/partials/handoff-summary.html +5 -5
  26. package/templates/skills/ba-generate-html/html/src/scripts/01-data-init.js +29 -21
  27. package/templates/skills/ba-generate-html/html/src/scripts/02-navigation.js +10 -10
  28. package/templates/skills/ba-generate-html/html/src/scripts/03-render-cadrage.js +5 -4
  29. package/templates/skills/ba-generate-html/html/src/scripts/04-render-modules.js +4 -6
  30. package/templates/skills/ba-generate-html/html/src/scripts/05-render-specs.js +57 -57
  31. package/templates/skills/ba-generate-html/html/src/scripts/06-render-consolidation.js +4 -4
  32. package/templates/skills/ba-generate-html/html/src/scripts/06-render-mockups.js +5 -5
  33. package/templates/skills/ba-generate-html/html/src/scripts/07-render-handoff.js +9 -12
  34. package/templates/skills/ba-generate-html/html/src/scripts/08-editing.js +3 -3
  35. package/templates/skills/ba-generate-html/html/src/scripts/09-export.js +2 -2
  36. package/templates/skills/ba-generate-html/html/src/scripts/10-comments.js +3 -3
  37. package/templates/skills/ba-generate-html/html/src/scripts/11-review-panel.js +8 -8
  38. package/templates/skills/ba-generate-html/html/src/styles/03-navigation.css +1 -1
  39. package/templates/skills/ba-generate-html/html/src/styles/04-cards.css +2 -4
  40. package/templates/skills/ba-generate-html/html/src/template.html +93 -123
  41. package/templates/skills/ba-generate-html/references/data-build.md +4 -9
  42. package/templates/skills/ba-generate-html/references/data-mapping.md +2 -7
  43. package/templates/skills/ba-generate-html/references/output-modes.md +1 -1
  44. package/templates/skills/ba-generate-html/steps/step-02-build-data.md +8 -7
  45. package/templates/skills/ba-generate-html/steps/step-04-verify.md +2 -2
  46. package/templates/skills/ba-review/references/review-data-mapping.md +4 -6
  47. package/templates/skills/ba-review/steps/step-01-apply.md +2 -4
  48. package/templates/skills/business-analyse/patterns/suggestion-catalog.md +4 -4
  49. package/templates/skills/business-analyse/questionnaire.md +1 -1
  50. package/templates/skills/business-analyse/react/schema.md +2 -7
  51. package/templates/skills/business-analyse/schemas/application-schema.json +2 -9
  52. package/templates/skills/business-analyse/schemas/project-schema.json +4 -8
  53. package/templates/skills/business-analyse/schemas/sections/discovery-schema.json +1 -3
  54. package/templates/skills/business-analyse/steps/step-01-cadrage.md +5 -12
  55. package/templates/skills/business-analyse/steps/step-02-structure.md +3 -5
  56. package/templates/skills/dev-start/SKILL.md +242 -0
  57. package/templates/skills/ui-components/SKILL.md +1 -1
  58. package/templates/skills/ui-components/patterns/data-table.md +1 -1
@@ -80,10 +80,8 @@
80
80
  text-transform: uppercase;
81
81
  letter-spacing: 0.05em;
82
82
  }
83
- .priority-vital { background: rgba(239,68,68,0.15); color: #f87171; border: 1px solid rgba(239,68,68,0.3); }
84
- .priority-important { background: rgba(234,179,8,0.15); color: #facc15; border: 1px solid rgba(234,179,8,0.3); }
85
- .priority-optional { background: rgba(34,197,94,0.15); color: #4ade80; border: 1px solid rgba(34,197,94,0.3); }
86
- .priority-excluded { background: rgba(100,116,139,0.15); color: #94a3b8; border: 1px solid rgba(100,116,139,0.3); }
83
+ .priority-inscope { background: rgba(59,130,246,0.15); color: #60a5fa; border: 1px solid rgba(59,130,246,0.3); }
84
+ .priority-outofscope { background: rgba(100,116,139,0.15); color: #94a3b8; border: 1px solid rgba(100,116,139,0.3); }
87
85
 
88
86
  /* ============================================
89
87
  STATUS BADGES
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta charset="UTF-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
6
- <title>{{APPLICATION_NAME}} - Analyse metier</title>
6
+ <title>{{APPLICATION_NAME}} - Analyse métier</title>
7
7
  <style>
8
8
  <!-- CSS_PLACEHOLDER -->
9
9
  </style>
@@ -15,15 +15,15 @@
15
15
  ============================================ -->
16
16
  <header class="header">
17
17
  <div class="header-logo">BA</div>
18
- <span class="header-title">Analyse metier</span>
18
+ <span class="header-title">Analyse métier</span>
19
19
  <div class="header-sep"></div>
20
20
  <span class="header-app-name" id="appName">{{APPLICATION_NAME}}</span>
21
21
  <div class="header-spacer"></div>
22
22
  <div class="header-actions">
23
- <button class="btn btn-sm" onclick="resetToEmbedded()" title="Reinitialiser depuis les donnees d'origine (supprime les modifications locales)">Reset</button>
23
+ <button class="btn btn-sm" onclick="resetToEmbedded()" title="Réinitialiser depuis les données d'origine (supprime les modifications locales)">Reset</button>
24
24
  <button class="btn btn-sm" onclick="saveToLocalStorage()" title="Sauvegarder les modifications dans le navigateur">Sauvegarder</button>
25
- <button class="btn btn-sm btn-review" onclick="saveReviewJSON()" title="Sauvegarder les corrections pour creer une nouvelle version">Sauvegarder corrections</button>
26
- <button class="btn btn-sm btn-primary" onclick="exportJSON()" title="Exporter les donnees au format JSON pour l'extraction">Exporter JSON</button>
25
+ <button class="btn btn-sm btn-review" onclick="saveReviewJSON()" title="Sauvegarder les corrections pour créer une nouvelle version">Sauvegarder corrections</button>
26
+ <button class="btn btn-sm btn-primary" onclick="exportJSON()" title="Exporter les données au format JSON pour l'extraction">Exporter JSON</button>
27
27
  <button class="btn btn-sm review-toggle-btn" id="reviewToggleBtn" onclick="toggleReviewPanel()" title="Ouvrir/fermer le panneau de review">
28
28
  Review
29
29
  <span class="review-badge hidden" id="reviewBadge">0</span>
@@ -33,7 +33,7 @@
33
33
 
34
34
  <div class="body" id="appBody">
35
35
  <!-- ============================================
36
- SIDEBAR - Navigation hierarchique
36
+ SIDEBAR - Navigation hiérarchique
37
37
  ============================================ -->
38
38
  <aside class="sidebar">
39
39
  <!-- Application Name -->
@@ -54,15 +54,15 @@
54
54
  <!-- SECTION: Contexte (merged: problem + current + vision) -->
55
55
  <div class="section" id="cadrage-context">
56
56
  <h2 class="section-title">Contexte du projet</h2>
57
- <p class="section-subtitle">Vue synthetique du besoin : probleme, situation actuelle et objectif vise.</p>
57
+ <p class="section-subtitle">Vue synthétique du besoin : problème, situation actuelle et objectif visé.</p>
58
58
 
59
59
  <div style="display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem;">
60
60
  <div class="card" style="border-left:3px solid #f87171;">
61
- <div class="card-label" style="color:#f87171;">Probleme identifie</div>
62
- <div class="editable" contenteditable="true" data-field="context.problem" data-placeholder="Quel probleme ce projet doit-il resoudre ?"></div>
61
+ <div class="card-label" style="color:#f87171;">Problème identifié</div>
62
+ <div class="editable" contenteditable="true" data-field="context.problem" data-placeholder="Quel problème ce projet doit-il résoudre ?"></div>
63
63
  <div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
64
- <strong>Declencheur :</strong>
65
- <div class="editable" contenteditable="true" data-field="context.trigger" data-placeholder="Evenement declencheur" style="display:inline;"></div>
64
+ <strong>Déclencheur :</strong>
65
+ <div class="editable" contenteditable="true" data-field="context.trigger" data-placeholder="Événement déclencheur" style="display:inline;"></div>
66
66
  </div>
67
67
  </div>
68
68
 
@@ -77,10 +77,10 @@
77
77
 
78
78
  <div class="card" style="border-left:3px solid #4ade80;">
79
79
  <div class="card-label" style="color:#4ade80;">Objectif</div>
80
- <div class="editable" contenteditable="true" data-field="context.desiredSituation" data-placeholder="Que doit permettre le systeme cible ?"></div>
80
+ <div class="editable" contenteditable="true" data-field="context.desiredSituation" data-placeholder="Que doit permettre le système cible ?"></div>
81
81
  <div style="margin-top:0.75rem;font-size:0.8rem;color:var(--text-muted);">
82
- <strong>Criteres :</strong>
83
- <div class="editable" contenteditable="true" data-field="context.acceptanceCriteria" data-placeholder="Criteres de succes" style="display:inline;"></div>
82
+ <strong>Critères :</strong>
83
+ <div class="editable" contenteditable="true" data-field="context.acceptanceCriteria" data-placeholder="Critères de succès" style="display:inline;"></div>
84
84
  </div>
85
85
  </div>
86
86
  </div>
@@ -89,7 +89,7 @@
89
89
  <!-- SECTION: Parties prenantes -->
90
90
  <div class="section" id="cadrage-stakeholders" style="display:none;">
91
91
  <h2 class="section-title">Parties prenantes</h2>
92
- <p class="section-subtitle">Toutes les personnes concernees par ce projet et leurs besoins.</p>
92
+ <p class="section-subtitle">Toutes les personnes concernées par ce projet et leurs besoins.</p>
93
93
 
94
94
  <div class="stakeholder-grid" id="stakeholderGrid">
95
95
  <!-- Populated dynamically -->
@@ -108,12 +108,12 @@
108
108
  <input type="text" class="form-input" id="sh-function" placeholder="Ce qu'il fait dans l'organisation">
109
109
  </div>
110
110
  <div class="form-group">
111
- <label class="form-label">Taches principales (une par ligne)</label>
112
- <textarea class="form-textarea" id="sh-tasks" placeholder="Tache 1&#10;Tache 2&#10;Tache 3"></textarea>
111
+ <label class="form-label">Tâches principales (une par ligne)</label>
112
+ <textarea class="form-textarea" id="sh-tasks" placeholder="Tâche 1&#10;Tâche 2&#10;Tâche 3"></textarea>
113
113
  </div>
114
114
  <div class="form-row">
115
115
  <div class="form-group">
116
- <label class="form-label">Frequence d'utilisation</label>
116
+ <label class="form-label">Fréquence d'utilisation</label>
117
117
  <select class="form-select" id="sh-frequency">
118
118
  <option value="daily">Quotidienne</option>
119
119
  <option value="weekly">Hebdomadaire</option>
@@ -122,9 +122,9 @@
122
122
  </select>
123
123
  </div>
124
124
  <div class="form-group">
125
- <label class="form-label">Niveau d'acces</label>
125
+ <label class="form-label">Niveau d'accès</label>
126
126
  <select class="form-select" id="sh-access">
127
- <option value="admin">Administration complete</option>
127
+ <option value="admin">Administration complète</option>
128
128
  <option value="manager">Supervision et validation</option>
129
129
  <option value="contributor">Saisie et modification</option>
130
130
  <option value="viewer">Consultation seule</option>
@@ -133,7 +133,7 @@
133
133
  </div>
134
134
  <div class="form-group">
135
135
  <label class="form-label">Frustrations actuelles</label>
136
- <textarea class="form-textarea" id="sh-frustrations" placeholder="Quelles sont les 2-3 plus grandes frustrations de ce profil avec la facon de travailler actuelle ?"></textarea>
136
+ <textarea class="form-textarea" id="sh-frustrations" placeholder="Quelles sont les 2-3 plus grandes frustrations de ce profil avec la façon de travailler actuelle ?"></textarea>
137
137
  </div>
138
138
  <div class="form-actions">
139
139
  <button class="btn" onclick="toggleForm('addStakeholderForm')">Annuler</button>
@@ -142,87 +142,65 @@
142
142
  </div>
143
143
  </div>
144
144
 
145
- <!-- SECTION: Perimetre fonctionnel -->
145
+ <!-- SECTION: Périmètre fonctionnel -->
146
146
  <div class="section" id="cadrage-scope" style="display:none;">
147
- <h2 class="section-title">Perimetre fonctionnel</h2>
148
- <p class="section-subtitle">Ce que le systeme doit faire et ne pas faire, par ordre de priorite.</p>
147
+ <h2 class="section-title">Périmètre fonctionnel</h2>
148
+ <p class="section-subtitle">Ce que le système doit faire et ne pas faire.</p>
149
149
 
150
150
  <h3 style="color: var(--text-bright); font-size: 1rem; margin-bottom: 0.75rem;">
151
- <span style="color: #f87171;">&#9632;</span> Fonctionnalites indispensables
151
+ <span style="color: #60a5fa;">&#9632;</span> Dans le périmètre
152
152
  </h3>
153
- <div id="scopeVital" class="uc-list"></div>
154
- <button class="add-btn" onclick="toggleForm('addScopeForm-vital')">+ Ajouter une fonctionnalite indispensable</button>
155
- <div class="inline-form" id="addScopeForm-vital">
156
- <div class="form-group"><label class="form-label">Nom de la fonctionnalite</label><input type="text" class="form-input" id="scope-name-vital" placeholder="Ex: Gestion des commandes"></div>
157
- <div class="form-group"><label class="form-label">Description (optionnel)</label><input type="text" class="form-input" id="scope-desc-vital" placeholder="Courte description"></div>
158
- <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-vital')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('vital')">Ajouter</button></div>
153
+ <div id="scopeInScope" class="uc-list"></div>
154
+ <button class="add-btn" onclick="toggleForm('addScopeForm-inscope')">+ Ajouter une fonctionnalité</button>
155
+ <div class="inline-form" id="addScopeForm-inscope">
156
+ <div class="form-group"><label class="form-label">Nom de la fonctionnalité</label><input type="text" class="form-input" id="scope-name-inscope" placeholder="Ex: Gestion des commandes"></div>
157
+ <div class="form-group"><label class="form-label">Description (optionnel)</label><input type="text" class="form-input" id="scope-desc-inscope" placeholder="Courte description"></div>
158
+ <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-inscope')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('inscope')">Ajouter</button></div>
159
159
  </div>
160
160
 
161
161
  <h3 style="color: var(--text-bright); font-size: 1rem; margin: 1.5rem 0 0.75rem;">
162
- <span style="color: #facc15;">&#9632;</span> Fonctionnalites importantes
162
+ <span style="color: #94a3b8;">&#9632;</span> Hors périmètre
163
163
  </h3>
164
- <div id="scopeImportant" class="uc-list"></div>
165
- <button class="add-btn" onclick="toggleForm('addScopeForm-important')">+ Ajouter une fonctionnalite importante</button>
166
- <div class="inline-form" id="addScopeForm-important">
167
- <div class="form-group"><label class="form-label">Nom de la fonctionnalite</label><input type="text" class="form-input" id="scope-name-important" placeholder="Ex: Export PDF"></div>
168
- <div class="form-group"><label class="form-label">Description (optionnel)</label><input type="text" class="form-input" id="scope-desc-important" placeholder="Courte description"></div>
169
- <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-important')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('important')">Ajouter</button></div>
170
- </div>
171
-
172
- <h3 style="color: var(--text-bright); font-size: 1rem; margin: 1.5rem 0 0.75rem;">
173
- <span style="color: #4ade80;">&#9632;</span> Fonctionnalites optionnelles
174
- </h3>
175
- <div id="scopeOptional" class="uc-list"></div>
176
- <button class="add-btn" onclick="toggleForm('addScopeForm-optional')">+ Ajouter une fonctionnalite optionnelle</button>
177
- <div class="inline-form" id="addScopeForm-optional">
178
- <div class="form-group"><label class="form-label">Nom de la fonctionnalite</label><input type="text" class="form-input" id="scope-name-optional" placeholder="Ex: Calendrier partage"></div>
179
- <div class="form-group"><label class="form-label">Description (optionnel)</label><input type="text" class="form-input" id="scope-desc-optional" placeholder="Courte description"></div>
180
- <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-optional')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('optional')">Ajouter</button></div>
181
- </div>
182
-
183
- <h3 style="color: var(--text-bright); font-size: 1rem; margin: 1.5rem 0 0.75rem;">
184
- <span style="color: #94a3b8;">&#9632;</span> Hors perimetre
185
- </h3>
186
- <div id="scopeExcluded" class="uc-list"></div>
187
- <button class="add-btn" onclick="toggleForm('addScopeForm-excluded')">+ Ajouter une exclusion</button>
188
- <div class="inline-form" id="addScopeForm-excluded">
189
- <div class="form-group"><label class="form-label">Element hors perimetre</label><input type="text" class="form-input" id="scope-name-excluded" placeholder="Ex: Gestion de la paie"></div>
190
- <div class="form-group"><label class="form-label">Raison (optionnel)</label><input type="text" class="form-input" id="scope-desc-excluded" placeholder="Pourquoi hors perimetre"></div>
191
- <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-excluded')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('excluded')">Ajouter</button></div>
164
+ <div id="scopeOutOfScope" class="uc-list"></div>
165
+ <button class="add-btn" onclick="toggleForm('addScopeForm-outofscope')">+ Ajouter une exclusion</button>
166
+ <div class="inline-form" id="addScopeForm-outofscope">
167
+ <div class="form-group"><label class="form-label">Élément hors périmètre</label><input type="text" class="form-input" id="scope-name-outofscope" placeholder="Ex: Gestion de la paie"></div>
168
+ <div class="form-group"><label class="form-label">Raison (optionnel)</label><input type="text" class="form-input" id="scope-desc-outofscope" placeholder="Pourquoi hors périmètre"></div>
169
+ <div class="form-actions"><button class="btn" onclick="toggleForm('addScopeForm-outofscope')">Annuler</button><button class="btn btn-primary" onclick="addScopeItem('outofscope')">Ajouter</button></div>
192
170
  </div>
193
171
  </div>
194
172
 
195
- <!-- SECTION: Criteres de reussite -->
173
+ <!-- SECTION: Critères de réussite -->
196
174
  <div class="section" id="cadrage-success" style="display:none;">
197
- <h2 class="section-title">Criteres de reussite</h2>
198
- <p class="section-subtitle">Comment mesurer objectivement que le projet est un succes.</p>
175
+ <h2 class="section-title">Critères de réussite</h2>
176
+ <p class="section-subtitle">Comment mesurer objectivement que le projet est un succès.</p>
199
177
 
200
178
  <div class="card">
201
- <div class="card-label">Definition du succes</div>
202
- <div class="editable" contenteditable="true" data-field="success.definition" data-placeholder="Comment saurez-vous que le projet est un succes ? Quel changement concret observerez-vous ?"></div>
179
+ <div class="card-label">Définition du succès</div>
180
+ <div class="editable" contenteditable="true" data-field="success.definition" data-placeholder="Comment saurez-vous que le projet est un succès ? Quel changement concret observerez-vous ?"></div>
203
181
  </div>
204
182
 
205
183
  <div class="card" data-vibe-hide>
206
184
  <div class="card-label">Objectifs mesurables</div>
207
- <div class="editable" contenteditable="true" data-field="success.metrics" data-placeholder="Quels chiffres presenteriez-vous a votre direction pour prouver le succes ? (temps, erreurs, satisfaction...)"></div>
185
+ <div class="editable" contenteditable="true" data-field="success.metrics" data-placeholder="Quels chiffres présenteriez-vous à votre direction pour prouver le succès ? (temps, erreurs, satisfaction...)"></div>
208
186
  </div>
209
187
 
210
188
  <div class="card" data-vibe-hide>
211
- <div class="card-label">Delai d'evaluation</div>
212
- <div class="editable" contenteditable="true" data-field="success.timeline" data-placeholder="Au bout de combien de temps pourrez-vous juger si ca fonctionne ? 1 semaine ? 1 mois ? 3 mois ?"></div>
189
+ <div class="card-label">Délai d'évaluation</div>
190
+ <div class="editable" contenteditable="true" data-field="success.timeline" data-placeholder="Au bout de combien de temps pourrez-vous juger si ça fonctionne ? 1 semaine ? 1 mois ? 3 mois ?"></div>
213
191
  </div>
214
192
 
215
193
  <div class="card" data-vibe-hide>
216
194
  <div class="card-label">Conditions minimales de mise en service</div>
217
- <div class="editable" contenteditable="true" data-field="success.minimumConditions" data-placeholder="Quelles conditions minimales pour mettre le systeme en service ? (fonctionnalites presentes, donnees migrees, formation faite...)"></div>
195
+ <div class="editable" contenteditable="true" data-field="success.minimumConditions" data-placeholder="Quelles conditions minimales pour mettre le système en service ? (fonctionnalités présentes, données migrées, formation faite...)"></div>
218
196
  </div>
219
197
 
220
- <h3 style="color: var(--text-bright); font-size: 1rem; margin: 2rem 0 0.75rem;">Criteres d'acceptation</h3>
221
- <p style="font-size:0.85rem;color:var(--text-muted);margin-bottom:1rem;">Criteres concrets et mesurables pour valider le succes du projet.</p>
198
+ <h3 style="color: var(--text-bright); font-size: 1rem; margin: 2rem 0 0.75rem;">Critères d'acceptation</h3>
199
+ <p style="font-size:0.85rem;color:var(--text-muted);margin-bottom:1rem;">Critères concrets et mesurables pour valider le succès du projet.</p>
222
200
  <div id="criteriaList" class="uc-list"></div>
223
- <button class="add-btn" onclick="toggleForm('addCriterionForm')">+ Ajouter un critere d'acceptation</button>
201
+ <button class="add-btn" onclick="toggleForm('addCriterionForm')">+ Ajouter un critère d'acceptation</button>
224
202
  <div class="inline-form" id="addCriterionForm">
225
- <div class="form-group"><label class="form-label">Critere (mesurable)</label><input type="text" class="form-input" id="criterion-text" placeholder="Ex: 80% des employes saisissent leurs heures chaque semaine"></div>
203
+ <div class="form-group"><label class="form-label">Critère (mesurable)</label><input type="text" class="form-input" id="criterion-text" placeholder="Ex: 80% des employés saisissent leurs heures chaque semaine"></div>
226
204
  <div class="form-actions"><button class="btn" onclick="toggleForm('addCriterionForm')">Annuler</button><button class="btn btn-primary" onclick="addCriterion()">Ajouter</button></div>
227
205
  </div>
228
206
  </div>
@@ -234,7 +212,7 @@
234
212
  <!-- SECTION: Domaines fonctionnels -->
235
213
  <div class="section" id="decomp-modules" style="display:none;">
236
214
  <h2 class="section-title">Domaines fonctionnels</h2>
237
- <p class="section-subtitle">Identifiez les grands domaines de votre application. Chaque domaine regroupe des fonctionnalites coherentes et independantes.</p>
215
+ <p class="section-subtitle">Identifiez les grands domaines de votre application. Chaque domaine regroupe des fonctionnalités cohérentes et indépendantes.</p>
238
216
 
239
217
  <div class="module-grid" id="moduleGrid">
240
218
  <!-- Populated dynamically -->
@@ -250,30 +228,22 @@
250
228
  </div>
251
229
  <div class="form-group">
252
230
  <label class="form-label">Description en une ou deux phrases</label>
253
- <textarea class="form-textarea" id="mod-desc" placeholder="A quoi sert ce domaine ? Quel probleme resout-il ?"></textarea>
231
+ <textarea class="form-textarea" id="mod-desc" placeholder="À quoi sert ce domaine ? Quel problème résout-il ?"></textarea>
254
232
  </div>
255
233
  <div class="form-row">
256
234
  <div class="form-group">
257
235
  <label class="form-label">Type de domaine</label>
258
236
  <select class="form-select" id="mod-type">
259
- <option value="data-centric">Gestion de donnees (listes, fiches, formulaires)</option>
260
- <option value="workflow">Processus metier (etapes, validations, approbations)</option>
237
+ <option value="data-centric">Gestion de données (listes, fiches, formulaires)</option>
238
+ <option value="workflow">Processus métier (étapes, validations, approbations)</option>
261
239
  <option value="reporting">Tableaux de bord et rapports</option>
262
- <option value="integration">Integration avec des systemes externes</option>
263
- <option value="full-module">Domaine complet (donnees + processus + rapports)</option>
264
- </select>
265
- </div>
266
- <div class="form-group">
267
- <label class="form-label">Priorite</label>
268
- <select class="form-select" id="mod-priority">
269
- <option value="must">Indispensable</option>
270
- <option value="should">Important</option>
271
- <option value="could">Optionnel</option>
240
+ <option value="integration">Intégration avec des systèmes externes</option>
241
+ <option value="full-module">Domaine complet (données + processus + rapports)</option>
272
242
  </select>
273
243
  </div>
274
244
  </div>
275
245
  <div class="form-group">
276
- <label class="form-label">Principales donnees gerees (une par ligne)</label>
246
+ <label class="form-label">Principales données gérées (une par ligne)</label>
277
247
  <textarea class="form-textarea" id="mod-entities" placeholder="Commande&#10;Ligne de commande&#10;Facture"></textarea>
278
248
  </div>
279
249
  <div class="form-actions">
@@ -283,41 +253,41 @@
283
253
  </div>
284
254
  </div>
285
255
 
286
- <!-- SECTION: Dependances -->
256
+ <!-- SECTION: Dépendances -->
287
257
  <div class="section" id="decomp-dependencies" style="display:none;">
288
- <h2 class="section-title">Dependances entre domaines</h2>
289
- <p class="section-subtitle">Indiquez quels domaines dependent d'autres domaines. Par exemple, les Commandes dependent des Clients et des Produits.</p>
258
+ <h2 class="section-title">Dépendances entre domaines</h2>
259
+ <p class="section-subtitle">Indiquez quels domaines dépendent d'autres domaines. Par exemple, les Commandes dépendent des Clients et des Produits.</p>
290
260
 
291
261
  <div id="depGraphContainer">
292
262
  <div class="dep-graph" id="depGraph">
293
- <p style="color:var(--text-muted);text-align:center;padding:2rem;">Ajoutez des domaines fonctionnels pour visualiser les dependances.</p>
263
+ <p style="color:var(--text-muted);text-align:center;padding:2rem;">Ajoutez des domaines fonctionnels pour visualiser les dépendances.</p>
294
264
  </div>
295
265
  </div>
296
266
 
297
267
  <div style="margin-top:1.5rem;">
298
- <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ajouter une dependance</h3>
268
+ <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ajouter une dépendance</h3>
299
269
  <div class="form-row">
300
270
  <div class="form-group">
301
271
  <label class="form-label">Ce domaine...</label>
302
272
  <select class="form-select" id="dep-from"></select>
303
273
  </div>
304
274
  <div class="form-group">
305
- <label class="form-label">...depend de</label>
275
+ <label class="form-label">...dépend de</label>
306
276
  <select class="form-select" id="dep-to"></select>
307
277
  </div>
308
278
  </div>
309
279
  <div class="form-group">
310
- <label class="form-label">Nature de la dependance</label>
311
- <input type="text" class="form-input" id="dep-desc" placeholder="Exemple : La commande reference un client existant">
280
+ <label class="form-label">Nature de la dépendance</label>
281
+ <input type="text" class="form-input" id="dep-desc" placeholder="Exemple : La commande référence un client existant">
312
282
  </div>
313
- <button class="btn btn-primary" onclick="addDependency()" style="margin-top:0.5rem;">Ajouter cette dependance</button>
283
+ <button class="btn btn-primary" onclick="addDependency()" style="margin-top:0.5rem;">Ajouter cette dépendance</button>
314
284
  </div>
315
285
 
316
286
  <div id="depList" style="margin-top:1.5rem;"></div>
317
287
 
318
288
  <div style="margin-top:2rem;">
319
- <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ordre de traitement propose</h3>
320
- <p class="section-subtitle">Les domaines sont traites dans l'ordre de leurs dependances : les fondations d'abord, puis les domaines qui en dependent.</p>
289
+ <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ordre de traitement proposé</h3>
290
+ <p class="section-subtitle">Les domaines sont traités dans l'ordre de leurs dépendances : les fondations d'abord, puis les domaines qui en dépendent.</p>
321
291
  <div id="processingOrder" class="process-flow"></div>
322
292
  </div>
323
293
  </div>
@@ -335,37 +305,37 @@
335
305
  PHASE 4 : CONSOLIDATION
336
306
  ================================================================ -->
337
307
 
338
- <!-- SECTION: Modele de donnees -->
308
+ <!-- SECTION: Modèle de données -->
339
309
  <div class="section" id="consol-datamodel" style="display:none;">
340
- <h2 class="section-title">Modele de donnees</h2>
341
- <p class="section-subtitle">Vue d'ensemble de toutes les entites metier, leurs attributs et leurs relations entre domaines.</p>
310
+ <h2 class="section-title">Modèle de données</h2>
311
+ <p class="section-subtitle">Vue d'ensemble de toutes les entités métier, leurs attributs et leurs relations entre domaines.</p>
342
312
  <div id="dataModelContainer">
343
- <p style="color:var(--text-muted);text-align:center;padding:2rem;">Le modele de donnees sera genere a partir des specifications de chaque domaine.</p>
313
+ <p style="color:var(--text-muted);text-align:center;padding:2rem;">Le modèle de données sera généré à partir des spécifications de chaque domaine.</p>
344
314
  </div>
345
315
  </div>
346
316
 
347
317
  <!-- SECTION: Interactions cross-module -->
348
318
  <div class="section" id="consol-interactions" style="display:none;">
349
319
  <h2 class="section-title">Interactions entre domaines</h2>
350
- <p class="section-subtitle">Vue d'ensemble de la facon dont les domaines communiquent et partagent des donnees.</p>
320
+ <p class="section-subtitle">Vue d'ensemble de la façon dont les domaines communiquent et partagent des données.</p>
351
321
  <div id="consolInteractions">
352
- <p style="color:var(--text-muted);text-align:center;padding:2rem;">Les interactions seront calculees automatiquement a partir des dependances et des donnees partagees entre domaines.</p>
322
+ <p style="color:var(--text-muted);text-align:center;padding:2rem;">Les interactions seront calculées automatiquement à partir des dépendances et des données partagées entre domaines.</p>
353
323
  </div>
354
324
  </div>
355
325
 
356
- <!-- SECTION: Coherence des acces -->
326
+ <!-- SECTION: Cohérence des accès -->
357
327
  <div class="section" id="consol-permissions" style="display:none;">
358
- <h2 class="section-title">Coherence des droits d'acces</h2>
359
- <p class="section-subtitle">Verification que les profils utilisateurs ont des droits coherents dans tous les domaines.</p>
328
+ <h2 class="section-title">Cohérence des droits d'accès</h2>
329
+ <p class="section-subtitle">Vérification que les profils utilisateurs ont des droits cohérents dans tous les domaines.</p>
360
330
  <div id="consolPermissions">
361
- <p style="color:var(--text-muted);text-align:center;padding:2rem;">La coherence sera verifiee quand les permissions de chaque domaine seront definies.</p>
331
+ <p style="color:var(--text-muted);text-align:center;padding:2rem;">La cohérence sera vérifiée quand les permissions de chaque domaine seront définies.</p>
362
332
  </div>
363
333
  </div>
364
334
 
365
335
  <!-- SECTION: Parcours bout en bout -->
366
336
  <div class="section" id="consol-flows" style="display:none;">
367
337
  <h2 class="section-title">Parcours bout en bout</h2>
368
- <p class="section-subtitle">Les processus metier qui traversent plusieurs domaines, de bout en bout.</p>
338
+ <p class="section-subtitle">Les processus métier qui traversent plusieurs domaines, de bout en bout.</p>
369
339
 
370
340
  <div id="e2eFlowsList"></div>
371
341
 
@@ -374,16 +344,16 @@
374
344
  <div class="inline-form" id="addFlowForm">
375
345
  <div class="inline-form-title">Nouveau parcours bout en bout</div>
376
346
  <div class="form-group">
377
- <label class="form-label">Nom du parcours (exemple : De la commande a la facture)</label>
347
+ <label class="form-label">Nom du parcours (exemple : De la commande à la facture)</label>
378
348
  <input type="text" class="form-input" id="flow-name" placeholder="Nom descriptif du parcours">
379
349
  </div>
380
350
  <div class="form-group">
381
- <label class="form-label">Etapes du parcours (une par ligne : Domaine - Action)</label>
382
- <textarea class="form-textarea" id="flow-steps" placeholder="Clients - Le client existe dans le systeme&#10;Commandes - Creer la commande&#10;Commandes - Valider la commande&#10;Factures - Generer la facture"></textarea>
351
+ <label class="form-label">Étapes du parcours (une par ligne : Domaine - Action)</label>
352
+ <textarea class="form-textarea" id="flow-steps" placeholder="Clients - Le client existe dans le système&#10;Commandes - Créer la commande&#10;Commandes - Valider la commande&#10;Factures - Générer la facture"></textarea>
383
353
  </div>
384
354
  <div class="form-group">
385
355
  <label class="form-label">Qui intervient dans ce parcours ?</label>
386
- <input type="text" class="form-input" id="flow-actors" placeholder="Exemple : Contributeur (creation), Responsable (validation)">
356
+ <input type="text" class="form-input" id="flow-actors" placeholder="Exemple : Contributeur (création), Responsable (validation)">
387
357
  </div>
388
358
  <div class="form-actions">
389
359
  <button class="btn" onclick="toggleForm('addFlowForm')">Annuler</button>
@@ -397,8 +367,8 @@
397
367
  ================================================================ -->
398
368
 
399
369
  <div class="section" id="handoff-summary" style="display:none;">
400
- <h2 class="section-title">Synthese de l'analyse</h2>
401
- <p class="section-subtitle">Vue d'ensemble de toute l'analyse metier, prete pour le developpement.</p>
370
+ <h2 class="section-title">Synthèse de l'analyse</h2>
371
+ <p class="section-subtitle">Vue d'ensemble de toute l'analyse métier, prête pour le développement.</p>
402
372
 
403
373
  <div class="stat-grid" id="handoffStats">
404
374
  <!-- Populated dynamically -->
@@ -415,9 +385,9 @@
415
385
  </div>
416
386
 
417
387
  <div style="margin-top:2rem;padding:1.5rem;background:var(--bg-card);border:1px solid var(--border);border-radius:10px;text-align:center;">
418
- <p style="color:var(--text-bright);font-size:1.1rem;font-weight:600;margin-bottom:0.5rem;">Analyse prete pour l'extraction</p>
419
- <p style="color:var(--text-muted);font-size:0.85rem;margin-bottom:1rem;">Exportez le fichier JSON pour lancer la generation automatique du systeme.</p>
420
- <button class="btn btn-primary" onclick="exportJSON()" style="font-size:0.9rem;padding:0.6rem 1.5rem;">Exporter l'analyse complete en JSON</button>
388
+ <p style="color:var(--text-bright);font-size:1.1rem;font-weight:600;margin-bottom:0.5rem;">Analyse prête pour l'extraction</p>
389
+ <p style="color:var(--text-muted);font-size:0.85rem;margin-bottom:1rem;">Exportez le fichier JSON pour lancer la génération automatique du système.</p>
390
+ <button class="btn btn-primary" onclick="exportJSON()" style="font-size:0.9rem;padding:0.6rem 1.5rem;">Exporter l'analyse complète en JSON</button>
421
391
  </div>
422
392
  </div>
423
393
 
@@ -433,8 +403,8 @@
433
403
  </div>
434
404
  <div class="review-filters">
435
405
  <button class="review-filter-btn active" onclick="filterReviewComments('all')" data-filter="all">Tous</button>
436
- <button class="review-filter-btn" onclick="filterReviewComments('to-review')" data-filter="to-review">A revoir</button>
437
- <button class="review-filter-btn" onclick="filterReviewComments('validated')" data-filter="validated">Valides</button>
406
+ <button class="review-filter-btn" onclick="filterReviewComments('to-review')" data-filter="to-review" revoir</button>
407
+ <button class="review-filter-btn" onclick="filterReviewComments('validated')" data-filter="validated">Validés</button>
438
408
  </div>
439
409
  <div class="review-comments" id="reviewCommentsList">
440
410
  <div class="review-empty">Aucun commentaire pour le moment.</div>
@@ -446,11 +416,11 @@
446
416
  </div>
447
417
  <div class="review-stat">
448
418
  <div class="review-stat-value" id="reviewStatToReview">0</div>
449
- <div class="review-stat-label">A revoir</div>
419
+ <div class="review-stat-label" revoir</div>
450
420
  </div>
451
421
  <div class="review-stat">
452
422
  <div class="review-stat-value" id="reviewStatValidated">0</div>
453
- <div class="review-stat-label">Valides</div>
423
+ <div class="review-stat-label">Validés</div>
454
424
  </div>
455
425
  </div>
456
426
  </aside>
@@ -26,15 +26,11 @@ const FEATURE_DATA = {
26
26
  },
27
27
  scope: {
28
28
  // CONVERT index.json keys to HTML keys:
29
- // mustHavevital, shouldHave → important, couldHave → optional, outOfScope → excluded
29
+ // inScopeinscope, outOfScope → outofscope
30
30
  // CRITICAL: Preserve per-item `module` assignment from coverageMatrix (NOT modules[0])
31
- vital: (master.cadrage.globalScope?.mustHave || master.cadrage.coverageMatrix?.filter(i => i.category === "mustHave") || [])
31
+ inscope: (master.cadrage.globalScope?.inScope || master.cadrage.coverageMatrix?.filter(i => i.category === "inScope") || [])
32
32
  .map(item => typeof item === 'string' ? { name: item, description: "", module: null } : { name: item.item || item, description: item.notes || "", module: item.module || null }),
33
- important: (master.cadrage.globalScope?.shouldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "shouldHave") || [])
34
- .map(item => typeof item === 'string' ? { name: item, description: "", module: null } : { name: item.item || item, description: item.notes || "", module: item.module || null }),
35
- optional: (master.cadrage.globalScope?.couldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "couldHave") || [])
36
- .map(item => typeof item === 'string' ? { name: item, description: "", module: null } : { name: item.item || item, description: item.notes || "", module: item.module || null }),
37
- excluded: (master.cadrage.globalScope?.outOfScope || master.cadrage.coverageMatrix?.filter(i => i.category === "outOfScope") || [])
33
+ outofscope: (master.cadrage.globalScope?.outOfScope || master.cadrage.coverageMatrix?.filter(i => i.category === "outOfScope") || [])
38
34
  .map(item => typeof item === 'string' ? { name: item, description: "", module: null } : { name: item.item || item, description: item.notes || "", module: item.module || null })
39
35
  },
40
36
  stakeholders: (master.cadrage.stakeholders || []).map(s => ({
@@ -53,7 +49,6 @@ const FEATURE_DATA = {
53
49
  name: module.name || module.code, // Display name (e.g., "Gestion du temps") — MANDATORY
54
50
  description: module.description || "",
55
51
  featureType: module.featureType || "data-centric",
56
- priority: module.priority || "must",
57
52
  estimatedComplexity: module.estimatedComplexity || "medium",
58
53
  entities: module.entities || [],
59
54
  anticipatedSections: module.anticipatedSections || [],
@@ -104,7 +99,7 @@ const FEATURE_DATA = {
104
99
  ### Build Process
105
100
 
106
101
  1. Extract metadata from master index.json
107
- 2. Extract cadrage from master cadrage.json (CONVERT scope keys)
102
+ 2. Extract cadrage from master cadrage.json (CONVERT scope keys: inScope→inscope, outOfScope→outofscope)
108
103
  3. Extract stakeholders from master cadrage.stakeholders
109
104
  4. Iterate ALL modules and populate moduleSpecs (THIS IS CRITICAL — empty moduleSpecs = BUG)
110
105
  5. For EACH module, read FLAT FILES from `collected_data.modules[moduleCode]`:
@@ -41,13 +41,9 @@ Build a JSON object following this **exact mapping** from index.json to the HTML
41
41
  frustrations: (s.painPoints || []).join("\n")
42
42
  })),
43
43
  scope: {
44
- vital: (master.cadrage.globalScope.mustHave || [])
44
+ inscope: (master.cadrage.globalScope.inScope || [])
45
45
  .map(item => ({ name: item, description: "" })), // string[] → {name,description}[]
46
- important: (master.cadrage.globalScope.shouldHave || [])
47
- .map(item => ({ name: item, description: "" })),
48
- optional: (master.cadrage.globalScope.couldHave || [])
49
- .map(item => ({ name: item, description: "" })),
50
- excluded: (master.cadrage.globalScope.outOfScope || [])
46
+ outofscope: (master.cadrage.globalScope.outOfScope || [])
51
47
  .map(item => ({ name: item, description: "" }))
52
48
  },
53
49
  criteria: (master.cadrage.acceptanceCriteria || []).map(ac => ({
@@ -60,7 +56,6 @@ Build a JSON object following this **exact mapping** from index.json to the HTML
60
56
  name: m.name || m.code, // display name (MANDATORY, separate from code)
61
57
  description: m.description || "",
62
58
  featureType: m.featureType || "data-centric",
63
- priority: m.priority || "must",
64
59
  entities: m.entities || [],
65
60
  anticipatedSections: m.anticipatedSections || [], // [{code, description, resources[]}]
66
61
  dependencies: m.dependencies || [],
@@ -111,7 +111,7 @@ Full handoff across multiple applications within a project:
111
111
  | Manifest entries incorrect | Verify appCode, moduleCode, and version match index.json metadata exactly. |
112
112
  | ba-interactive.html is too small (< 100KB) | FEATURE_DATA not serialized correctly. Verify JSON structure. Re-run FEATURE_DATA build. |
113
113
  | moduleSpecs missing from HTML | FEATURE_DATA.moduleSpecs is empty or not included in JSON. Verify each module is iterated and populated. |
114
- | Scope keys still show "mustHave" instead of "vital" | Conversion from JSON keys to HTML keys failed. Check cadrage.scope conversion logic. |
114
+ | Scope keys still show "inScope" instead of "inscope" | Conversion from JSON keys to HTML keys failed. Check cadrage.scope conversion logic. |
115
115
  | Wireframes array is empty | Verify each module has specification.uiWireframes. If missing, add wireframe stubs. |
116
116
  | dependencyGraph missing | Verify master index.json has consolidation.dependencyGraph. If missing, create empty nodes/edges arrays. |
117
117
  | HTML opens but data blank (localStorage issue) | Clear browser localStorage. HTML will load pre-populated FEATURE_DATA on first load. |