Wiki/docs/13-uml-activity-diagrams.md
Corentin JOGUET 668576cdc4 chore: initial commit — formation-hub conception phase
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)
2026-05-07 12:16:19 +02:00

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)