Projet Elena

Cahier des charges · ARCH

Architecture Laravel, Vue et PostgreSQL

Dernière modification du document source :

Date déclarée dans le document :

Document de référence présenté dans son intégralité. Le cahier des charges décrit le périmètre prévu ; il ne constitue pas une preuve de recette.

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

Cartographie des dépôts durables de l’écosystème Elena et de leur articulation avec le CDC

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

TEC-ARC-001 — Monolithe Laravel modulaire

TEC-ARC-002 — SPA Vue unique détenue par l’hôte

TEC-ARC-005 — Saisie des valeurs numériques

TEC-ARC-006 — Colonne BDD déclarée sur chaque champ de formulaire

TEC-ARC-007 — Ergonomie commune des listes et des fiches

TEC-ARC-008 — Saisie des dates, booléens, listes fixes et références

TEC-ARC-009 — Onglets de travail dérivés du registre de navigation

TEC-ARC-010 — Aucune fiche créée ou modifiée dans une boîte modale

TEC-ARC-011 — Aucun texte de refus du serveur affiché

TEC-ARC-012 — Paramètre à deux états nommés : interrupteur nommé à effet immédiat

TEC-ARC-013 — Recherche de la palette de commandes : accents ignorés, faute de frappe tolérée

TEC-ARC-014 — Fermeture d’un onglet de travail : clic molette comme la croix, confirmation dans l’application

TEC-ARC-016 — Lectures gardées par permission, délégation bornée, aucune trace d’exception hors développement

TEC-ARC-017 — Brouillon d’onglet de travail pour toute fiche, espace de travail par compte

TEC-ARC-018 — Actions dangereuses de fiche en consultation, dans le menu « Plus »

TEC-ARC-019 — Un clic, une action ; saisie numérique sans transformation silencieuse

TEC-ARC-020 — Accès refusé, page et fiche introuvables, aucune action inerte

TEC-ARC-021 — Mise en forme selon la locale et le fuseau, textes sans référence interne

TEC-ARC-022 — Refus rattachés au champ, codes canoniques, bornes et verrous optimistes

TEC-ARC-023 — Numéro au succès, création atomique, remises bornées

TEC-ARC-024 — Validations bloquantes des expéditions directes et des factures

TEC-ARC-025 — Aperçu du chiffrage en lecture seule et prix prérempli depuis le tarif

TEC-ARC-026 — Recherches insensibles à la casse, onglets réservés aux écrans autorisés

TEC-ARC-027 — Devises consultables, clés d’API, dates strictes, plancher de séquence

TEC-ARC-028 — Client d’un document de vente choisi par recherche

TEC-ARC-029 — Création sur place depuis un sélecteur à recherche

TEC-ARC-030 — Caractère impossible refusé à la frappe dans un champ numérique

TEC-ARC-031 — Concepteur PDF : bloc ajouté décalé en cascade

TEC-ARC-032 — Reprise silencieuse de la session dans un nouvel onglet

Références de réalisation

À approfondir dans cette section