Files
oto-enterprise-os-dtp/05_deliverables_mvp/frontend/chat_otoia/chatlib/knowledge.py
T
Claude Code DTP Worker 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
[DTP-Worker] Sprint 6 · Générateur Chat OTOIA embarqué par portail (Custom Block natif) (ERPNext Backend · roadmap L63)
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>
2026-07-30 09:37:51 +00:00

29 lines
1.3 KiB
Python

"""Portée de connaissance + rôles du Chat OTOIA, dérivés du contrat RBAC.
Principe de sécurité + anti-invention (#6) : l'assistant embarqué dans un portail
ne peut « connaître » que les DocTypes que les rôles de CE portail sont autorisés à
voir. On borne donc la portée de connaissance à la surface RBAC exacte du portail
(les `permissions_cibles`) — la même que celle des Workspaces. Résultat : le chat
ne peut ni prétendre, ni exposer un DocType hors de la portée du portail, et aucun
périmètre n'est inventé.
Tout est dérivé du CONTRAT (jamais de la spec de présentation) :
- `roles_allowed` = rôles du portail (roles_by_portail du builder Workspaces) ;
- `knowledge_scope` = DocTypes autorisés du portail (doctypes_by_portail).
Ordre trié → sortie déterministe (diffable, re-générable).
"""
from __future__ import annotations
from . import deps
def roles_for(contract: dict, portail_key: str) -> list[str]:
"""Rôles ERPNext du portail (triés), depuis le contrat RBAC."""
return sorted(deps.roles_by_portail(contract).get(portail_key, []))
def knowledge_scope_for(contract: dict, portail_key: str) -> list[str]:
"""DocTypes que le portail est autorisé à voir (triés), depuis le contrat RBAC."""
return sorted(deps.doctypes_by_portail(contract).get(portail_key, set()))