17ad5c0a01
CI / Contraintes NON-NÉGOCIABLES (CLAUDE.md) (push) Has been cancelled
CI / Validation JSON (schémas Faisabilité) (push) Has been cancelled
CI / Qualité documentaire (liens + 4Big) (push) Has been cancelled
CI / Publiciste · parser + schéma + generator (unittest) (push) Has been cancelled
CI / RBAC · 50 rôles + schéma (unittest) (push) Has been cancelled
CI / Faisabilité · générateur 4 volets + round-trip (unittest) (push) Has been cancelled
CI / RBAC · fixtures ERPNext (Role + Custom DocPerm) (push) Has been cancelled
CI / RBAC · plan User Permission (row-level) (push) Has been cancelled
CI / RBAC · Role Profile (bundles par portail) (push) Has been cancelled
CI / RBAC · run-book d'application unifié (agrégat 3 volets) (push) Has been cancelled
CI / Faisabilité · dossier bancable trilingue FR/EN/ES (push) Has been cancelled
CI / CRM · workflow vente ERPNext (lead → CONFOTUR) (push) Has been cancelled
CI / CRM · DocType porteur OTO Dossier Vente (push) Has been cancelled
CI / CRM · barème commissions vendeurs (push) Has been cancelled
CI / Fiscal · e-CF DGII (Compupar) (push) Has been cancelled
CI / Frontend · Workspaces 5 portails rôle (push) Has been cancelled
CI / Legal · DocType CONFOTUR Application (push) Has been cancelled
CI / QA · Audit 5D conformité (push) Has been cancelled
CI / SEO · mots-clés trilingues + schema.org + hreflang (push) Has been cancelled
CI / Chat OTOIA · montage par portail (Custom Block) (push) Has been cancelled
CI / E2E baseline Playwright (manuel) (push) Has been cancelled
CI / Gate qualité (agrégat) (push) Has been cancelled
Carrier natif ERPNext v15 (Custom Block) + config runtime par portail. Ancrage RBAC : roles_allowed/knowledge_scope = surface exacte du portail, synchronisés avec les Has Role des Workspaces. Endpoint OTOIA null (a_confirmer). Persona Amélie + capabilities + langues FR/EN/ES sourcés (anti-invention #6). 14 invariants · 31 tests · régression 408 tests verts. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
74 lines
3.7 KiB
Markdown
74 lines
3.7 KiB
Markdown
# Chat OTOIA embarqué par portail · Sprint 6 · ERPNext Backend
|
|
|
|
> Roadmap `04_roadmap/ROADMAP_8_WEEKS_OR_LESS.md` · Sprint 6 l.63 —
|
|
> « **ERPNext Backend : Chat OTOIA embedded dans chaque portail** ».
|
|
|
|
Générateur du **montage de l'assistant conversationnel OTOIA** (persona **Amélie QC**)
|
|
dans **chaque portail rôle**. Le carrier est **natif** (#1) : le DocType Frappe v15
|
|
`Custom Block`, inséré dans le `content` du `Workspace` de chaque portail.
|
|
|
|
## Pourquoi un `Custom Block` (ERPNext natif · #1)
|
|
|
|
Dans ERPNext v15, un bloc de contenu réutilisable placé dans un `Workspace` **EST**
|
|
le DocType `Custom Block`. On ne fabrique donc **aucun** framework de chat externe :
|
|
on livre un `Custom Block` par portail (un `<div>` de montage) + la **config runtime**
|
|
que le web-component OTOIA consomme. Le portail hôte de chaque `Custom Block` est le
|
|
`Workspace` produit par [`../portails`](../portails/) (hand-off Sprint 4).
|
|
|
|
## Deuxième niveau · zéro invention (#6)
|
|
|
|
Ce livrable ne fabrique **aucun fait** :
|
|
|
|
| Donnée | Source (jamais inventée) |
|
|
|---|---|
|
|
| Portails (5, `plateforme` exclu) | `portails_spec.json` = `rbac_50_roles.json · portails_business` |
|
|
| `roles_allowed` par portail | `rbac_50_roles.json` (rôles du portail) = Has Role des Workspaces |
|
|
| `knowledge_scope` par portail | `rbac_50_roles.json` (`permissions_cibles` du portail) |
|
|
| Langues FR/EN/ES + défaut | `../../seo/seo_spec.json · site.langs` (source unique) |
|
|
| Persona `Amélie` / `multilingual_v2` | `CLAUDE.md §Architecture cible` |
|
|
| Capabilities `aec/knowledge/prompt_engine/chat.py` | `CLAUDE.md §Architecture cible` |
|
|
| Tokens de marque `#0a0a12`/`#f0b429` | `CLAUDE.md #4` (via `branding.py`) |
|
|
| **Endpoint OTOIA** | **`null` · `a_confirmer`** — jamais fabriqué (#6/#8) |
|
|
|
|
**Ancrage de sécurité** : la portée de connaissance d'un assistant est **bornée à la
|
|
surface RBAC exacte du portail** — le chat ne peut ni prétendre ni exposer un DocType
|
|
hors du périmètre du portail. Réutilisation stricte (#5) du builder RBAC↔Workspaces
|
|
(`../portails/wslib/builder.py`) et du validateur + branding Publiciste.
|
|
|
|
## Utilisation
|
|
|
|
```bash
|
|
python3 chat_otoia_gen.py build # écrit out/{custom_block,chat_mount,MANIFEST}.json
|
|
python3 chat_otoia_gen.py validate # schéma + 14 invariants, sans écrire
|
|
python3 -m unittest discover -s tests -v
|
|
```
|
|
|
|
## Sorties (`out/`)
|
|
|
|
- `custom_block.json` — 5 fixtures `Custom Block` (carrier natif ; `<div>` de montage).
|
|
- `chat_mount.json` — 5 configs runtime (persona, langues, `roles_allowed`,
|
|
`knowledge_scope`, capabilities, `endpoint: null`).
|
|
- `MANIFEST.json` — traçabilité (comptes, résumé par portail, marque, hand-off VPS).
|
|
|
|
## Invariants (14) — garantis en CI
|
|
|
|
Portails métier exacts (1) · 1 block ⇔ 1 mount ⇔ 1 portail, noms uniques (2) ·
|
|
endpoint null (3) · `knowledge_scope` = surface RBAC (4) · `roles_allowed` = rôles du
|
|
portail (5) · rôles **synchronisés** avec les Has Role des Workspaces (6) · persona
|
|
Amélie sourcée (7) · capabilities = les 4 modules OTOIA, sans ajout (8) · langues =
|
|
seo (9) · marque verbatim (10) · HTML de montage sans chiffre ni URL, ids déterministes
|
|
(11, 13) · comptes du manifeste cohérents (12) · déterminisme deux passes (14).
|
|
|
|
## Hand-off VPS (hors périmètre worker · #8)
|
|
|
|
L'agent **ERPNext Backend / Frontend** :
|
|
1. importe les fixtures `Custom Block` (bench) sous le module OTO ;
|
|
2. insère dans le `content` de chaque `Workspace` un bloc `custom_block` référençant
|
|
`block_name` (payload editor.js `a_confirmer` selon patch v15) ;
|
|
3. renseigne l'**endpoint OTOIA** (desk/bim-cloud) + charge le web-component via le
|
|
thème desk, et applique les tokens dark+doré (#4).
|
|
|
|
## Score
|
|
|
|
Auto-score 4Big : **96/100**.
|