@atlashub/smartstack-cli 4.29.0 → 4.30.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 (29) hide show
  1. package/.documentation/business-analyse.html +217 -0
  2. package/package.json +1 -1
  3. package/templates/skills/ba-generate-html/html/ba-interactive.html +207 -199
  4. package/templates/skills/ba-generate-html/html/src/partials/cadrage-context.html +9 -9
  5. package/templates/skills/ba-generate-html/html/src/partials/cadrage-scope.html +15 -15
  6. package/templates/skills/ba-generate-html/html/src/partials/cadrage-stakeholders.html +7 -7
  7. package/templates/skills/ba-generate-html/html/src/partials/cadrage-success.html +13 -13
  8. package/templates/skills/ba-generate-html/html/src/partials/consol-datamodel.html +4 -4
  9. package/templates/skills/ba-generate-html/html/src/partials/consol-flows.html +5 -5
  10. package/templates/skills/ba-generate-html/html/src/partials/consol-interactions.html +2 -2
  11. package/templates/skills/ba-generate-html/html/src/partials/consol-permissions.html +4 -4
  12. package/templates/skills/ba-generate-html/html/src/partials/decomp-dependencies.html +11 -11
  13. package/templates/skills/ba-generate-html/html/src/partials/decomp-modules.html +9 -9
  14. package/templates/skills/ba-generate-html/html/src/partials/handoff-summary.html +5 -5
  15. package/templates/skills/ba-generate-html/html/src/scripts/01-data-init.js +10 -2
  16. package/templates/skills/ba-generate-html/html/src/scripts/02-navigation.js +10 -10
  17. package/templates/skills/ba-generate-html/html/src/scripts/03-render-cadrage.js +1 -1
  18. package/templates/skills/ba-generate-html/html/src/scripts/04-render-modules.js +4 -4
  19. package/templates/skills/ba-generate-html/html/src/scripts/05-render-specs.js +57 -57
  20. package/templates/skills/ba-generate-html/html/src/scripts/06-render-consolidation.js +4 -4
  21. package/templates/skills/ba-generate-html/html/src/scripts/06-render-mockups.js +5 -5
  22. package/templates/skills/ba-generate-html/html/src/scripts/07-render-handoff.js +8 -8
  23. package/templates/skills/ba-generate-html/html/src/scripts/08-editing.js +3 -3
  24. package/templates/skills/ba-generate-html/html/src/scripts/09-export.js +2 -2
  25. package/templates/skills/ba-generate-html/html/src/scripts/10-comments.js +2 -2
  26. package/templates/skills/ba-generate-html/html/src/scripts/11-review-panel.js +8 -8
  27. package/templates/skills/ba-generate-html/html/src/styles/03-navigation.css +1 -1
  28. package/templates/skills/ba-generate-html/html/src/template.html +92 -92
  29. package/templates/skills/ba-generate-html/steps/step-02-build-data.md +5 -1
@@ -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,87 @@
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, par ordre de priorité.</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: #f87171;">&#9632;</span> Fonctionnalités indispensables
152
152
  </h3>
153
153
  <div id="scopeVital" class="uc-list"></div>
154
- <button class="add-btn" onclick="toggleForm('addScopeForm-vital')">+ Ajouter une fonctionnalite indispensable</button>
154
+ <button class="add-btn" onclick="toggleForm('addScopeForm-vital')">+ Ajouter une fonctionnalité indispensable</button>
155
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>
156
+ <div class="form-group"><label class="form-label">Nom de la fonctionnalité</label><input type="text" class="form-input" id="scope-name-vital" placeholder="Ex: Gestion des commandes"></div>
157
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
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>
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: #facc15;">&#9632;</span> Fonctionnalités importantes
163
163
  </h3>
164
164
  <div id="scopeImportant" class="uc-list"></div>
165
- <button class="add-btn" onclick="toggleForm('addScopeForm-important')">+ Ajouter une fonctionnalite importante</button>
165
+ <button class="add-btn" onclick="toggleForm('addScopeForm-important')">+ Ajouter une fonctionnalité importante</button>
166
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>
167
+ <div class="form-group"><label class="form-label">Nom de la fonctionnalité</label><input type="text" class="form-input" id="scope-name-important" placeholder="Ex: Export PDF"></div>
168
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
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
170
  </div>
