@atlashub/smartstack-cli 3.18.0 → 3.19.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.
- package/dist/index.js +3 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/templates/agents/gitflow/start.md +2 -2
- package/templates/skills/business-analyse/SKILL.md +1 -1
- package/templates/skills/business-analyse/_shared.md +46 -20
- package/templates/skills/business-analyse/html/ba-interactive.html +57 -107
- package/templates/skills/business-analyse/html/src/scripts/01-data-init.js +13 -0
- package/templates/skills/business-analyse/html/src/scripts/02-navigation.js +1 -1
- package/templates/skills/business-analyse/html/src/scripts/03-render-cadrage.js +11 -20
- package/templates/skills/business-analyse/html/src/scripts/11-review-panel.js +1 -3
- package/templates/skills/business-analyse/html/src/template.html +31 -83
- package/templates/skills/business-analyse/patterns/suggestion-catalog.md +71 -3
- package/templates/skills/business-analyse/references/cadrage-pre-analysis.md +11 -8
- package/templates/skills/business-analyse/references/cadrage-structure-cards.md +7 -5
- package/templates/skills/business-analyse/references/deploy-data-build.md +42 -14
- package/templates/skills/business-analyse/references/deploy-modes.md +1 -1
- package/templates/skills/business-analyse/references/entity-architecture-decision.md +218 -0
- package/templates/skills/business-analyse/references/robustness-checks.md +2 -1
- package/templates/skills/business-analyse/references/spec-auto-inference.md +70 -16
- package/templates/skills/business-analyse/references/ui-resource-cards.md +149 -0
- package/templates/skills/business-analyse/steps/step-01-cadrage.md +220 -32
- package/templates/skills/business-analyse/steps/step-02-decomposition.md +35 -26
- package/templates/skills/business-analyse/steps/step-03a1-setup.md +122 -32
- package/templates/skills/business-analyse/steps/step-03a2-analysis.md +8 -0
- package/templates/skills/business-analyse/steps/step-03b-ui.md +68 -5
- package/templates/skills/business-analyse/steps/step-05a-handoff.md +99 -2
- package/templates/skills/business-analyse/steps/step-05b-deploy.md +35 -1
- package/templates/skills/business-analyse/steps/step-05c-ralph-readiness.md +4 -1
- package/templates/skills/business-analyse/steps/step-06-review.md +2 -1
- package/templates/skills/business-analyse/templates/tpl-handoff.md +5 -4
- package/templates/skills/business-analyse/templates/tpl-launch-displays.md +4 -1
- package/templates/skills/business-analyse/templates-frd.md +5 -4
- package/templates/skills/gitflow/references/start-local-config.md +6 -3
- package/templates/skills/gitflow/steps/step-start.md +2 -2
|
@@ -468,11 +468,79 @@ Auto-added:
|
|
|
468
468
|
|
|
469
469
|
---
|
|
470
470
|
|
|
471
|
+
---
|
|
472
|
+
|
|
473
|
+
## 10. Entity Classification Patterns
|
|
474
|
+
|
|
475
|
+
> **Usage:** Loaded by step-01-cadrage (section 4d-bis) to accelerate entity scoring.
|
|
476
|
+
> **Full reference:** `references/entity-architecture-decision.md` (scoring grid, decision tree, section patterns)
|
|
477
|
+
> These patterns provide quick pre-classification. Full scoring is still required to confirm.
|
|
478
|
+
|
|
479
|
+
### 10.1 Toujours Module Dedie (score typique >= 11)
|
|
480
|
+
|
|
481
|
+
| Entite | Domaines typiques | Pourquoi module dedie |
|
|
482
|
+
|--------|-------------------|-----------------------|
|
|
483
|
+
| Clients/Customers | CRM, Ventes, Facturation | Hub relationnel central, multi-acteur, lifecycle complet |
|
|
484
|
+
| Employes/Employees | RH, Temps, Paie | Acteur central, donnees sensibles, multi-workflows |
|
|
485
|
+
| Projets/Projects | Gestion, Temps, Facturation | Lifecycle complexe, multi-ressources, reporting |
|
|
486
|
+
| Commandes/Orders | Ventes, Logistique | Workflow d'approbation, etats multiples, sous-entites |
|
|
487
|
+
| Factures/Invoices | Finance, Ventes | Obligations legales, workflow complexe |
|
|
488
|
+
| Contrats/Contracts | Juridique, RH, Ventes | Lifecycle avec echeances, obligations, renouvellement |
|
|
489
|
+
| Produits/Products | Commerce, Inventaire | Catalogue avec variantes, tarification, stock |
|
|
490
|
+
|
|
491
|
+
**Section pattern for module dedie:**
|
|
492
|
+
- Section `list` (TOUJOURS) : grille + create en modale + clic vers detail
|
|
493
|
+
- Page detail avec onglets : Infos + onglets relationnels
|
|
494
|
+
- Sections additionnelles UNIQUEMENT si : dashboard, approve, import, rapport
|
|
495
|
+
|
|
496
|
+
### 10.2 Souvent Sous-entite du Parent (score typique 4-6)
|
|
497
|
+
|
|
498
|
+
| Entite | Module parent typique | Pourquoi sous-entite |
|
|
499
|
+
|--------|----------------------|-----------------------|
|
|
500
|
+
| Adresses | Clients, Employes | Composant du parent, pas d'autonomie fonctionnelle |
|
|
501
|
+
| Notes/Commentaires | Tout module | Sous-objet universel, lie au contexte parent |
|
|
502
|
+
| Pieces jointes/Documents | Tout module | Stockage lie au parent, pas de lifecycle propre |
|
|
503
|
+
| Lignes de commande | Commandes | Composant structurel, pas de sens seul |
|
|
504
|
+
| Tags/Labels | Tout module | Categorisation simple, configurable |
|
|
505
|
+
| Contacts (d'un client) | Clients | Personnes liees a l'entite parente |
|
|
506
|
+
|
|
507
|
+
**Presentation dans le parent:** Onglet dans la page detail du module parent
|
|
508
|
+
|
|
509
|
+
### 10.3 Toujours Config List (score typique 0-3)
|
|
510
|
+
|
|
511
|
+
| Entite | Pourquoi config list |
|
|
512
|
+
|--------|---------------------|
|
|
513
|
+
| Pays, Villes | Reference geographique stable, rarement modifiee |
|
|
514
|
+
| Devises | Reference systeme, standard ISO |
|
|
515
|
+
| Statuts (types enumeres) | Enum ou lookup, admin-only, < 20 valeurs |
|
|
516
|
+
| Unites de mesure | Reference technique stable |
|
|
517
|
+
| Codes postaux | Reference externe, pas de CRUD utilisateur |
|
|
518
|
+
| Types/Categories simples | Flat list sans hierarchie, configurable par admin |
|
|
519
|
+
| Codes d'imputation | Reference comptable, admin-managed, stable |
|
|
520
|
+
|
|
521
|
+
> **Override rule:** Peut etre promu si le client exprime un besoin de hierarchie (> 2 niveaux), de workflow, ou de permissions specifiques.
|
|
522
|
+
|
|
523
|
+
### 10.4 Decision Rapide par Domaine
|
|
524
|
+
|
|
525
|
+
> **Lors de l'approfondissement, si le domaine de l'application est identifie, utiliser ce tableau pour pre-classifier les entites referenciees.**
|
|
526
|
+
|
|
527
|
+
| Domaine de l'app | Entites typiquement CORE (module) | Entites typiquement SUPPORT (sous-entite/config) |
|
|
528
|
+
|-------------------|-----------------------------------|--------------------------------------------------|
|
|
529
|
+
| **Gestion du temps** | Employes, Projets, Activites, Absences | Codes d'imputation, Types d'absence, Departements |
|
|
530
|
+
| **CRM / Ventes** | Clients, Contacts, Opportunites, Devis | Secteurs, Sources, Etapes de vente |
|
|
531
|
+
| **E-commerce** | Produits, Commandes, Clients, Factures | Categories, Tailles, Couleurs, Devises |
|
|
532
|
+
| **RH** | Employes, Contrats, Conges, Evaluations | Postes, Departements, Types de contrat |
|
|
533
|
+
| **Gestion de projets** | Projets, Taches, Ressources, Jalons | Statuts, Priorites, Types de tache |
|
|
534
|
+
| **Finance** | Factures, Paiements, Budgets, Ecritures | Comptes, Journaux, Periodes |
|
|
535
|
+
| **Logistique** | Entrepots, Mouvements, Expeditions | Transporteurs, Unites, Zones |
|
|
536
|
+
|
|
537
|
+
---
|
|
538
|
+
|
|
471
539
|
## 9. Versioning & Updates
|
|
472
540
|
|
|
473
|
-
**Catalog Version:**
|
|
474
|
-
**Last Updated:**
|
|
475
|
-
**Next Review:**
|
|
541
|
+
**Catalog Version:** 2.0.0
|
|
542
|
+
**Last Updated:** 2026-02-11
|
|
543
|
+
**Next Review:** 2026-05-11
|
|
476
544
|
**Maintained By:** SmartStack Team
|
|
477
545
|
|
|
478
546
|
Changes will be tracked in `templates/patterns/suggestion-catalog-changelog.md`.
|
|
@@ -76,14 +76,17 @@ When the problem domain is identified, pre-load domain-specific needs:
|
|
|
76
76
|
|
|
77
77
|
For each detected module, anticipate sections (Level 4) and resources (Level 5) based on feature type:
|
|
78
78
|
|
|
79
|
-
| Feature type |
|
|
80
|
-
|
|
81
|
-
| data-centric | list
|
|
82
|
-
| workflow | list,
|
|
83
|
-
| reporting | dashboard
|
|
84
|
-
| integration | list
|
|
85
|
-
|
|
86
|
-
**
|
|
79
|
+
| Feature type | Sections (functional zones) | Resources (in list section) | Detail page tabs |
|
|
80
|
+
|-------------|---------------------------|---------------------------|------------------|
|
|
81
|
+
| data-centric | list | {entity}-grid, {entity}-filters, {entity}-form | Infos, {relations} |
|
|
82
|
+
| workflow | list, approve | {entity}-grid, {entity}-filters, {entity}-form, approval-queue | Infos, {relations}, Historique |
|
|
83
|
+
| reporting | dashboard | summary-chart, kpi-cards, export-panel | — |
|
|
84
|
+
| integration | list | sync-status-grid, config-form, log-viewer | Infos, Config, Logs |
|
|
85
|
+
|
|
86
|
+
> **RULE:** Sections = functional zones only (`list`, `dashboard`, `approve`, `import`, `rapport`, `planning`).
|
|
87
|
+
> `create`/`edit` = actions (modal/drawer) within the `list` page. `detail` = tabbed page reached by clicking a row in `list`.
|
|
88
|
+
|
|
89
|
+
**Always check:** Does the user's description imply additional functional sections? (e.g., "reports" → `dashboard`, "calendar view" → `planning`, "approval workflow" → `approve`)
|
|
87
90
|
|
|
88
91
|
## Output Format (Internal Only)
|
|
89
92
|
|
|
@@ -64,15 +64,17 @@
|
|
|
64
64
|
"module": "Users",
|
|
65
65
|
"ucRef": "UC-UM-001",
|
|
66
66
|
"notes": "Foundation module, must be implemented first",
|
|
67
|
-
"anticipatedSections": ["list", "
|
|
68
|
-
"anticipatedResources": ["user-grid", "user-
|
|
67
|
+
"anticipatedSections": ["list", "dashboard"],
|
|
68
|
+
"anticipatedResources": ["user-grid", "user-filters", "user-form"],
|
|
69
|
+
"detailTabs": ["Informations", "Roles", "Historique"]
|
|
69
70
|
}
|
|
70
71
|
```
|
|
71
72
|
**MANDATORY fields:** `item`, `category`, `module`
|
|
72
|
-
**OPTIONAL fields:** `ucRef`, `notes`, `anticipatedSections`, `anticipatedResources`
|
|
73
|
+
**OPTIONAL fields:** `ucRef`, `notes`, `anticipatedSections`, `anticipatedResources`, `detailTabs`
|
|
73
74
|
**category values:** `mustHave`, `shouldHave`, `couldHave`, `outOfScope`, `implicit` (camelCase)
|
|
74
|
-
**anticipatedSections:** Array of section codes (Level 4) —
|
|
75
|
-
**anticipatedResources:** Array of resource codes (Level 5) — e.g., `["user-grid", "user-
|
|
75
|
+
**anticipatedSections:** Array of section codes (Level 4) — functional zones ONLY: `["list", "dashboard", "approve", "import", "rapport", "planning"]`. NEVER `create`, `edit`, or `detail` (those are actions/pages within `list`).
|
|
76
|
+
**anticipatedResources:** Array of resource codes (Level 5) — e.g., `["user-grid", "user-filters", "user-form"]`
|
|
77
|
+
**detailTabs:** Array of tab names for the detail page (reached by clicking a row in `list`) — e.g., `["Informations", "Roles", "Historique"]`
|
|
76
78
|
**FORBIDDEN fields:** Do NOT use `id`, `feature`, `priority`. Use `item` + `category`.
|
|
77
79
|
|
|
78
80
|
## codebaseContext
|
|
@@ -14,27 +14,55 @@ const FEATURE_DATA = {
|
|
|
14
14
|
analysisMode: master.metadata.analysisMode || "interactive" // always "interactive" — analysis is always interactive
|
|
15
15
|
},
|
|
16
16
|
cadrage: {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
// CONTEXT SECTION — merged from problem/asIs/toBe (lean cadrage)
|
|
18
|
+
context: {
|
|
19
|
+
problem: master.cadrage.problem || "", // flat string from feature.json
|
|
20
|
+
trigger: master.cadrage.trigger || "", // flat string from feature.json
|
|
21
|
+
currentSituation: master.cadrage.asIs || "", // flat string from feature.json
|
|
22
|
+
desiredSituation: master.cadrage.toBe || "", // flat string from feature.json
|
|
23
|
+
painPoints: (master.cadrage.stakeholders || []).flatMap(s => s.painPoints || []),
|
|
24
|
+
acceptanceCriteria: (master.cadrage.acceptanceCriteria || []).map(c => c.criterion)
|
|
25
|
+
},
|
|
20
26
|
scope: {
|
|
21
27
|
// CONVERT feature.json keys to HTML keys:
|
|
22
28
|
// mustHave → vital, shouldHave → important, couldHave → optional, outOfScope → excluded
|
|
23
|
-
vital: master.globalScope.mustHave || []
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
vital: (master.cadrage.globalScope?.mustHave || master.cadrage.coverageMatrix?.filter(i => i.category === "mustHave") || [])
|
|
30
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
31
|
+
important: (master.cadrage.globalScope?.shouldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "shouldHave") || [])
|
|
32
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
33
|
+
optional: (master.cadrage.globalScope?.couldHave || master.cadrage.coverageMatrix?.filter(i => i.category === "couldHave") || [])
|
|
34
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" }),
|
|
35
|
+
excluded: (master.cadrage.globalScope?.outOfScope || master.cadrage.coverageMatrix?.filter(i => i.category === "outOfScope") || [])
|
|
36
|
+
.map(item => typeof item === 'string' ? { name: item, description: "" } : { name: item.item || item, description: item.notes || "" })
|
|
27
37
|
},
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
38
|
+
risks: (master.cadrage.risks || []).map(r => ({
|
|
39
|
+
description: r.description,
|
|
40
|
+
probability: r.probability,
|
|
41
|
+
impact: r.impact,
|
|
42
|
+
mitigation: r.mitigation
|
|
43
|
+
})),
|
|
44
|
+
stakeholders: (master.cadrage.stakeholders || []).map(s => ({
|
|
45
|
+
role: s.role,
|
|
46
|
+
function: s.function,
|
|
47
|
+
tasks: s.tasks || [],
|
|
48
|
+
frequency: s.frequency || "",
|
|
49
|
+
access: s.involvement || "",
|
|
50
|
+
frustrations: (s.painPoints || []).join("\n")
|
|
51
|
+
}))
|
|
31
52
|
},
|
|
32
53
|
modules: [
|
|
54
|
+
// FOR EACH module in master.modules[]:
|
|
33
55
|
{
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
56
|
+
code: module.code, // PascalCase key (e.g., "GestionTemps")
|
|
57
|
+
name: module.name || module.code, // Display name (e.g., "Gestion du temps") — MANDATORY
|
|
58
|
+
description: module.description || "",
|
|
59
|
+
featureType: module.featureType || "data-centric",
|
|
60
|
+
priority: module.priority || "must",
|
|
61
|
+
estimatedComplexity: module.estimatedComplexity || "medium",
|
|
62
|
+
entities: module.entities || [],
|
|
63
|
+
anticipatedSections: module.anticipatedSections || [],
|
|
64
|
+
dependencies: module.dependencies || [],
|
|
65
|
+
dependents: module.dependents || []
|
|
38
66
|
}
|
|
39
67
|
],
|
|
40
68
|
moduleSpecs: {
|
|
@@ -20,7 +20,7 @@ Simplified handoff with minimal scope:
|
|
|
20
20
|
- 3 core SeedData entries (omit some optional ones)
|
|
21
21
|
- Basic prd.json with simplified sections
|
|
22
22
|
- Lightweight progress.txt
|
|
23
|
-
- Display `/ralph-loop
|
|
23
|
+
- Display `/ralph-loop` command for later use
|
|
24
24
|
|
|
25
25
|
### Delta Mode (use_case = refactoring)
|
|
26
26
|
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
# Entity Architecture Decision Reference
|
|
2
|
+
|
|
3
|
+
> **Loaded by:** step-01-cadrage (section 4d-bis)
|
|
4
|
+
> **Purpose:** Provide a structured decision framework for entity placement in the C/A/M/S/R hierarchy
|
|
5
|
+
> **Mode:** ULTRATHINK — all scoring is internal reasoning, only the recommendation is shown to the client
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 1. Entity Scoring Grid (5 criteria, 0-3 each)
|
|
10
|
+
|
|
11
|
+
For EACH referenced entity detected during approfondissement, score silently:
|
|
12
|
+
|
|
13
|
+
| Critere | 0 (Lookup) | 1 (Composant) | 2 (Module leger) | 3 (Module complet) |
|
|
14
|
+
|---------|-----------|---------------|-------------------|---------------------|
|
|
15
|
+
| **Cycle de vie** | Statique (rarement modifie, admin-only) | CRUD basique (creer, modifier, supprimer) | CRUD + etats/transitions simples | Lifecycle complet (etats multiples, transitions, approbations, archivage) |
|
|
16
|
+
| **Nombre d'acteurs** | Admin seul | 1 role utilisateur | 2-3 roles distincts | 4+ roles avec permissions differenciees |
|
|
17
|
+
| **Relations** | Lookup (0-1 FK entrantes) | Composant (1-3 FK) | Hub (3-5 FK entrantes/sortantes) | Pivot (5+ FK, central dans le graphe de donnees) |
|
|
18
|
+
| **Volume prevu** | < 50 entrees stables | 50-500 entrees | 500-5000 entrees | 5000+ ou croissance continue |
|
|
19
|
+
| **Autonomie fonctionnelle** | Pas de sens seul (ex: code postal) | Sens uniquement dans le contexte parent | Pourrait etre utilise seul | Domaine metier independant (ex: Clients, Projets) |
|
|
20
|
+
|
|
21
|
+
### Interpretation du score total (0-15)
|
|
22
|
+
|
|
23
|
+
| Score | Classification | Action |
|
|
24
|
+
|-------|---------------|--------|
|
|
25
|
+
| **0-3** | **Config list** (lookup table) | Table de reference administrable. Pas de module, pas de section. Gere dans la config admin. |
|
|
26
|
+
| **4-6** | **Gere dans l'app** (sous-entite) | L'entite est geree comme composant du module parent. Accessible via un onglet dans la page detail du parent. |
|
|
27
|
+
| **7-10** | **Module leger** | Module avec section `list` principale. Peu de sections fonctionnelles additionnelles. |
|
|
28
|
+
| **11-15** | **Module complet dedie** | Module avec section `list` + sections fonctionnelles riches (dashboard, rapports, workflows). |
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
## 2. Domain Coherence Decision Tree
|
|
33
|
+
|
|
34
|
+
> **CRITICAL:** Evaluer la coherence domaine AVANT le scoring. Une entite PERIPHERAL avec un score eleve reste un risque de scope creep.
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
L'entite {E} est-elle CORE pour cette application ?
|
|
38
|
+
│
|
|
39
|
+
├── CORE (sans {E}, l'application perd son sens)
|
|
40
|
+
│ │ Exemples : Projets dans une app de gestion du temps,
|
|
41
|
+
│ │ Clients dans un CRM,
|
|
42
|
+
│ │ Employes dans une app RH
|
|
43
|
+
│ │
|
|
44
|
+
│ └── Score >= 7 ? → Module dedie (RECOMMANDE avec haute confiance)
|
|
45
|
+
│ └── Score 4-6 ? → Section/onglet dans le module principal
|
|
46
|
+
│ └── Score 0-3 ? → Config list (rare pour une entite CORE)
|
|
47
|
+
│
|
|
48
|
+
├── SUPPORT (utile, enrichit l'app, mais pas central)
|
|
49
|
+
│ │ Exemples : Departements dans une app de gestion du temps,
|
|
50
|
+
│ │ Fournisseurs dans un CRM orientee ventes,
|
|
51
|
+
│ │ Categories dans un module produits
|
|
52
|
+
│ │
|
|
53
|
+
│ ├── Deja gere ailleurs dans l'ecosysteme ? → Systeme externe (RECOMMANDE)
|
|
54
|
+
│ └── Pas encore gere ?
|
|
55
|
+
│ └── Score >= 7 ? → Module leger (confiance MOYENNE, alerter sur le scope)
|
|
56
|
+
│ └── Score 4-6 ? → Section/onglet du module qui en a le plus besoin
|
|
57
|
+
│ └── Score 0-3 ? → Config list (RECOMMANDE)
|
|
58
|
+
│
|
|
59
|
+
└── PERIPHERAL (tangentiel au domaine applicatif)
|
|
60
|
+
│ Exemples : Comptabilite dans une app de gestion du temps,
|
|
61
|
+
│ Logistique dans un CRM,
|
|
62
|
+
│ Facturation dans une app RH (sauf si paie)
|
|
63
|
+
│
|
|
64
|
+
└── TOUJOURS → Config list ou Systeme externe (RECOMMANDE)
|
|
65
|
+
Avertir : "Cette entite sort du perimetre applicatif.
|
|
66
|
+
Risque de scope creep si integree comme module."
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 3. Pre-classified Entity Patterns
|
|
72
|
+
|
|
73
|
+
> **Raccourcis de scoring** : ces patterns accelerent l'analyse en fournissant une classification par defaut.
|
|
74
|
+
> Le scoring complet reste necessaire pour confirmer ou overrider.
|
|
75
|
+
|
|
76
|
+
### 3a. Toujours Module Dedie (score typique >= 11)
|
|
77
|
+
|
|
78
|
+
| Entite | Domaines typiques | Pourquoi module dedie |
|
|
79
|
+
|--------|-------------------|-----------------------|
|
|
80
|
+
| Clients/Customers | CRM, Ventes, Facturation | Hub relationnel central, multi-acteur, lifecycle complet avec etats |
|
|
81
|
+
| Employes/Employees | RH, Temps, Paie | Acteur central avec donnees sensibles, multi-workflows (conges, evaluations) |
|
|
82
|
+
| Projets/Projects | Gestion, Temps, Facturation | Lifecycle complexe (ouvert → en cours → cloture), multi-ressources, reporting |
|
|
83
|
+
| Commandes/Orders | Ventes, Logistique | Workflow d'approbation, etats multiples, sous-entites (lignes) |
|
|
84
|
+
| Factures/Invoices | Finance, Ventes | Obligations legales, workflow complexe, etats fiscaux |
|
|
85
|
+
| Contrats/Contracts | Juridique, RH, Ventes | Lifecycle avec echeances, obligations, renouvellement automatique |
|
|
86
|
+
| Produits/Products | Commerce, Inventaire | Catalogue avec variantes, tarification, stock |
|
|
87
|
+
|
|
88
|
+
### 3b. Souvent Sous-entite du Parent (score typique 4-6)
|
|
89
|
+
|
|
90
|
+
| Entite | Module parent typique | Pourquoi sous-entite |
|
|
91
|
+
|--------|----------------------|-----------------------|
|
|
92
|
+
| Adresses | Clients, Employes | Composant du parent, pas de sens sans le parent |
|
|
93
|
+
| Notes/Commentaires | Tout module | Sous-objet universel, pas d'autonomie fonctionnelle |
|
|
94
|
+
| Pieces jointes/Documents | Tout module | Stockage lie au parent, pas de lifecycle propre |
|
|
95
|
+
| Lignes de commande | Commandes | Composant structurel de la commande |
|
|
96
|
+
| Tags/Labels | Tout module | Categorisation simple, admin-configurable |
|
|
97
|
+
| Contacts (d'un client) | Clients | Personnes liees a l'entite parente |
|
|
98
|
+
|
|
99
|
+
### 3c. Toujours Config List (score typique 0-3)
|
|
100
|
+
|
|
101
|
+
| Entite | Pourquoi config list |
|
|
102
|
+
|--------|---------------------|
|
|
103
|
+
| Pays, Villes | Reference geographique stable, rarement modifiee |
|
|
104
|
+
| Devises | Reference systeme, standard ISO |
|
|
105
|
+
| Statuts (types enumeres) | Enum ou lookup, admin-only, < 20 valeurs |
|
|
106
|
+
| Unites de mesure | Reference technique stable |
|
|
107
|
+
| Codes postaux | Reference externe, pas de CRUD utilisateur |
|
|
108
|
+
| Types/Categories simples | Flat list sans hierarchie, configurable par admin |
|
|
109
|
+
|
|
110
|
+
> **Override rule:** Une entite pre-classifiee "config list" peut etre promue en "module leger" si le client exprime un besoin de hierarchie (> 2 niveaux), de workflow, ou de permissions specifiques.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Section Pattern for Modules
|
|
115
|
+
|
|
116
|
+
> **REGLE FONDAMENTALE : Les sections representent des zones fonctionnelles, PAS des operations CRUD.**
|
|
117
|
+
|
|
118
|
+
### Le pattern de navigation SmartStack
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
Module
|
|
122
|
+
├── Section: list
|
|
123
|
+
│ └── Page principale avec grille/table
|
|
124
|
+
│ └── Action "Creer" (ouvre formulaire en modale/drawer DANS cette page)
|
|
125
|
+
│ └── Clic sur une ligne → navigation vers la page detail
|
|
126
|
+
│ └── Resources : {entity}-grid, {entity}-filters, {entity}-form
|
|
127
|
+
│
|
|
128
|
+
├── (detail = page de detail avec onglets, accessible depuis list)
|
|
129
|
+
│ └── Onglet Info → informations principales (lecture + edition)
|
|
130
|
+
│ └── Onglet {relation} → sous-entites liees (ex: Lignes, Contacts, Documents)
|
|
131
|
+
│ └── Onglet Historique → journal d'activite
|
|
132
|
+
│ └── Resources : {entity}-detail, {entity}-tabs, {relation}-panel
|
|
133
|
+
│
|
|
134
|
+
├── Section: dashboard (SI KPIs/reporting necessaire)
|
|
135
|
+
│ └── Vue d'ensemble avec cartes KPI, graphiques, activite recente
|
|
136
|
+
│ └── Resources : {entity}-kpi-cards, {entity}-charts, {entity}-activity
|
|
137
|
+
│
|
|
138
|
+
├── Section: approve (SI workflow d'approbation)
|
|
139
|
+
│ └── File d'attente d'approbation, timeline de statut
|
|
140
|
+
│ └── Resources : approval-queue, status-timeline
|
|
141
|
+
│
|
|
142
|
+
├── Section: import (SI import en masse)
|
|
143
|
+
│ └── Upload fichier, mapping colonnes, preview, execution
|
|
144
|
+
│ └── Resources : import-upload, import-mapping, import-preview
|
|
145
|
+
│
|
|
146
|
+
└── Section: rapport (SI reporting specifique au module)
|
|
147
|
+
└── Rapports configurables, export, planification
|
|
148
|
+
└── Resources : report-builder, report-export
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
### Ce qui n'est JAMAIS une section
|
|
152
|
+
|
|
153
|
+
| PAS une section | C'est quoi en realite |
|
|
154
|
+
|-----------------|----------------------|
|
|
155
|
+
| `create` | Action (bouton) dans la page `list`, ouvre un formulaire en modale/drawer |
|
|
156
|
+
| `edit` | Action dans la page detail, bascule les champs en mode edition |
|
|
157
|
+
| `detail` | Page de detail accessible par navigation depuis `list` (pas une section menu) |
|
|
158
|
+
| `delete` | Action avec confirmation dans la page `list` ou `detail` |
|
|
159
|
+
| `search` | Composant de filtrage integre dans la section `list` |
|
|
160
|
+
|
|
161
|
+
### Regles de proposition de sections
|
|
162
|
+
|
|
163
|
+
| Condition detectee | Section a proposer |
|
|
164
|
+
|--------------------|--------------------|
|
|
165
|
+
| Module avec entites | `list` (TOUJOURS — section par defaut obligatoire) |
|
|
166
|
+
| KPIs, indicateurs, ou role manager | `dashboard` |
|
|
167
|
+
| Workflow de validation/approbation | `approve` |
|
|
168
|
+
| Volume > 100 ou import mentionne | `import` |
|
|
169
|
+
| Reporting specifique au module | `rapport` |
|
|
170
|
+
| Planification temporelle | `planning` / `calendar` |
|
|
171
|
+
| Visualisation geographique | `map` |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 5. Architecture Proposal Template
|
|
176
|
+
|
|
177
|
+
> **Utiliser ce template quand la recommandation est "Module dedie".**
|
|
178
|
+
|
|
179
|
+
```markdown
|
|
180
|
+
### Architecture proposee : {ModuleName}
|
|
181
|
+
|
|
182
|
+
| Niveau | Valeur | Justification |
|
|
183
|
+
|--------|--------|---------------|
|
|
184
|
+
| Context | `business` | Contexte metier standard |
|
|
185
|
+
| Application | `{ApplicationCode}` | {Nom de l'application en cours d'analyse} |
|
|
186
|
+
| Module | `{ModuleCode}` | {Pourquoi ce decoupage : autonomie fonctionnelle, domaine distinct, cycle de vie propre} |
|
|
187
|
+
|
|
188
|
+
**Sections fonctionnelles :**
|
|
189
|
+
|
|
190
|
+
| Section | Justification | Resources |
|
|
191
|
+
|---------|---------------|-----------|
|
|
192
|
+
| `list` | Page principale de gestion des {entity_plural} | {entity}-grid, {entity}-filters, {entity}-form |
|
|
193
|
+
| {section_2} | {pourquoi cette section est necessaire pour CE module} | {resources} |
|
|
194
|
+
| ... | ... | ... |
|
|
195
|
+
|
|
196
|
+
**Onglets de la page detail :**
|
|
197
|
+
|
|
198
|
+
| Onglet | Contenu | Pourquoi |
|
|
199
|
+
|--------|---------|----------|
|
|
200
|
+
| Informations | Fiche principale de l'{entity} | Toujours present |
|
|
201
|
+
| {relation_1} | {sous-entites ou entites liees} | {pourquoi cet onglet} |
|
|
202
|
+
| Historique | Journal des modifications | Toujours present si audit requis |
|
|
203
|
+
|
|
204
|
+
**Impact sur le graphe de dependances :**
|
|
205
|
+
- {ModuleName} sera une dependance de : {list of modules that reference this entity}
|
|
206
|
+
- {ModuleName} depend de : {list of modules it references, or "aucun (module fondation)"}
|
|
207
|
+
- Position dans le tri topologique : couche {N}
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 6. Confidence Levels
|
|
213
|
+
|
|
214
|
+
| Confiance | Quand | Presentation au client |
|
|
215
|
+
|-----------|-------|------------------------|
|
|
216
|
+
| **HAUTE** | Pre-classification match + Score coherent + Domaine CORE | "Je recommande fortement..." + option en premier avec "(Recommande)" |
|
|
217
|
+
| **MOYENNE** | Score dans la zone grise (6-8) ou domaine SUPPORT | "Mon analyse suggere..." + option en premier avec "(Suggere)" |
|
|
218
|
+
| **BASSE** | Informations insuffisantes ou domaine PERIPHERAL | "Plusieurs options sont possibles..." + pas de recommandation, options neutres |
|
|
@@ -317,7 +317,8 @@ Status: READY FOR DEVELOPMENT ✓
|
|
|
317
317
|
Next Steps:
|
|
318
318
|
1. Address warnings (optional, recommended)
|
|
319
319
|
2. Review progress tracker: .ralph/progress.txt
|
|
320
|
-
3. Launch development: /ralph-loop
|
|
320
|
+
3. Launch development: /ralph-loop
|
|
321
|
+
(Use /ralph-loop -r ONLY to resume an interrupted loop)
|
|
321
322
|
═══════════════════════════════════════════════════════════════
|
|
322
323
|
```
|
|
323
324
|
|
|
@@ -29,24 +29,78 @@
|
|
|
29
29
|
| datetime | DatePicker | entity.required | — |
|
|
30
30
|
| bool | Toggle | — | default: false |
|
|
31
31
|
|
|
32
|
-
## Auto-Generated
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
|
37
|
-
|
|
38
|
-
|
|
|
39
|
-
|
|
|
40
|
-
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
32
|
+
## Auto-Generated UI Components by featureType
|
|
33
|
+
|
|
34
|
+
> **RULE:** Sections = functional zones only. `create`/`edit` are actions within `list`. `detail` is a tabbed page reached from `list`.
|
|
35
|
+
|
|
36
|
+
| featureType | Sections (functional zones) | List page includes | Detail page tabs |
|
|
37
|
+
|---|---|---|---|
|
|
38
|
+
| data-centric | list | grid, filters, create form (modal) | Infos, {relations} |
|
|
39
|
+
| workflow | list, approve | grid, filters, create form (modal) | Infos, {relations}, Historique |
|
|
40
|
+
| integration | list | grid, filters, config form | Infos, Config, Logs |
|
|
41
|
+
| reporting | dashboard | — | — |
|
|
42
|
+
| full-module | list, dashboard | grid, filters, create form (modal) | Infos, {relations}, Historique |
|
|
43
|
+
|
|
44
|
+
## Component Generation Rules
|
|
45
|
+
|
|
46
|
+
1. **list section:** SmartTable with all non-long-text attributes as columns, actions = [view, edit, delete], defaultSort = { createdAt, desc }. Create action opens SmartForm in modal/drawer.
|
|
47
|
+
2. **create form (in list):** SmartForm with all writable attributes as fields, component inferred from type. Opens as modal/drawer from the list page.
|
|
48
|
+
3. **detail page (from list click):** TabPanel with: Info tab (all attributes), relation tabs (child SmartTable for each 1:N relationship), History tab (if auditable). See "Detail Page Tab Auto-Inference" below for exact rules.
|
|
49
|
+
4. **edit (in detail):** Same form as create but pre-filled (mode: edit). Inline in the detail page Info tab.
|
|
48
50
|
5. **dashboard section:** Trigger 3d (dashboard specification)
|
|
49
51
|
|
|
52
|
+
## Detail Page Tab Auto-Inference
|
|
53
|
+
|
|
54
|
+
> **RULE:** Every module with a `list` section MUST have a companion detail page. Tabs are inferred from multiple sources.
|
|
55
|
+
|
|
56
|
+
### Tab sources (merged in order)
|
|
57
|
+
|
|
58
|
+
| Priority | Source | Tabs generated |
|
|
59
|
+
|----------|--------|----------------|
|
|
60
|
+
| 1 | `coverageMatrix[].detailTabs` (from cadrage) | Exact tab names as specified by client |
|
|
61
|
+
| 2 | Entity `relationships[]` where `type = "1:N"` | One tab per child relationship (SmartTable) |
|
|
62
|
+
| 3 | Entity has `lifeCycles[]` | History tab (Timeline) |
|
|
63
|
+
| 4 | Always present | Info tab (first position) |
|
|
64
|
+
|
|
65
|
+
### Merge algorithm
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
detailTabs = []
|
|
69
|
+
|
|
70
|
+
# 1. Always add Info tab first
|
|
71
|
+
detailTabs.push({ code: "info", label: "Informations", content: DetailCard })
|
|
72
|
+
|
|
73
|
+
# 2. If cadrage specified detailTabs, use those names
|
|
74
|
+
IF coverageMatrix[module].detailTabs EXISTS:
|
|
75
|
+
FOR EACH tabName IN detailTabs:
|
|
76
|
+
IF tabName matches a 1:N relationship entity → SmartTable tab
|
|
77
|
+
ELIF tabName == "Historique"/"History" → Timeline tab
|
|
78
|
+
ELSE → custom DetailCard tab (contents TBD in step-03b)
|
|
79
|
+
|
|
80
|
+
# 3. If no cadrage tabs, auto-infer from relationships
|
|
81
|
+
ELSE:
|
|
82
|
+
FOR EACH rel IN entity.relationships WHERE rel.type == "1:N":
|
|
83
|
+
detailTabs.push({ code: rel.target (kebab-case), label: rel.target (plural), content: SmartTable })
|
|
84
|
+
|
|
85
|
+
# 4. Add History tab if auditable
|
|
86
|
+
IF entity has lifeCycles:
|
|
87
|
+
detailTabs.push({ code: "history", label: "Historique", content: Timeline })
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Detail section auto-generation
|
|
91
|
+
|
|
92
|
+
When auto-generating the detail section, create:
|
|
93
|
+
- `specification.sections[]` entry with `code: "detail"`, `navigation: "hidden"`, route `/business/{app}/{module}/detail/:id`
|
|
94
|
+
- `specification.uiWireframes[]` entry with `section: "detail"` and ASCII mockup showing all tabs
|
|
95
|
+
- Resources: `{module}-detail-header` (DetailHeader), `{module}-detail-tabs` (TabPanel), `{module}-info-card` (DetailCard), one `{module}-{relation}-grid` per relation tab, `{module}-history` (Timeline if auditable)
|
|
96
|
+
|
|
97
|
+
### Detail page navigation wiring
|
|
98
|
+
|
|
99
|
+
The detail page is NOT a sidebar entry. Navigation is handled by:
|
|
100
|
+
- **From list**: row click action `navigate:detail` → `/business/{app}/{module}/detail/{id}`
|
|
101
|
+
- **Back button**: detail header → `/business/{app}/{module}/list`
|
|
102
|
+
- **Route registration**: route MUST be registered in frontend routing with `:id` parameter
|
|
103
|
+
|
|
50
104
|
## Status/Lifecycle Enhancement
|
|
51
105
|
|
|
52
106
|
If entity has a status/enum field AND lifeCycles exists:
|