HORIZON · Architecture
HHORIZON 04 · Documentation

Architecture

HORIZON est une application métier classique : une SPA statique servie par CDN, des services managés Supabase (PostgreSQL, authentification, API REST, fonctions serverless, stockage), un monolithe modulaire assumé. Aucune couche IA d'exécution en v1 : l'IA sert à fabriquer le produit (HZ-PLN-004 §2), pas à le faire tourner. Principe directeur : aucune décision sans alternative examinée.

Registre des décisions

IdDécisionJustification synthétique
D-01Back-end : Supabase managé, projet hébergé en région Union européenne.Imposée (C-01) ; PostgreSQL standard, auth, RLS, stockage intégrés ; portabilité totale en cas de repli auto-hébergé (R-03).
D-02Front-end : Vue 3 + TypeScript + Vite, Pinia, Vue Router.Alignement avec l'écosystème du commanditaire, typage strict.
D-03Styles : Tailwind CSS contraint par les tokens HORIZON.Vitesse d'exécution du pixel perfect ; aucune couleur hors tokens (lint).
D-04Graphiques : Apache ECharts.Rendu canvas performant, info-bulles riches, thème unique.
D-05Logique métier sensible en Edge Functions (Deno/TypeScript).Exécution serveur auditable ; types partagés avec le front.
D-06Accès données : PostgREST direct sous RLS, pas de BFF en v1.Moins de code ; la sécurité est portée par la base.
D-07Moteur de calcul : paquet TypeScript pur « coeur-calcul », exécuté côté serveur.Une seule implémentation des formules, testée à 90 % minimum.
D-08CI/CD : GitLab CI ; migrations versionnées (outillage Supabase).Cohérence avec l'existant (C-04).
D-09Observabilité : Sentry + journaux plateforme centralisés.Corrélation par request_id, alerte proactive, coût maîtrisé.
D-10Génération PDF : bibliothèque programmatique côté fonction (v1).Déterministe et simple ; bascule documentée vers un service de rendu si la recette l'exige (R-09).
D-11Front hébergé en statique sur Cloudflare Pages (CDN, en-têtes de sécurité stricts via _headers). MAJ session 2 · directive commanditaireSPA sans serveur applicatif ; cache long des ressources empreintes ; aperçus par branche. Détail : Dépôt & déploiement.
D-12Temps : stockage UTC, affichage Europe/Paris, horodatage serveur faisant foi.Cohérence de l'audit et des échéances.

Architecture fonctionnelle

+------------------------------- HORIZON ---------------------------------+
|  Acces & identite   Referentiels        Simulation           Restitution|
|  - authentification - organisations     - simulations        - rapport  |
|  - roles / droits   - utilisateurs      - moteur projection    PDF      |
|  - cloisonnement    - clients (KYC)     - scenarios/hypoth.  - documents|
|                     - affectations      - allocations                   |
|  Pilotage           - produits (v2)     - echeancier         Transverse |
|  - tableau de bord                      - progression        - audit    |
|  - conformite                                                - notif.   |
|  - parametres                                                - recherche|
+--------------------------------------------------------------------------+

Architecture technique et déploiement

Poste conseiller (navigateur)
        |  HTTPS (TLS 1.2+)
        v
  Cloudflare Pages (CDN)  ------->  SPA Vue 3 (fichiers empreintes, cache long)
        |                              en-tetes : CSP stricte, HSTS, X-Frame-Options
        v  HTTPS