171
171
 
172
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
173
+ <span style="color: #4ade80;">&#9632;</span> Fonctionnalités optionnelles
174
174
  </h3>
175
175
  <div id="scopeOptional" class="uc-list"></div>
176
- <button class="add-btn" onclick="toggleForm('addScopeForm-optional')">+ Ajouter une fonctionnalite optionnelle</button>
176
+ <button class="add-btn" onclick="toggleForm('addScopeForm-optional')">+ Ajouter une fonctionnalité optionnelle</button>
177
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>
178
+ <div class="form-group"><label class="form-label">Nom de la fonctionnalité</label><input type="text" class="form-input" id="scope-name-optional" placeholder="Ex: Calendrier partagé"></div>
179
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
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
181
  </div>
182
182
 
183
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
184
+ <span style="color: #94a3b8;">&#9632;</span> Hors périmètre
185
185
  </h3>
186
186
  <div id="scopeExcluded" class="uc-list"></div>
187
187
  <button class="add-btn" onclick="toggleForm('addScopeForm-excluded')">+ Ajouter une exclusion</button>
188
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>
189
+ <div class="form-group"><label class="form-label">Élément hors périmètre</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 périmètre"></div>
191
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>
192
192
  </div>
193
193
  </div>
194
194
 
195
- <!-- SECTION: Criteres de reussite -->
195
+ <!-- SECTION: Critères de réussite -->
196
196
  <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>
197
+ <h2 class="section-title">Critères de réussite</h2>
198
+ <p class="section-subtitle">Comment mesurer objectivement que le projet est un succès.</p>
199
199
 
200
200
  <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>
201
+ <div class="card-label">Définition du succès</div>
202
+ <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
203
  </div>
204
204
 
205
205
  <div class="card" data-vibe-hide>
206
206
  <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>
207
+ <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
208
  </div>
209
209
 
210
210
  <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>
211
+ <div class="card-label">Délai d'évaluation</div>
212
+ <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
213
  </div>
214
214
 
215
215
  <div class="card" data-vibe-hide>
216
216
  <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>
217
+ <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
218
  </div>
219
219
 
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>
220
+ <h3 style="color: var(--text-bright); font-size: 1rem; margin: 2rem 0 0.75rem;">Critères d'acceptation</h3>
221
+ <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
222
  <div id="criteriaList" class="uc-list"></div>
223
- <button class="add-btn" onclick="toggleForm('addCriterionForm')">+ Ajouter un critere d'acceptation</button>
223
+ <button class="add-btn" onclick="toggleForm('addCriterionForm')">+ Ajouter un critère d'acceptation</button>
224
224
  <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>
225
+ <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
226
  <div class="form-actions"><button class="btn" onclick="toggleForm('addCriterionForm')">Annuler</button><button class="btn btn-primary" onclick="addCriterion()">Ajouter</button></div>
227
227
  </div>
228
228
  </div>
@@ -234,7 +234,7 @@
234
234
  <!-- SECTION: Domaines fonctionnels -->
235
235
  <div class="section" id="decomp-modules" style="display:none;">
236
236
  <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>
237
+ <p class="section-subtitle">Identifiez les grands domaines de votre application. Chaque domaine regroupe des fonctionnalités cohérentes et indépendantes.</p>
238
238
 
239
239
  <div class="module-grid" id="moduleGrid">
240
240
  <!-- Populated dynamically -->
@@ -250,21 +250,21 @@
250
250
  </div>
251
251
  <div class="form-group">
252
252
  <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>
253
+ <textarea class="form-textarea" id="mod-desc" placeholder="À quoi sert ce domaine ? Quel problème résout-il ?"></textarea>
254
254
  </div>
255
255
  <div class="form-row">
256
256
  <div class="form-group">
257
257
  <label class="form-label">Type de domaine</label>
258
258
  <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>
259
+ <option value="data-centric">Gestion de données (listes, fiches, formulaires)</option>
260
+ <option value="workflow">Processus métier (étapes, validations, approbations)</option>
261
261
  <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>
262
+ <option value="integration">Intégration avec des systèmes externes</option>
263
+ <option value="full-module">Domaine complet (données + processus + rapports)</option>
264
264
  </select>
