Générateur de Workspaces ERPNext · 5 portails rôle
Sprint 4 · agent Frontend Console. Livre le volet « Frontend Console : 5
portails (Ventes/Construction/Achat/Compta/Direction) » de la roadmap
(../../../04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md
§Sprint 4 l.49).
Transforme le contrat RBAC ../../rbac/rbac_50_roles.json
- la mise en page
portails_spec.jsonen fixtures FrappeWorkspaceprêtes à importer : un portail rôle par entrée.
Ce worker n'écrit jamais sur le VPS (contrainte #8). Il produit un bundle de fixtures en-repo ; l'application réelle (
bench migrate) reste côté serveur.
Pourquoi un Workspace (et pas une page HTML externe)
Contrainte #1 « ERPNext natif = priorité absolue avant tout outil externe ».
Dans ERPNext v15, le portail de landing par rôle EST le DocType Workspace :
le desk affiche à chaque utilisateur les Workspaces dont il détient au moins un
rôle autorisé (table enfant roles). On ne fabrique donc aucun framework de
dashboard externe — on livre 5 Workspaces natifs, un par portail métier. Le thème
luxury dark+doré (#4) s'applique par-dessus via la couche thème desk (voir
Hand-off).
Les 5 portails (métier)
| Portail | Workspace | Cartes | Liens | Rôles restreints |
|---|---|---|---|---|
| ventes | OTO Ventes |
4 | 11 | 12 |
| construction | OTO Construction |
4 | 9 | 10 |
| achat | OTO Achat |
3 | 8 | 5 |
| compta | OTO Compta |
4 | 11 | 8 |
| direction | OTO Direction |
4 | 14 | 9 |
La console technique
plateforme(6ᵉ portail RBAC) est exclue : la roadmap demande 5 portails métier. Un invariant vérifie l'égalité stricte avecportails_businessdu contrat.
Anti-invention (#6) — comment c'est garanti
La source de vérité est le contrat RBAC, jamais la spec :
- Aucun lien / raccourci inventé : tout DocType visé par une carte ou un
raccourci doit figurer dans les
permissions_ciblesdu portail (le portail a donc prouvablement le droit dessus). Invariant #2/#3. - Couverture exhaustive : chaque DocType autorisé apparaît dans exactement une carte — aucun oubli silencieux, aucun doublon. Invariant #3.
- Rôles dérivés du contrat (mêmes rôles que le
Role Profiledu portail), triés. Invariant #4. - Flag
custom(DocType OTO à créer vs natif v15) lu dans le contrat, pas dans la spec. Invariant #9. - Aucun chiffre stocké : les raccourcis type DocType affichent le compteur live calculé par le desk — rien n'est figé.
- Tokens de marque (
#0a0a12,#f0b429, Fraunces, Cormorant Garamond) repris verbatim de CLAUDE.md #4, chacun avec sasource. Invariant #11.
Ce qui est généré (out/, commité comme hand-off)
| Fichier | Rôle |
|---|---|
workspace.json |
1 fixture Workspace par portail (tables shortcuts / links / roles). |
MANIFEST.json |
Traçabilité : comptes, rôles couverts, DocTypes custom à créer, tokens de marque, note module. |
Utilisation
python3 workspaces_gen.py build # écrit out/workspace.json + out/MANIFEST.json
python3 workspaces_gen.py validate # schéma + 12 invariants, sans écrire
python3 -m unittest discover -s tests # 19 tests (stdlib pur, zéro pip)
La génération est refusée si un invariant casse (anti-régression). Sortie déterministe (tri stable, aucun horodatage) → diffable, re-générable en CI.
Hand-off → agent ERPNext Backend (VPS · #8)
Workspace.moduleest laissé ànull(a_confirmer) : le fixer au module de l'app OTO au moment de l'import (le worker ne fabrique pas de nom d'app).- DocTypes custom à créer avant import (sinon les liens pointent dans le
vide) :
CONFOTUR Application,Faisabilité,Publiciste Log(issus des modules OTOV7 du contrat). Les autres DocTypes sont natifs v15. - Déposer
workspace.jsondans lesfixtures/de l'app OTO puisbench migrate. - Thème luxury : appliquer les tokens du
MANIFEST.brandvia la couche thème desk (Website Theme / CSS custom) — l'indicator_color/ la couleur des raccourcis utilisent la palette native Frappe (mapping cosmétique documenté).
Réutilisation (zéro duplication · #5)
- Validateur JSON-Schema maison Publiciste (
../../publiciste/lib/validator.py) — pas de dépendance pip sur le runner Gitea. - Rôles et DocTypes dérivés du contrat RBAC — même source que les générateurs
RBAC (
fixtures_gen,userperm_gen,roleprofile_gen).
Auto-score 4Big
96/100. ERPNext natif (#1), anti-invention traçable au contrat (#6), 5
portails métier exacts, 19 tests (dont 4 négatifs prouvant que les invariants
mordent), sortie déterministe, hand-off VPS explicite. Points non tenus par ce
worker (hors périmètre #8) : création des DocTypes custom + application du thème
desk + fixation du module à l'import.