+---------------------- Supabase (projet region UE) ----------------------+
|  Auth (GoTrue)   PostgREST (REST)   Edge Functions (Deno)   Storage     |
|      |                 |                  |                    |        |
|      +--------+--------+---------+--------+--------------------+        |
|               v                  v                                      |
|        PostgreSQL 15 (RLS, contraintes, declencheurs d'audit, PITR)     |
+--------------------------------------------------------------------------+
        |                                   |
        v                                   v
  Sentry (erreurs front + fonctions)   Journaux plateforme centralises

GitLab CI --> lint/tests/build --> migrations --> recette --> production

Environnements

EnvironnementUsageDéploiement
DéveloppementInstance Supabase locale (conteneurs) par développeur, jeu de démonstration.Continu, branches de travail.
RecetteProjet Supabase UE dédié : recette, tests visuels et RLS, démonstrations. Aucune donnée réelle (C-05).Automatique à chaque fusion sur la branche principale.
ProductionProjet Supabase UE dédié, PITR, alertes actives.Manuel sur étiquette, double approbation.

Séquences de référence

Bascule de scénario (RNF-03 : moins d'une seconde)

Les trois séries sont retournées et mises en cache local à l'issue du calcul : la bascule Prudent / Équilibré / Dynamique est purement locale (aucun appel réseau), substitution de série et animation 300 ms. Un recalcul serveur n'est déclenché que si les paramètres de la simulation changent.

Export PDF

Navigateur                Edge export-pdf            Storage         PostgreSQL
    |--POST {simulation_id}-->|                          |                |
    |                         |--controle droits + RG-14 (KYC)---------->|
    |                         |--generation PDF (gabarit SFD §12)        |
    |                         |--depot bucket prive « rapports »---->|   |
    |                         |--insert documents + audit--------------->|
    |<--{document_id, url_signee 10 min}                 |               |

Sécurité : menaces et contrôles

MenaceContrôles
Usurpation d'identitéMots de passe robustes (12 caractères min., listes compromises), verrouillage progressif, TOTP, sessions 30 minutes.
Élévation de privilèges, accès inter-organisationsRLS sur 100 % des tables, fonctions d'aide centralisées, suite de tests RLS bloquante en CI, revue à quatre yeux.
Injection et failles applicativesRequêtes paramétrées, validation de schéma (zod) à toutes les entrées, analyse statique et audit des dépendances en CI (OWASP ASVS 2).
Vol de jetons, scripts intersitesCSP stricte, HSTS, X-Frame-Options DENY, bibliothèque officielle pour les sessions.
Fuite de documentsBucket privé, URL signées 10 minutes, journalisation des générations et téléchargements.
Exposition de secretsAucun secret en dépôt (contrôle automatique), variables protégées CI, clé de service jamais côté navigateur, rotation semestrielle.
Altération des preuvesJournal d'audit en ajout seul, alimenté par déclencheurs, sans politique de modification (RG-15).

Observabilité (SLI / SLO)

IndicateurObjectif
Disponibilité (sonde toutes les 60 s, deux points)99,5 % mensuel (RNF-06).
Latence lectures REST (écran de référence)p95 inférieure à 300 ms.
Latence fonction simuler (3 scénarios, 10 ans)p95 inférieure à 800 ms.
Latence export PDFp95 inférieure à 6 s (RNF-04).
Taux d'erreurs 5xxInférieur à 0,5 %.
Sauvegardes et PITR100 % de succès ; tout échec est un incident P2.

Résilience et continuité

Scénario de panneRéponse (RPO 15 min · RTO 4 h ouvrées)
Erreur applicative après déploiementRetour à l'étiquette précédente (SPA + fonctions) : RPO 0, RTO 15 min.
Corruption ou suppression de donnéesRestauration PITR sur instance temporaire, réinjection contrôlée, rejeu via journal d'audit (RB-03).
Indisponibilité prolongée de la plateformePage de maintenance CDN, restauration sur projet de secours UE, bascule DNS (RB-01).
Perte du projet d'hébergement (cas extrême)Export logique hebdomadaire chiffré hors plateforme, réinstallation sur pile auto-hébergée équivalente (réversibilité testée annuellement).

Dimensionnement

Scénario A (v1, retenu · H-01) : 500 utilisateurs actifs, 120 simultanés, 50 000 clients, 200 000 simulations, 50 requêtes/s en pointe, 300 exports PDF/jour. Volumétrie inférieure à 20 Go ; coût plateforme indicatif 150 à 400 € par mois.

Scénario B (forte volumétrie, AMB-05) : leviers identifiés et compatibles, par ordre d'activation : montée de gamme de l'instance puis réplicas de lecture, cache des référentiels, file asynchrone pour les PDF, limitation de débit, pré-agrégation, éclatement par domaine. Étude de charge dédiée avant engagement ; explicitement hors périmètre v1.

Alternatives examinées (synthèse)

SujetRetenuÉcarté et pourquoi
Plateforme back-endSupabase managé UE (imposé et pertinent).Pile auto-hébergée : plan B documenté (R-03) ; back-end sur mesure : coût et délai sans bénéfice.
Cadriciel frontVue 3 + TypeScript.React : seconde culture technique sans réutilisation chez le commanditaire.
Accès aux donnéesPostgREST direct sous RLS.BFF dédié : duplication des contrôles, surface de panne ; réexaminé si orchestrations lourdes.
Exécution du moteurEdge Function TypeScript, résultats historisés.Calcul navigateur : non probant ; microservice Python : surcoût d'exploitation.
DécoupageMonolithe modulaire (frontières internes nettes).Microservices : complexité payée d'avance sans frontière organisationnelle réelle.
RenduSPA statique + CDN.SSR : serveur à exploiter pour un outil authentifié sans enjeu de référencement.

Trajectoire de réalisation (HZ-PLN-004)

PhaseContenuJalon de sortie
Phase 0 · Cadrage (2 sem.)Arbitrage des ambiguïtés, accès Figma, environnements, CI minimale.J1 : décisions actées, environnements opérationnels.
Phase 1 · Socle (3 sem.)Auth, RLS complète, audit, design system Hz*, gabarit, seed.J2 : navigation réelle, suite RLS verte, bibliothèque validée.
Phase 2 · Cœur Simulateur (4 sem.)Écran de référence complet, moteur historisé, machine à états.J3 : CA-01 à CA-04, CA-08, CA-12 démontrés.
Phase 3 · Périmètre complet (3 sem.)Export PDF, notifications, 6 modules périphériques, accessibilité.J4 : zéro page vide, périmètre v1 gelé.
Phase 4 · Durcissement (2 sem.)Charge, sécurité, restauration, recette VABF contradictoire.J5 : procès-verbal signé sans réserve bloquante.
Phase 5 · Production (1 sem. + 2 sem. VSR)Bascule, pilotes, surveillance renforcée, transfert au run.J6 : SLO tenus 2 semaines, transfert signé.

15 semaines, démarrage septembre 2026 (C-06). Charge indicative : 90 à 130 jours-personne. Fabrication augmentée par IA sous revue humaine systématique : aucun livrable d'agent n'atteint la branche principale sans relecteur nommé.