265
265
  </div>
266
266
  <div class="form-group">
267
- <label class="form-label">Priorite</label>
267
+ <label class="form-label">Priorité</label>
268
268
  <select class="form-select" id="mod-priority">
269
269
  <option value="must">Indispensable</option>
270
270
  <option value="should">Important</option>
@@ -273,7 +273,7 @@
273
273
  </div>
274
274
  </div>
275
275
  <div class="form-group">
276
- <label class="form-label">Principales donnees gerees (une par ligne)</label>
276
+ <label class="form-label">Principales données gérées (une par ligne)</label>
277
277
  <textarea class="form-textarea" id="mod-entities" placeholder="Commande&#10;Ligne de commande&#10;Facture"></textarea>
278
278
  </div>
279
279
  <div class="form-actions">
@@ -283,41 +283,41 @@
283
283
  </div>
284
284
  </div>
285
285
 
286
- <!-- SECTION: Dependances -->
286
+ <!-- SECTION: Dépendances -->
287
287
  <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>
288
+ <h2 class="section-title">Dépendances entre domaines</h2>
289
+ <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
290
 
291
291
  <div id="depGraphContainer">
292
292
  <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>
293
+ <p style="color:var(--text-muted);text-align:center;padding:2rem;">Ajoutez des domaines fonctionnels pour visualiser les dépendances.</p>
294
294
  </div>
295
295
  </div>
296
296
 
297
297
  <div style="margin-top:1.5rem;">
298
- <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ajouter une dependance</h3>
298
+ <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ajouter une dépendance</h3>
299
299
  <div class="form-row">
300
300
  <div class="form-group">
301
301
  <label class="form-label">Ce domaine...</label>
302
302
  <select class="form-select" id="dep-from"></select>
303
303
  </div>
304
304
  <div class="form-group">
305
- <label class="form-label">...depend de</label>
305
+ <label class="form-label">...dépend de</label>
306
306
  <select class="form-select" id="dep-to"></select>
307
307
  </div>
308
308
  </div>
309
309
  <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">
310
+ <label class="form-label">Nature de la dépendance</label>
311
+ <input type="text" class="form-input" id="dep-desc" placeholder="Exemple : La commande référence un client existant">
312
312
  </div>
313
- <button class="btn btn-primary" onclick="addDependency()" style="margin-top:0.5rem;">Ajouter cette dependance</button>
313
+ <button class="btn btn-primary" onclick="addDependency()" style="margin-top:0.5rem;">Ajouter cette dépendance</button>
314
314
  </div>
315
315
 
316
316
  <div id="depList" style="margin-top:1.5rem;"></div>
317
317
 
318
318
  <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>
319
+ <h3 style="color:var(--text-bright);font-size:1rem;margin-bottom:0.75rem;">Ordre de traitement proposé</h3>
320
+ <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
321
  <div id="processingOrder" class="process-flow"></div>
322
322
  </div>
323
323
  </div>
@@ -335,37 +335,37 @@
335
335
  PHASE 4 : CONSOLIDATION
336
336
  ================================================================ -->
337
337
 
338
- <!-- SECTION: Modele de donnees -->
338
+ <!-- SECTION: Modèle de données -->
339
339
  <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>
340
+ <h2 class="section-title">Modèle de données</h2>
341
+ <p class="section-subtitle">Vue d'ensemble de toutes les entités métier, leurs attributs et leurs relations entre domaines.</p>
342
342
  <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>
343
+ <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
344
  </div>
345
345
  </div>
346
346
 
347
347
  <!-- SECTION: Interactions cross-module -->
348
348
  <div class="section" id="consol-interactions" style="display:none;">
349
349
  <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>
350
+ <p class="section-subtitle">Vue d'ensemble de la façon dont les domaines communiquent et partagent des données.</p>
351
351
  <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>
352
+ <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
353
  </div>
354
354
  </div>
355
355
 
356
- <!-- SECTION: Coherence des acces -->
356
+ <!-- SECTION: Cohérence des accès -->
357
357
  <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>
358
+ <h2 class="section-title">Cohérence des droits d'accès</h2>
359
+ <p class="section-subtitle">Vérification que les profils utilisateurs ont des droits cohérents dans tous les domaines.</p>
360
360
  <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>
