Architecture prescrite par
DEC-0016 :
un produit Laravel modulaire unique par déploiement, une SPA Vue, des lectures GraphQL, des écritures REST,
un schéma PostgreSQL par module et une exécution compatible Laravel Octane. Chaque société
dispose d’un déploiement local Docker Compose dédié dont les ressources et données sont isolées selon
TEC-OPS-002.
Ce document
prescrit les frontières ; le détail de réalisation vit dans la documentation des dépôts
produit (règle d’articulation : ../README.md).
Le socle d’exécution et de livraison fixe FrankenPHP sous Octane, les rôles séparés issus de la même image, les livraisons SemVer promues par digest, les deux services Valkey locaux et la reprise explicite des jobs (DEC-0047 à DEC-0050). Les notifications Reverb peuvent porter directement la projection frontend complète et autorisée d’un objet simple sans relecture GraphQL systématique (DEC-0051) ; elles ne sont pas une source de vérité.
Le socle prescrit aussi le retrait de la chaîne signature/SBOM de livraison, sans toucher à l’audit cryptographique (DEC-0052), l’usage des secrets BuildKit (DEC-0053) et des sondes distinctes par rôle/capacité (DEC-0056). La configuration runtime publique garde la même image et permet le développement natif/Compose avec HMR et reverse proxy (DEC-0054). Le profil utilisateur Keycloak/OIDC est strict et distinct des contrats machine/API (DEC-0055).
Les métriques et journaux techniques suivent DEC-0057 et DEC-0058 sans remplacer l’audit. Les budgets GraphQL suivent DEC-0059, avec 25 éléments par page par défaut et des plafonds explicites à qualifier.
Cartographie des dépôts
graph TB
subgraph produit["Produit Elena"]
elena["elena — monolithe modulaire Laravel<br/>SPA Vue unique, GraphQL lectures / REST ecritures"]
end
subgraph durables["Depots complementaires durables"]
ds["elena-design-system<br/>composants Ds*, tokens"]
csdk["elena-client-sdk<br/>SDK TypeScript headless"]
esdk["elena-extension-sdk<br/>contrats des modules tiers"]
mcu["elena-mcu-platform<br/>control-plane editeur, console, channel"]
end
subgraph specs["Specification"]
cdc["elena-specs<br/>CDC fonctionnel + technique"]
end
pirates["pirates — analyse concurrentielle<br/>(acces restreint)"]
cdc -- prescrit --> elena
cdc -. renvois pirates: .-> pirates
elena --> ds
elena --> csdk
elena --> esdk
elena --> mcu
Frontières prescrites
| Dépôt | Rôle | Ce qui n’y entre pas |
|---|---|---|
elena |
Produit : hôte Laravel + modules (Foundation, Referential, Manufacturing, Sales, Shipping, Billing, Stock, Purchasing, Dashboard, DWT) + SPA + documentation produit | Composants UI génériques (→ design-system), contrats publics d’extension (→ extension-sdk) |
elena-design-system |
@elena/design-system : composants Ds*, tokens, distribution privée |
Logique métier |
elena-client-sdk |
SDK client TypeScript headless (web, mobile, intégrations) | Rendu UI |
elena-extension-sdk |
Contrats publics des modules installables (manifestes, contributions, ImportResource, ActorContext) |
Implémentation du cœur |
elena-mcu-platform |
Control-plane éditeur : registre, grants, quotas, console, channel, kit | Code produit |
Modules obligatoires : Foundation, Referential, Manufacturing, Sales, Shipping et Billing pour les parcours
commerciaux Must du Lot 0 ; Dashboard et DWT restent désactivables. Sales porte tarifs,
devis et commandes de vente, dans des agrégats indépendants ; il consomme Referential
et Foundation sans dépendance inverse. Foundation porte les services communs du socle, dont la
génération des documents et l’émission des e-mails transactionnels des documents commerciaux : les
modules propriétaires d’un document l’appellent, sans arête inverse
(DEC-0301). L’hôte assemble les synthèses Article/Tiers
et l’historique d’envoi d’un document.
La conception Tarifs précise cette
propriété selon DEC-0087.
Prescriptions applicatives
Pour la correction simultanée des adresses de commandes et factures brouillon, Billing pilote selon DEC-0158 et TEC-INT-007. Sales/Billing gardent leurs écritures et permissions, Referential les adresses sources ; aucun appel inverse vers Billing ni orchestration imbriquée. Ce cas est distinct du parcours direct ci-dessous et n’en hérite pas le verrou racine Shipping.
Les modules Expédition (Shipping) et Facturation (Billing) sont distincts selon
DEC-0144.
Shipping possède les expéditions directes sans stock du Lot 0 ; Billing possède les
factures depuis commande ou expédition directe, avoirs et acomptes. Leurs invariants
communs passent par PublicApi et orchestration transactionnelle synchrone, sans
écriture étrangère ni cycle d’appels. Les
contrats de facturation
fixent responsabilités et garde des sources. Billing possède la relation d’engagement
historisée selon DEC-0145 ;
Billing pilote les opérations communes selon
DEC-0146, y compris
les corrections/annulations commerciales de source soumises à la garde historique.
Shipping garde ses écritures et permissions ; aucun appel ni lecture inverse vers
Billing. Les adaptateurs ne contournent pas l’entrée coordonnée. Selon
DEC-0147, Shipping
verrouille les racines source avant la garde et les verrous documentaires Billing,
dans la transaction commune ; le pilotage Billing ne vaut pas premier verrou.
Les schémas shipping et billing restent dans la même base métier,
le même déploiement et la même sauvegarde cohérente ; aucun service distribué ni
capacité stock/comptable supplémentaire n’est créé par cette frontière ; le module Stock
propriétaire des données de stock du Lot 1 est attribué séparément par
DEC-0286 ci-dessous.
Le module Stock (Stock), schéma stock, est propriétaire des données de stock du Lot 1 selon
DEC-0286 : entrepôts et
emplacements arborescents facultatifs, contenants et quantités maintenues, réservations et
transferts, seuils par couple article/entrepôt, puis mouvements datés, corrigeables et immuables
et politique de rétroactivité de l’organisation prescrits par
TEC-04-008 à TEC-04-015, les lots, les numéros
de série et la péremption prescrits par
TEC-04-016 à TEC-04-025 et la
valorisation et les coûts annexes prescrits par
TEC-04-026 à TEC-04-039 — couches de
valorisation, coûts annexes et leurs parts, écarts sur coût standard restant dans stock ; les inventaires et la
classification ABC prescrits par
TEC-04-053 à TEC-04-062 —
campagnes, lignes de comptage, ajustements, classes calculées et forcées, paramètres —, la classe
courante de l’article restant dans referential sous le pilotage de Stock
(DEC-0294). Referential conserve
articles, unités et identités et, comme champ contrôlé de l’article, le mode de traçabilité dont le
changement est piloté par Stock
(DEC-0288), le graphe des
appels synchrones restant acyclique ;
Shipping conserve ses documents d’expédition et ses préparations
(TEC-04-040 à TEC-04-052) et les
faits de livraison de la commande restent chez Sales
(DEC-0292) ; Purchasing, schéma purchasing, conserve les demandes d’achat, demandes de
prix, commandes fournisseurs, réceptions et restes à recevoir
(TEC-02-001 à TEC-02-014) selon
DEC-0295 : il pilote la
réception et appelle l’intention de Stock pour le mouvement entrant, sans jamais écrire dans stock,
il porte les propositions de réapprovisionnement évaluées par lecture des seuils et du disponible de
Stock (TEC-02-015 à TEC-02-024,
DEC-0299 et
DEC-0300, sans arête
Stock → Purchasing), et l’attendu fournisseur reste calculé chez lui, l’indicateur étant composé par l’hôte
(DEC-0296) ; le
graphe Purchasing → {Stock, Referential} reste acyclique ; aucun de ces modules n’écrit dans
stock. Les frontières et
le régime de migration du module sont prescrits par
TEC-04-007 ;
stock reste dans la même base métier, le même déploiement et la même sauvegarde cohérente.
TEC-ARC-000 — Architecture hybride native + metadata-driven
- Statut : brouillon
- Sources : DEC-0005, EXG-15-001, EXG-13-002/003/004, EXG-14-003
- Prescription : les objets transactionnels industriels et leurs invariants sont implémentés nativement ; les objets, champs et automatisations d’extension sont décrits par métadonnées. Les objets natifs et personnalisés utilisent les mêmes mécanismes d’autorisation, d’audit et les mêmes surfaces API applicables.
- Raison fonctionnelle : préserver la profondeur transactionnelle industrielle tout en permettant l’extensibilité sans fork.
- Contraintes et invariants : un moteur metadata-driven ne réimplémente ni ne contourne les transitions, contrôles d’intégrité ou écritures des objets transactionnels natifs ; une capacité offerte à un objet personnalisé ne reçoit pas de régime de permission, audit ou API inférieur.
- Données : les modèles relationnels des métadonnées et de leurs valeurs restent à détailler dans la section données ; leur propriété appartient au module qui porte la capacité d’extension.
- Interfaces et événements : GraphQL porte les lectures et REST les écritures ; le runtime d’automatisation est disponible au Lot 0, l’éditeur visuel au Lot 6.
- Sécurité et audit : RBAC objet/action, permissions par champ, record rules et audit trail couvrent les objets natifs et personnalisés.
- Exploitation : les capacités et droits effectivement exposés sont vérifiables dans les schémas API et les preuves d’audit.
- Vérification : à spécifier
- Questions ouvertes : modèle relationnel des métadonnées, limites des automatisations et articulation avec les modules installables.
- Réalisation : à référencer.
TEC-ARC-001 — Monolithe Laravel modulaire
- Statut : valide
- Sources : DEC-0016
- Prescription : chaque déploiement Elena doit être construit comme un monolithe Laravel modulaire formant une application Laravel unique dédiée à une société.
- Raison fonctionnelle : fournir un socle transactionnel cohérent sans distribuer artificiellement les domaines fonctionnels.
- Contraintes et invariants : les capacités métier sont organisées en modules au sein du même produit applicatif ; leurs contrats de communication respectent
TEC-ARC-003et leurs lectures Eloquent intermodules respectentTEC-ARC-004. - Données :
TEC-DAT-001organise les schémas des modules dans la base métier du déploiement ; la séparation des données entre déploiements est prescrite parTEC-OPS-002. - Interfaces et événements : les appels synchrones passent par les classes
PublicApiprescrites dansfrontieres-intermodules.md; un fournisseur peut remettre un builder Eloquent publié et actor-scoped pour une lecture composée ; les réactions secondaires peuvent utiliser des événements après commit. - Sécurité et audit : chaque module reste soumis aux mécanismes transverses d’autorisation et d’audit du produit.
- Exploitation : la construction et le déploiement local produisent une application Laravel unique dans le projet Docker Compose dédié à la société ; toutes ses dépendances locales respectent
TEC-OPS-002. L’infrastructure de qualification et de production est différée. - Vérification : VER-FCT-001
- Questions ouvertes : aucune
- Réalisation :
elena:docs/decisions/58-cible-monolithe-modulaire.md.
TEC-ARC-002 — SPA Vue unique détenue par l’hôte
- Statut : valide
- Sources : DEC-0016
- Prescription : Elena doit fournir une SPA Vue unique dont l’amorçage et la propriété relèvent de l’hôte applicatif.
- Raison fonctionnelle : garantir une expérience utilisateur unifiée entre les domaines et modules.
- Contraintes et invariants : un module peut contribuer des routes et vues, mais ne démarre pas une SPA autonome concurrente.
- Données : aucun stockage métier n’est prescrit par cette contrainte de composition.
- Interfaces et événements : les contributions des modules sont intégrées au point d’amorçage détenu par l’hôte.
- Sécurité et audit : les mécanismes d’authentification, d’autorisation et d’audit de la SPA sont spécifiés séparément.
- Exploitation : le build frontend produit une SPA hôte unique ; son amorçage suit
TEC-INT-004, sans rebuild par déploiement, avec priorités locales explicites et reverse proxy supporté. - Vérification : VER-FCT-002
- Questions ouvertes : aucune
- Réalisation : documentation d’architecture du dépôt
elena.
TEC-ARC-005 — Saisie des valeurs numériques
- Statut : valide
- Sources : DEC-0310, DEC-0010
- Prescription : Elena doit saisir toute valeur numérique d’un formulaire avec le composant numérique unique du design system, en précision exacte, sans valeur fantôme pour un champ vidé et avec le séparateur décimal de la langue de l’utilisateur.
- Raison fonctionnelle : une quantité, un montant ou un taux saisi doit être enregistré tel que l’utilisateur l’a tapé, et un champ laissé vide ne doit jamais devenir zéro.
- Contraintes et invariants : une valeur que le serveur traite en décimal exact reste une chaîne décimale canonique de bout en bout, jamais un flottant ; les bornes et le nombre de décimales saisissables suivent la validation serveur ; un champ facultatif vidé reste vide ; la saisie accepte la virgule comme le point ; un champ de formulaire rattaché à une colonne numérique de la base est saisi par le composant numérique, un sélecteur restant permis pour une clé étrangère choisie dans une liste. Les règles d’usage du composant relèvent des guidelines UX du design system (§8), qui en restent la source de vérité.
- Données : un manifeste versionné décrit la nature de chaque colonne du schéma migré ; il est généré depuis le schéma, jamais édité à la main.
- Interfaces et événements : chaque champ de formulaire déclare sa colonne de rattachement ; la garde de lint croise cette déclaration avec le manifeste.
- Sécurité et audit : la validation serveur reste l’autorité ; le contrôle de saisie n’en est qu’un préalable.
- Exploitation : aucune
- Vérification : VER-FCT-147, VER-FCT-148
- Questions ouvertes : aucune
- Réalisation :
DsNumberInputdu design system 2.25.0 et guidelines UX §8 ; danselena, règle ESLintelena/db-column-input-kind, manifestedatabase/column-kinds.jsonet commandeelena:column-kinds.
TEC-ARC-006 — Colonne BDD déclarée sur chaque champ de formulaire
- Statut : valide
- Sources : DEC-0283
- Prescription : Elena doit déclarer, sur chaque champ de formulaire relié à une donnée persistée, le nom réel de sa colonne de base de données, dans tous les modules et toutes les boîtes de saisie ; un champ non persisté le déclare explicitement.
- Raison fonctionnelle : la recette, le support, la reprise de données et l’intégration rapprochent un champ d’écran de sa donnée sans lire le code.
- Contraintes et invariants : la colonne déclarée existe dans le schéma migré ; aucune colonne fictive ; un champ dérivé porte sa colonne principale ou se déclare non persisté ; les critères de recherche d’une liste sont des filtres et ne sont pas concernés.
- Données : le manifeste des colonnes de
TEC-ARC-005sert de référentiel d’existence. - Interfaces et événements : l’infobulle « Colonne BDD » du design system affiche et copie la colonne, en français et en anglais.
- Sécurité et audit : le nom de colonne est une métadonnée technique ; il n’expose aucune valeur.
- Exploitation : aucune
- Vérification : VER-FCT-149
- Questions ouvertes : aucune
- Réalisation : dans
elena, règles ESLintelena/form-field-db-columnetelena/db-column-input-kind; propunpersisteddeDsFormField(design system 2.26.0).
TEC-ARC-007 — Ergonomie commune des listes et des fiches
- Statut : valide
- Sources : DEC-0311, DEC-0038, DEC-0029
- Prescription : Elena doit présenter toutes ses listes et toutes ses fiches selon une ergonomie commune : menu d’actions de ligne unique proposant « Ouvrir dans cet onglet », colonnes personnalisables, recherche de base dans la disposition standard, aucune sélection sans action groupée ni suppression depuis une liste ; écrans en pleine largeur ; fiches ouvertes en consultation, dont la suppression n’est proposée qu’en modification.
- Raison fonctionnelle : l’utilisateur retrouve les mêmes gestes sur chaque écran et ne déclenche aucune action irréversible sans être passé délibérément en modification.
- Contraintes et invariants : une ligne de liste ne porte aucune icône d’action isolée ; le double-clic sur une ligne ouvre la fiche dans un nouvel onglet de travail, « Ouvrir dans cet onglet » remplace la liste par la fiche dans l’onglet de travail courant ; la sélection de lignes n’est activée que si une action groupée l’exploite ; une liste offre au minimum la recherche sur le code ou le nom et le filtre de statut de l’entité qui en a un ; aucun écran ne borne ni ne centre la largeur de son contenu ; seule la création ouvre une fiche en modification ; en consultation, les éléments d’édition restent visibles et grisés, jamais masqués, hors suppression ; la suppression, en modification, reste confirmée et réservée au détenteur de la permission ; l’état actif d’un article est un champ de sa fiche (case « Actif »), enregistré avec elle sous les permissions d’activation et de désactivation. Les règles d’usage des composants relèvent des guidelines UX du design system, qui en restent la source de vérité.
- Données : aucune ; la disposition des colonnes choisie par l’utilisateur est une préférence d’affichage.
- Interfaces et événements : les composants de liste et de fiche du design system portent le menu de ligne, l’ouverture dans l’onglet courant, la personnalisation des colonnes et la bascule consultation-modification ; les écrans les consomment sans les réimplémenter.
- Sécurité et audit : masquer une action n’est pas une autorisation ; le serveur refuse toute suppression, activation ou désactivation sans la permission correspondante, et l’enregistrement de l’état actif d’un article est audité comme l’action qu’il remplace.
- Exploitation : aucune
- Vérification : VER-FCT-150, VER-FCT-151, VER-FCT-152
- Questions ouvertes : aucune
- Réalisation : à produire (EPIC Plane ELENA-1410).
TEC-ARC-008 — Saisie des dates, booléens, listes fixes et références
- Statut : valide
- Sources : DEC-0312, DEC-0044, DEC-0283, DEC-0080, DEC-0043
- Prescription : Elena doit saisir chaque valeur de formulaire avec le composant correspondant au type de sa colonne : composant de date à la précision de la colonne, case ou interrupteur pour un booléen, liste pour un choix fixe, sélecteur de fiche pour une référence à une autre table.
- Raison fonctionnelle : l’utilisateur choisit une fiche par son code et son libellé plutôt que par un identifiant technique, saisit une date sans format à deviner et défait un choix facultatif.
- Contraintes et invariants : une date-heure n’est pas découpée en deux champs ; la conversion entre heure locale et instant serveur se fait dans le mapper ; un booléen n’est jamais une liste « Oui / Non » ; la valeur stockée d’un choix fixe est son code ; une référence n’est jamais saisie en tapant son identifiant ; toute valeur facultative se vide et reste vide ; un sélecteur de référence dont la liste est indisponible conserve la valeur courante et le signale ; un pays est un code ISO 3166-1 alpha-2 choisi dans une liste traduite, sans rejet serveur d’une valeur historique ; l’unité d’un article référence la table des unités ; le type d’article reste un texte libre (DEC-0043).
- Données : le manifeste des colonnes de
TEC-ARC-005décrit la nature fine de chaque colonne, sa nullabilité, la table référencée par clé étrangère et les valeurs d’une contrainte d’énumération. - Interfaces et événements : le sélecteur de références est détenu par l’hôte et lit la surface GraphQL de lecture ; aucun module n’importe un autre module ; une table propre au module se choisit par l’API du module.
- Sécurité et audit : les listes proposées suivent les droits de lecture de la surface GraphQL ; un droit manquant rend la liste indisponible sans exposer de donnée.
- Exploitation : aucune
- Vérification : VER-FCT-153, VER-FCT-154
- Questions ouvertes : aucune
- Réalisation : design system 2.27.0 (
DsDateInputtypé,DsSelectetDsSearchableSelectfacultatifs, guidelines UX §9 à §12) ; danselena,RecordReferenceFieldet le registrerecord-references, règleelena/db-column-input-kindsur le manifeste v2.
TEC-ARC-009 — Onglets de travail dérivés du registre de navigation
- Statut : valide
- Sources : DEC-0321, DEC-0311
- Prescription : Elena doit dériver les onglets de travail de son registre de navigation ; toute entrée de menu — écrans de paramétrage compris — ouvre ou active un onglet de travail portant son libellé, et aucune route ne déclare son onglet en propre.
- Raison fonctionnelle : l’utilisateur retrouve un onglet de travail pour chaque écran accessible par le menu, sous un libellé prévisible, sans exception par écran ni liste blanche de routes à maintenir.
- Contraintes et invariants : l’onglet est dérivé du registre de navigation de l’hôte, jamais d’une liste blanche de préfixes de route ; une entrée de liste ouvre l’onglet de la liste et une route de fiche ou de création ouvre son propre onglet, la réouverture d’une fiche déjà ouverte l’activant sans doublon ; une route sans entrée de menu (route technique, écran hors-shell assumé) n’ouvre pas d’onglet et ne laisse pas un onglet actif porter le nom d’une autre page ; chaque écran routé d’un module se rattache à une entrée de menu, sous garde ; le libellé provient du libellé localisé de l’entrée de menu, les libellés spécifiques portés par la vue restant admis. Les règles d’usage du composant d’onglets de travail (
DsWorkspaceTabs, qui appartient au shell) et de ses gestes relèvent des guidelines UX du design system (§0 et §3), qui en restent la source de vérité. - Données : aucun stockage métier n’est prescrit ; l’ordre et les libellés persistés des onglets suivent le design system (§3).
- Interfaces et événements : le registre de navigation de l’hôte est la surface d’entrée ; un module contribue des entrées de menu et des routes, sans redéfinir la dérivation d’onglets.
- Sécurité et audit : le rattachement d’une entrée de menu tient compte des droits de lecture ; aucune donnée n’est exposée par la seule présence d’un onglet.
- Exploitation : la dérivation est vérifiable par le test frontend de rattachement écran de module → entrée de menu.
- Vérification : VER-FCT-156
- Questions ouvertes : aucune
- Réalisation : correctif du dépôt
elena137a3f9b(ELENA-1407,resources/js/navigation/workspace-tab.ts) ; recette navigateur à exécuter. Hors périmètre : le sort des onglets déjà ouverts d’un module désactivé (réserve de DEC-0321) est suivi par QF-0077 (methode/questions-onglets-de-travail.md) et donnera lieu, à la réponse, à un complément de la présente prescription ou à une prescription nouvelle.
TEC-ARC-010 — Aucune fiche créée ou modifiée dans une boîte modale
- Statut : valide
- Sources : DEC-0323, DEC-0311
- Prescription : Elena doit créer et modifier chaque fiche dans un onglet de travail : l’action de création d’une liste ouvre une fiche vierge en modification dans un onglet, jamais une boîte modale, et les lignes filles d’une fiche se saisissent dans la fiche, dès la création, comme les adresses d’un tiers, et sont enregistrées avec elle.
- Raison fonctionnelle : la saisie d’une fiche reste dans l’espace de travail : elle se retrouve dans les onglets, signale ses modifications non enregistrées et peut rester ouverte à côté d’une autre fiche.
- Contraintes et invariants : chaque ligne fille est un bloc de champs libellés au-dessus, déclarant leur colonne (TEC-ARC-006), sans validation ligne par ligne, présenté par un composant commun unique : action de retrait toujours présente en fin de ligne (indisponible avec son motif quand la ligne ne peut disparaître), action d’ajout sous la dernière ligne ; aucune ligne fille n’est composée hors de ce composant, sous garde CI ; une ligne refusée par le serveur reste en saisie sans bloquer les autres, un conflit reprend la valeur du serveur ; une ligne ne se retire que si elle n’est pas encore enregistrée ou si le métier en permet la suppression ; une boîte modale ne contient qu’une confirmation, éventuellement avec un motif unique ; la saisie des paramètres d’une action métier sur la fiche ouverte n’y est admise que déclarée et justifiée dans le code ; la fiche créée remplace son onglet de création ; une fiche existante s’ouvre en consultation (TEC-ARC-007). Les règles d’usage des composants relèvent des guidelines UX du design system (§17), qui en restent la source de vérité.
- Données : aucune.
- Interfaces et événements : chaque fiche expose une route de création (
…/new) et une route de fiche, rattachées au registre de navigation (TEC-ARC-009). - Sécurité et audit : inchangés ; les permissions de création et de modification restent vérifiées par le serveur.
- Exploitation : aucune
- Vérification : VER-FCT-157
- Questions ouvertes : aucune
- Réalisation : dans
elena, règles ESLintelena/no-form-dialogetelena/record-child-rows, composantRecordChildRows; fiches Catégorie fiscale, Unité et Barème d’éco-contribution en onglet de travail (branchefeat/fiches-en-onglet) ; guidelines UX §17 du design system.
TEC-ARC-011 — Aucun texte de refus du serveur affiché
- Statut : valide
- Sources : DEC-0324
- Prescription : Elena ne doit afficher aucun texte de refus rédigé par le serveur : chaque fiche contrôle sa saisie avec ses propres messages dans la langue de la session, et un refus que seul le serveur connaît est signalé sur le champ concerné par un message générique traduit.
- Raison fonctionnelle : l’utilisateur lit chaque refus dans la langue de sa session, quel que soit le service qui l’a émis.
- Contraintes et invariants : la fiche vérifie avant l’envoi les règles qu’elle connaît (requis, formats, bornes, doublons entre ses lignes filles) ; d’un refus de validation du serveur, elle ne retient que la liste des champs refusés ; un refus métier porteur d’un code est traduit par son code, un code inconnu reçoit un message générique traduit ; le serveur reste la référence et refuse toute saisie invalide.
- Données : aucune.
- Interfaces et événements : un utilitaire commun de l’interface lit les champs refusés d’une réponse de validation ; c’est le seul point de lecture des erreurs de validation d’API.
- Sécurité et audit : inchangés.
- Exploitation : aucune
- Vérification : VER-FCT-158
- Questions ouvertes : aucune
- Réalisation : dans
elena, utilitaireresources/js/platform/server-field-errors.tset règle ESLintelena/no-raw-server-errors.
TEC-ARC-012 — Paramètre à deux états nommés : interrupteur nommé à effet immédiat
- Statut : valide
- Sources : DEC-0325, DEC-0312
- Prescription : Elena doit présenter un paramètre à deux états nommés par un interrupteur qui affiche le nom de son état courant, à effet immédiat, et ne doit jamais recalculer le libellé d’une case selon son état.
- Raison fonctionnelle : l’utilisateur lit l’état du paramètre sur le contrôle lui-même et sait qu’une bascule est appliquée sans autre geste.
- Contraintes et invariants : le libellé du champ nomme le paramètre, l’interrupteur nomme l’état, mot d’état avant l’interrupteur dans une zone large du plus long des deux mots (basculer ne déplace pas l’interrupteur), les interrupteurs d’un même écran alignés sur une verticale ; chaque bascule écrit son paramètre, une écriture à la fois ; un échec ramène l’interrupteur à la valeur connue du serveur ; une modification concurrente recharge les valeurs affichées ; une bascule ne réécrit pas un autre paramètre ; dans un formulaire enregistré, la case garde un libellé fixe qui dit l’état vrai.
- Données : aucune.
- Interfaces et événements : les contrats d’écriture existants sont conservés ; l’écran renvoie les autres paramètres tels que le serveur les a connus, sous verrou de version.
- Sécurité et audit : droits inchangés ; une entrée d’audit par bascule.
- Exploitation : aucune
- Vérification : VER-FCT-159
- Questions ouvertes : aucune
- Réalisation : design system 2.31.0 (
DsSwitchlabelOn/labelOff/reserveLabels, mot d’état avant l’interrupteur, groupe aligné, guidelines UX §10, règleds-guards/boolean-state-label) ; danselena,Modules/Sales/resources/js/views/PricePolicyAdminView.vueet libellés fixes des fiches Devise, Catégorie fiscale et Unité.
TEC-ARC-013 — Recherche de la palette de commandes : accents ignorés, faute de frappe tolérée
- Statut : valide
- Sources : DEC-0326, DEC-0311
- Prescription : la palette de commandes d’Elena doit retrouver une entrée quelle que soit la casse, les accents et les séparateurs tapés, tolérer une faute de frappe dans un mot de la requête et classer ses résultats du plus sûr au plus approximatif.
- Raison fonctionnelle : l’utilisateur qui tape vite, sans accent ou avec une faute retrouve la page, l’onglet ou la fiche cherchés sans conclure à tort qu’ils n’existent pas.
- Contraintes et invariants : chaque mot tapé doit être retrouvé ; la tolérance est bornée par la longueur du mot tapé (aucune faute jusqu’à 3 caractères, 1 de 4 à 7, 2 de 8 à 11, 3 au-delà) et ne s’applique jamais à un mot qui contient un chiffre ; exact, début de mot, contenu, puis approximatif ; les groupes suivent leur meilleur résultat ; Entrée active le meilleur.
- Données : aucune.
- Interfaces et événements : la correspondance appartient au composant partagé du design system ; l’application fournit les entrées de la palette sans les enrichir pour la recherche.
- Sécurité et audit : aucun effet ; la palette n’expose que les entrées déjà autorisées.
- Exploitation : aucune
- Vérification : VER-FCT-160
- Questions ouvertes : aucune
- Réalisation : design system 2.30.0 (
DsCommandPalette,commandMatch.ts, guidelines UX §18, storyRecherche) ;elenadev@0d6ec499consomme la version 2.30.1 ; recette navigateur validée le 2026-09-29.
TEC-ARC-014 — Fermeture d’un onglet de travail : clic molette comme la croix, confirmation dans l’application
- Statut : valide
- Sources : DEC-0329, DEC-0321
- Prescription : Elena doit fermer un onglet de travail au clic molette, sur sa pastille comme sur sa ligne de la liste des onglets masqués, par le même chemin que la croix, et confirmer la fermeture d’une fiche modifiée dans une boîte de l’application dont l’action d’abandon est présentée comme destructive.
- Raison fonctionnelle : l’utilisateur ferme ses fiches au geste d’un onglet de navigateur sans risquer de perdre une saisie, et la demande de confirmation s’affiche toujours, quel que soit le réglage du navigateur.
- Contraintes et invariants : le geste est refusé sur un onglet non fermable et pendant un glisser-déposer ; il neutralise le défilement automatique du navigateur ; la croix reste visible sur tout onglet fermable ; aucune boîte native du navigateur (
window.confirm) ; « Annuler » garde l’onglet ouvert ; « Fermer tous les onglets » avec une fiche modifiée suit la même confirmation ; aucun raccourci clavier de fermeture. - Données : aucune.
- Interfaces et événements : le geste appartient au composant partagé d’onglets de travail du design system, qui émet l’événement de fermeture de la croix ; l’hôte porte la confirmation.
- Sécurité et audit : aucun effet ; la fermeture d’un onglet n’écrit aucune donnée.
- Exploitation : aucune
- Vérification : VER-FCT-163
- Questions ouvertes : aucune
- Réalisation : design system 2.32.0 (
DsWorkspaceTabs, guidelines UX §3 règle 3, storyAccessibilite Controles) et 2.33.0 (liste « +N ») ;elenadev@accb5c18(confirmationDsDialog) etdev@c16139bb(abandon en rouge, design system 2.33.0) ; recette navigateur validée le 2026-09-30.
TEC-ARC-016 — Lectures gardées par permission, délégation bornée, aucune trace d’exception hors développement
- Statut : valide
- Sources : DEC-0332
- Prescription : Elena doit exiger la permission de consultation de la ressource pour toute lecture de données métier, borner toute attribution de rôle ou de permission aux permissions effectives de l’acteur, et ne rendre aucune trace d’exception hors des environnements de développement et de test.
- Raison fonctionnelle : Un utilisateur ne voit que ce qu’on lui a confié et ne peut pas s’octroyer ni octroyer davantage.
- Contraintes et invariants : inventaire fermé des lectures GraphQL (gardée, auto-autorisée ou publique justifiée) sous test ; super-administrateur attribuable par un super-administrateur seul ; un acteur ne modifie ni ne supprime un rôle qu’il porte ni une identité plus puissante ; refus
403 delegation_deniedavec les permissions en cause ; le mode débogage n’est honoré qu’enlocalettesting. - Données : aucune.
- Interfaces et événements : directive d’autorisation des lectures GraphQL ; services de rôles, d’attribution et d’identités.
- Sécurité et audit : refus audités comme toute écriture refusée ; aucune donnée sensible dans les réponses d’erreur.
- Exploitation : aucune
- Vérification : VER-SEC-030, VER-SEC-031
- Questions ouvertes : aucune
- Réalisation :
elenaMR !318 ; recette navigateur à exécuter.
TEC-ARC-017 — Brouillon d’onglet de travail pour toute fiche, espace de travail par compte
- Statut : valide
- Sources : DEC-0333, DEC-0329, DEC-0321
- Prescription : Elena doit conserver la saisie de toute fiche modifiée dans son onglet de travail jusqu’à son enregistrement ou son abandon confirmé, ranger l’espace de travail par compte, le vider à la déconnexion volontaire et le conserver à l’expiration de session.
- Raison fonctionnelle : Aucune saisie n’est perdue par un geste de navigation, et aucun compte ne voit les onglets d’un autre.
- Contraintes et invariants : le brouillon est une copie non réactive de la saisie ; tout écart avec l’état chargé marque l’onglet « modifié » ; abandon confirmé dans une boîte de l’application (Annuler, croix, clic molette, « Fermer tous », déconnexion) ; clé de stockage suffixée par le sujet du compte, ancienne clé commune effacée ; expiration de session annoncée après reconnexion.
- Données : stockage local du navigateur, par compte.
- Interfaces et événements : magasin de l’espace de travail de l’hôte ; composable de mode d’édition des fiches.
- Sécurité et audit : aucun brouillon d’un compte n’est lisible par un autre compte du même poste.
- Exploitation : aucune
- Vérification : VER-FCT-166
- Questions ouvertes : aucune
- Réalisation :
elenaMR !315 ; recette navigateur à exécuter.
TEC-ARC-018 — Actions dangereuses de fiche en consultation, dans le menu « Plus »
- Statut : valide
- Sources : DEC-0334, DEC-0311
- Prescription : Elena doit proposer les actions dangereuses d’une fiche uniquement en consultation, en bas de son menu « Plus », et placer « Enregistrer » à la place exacte de « Modifier » en modification.
- Raison fonctionnelle : Un double-clic réflexe sur « Modifier » ne déclenche jamais une action destructrice.
- Contraintes et invariants : action dangereuse toujours confirmée et présentée en rouge ; second clic d’un double-clic sur « Modifier » ignoré ; gardes de lint
ds-guards/toolbar-zonesetelena/record-read-mode. - Données : aucune.
- Interfaces et événements : gabarit de fiche du design system (
DsFormScreen,DsMenuActionItem). - Sécurité et audit : aucun effet.
- Exploitation : aucune
- Vérification : VER-FCT-167
- Questions ouvertes : aucune
- Réalisation : design system 2.34.0 (MR !100) et
elenaMR !321 ; recette navigateur à exécuter.
TEC-ARC-019 — Un clic, une action ; saisie numérique sans transformation silencieuse
- Statut : valide
- Sources : DEC-0335, DEC-0310
- Prescription : Elena doit n’exécuter qu’une action par clic, ne pas empiler de notifications identiques et afficher le motif de refus d’une saisie numérique sans jamais la transformer ni l’effacer.
- Raison fonctionnelle : Une rafale de clics ne crée pas de doublon et l’utilisateur comprend pourquoi sa valeur est refusée.
- Contraintes et invariants : second clic dans les 500 ms ignoré et aucun clic pendant l’action en cours, sauf bouton déclaré répétable ; notification identique remplacée ; signe, exposant, précision et bornes signalés sous le champ.
- Données : aucune.
- Interfaces et événements : composants partagés du design system (
DsButton, notifications,DsNumberInput,DsLabel). - Sécurité et audit : aucun effet.
- Exploitation : aucune
- Vérification : VER-FCT-168
- Questions ouvertes : aucune
- Réalisation : design system 2.34.0 (MR !100) et
elenaMR !321 ; recette navigateur à exécuter.
TEC-ARC-020 — Accès refusé, page et fiche introuvables, aucune action inerte
- Statut : valide
- Sources : DEC-0336, DEC-0332
- Prescription : Elena doit déclarer les permissions de chaque écran, afficher un écran unique « Accès refusé » sans droit, « Page introuvable » pour une adresse inconnue et « Fiche introuvable » pour une fiche absente, et masquer toute action sans effet.
- Raison fonctionnelle : L’utilisateur distingue un refus, une absence et une liste réellement vide.
- Contraintes et invariants : au moins une permission par route ; entrée de menu et écran aux mêmes droits ; écran de création sous permission de création ; aucun nom technique de permission affiché ; liste des gabarits PDF sous
pdf_template.design; l’API reste la frontière de sécurité ; fiche inconnue ou d’identifiant mal formé, administration comprise, affichée « Fiche introuvable » dans un onglet du même nom, sans action de modification ; « Compte actif » non modifiable sur sa propre fiche. - Données : aucune.
- Interfaces et événements : métadonnées des routes des modules ; composant racine de l’hôte.
- Sécurité et audit : l’écran de refus ne remplace pas le contrôle serveur.
- Exploitation : aucune
- Vérification : VER-FCT-169, VER-FCT-178
- Questions ouvertes : aucune
- Réalisation :
elenaMR !314, !330 et !331 ; recette navigateur à exécuter.
TEC-ARC-021 — Mise en forme selon la locale et le fuseau, textes sans référence interne
- Statut : valide
- Sources : DEC-0337
- Prescription : Elena doit mettre en forme toute valeur affichée selon la langue de la session et le fuseau du navigateur, sans arrondi, échanger les instants au format ISO 8601 avec fuseau et n’afficher aucune référence au cahier des charges ni jargon technique.
- Raison fonctionnelle : L’utilisateur lit des heures justes et des nombres dans son format usuel.
- Contraintes et invariants : type date-heure de l’API avec fuseau, ancienne forme sans fuseau lue comme UTC ; module de mise en forme commun ; garde de test des textes affichés ; pages de connexion en français par défaut.
- Données : aucune.
- Interfaces et événements : type scalaire date-heure GraphQL ; module de mise en forme de l’hôte ; thème du fournisseur d’identité.
- Sécurité et audit : aucun effet.
- Exploitation : aucune
- Vérification : VER-FCT-170
- Questions ouvertes : aucune
- Réalisation :
elenaMR !317 ; recette navigateur à exécuter.
TEC-ARC-022 — Refus rattachés au champ, codes canoniques, bornes et verrous optimistes
- Statut : valide
- Sources : DEC-0338, DEC-0324
- Prescription : Elena doit porter dans tout refus de validation le code de la règle en échec par champ, normaliser les codes administrés en majuscules, borner toute saisie à ce que la donnée peut porter et protéger les fiches partagées par un verrou optimiste.
- Raison fonctionnelle : L’utilisateur sait quel champ corriger et une modification concurrente n’est jamais perdue en silence.
- Contraintes et invariants : réponse 422 porteuse de
rules(champ → codes de règle) ; format de code[A-Z0-9][A-Z0-9._-]{0,63}, unités UCUM comparées sans casse ; aucun dépassement en erreur 500 ; conflit 409 avec rechargement proposé (tiers : date de modification attendue ; rôles : révision attendue) ; formulaire de critères avec bouton d’envoi sous gardeelena/search-form-submit; quantité de ligne strictement positive et au plus 999 999 999 ; date de document entre le 01/01/2000 et un an après le jour, livraison au plus dix ans après le jour ; fichier d’import vide refusé (non_empty_file). - Données : migration de reprise des codes tiers et articles échouant sur doublon de casse.
- Interfaces et événements : rendu des erreurs de validation de l’API ; aide
serverFieldErrorsde l’hôte. - Sécurité et audit : aucun texte serveur affiché (DEC-0324).
- Exploitation : aucune
- Vérification : VER-FCT-171, VER-FCT-180
- Questions ouvertes : aucune
- Réalisation :
elenaMR !316 et !331 ; recette navigateur à exécuter.
TEC-ARC-023 — Numéro au succès, création atomique, remises bornées
- Statut : valide
- Sources : DEC-0339, DEC-0347
- Prescription : Elena doit exécuter les contrôles déterminables d’une validation numérotée sans créer de tentative ni consommer de numéro, créer un devis ou une commande avec ses lignes en une transaction, et borner les remises en pourcentage à 0–100 %.
- Raison fonctionnelle : Aucun numéro n’est perdu pour un refus prévisible et aucune pièce fantôme n’apparaît.
- Contraintes et invariants : refus « non tenté » ; création exigeant les droits de création et de modification ; priorité et ordre d’une règle tarifaire ≤ 999 999 ; remise hors 0–100 % jamais appliquée au chiffrage, règles existantes hors bornes désactivées par la reprise
MIG-SALES-PRICE-RULE-BOUNDS-001; devis ou commande à total HT négatif non validable (negative_total), chiffrage négatif permis (DEC-0129) ; la validation d’un avoir est une seule transaction (ValidateCreditNoteOrchestrator, qui remplace les orchestrateurs d’attribution et de complétion) : numéro pris puis contrôles rejoués, refus ou panne annulant l’attribution, refus « non tenté » tracé parcredit_note.validation.refused, numéros d’avoir consécutifs. - Données : aucune nouvelle table.
- Interfaces et événements : façades de validation des documents numérotés ; création de devis et de commande.
- Sécurité et audit : contrôle des droits avant toute tentative.
- Exploitation : aucune
- Vérification : VER-FCT-172, VER-FCT-179, VER-FCT-184
- Questions ouvertes : aucune
- Réalisation :
elenaMR !319, !331 et !334 ; recette navigateur à exécuter.
TEC-ARC-024 — Validations bloquantes des expéditions directes et des factures
- Statut : valide
- Sources : DEC-0340, DEC-0328
- Prescription : Elena doit refuser la validation d’une expédition directe sans date, destinataire et adresse, et la création ou la validation d’une facture sans adresse de facturation.
- Raison fonctionnelle : Aucun document légal incomplet n’est émis.
- Contraintes et invariants : refus expliqués par leur code traduit (
billing_address_missing…) ; date de livraison ≥ date de commande ; devis sur prospect ou client ; devise par défaut préremplie. - Données : aucune.
- Interfaces et événements : façades de validation Shipping et Billing ; formulaires de ventes.
- Sécurité et audit : aucun effet.
- Exploitation : aucune
- Vérification : VER-FCT-173
- Questions ouvertes : aucune
- Réalisation :
elenaMR !319 ; recette navigateur à exécuter.
TEC-ARC-025 — Aperçu du chiffrage en lecture seule et prix prérempli depuis le tarif
- Statut : valide
- Sources : DEC-0341, DEC-0327, DEC-0317, DEC-0119
- Prescription : Elena doit afficher pendant la saisie d’un devis ou d’une commande brouillon les totaux calculés par le moteur de chiffrage de l’enregistrement, sans rien écrire, et préremplir le prix unitaire d’une ligne non forcée depuis le tarif applicable sans jamais réécrire un prix saisi.
- Raison fonctionnelle : L’utilisateur voit le montant de sa pièce avant de l’enregistrer et part du bon prix sans perdre une saisie volontaire.
- Contraintes et invariants : montants de l’aperçu égaux à ceux de l’enregistrement ; aucune écriture, aucun verrou, aucun audit ; réservé à qui peut créer ou modifier la pièce ; réponse périmée ignorée ; anomalie rattachée à sa ligne ; ligne sans quantité exclue et signalée ; prix forcé ou saisi jamais réécrit, écart au tarif seulement signalé ; chaque anomalie porte les numéros des lignes qu’elle bloque (
line_numbers). - Données : aucune écriture.
- Interfaces et événements :
POST /api/v1/quotations/pricing-previewetPOST /api/v1/sales-orders/pricing-preview(lecture seule) ; panneau des totaux des fiches devis et commande. - Sécurité et audit : droits de création ou de modification de la pièce ; aucun audit (aucun effet).
- Exploitation : aucune
- Vérification : VER-FCT-174, VER-FCT-180
- Questions ouvertes : aucune
- Réalisation :
elenaMR !325 et !331 ; recette navigateur à exécuter.
TEC-ARC-026 — Recherches insensibles à la casse, onglets réservés aux écrans autorisés
- Statut : valide
- Sources : DEC-0342, DEC-0336, DEC-0338
- Prescription : Elena doit rechercher dans les listes sans tenir compte de la casse, n’ouvrir aucun onglet de travail pour un écran refusé ou une adresse inconnue, distinguer les titres d’onglet identiques et ne déclencher aucune lecture non autorisée.
- Raison fonctionnelle : Un code tapé en minuscules est retrouvé et la barre d’onglets ne garde que ce que l’utilisateur peut ouvrir.
- Contraintes et invariants : recherche textuelle insensible à la casse sur tiers, contacts, articles, devis, commandes, expéditions et factures ; pièce non brouillon sans numéro titrée « … sans numéro » ; doublons de titre numérotés « #n » ; recherche également insensible aux accents (
translate()PostgreSQL, ligatures non repliées) ;%,_et\saisis lus littéralement ; aucun champ de référence ne lit sa table sans le droit correspondant. - Données : aucune.
- Interfaces et événements : lectures de liste (GraphQL) ; barre d’onglets de travail ; index des fiches ouvrables.
- Sécurité et audit : aucune lecture hors des droits de l’utilisateur.
- Exploitation : aucune
- Vérification : VER-FCT-175, VER-FCT-177, VER-FCT-178
- Questions ouvertes : aucune
- Réalisation :
elenaMR !328, !329, !330 et !331 ; recette navigateur à exécuter.
TEC-ARC-027 — Devises consultables, clés d’API, dates strictes, plancher de séquence
- Statut : valide
- Sources : DEC-0343
- Prescription : Elena doit accorder par défaut la consultation des devises aux rôles qui créent des pièces, faire choisir le titulaire d’une clé d’API par recherche, refuser comme erreur de requête toute date mal formée passée à une lecture et accepter l’abaissement du plancher d’une séquence.
- Raison fonctionnelle : Les écrans de création sont utilisables par leurs profils et aucune saisie ne produit d’erreur serveur.
- Contraintes et invariants : octroi par défaut appliqué une seule fois par couple rôle-permission ; recherche des titulaires actifs réservée à
api_key.create; date impossible (30 février) refusée ; numéro consommé jamais réattribué. - Données : aucune nouvelle donnée.
- Interfaces et événements : manifeste de permissions du module Référentiel ; lecture
foundationApiKeyOwners; scalaires de date GraphQL stricts. - Sécurité et audit : recherche des titulaires limitée à qui peut émettre une clé.
- Exploitation : octroi effectif au prochain
permissions/sync. - Vérification : VER-FCT-176
- Questions ouvertes : aucune
- Réalisation :
elenaMR !323 et MR !328 ; recette navigateur à exécuter.
TEC-ARC-028 — Client d’un document de vente choisi par recherche
- Statut : valide
- Sources : DEC-0344, DEC-0312, DEC-0340
- Prescription : Elena doit faire choisir le tiers d’en-tête d’une commande, d’une expédition directe ou d’un devis dans un sélecteur à recherche (code ou société), restreint par le serveur aux tiers actifs recevables par le document, et ne jamais charger le référentiel des clients en entier.
- Raison fonctionnelle : Un client se retrouve par le nom de sa société et un fournisseur n’est jamais proposé comme client.
- Contraintes et invariants : clients actifs pour la commande et l’expédition directe, clients et prospects actifs pour le devis ; tiers déjà enregistré affiché par son libellé même hors périmètre, sans être proposé à un autre document ; client obligatoire sur la commande et l’expédition directe, facultatif sur le devis ; une colonne qui référence une table qui grandit (tiers, articles) n’est jamais saisie dans une liste native (garde
elena/db-column-input-kind). - Données : aucune nouvelle donnée.
- Interfaces et événements : lecture GraphQL
third_parties(filtrescode,societe,type,statut, 25 résultats par critère) ; champ de référence de l’hôte (RecordReferenceField, périmètrescope). - Sécurité et audit : lecture sous
third_party.view; sans ce droit, aucune requête. - Exploitation : aucune
- Vérification : VER-FCT-181
- Questions ouvertes : aucune
- Réalisation :
elenaMR !337 ; recette navigateur à exécuter.
TEC-ARC-029 — Création sur place depuis un sélecteur à recherche
- Statut : valide
- Sources : DEC-0345, DEC-0323, DEC-0330
- Prescription : Elena doit proposer, dans tout sélecteur à recherche dont la recherche ne renvoie aucun résultat, de créer la fiche dans un onglet de travail, prérempli du texte tapé et du périmètre du champ (verrouillé), puis rendre la fiche enregistrée au champ d’origine après reprise de la saisie de son onglet.
- Raison fonctionnelle : Une fiche manquante se crée sans abandonner la saisie en cours ni la rechercher de nouveau.
- Contraintes et invariants : proposition seulement sans aucun résultat et avec les droits de la route de création ; jamais de modale ; onglet de création fermé à l’enregistrement ou à l’abandon ; la valeur ne s’applique qu’après la reprise du brouillon de l’onglet d’origine ; onglet d’origine fermé entre-temps : création ordinaire ; tout sélecteur à recherche branche la création (garde
elena/searchable-select-create, exception justifiée). - Données : demande de création conservée côté navigateur pour la durée de la session (
sessionStorage) ; aucune nouvelle donnée serveur. - Interfaces et événements :
DsSearchableSelect(create-label,create, design system 2.36.1) ;useCreateFromSearch/useReferenceCreationRequestet registreRECORD_CREATIONSde l’hôte ; paramètre de routereference-request. - Sécurité et audit : droits de la route de création ; écritures et audit inchangés (création ordinaire de la fiche).
- Exploitation : aucune
- Vérification : VER-FCT-182
- Questions ouvertes : aucune
- Réalisation :
elena-design-systemMR !105 et !106 (2.36.1) ;elenaMR !340 ; recette navigateur à exécuter.
TEC-ARC-030 — Caractère impossible refusé à la frappe dans un champ numérique
- Statut : valide
- Sources : DEC-0346, DEC-0335, DEC-0310
- Prescription : Elena doit refuser à la frappe, sans motif, un caractère qui ne peut appartenir à aucun nombre, et laisser passer tout caractère de nombre et tout collage, qui relèvent de TEC-ARC-019.
- Raison fonctionnelle : Un champ numérique n’affiche pas de lettre tapée par erreur, et le motif sous le champ reste réservé aux valeurs formées hors règles.
- Contraintes et invariants : seule la frappe (
insertText) est filtrée ; chiffres, point, virgule,-,+,eet espaces passent toujours ; collage, remplissage automatique et composition ne sont jamais filtrés ; aucune valeur formée n’est réécrite. - Données : aucune.
- Interfaces et événements :
DsNumberInputdu design system (2.37.0, guidelines UX §8 règle 4). - Sécurité et audit : aucun effet ; la validation serveur reste l’autorité (TEC-ARC-005).
- Exploitation : aucune
- Vérification : VER-FCT-183
- Questions ouvertes : aucune
- Réalisation : design system 2.37.0 (MR !108) ;
elenaMR !343 ; recette validée le 2026-10-01 sur elena-1 (frappe, exposant, collage, enregistrement et Ctrl+S bloqués).
TEC-ARC-031 — Concepteur PDF : bloc ajouté décalé en cascade
- Statut : valide
- Sources : DEC-0348
- Prescription : Elena doit décaler en cascade, dans la zone imprimable, un bloc ajouté par la palette du concepteur PDF dont l’origine est déjà occupée sur la même surface, sans jamais modifier une position explicite.
- Raison fonctionnelle : Chaque bloc ajouté est visible et l’utilisateur ne croit pas l’ajout perdu.
- Contraintes et invariants : pas de +5 mm en x et en y ; origines distantes de moins de 0,5 mm considérées identiques ; seuls les blocs de la même surface comptent ; sortie de zone : reprise au point de départ décalé d’un pas vers la droite ; zone pleine : point de départ ; glisser-déposer, coordonnées, import et duplication jamais décalés ; gabarits homonymes autorisés.
- Données : aucune nouvelle donnée.
- Interfaces et événements : ajout d’un bloc par la palette du concepteur.
- Sécurité et audit : aucun
- Exploitation : aucune
- Vérification : VER-FCT-185
- Questions ouvertes : aucune
- Réalisation :
elenaMR !336 ; recette navigateur à exécuter.
TEC-ARC-032 — Reprise silencieuse de la session dans un nouvel onglet
- Statut : valide
- Sources : DEC-0349, DEC-0333
- Prescription : Elena doit, pour un onglet qui démarre sans jeton, tenter une reprise silencieuse de la session de l’annuaire avant toute page de connexion, en conservant l’adresse demandée et en gardant les jetons propres à l’onglet.
- Raison fonctionnelle : Ouvrir une fiche dans un nouvel onglet ne coûte ni mot de passe ni rechargement.
- Contraintes et invariants : jetons en
sessionStorage, jamais dans un stockage partagé ; tentativeprompt=noneen cadre caché, durée bornée ; échec (login_required, délai, réseau) : page de connexion affichée une seule fois, sans boucle, puis retour à l’adresse demandée. - Données : aucune nouvelle donnée.
- Interfaces et événements : démarrage de l’application hôte ; client OIDC du kit client existant.
- Sécurité et audit : aucun jeton exposé à un autre onglet ; aucune authentification contournée, la reprise exigeant une session valide de l’annuaire.
- Exploitation : aucune
- Vérification : VER-SEC-032
- Questions ouvertes : aucune
- Réalisation :
elenaMR !335.
Références de réalisation
- Ces références décrivent la réalisation de la prescription ; elles n’en sont pas la source normative.
- ADR du dépôt
elena:docs/decisions/58-cible-monolithe-modulaire.md,docs/decisions/59-autorisation-ecritures-monolithe-modulaire.md. - Documentation d’architecture :
elena/docs/architecture/(Docusaurus technique et client). - Parité fonctionnelle post-migration : programme dédié (voir
../../fonctionnel/40-parite-v2/).
À approfondir dans cette section
- Vue C4 niveaux 1-2 (contexte, conteneurs) au format
c4plantuml. - Vérification exécutable de la frontière native + metadata-driven (DEC-0005) dans l’architecture migrée.
- Matrices de compatibilité entre les cinq dépôts et versions de prépublication ;
le contrat de livraison stable du produit est fixé par
TEC-OPS-004.