Conception complete (Phase 0) pour formation-hub Acadenice : - 19 docs Merise Agile + UML + GitOps + plans (tests/deploy/ops/api) cf docs/00-readme.md pour l'index complet - Stack Docker compose (Docmost + Baserow + Postgres + Redis + MinIO local FS) compose.yml + compose.staging.yml + compose.prod.yml - CI/CD GitHub Actions skeleton (ci, deploy-staging, deploy-prod) - Bridge service skeleton (Hono + TS + Biome + Vitest + zod + pino) - Templates GitHub : PR + 3 issue types + CODEOWNERS + dependabot.yml - Scripts ops : healthcheck, backup quotidien, smoke-test post-deploy - LICENSE AGPL-3.0 + SECURITY.md + CONTRIBUTING.md + CHANGELOG.md - Diagramme drawIO archi infra (XML importable dans diagrams.net) Decisions structurelles enregistrees : - Scope CFA + Agence avec entite PERSONNE pivot multi-roles (ADR-001) - Stack composite Docmost AGPL + Baserow MIT + bridge custom (ADR-001) - Path B : UX quasi-unified via Tiptap node-views custom (ADR-002) - Monorepo trunk-based development (ADR-003) - Postgres separe Docmost/Baserow (ADR-004) - Bridge stack Node 22 + Hono (ADR-005) - Repo neuf prefere a fork Docmost - Prod-like des le jour 1 (pas MVP)
7.4 KiB
7.4 KiB
UML — Activity Diagrams
Vue dynamique des workflows complets (parcours utilisateur de bout en bout). Complement aux state diagrams (cycle de vie d'une entite) et au MCT (operations isolees). Chaque diagramme = un parcours metier qui traverse plusieurs entites et acteurs.
1. AD-01 — Attribuer un module a un formateur
flowchart TD
Start([Admin demande attribution]) --> A1[Selectionner module a attribuer]
A1 --> A2{Module existe<br/>statut != annule?}
A2 -->|Non| Err1([Erreur: module invalide])
A2 -->|Oui| A3[Lister formateurs avec capacite >= heures requises]
A3 --> A4{Au moins 1<br/>formateur dispo?}
A4 -->|Non| Err2([Pas de formateur dispo - ajouter capacite ou reduire heures])
A4 -->|Oui| A5[Admin choisit formateur]
A5 --> A6[Saisir heures + dates]
A6 --> A7{Heures attribution +<br/>existantes <= heures module?}
A7 -->|Non| Err3([RG-01 KO: depassement heures module])
A7 -->|Oui| A8{Heures + capacite<br/>existante > capacite annuelle?}
A8 -->|Oui| Warn[Warning: depassement capacite formateur]
A8 -->|Non| A9
Warn --> A9[Confirmer attribution]
A9 --> A10[INSERT attribution statut=planifie]
A10 --> A11[Recalculer rollups en cascade]
A11 --> A12[Notifier formateur par email]
A12 --> End([Attribution confirmee])
2. AD-02 — Saisir heures realisees (parcours formateur)
flowchart TD
Start([Formateur fin de cours]) --> B1[Ouvre app sur mobile]
B1 --> B2{Authentifie?}
B2 -->|Non| B3[Login SSO ou email/password]
B3 --> B4
B2 -->|Oui| B4[Affiche liste de mes attributions actives]
B4 --> B5[Selectionne l'attribution du jour]
B5 --> B6[Saisit heures realisees]
B6 --> B7{heures_realisees<br/><= heures_attribuees + tolerance?}
B7 -->|Non| B8[Saisit raison du depassement]
B8 --> B9
B7 -->|Oui| B9[Confirme]
B9 --> B10[UPDATE attribution.heures_realisees]
B10 --> B11{heures_realisees<br/>== heures_attribuees?}
B11 -->|Oui| B12[attribution.statut = realise]
B11 -->|Non| B13[attribution.statut reste en_cours]
B12 --> B14[Recalculer rollups]
B13 --> B14
B14 --> End([Saisie confirmee])
3. AD-03 — Cycle complet d'une formation (vue globale)
flowchart TD
Start([Direction valide nouvelle formation]) --> C1[Admin cree FORMATION statut=draft]
C1 --> C2[Admin cree BLOC RNCP-1, BLOC RNCP-2, ...]
C2 --> C3[Admin cree MODULES dans chaque bloc]
C3 --> C4{Tous modules<br/>prets a attribuer?}
C4 -->|Non| C3
C4 -->|Oui| C5[Admin active formation: statut=actif]
C5 --> C6{Pour chaque module}
C6 --> C7[AD-01: Attribuer formateur]
C7 --> C6
C6 -->|Tous attribues| C8[Date debut atteinte]
C8 --> C9[Modules passent en_cours auto]
C9 --> C10{Pour chaque session}
C10 --> C11[AD-02: Formateur saisit heures]
C11 --> C10
C10 -->|Toutes sessions terminees| C12[Modules passent realise auto]
C12 --> C13{Tous modules realises<br/>+ date_fin atteinte?}
C13 -->|Non| C10
C13 -->|Oui| C14[Formation statut=termine]
C14 --> C15[Generer rapport final + archivage]
C15 --> End([Formation terminee])
4. AD-04 — Parcours projet client (Agence)
Note : couvre la branche Agence dev d'Acadenice. Necessite l'extension du modele decrite dans
02-scope-etendu-cfa-agence.md.
flowchart TD
Start([Client signe devis]) --> D1[Admin cree CLIENT si nouveau]
D1 --> D2[Admin cree PROJET lie au client]
D2 --> D3[Decouper en LIVRABLES ou TACHES]
D3 --> D4[Estimer charge en heures]
D4 --> D5[Identifier devs disponibles<br/>capacite agence restante]
D5 --> D6[INTERVENTION: lier dev a tache, heures]
D6 --> D7{Dev = formateur aussi?}
D7 -->|Oui| D8[Verifier capacite totale<br/>= capacite_agence + capacite_formation]
D7 -->|Non| D9
D8 --> D9[Confirmer intervention]
D9 --> D10{Pour chaque session de travail}
D10 --> D11[Dev saisit heures realisees]
D11 --> D10
D10 -->|Tache terminee| D12[Tache statut=livre]
D12 --> D13{Tous livrables<br/>livres?}
D13 -->|Non| D10
D13 -->|Oui| D14[PROJET statut=cloture]
D14 --> D15[Facturation client]
D15 --> End([Projet cloture])
5. AD-05 — Allocation capacite Formateur-Developpeur (cas mixte)
Cas specifique Acadenice : un formateur peut aussi etre dev sur projet client. Sa capacite totale annuelle est splittee entre formation et agence.
flowchart TD
Start([Personne avec role formateur + developpeur]) --> E1[Capacite totale annuelle = X heures]
E1 --> E2[Repartition par defaut:<br/>50 pct formation, 50 pct agence<br/>configurable par personne]
E2 --> E3{Allocation cours<br/>ou projet?}
E3 -->|Cours formation| E4[heures_cours_attribuees<br/>+= nouvelles heures]
E4 --> E5{capacite_formation_restante >= 0?}
E5 -->|Non| Err1[Bloquer ou warning]
E5 -->|Oui| E6[OK]
E3 -->|Projet client| E7[heures_projet_attribuees<br/>+= nouvelles heures]
E7 --> E8{capacite_agence_restante >= 0?}
E8 -->|Non| Err2[Bloquer ou warning]
E8 -->|Oui| E9[OK]
E6 --> Final[Recalculer:<br/>capacite_totale_restante = X - cours_attribuees - projet_attribuees]
E9 --> Final
Final --> End([Affichage tableau de bord<br/>Personne])
6. AD-06 — Inscription etudiant a une formation
flowchart TD
Start([Prospect candidate]) --> F1[Admin cree ETUDIANT prospect]
F1 --> F2[Phase selection: tests, entretiens]
F2 --> F3{Selectionne?}
F3 -->|Non| F4[Statut = refuse, lettre]
F4 --> EndKo([Fin])
F3 -->|Oui| F5[Etudiant statut = admis]
F5 --> F6[INSCRIPTION: lier ETUDIANT a FORMATION]
F6 --> F7[Creer space personnel Docmost]
F7 --> F8[Envoyer onboarding info]
F8 --> F9{Date debut formation?}
F9 -->|Non encore| F8
F9 -->|Oui| F10[Etudiant.statut = en_cours]
F10 --> F11[Formation classique]
F11 --> F12{Reussi?}
F12 -->|Oui| F13[Etudiant.statut = diplome]
F12 -->|Non| F14[Etudiant.statut = abandonne ou redouble]
F13 --> EndOk([Diplome remis])
F14 --> EndKo
7. AD-07 — Validation et publication d'une page wiki
flowchart TD
Start([Auteur ouvre page Docmost]) --> G1[Edite contenu]
G1 --> G2[Sauvegarde brouillon auto]
G2 --> G3{Pret a publier?}
G3 -->|Non| G1
G3 -->|Oui| G4[Demande review optionnelle]
G4 --> G5{Reviewer assigne?}
G5 -->|Non| G7
G5 -->|Oui| G6[Reviewer commente]
G6 --> G7[Auteur applique changements]
G7 --> G8[Publie page]
G8 --> G9[Indexation search]
G9 --> G10{Page partagee externe?}
G10 -->|Oui| G11[Genere share link]
G11 --> G12[Envoie lien aux destinataires]
G10 -->|Non| End
G12 --> End([Page publiee])
8. Liste des activity diagrams a faire (post-validation scope)
| Code | Titre | Statut |
|---|---|---|
| AD-01 | Attribuer module a formateur | Fait |
| AD-02 | Saisir heures realisees | Fait |
| AD-03 | Cycle complet d'une formation | Fait |
| AD-04 | Parcours projet client (Agence) | Brouillon, depend de scope etendu |
| AD-05 | Allocation Formateur-Dev (capacite mixte) | Brouillon, depend de scope etendu |
| AD-06 | Inscription etudiant | Fait |
| AD-07 | Validation page wiki | Fait |
| AD-08 | Onboarding nouveau salarie / formateur | A faire |
| AD-09 | Maintenance site web client (recurring) | A faire si scope etendu |
| AD-10 | Backup + restauration disaster recovery | A faire (ops) |