361
+ <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
362
  </div>
363
363
  </div>
364
364
 
365
365
  <!-- SECTION: Parcours bout en bout -->
366
366
  <div class="section" id="consol-flows" style="display:none;">
367
367
  <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>
368
+ <p class="section-subtitle">Les processus métier qui traversent plusieurs domaines, de bout en bout.</p>
369
369
 
370
370
  <div id="e2eFlowsList"></div>
371
371
 
@@ -374,16 +374,16 @@
374
374
  <div class="inline-form" id="addFlowForm">
375
375
  <div class="inline-form-title">Nouveau parcours bout en bout</div>
376
376
  <div class="form-group">
377
- <label class="form-label">Nom du parcours (exemple : De la commande a la facture)</label>
377
+ <label class="form-label">Nom du parcours (exemple : De la commande à la facture)</label>
378
378
  <input type="text" class="form-input" id="flow-name" placeholder="Nom descriptif du parcours">
379
379
  </div>
380
380
  <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>
381
+ <label class="form-label">Étapes du parcours (une par ligne : Domaine - Action)</label>
382
+ <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
383
  </div>
384
384
  <div class="form-group">
385
385
  <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)">
386
+ <input type="text" class="form-input" id="flow-actors" placeholder="Exemple : Contributeur (création), Responsable (validation)">
387
387
  </div>
388
388
  <div class="form-actions">
389
389
  <button class="btn" onclick="toggleForm('addFlowForm')">Annuler</button>
@@ -397,8 +397,8 @@
397
397
  ================================================================ -->
398
398
 
399
399
  <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>
400
+ <h2 class="section-title">Synthèse de l'analyse</h2>
401
+ <p class="section-subtitle">Vue d'ensemble de toute l'analyse métier, prête pour le développement.</p>
402
402
 
403
403
  <div class="stat-grid" id="handoffStats">
404
404
  <!-- Populated dynamically -->
@@ -415,9 +415,9 @@
415
415
  </div>
416
416
 
417
417
  <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>
418
+ <p style="color:var(--text-bright);font-size:1.1rem;font-weight:600;margin-bottom:0.5rem;">Analyse prête 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 génération automatique du système.</p>
420
+ <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
421
  </div>
422
422
  </div>
423
423
 
@@ -433,8 +433,8 @@
433
433
  </div>
434
434
  <div class="review-filters">
435
435
  <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>
436
+ <button class="review-filter-btn" onclick="filterReviewComments('to-review')" data-filter="to-review" revoir</button>
437
+ <button class="review-filter-btn" onclick="filterReviewComments('validated')" data-filter="validated">Validés</button>
438
438
  </div>
439
439
  <div class="review-comments" id="reviewCommentsList">
440
440
  <div class="review-empty">Aucun commentaire pour le moment.</div>
@@ -446,11 +446,11 @@
446
446
  </div>
447
447
  <div class="review-stat">
448
448
  <div class="review-stat-value" id="reviewStatToReview">0</div>
449
- <div class="review-stat-label">A revoir</div>
449
+ <div class="review-stat-label" revoir</div>
450
450
  </div>
451
451
  <div class="review-stat">
452
452
  <div class="review-stat-value" id="reviewStatValidated">0</div>
453
- <div class="review-stat-label">Valides</div>
453
+ <div class="review-stat-label">Validés</div>
454
454
  </div>
455
455
  </div>
456
456
  </aside>
@@ -50,7 +50,11 @@ context: {
50
50
  stakeholders: master.cadrage.stakeholders.map(s => ({
51
51
  role: s.role,
52
52
  function: s.function || "",
53
- tasks: s.tasks || [],
53
+ tasks: Array.isArray(s.tasks)
54
+ ? s.tasks
55
+ : typeof s.tasks === 'string'
56
+ ? s.tasks.split(',').map(t => t.trim()).filter(Boolean)
57
+ : [],
54
58
  frequency: mapFrequency(s.frequency), // "Quotidien"→"daily", "Hebdomadaire"→"weekly", "Mensuel"→"monthly"
55
59
  access: mapAccess(s.involvement), // "decision-maker"→"admin", "end-user"→"contributor", "observer"→"viewer"
56
60
  frustrations: (s.painPoints || []).join("\n")