← STATIONSCH 01 — FICHE/CH/01 · ÉCHAP POUR FERMERFREN

Legis — gestion de dossiers juridiques multi-tenant

Un produit SaaS vertical qui numérise le quotidien d'un cabinet d'avocats algérien : accueil des clients, enregistrement des affaires dans la hiérarchie judiciaire, suivi des audiences et des renvois, finances du cabinet, et documents en arabe recevables devant les tribunaux. L'ingénierie intéressante n'est pas le CRUD — c'est de modéliser un système juridique étranger assez fidèlement pour que le résultat soit utilisable au tribunal.

DOMAINE
29 entités, hiérarchie judiciaire
MULTI-TENANCE
Schéma partagé, isolation par requête
AUTH
Rafraîchissement tournant, détection de rejeu
SURFACE
212 endpoints REST, 180 gardes de droits
PREMIER RENDU
977 → 168 Ko, chunk d'entrée gzippé
FIG. 1 — CHEMIN D'UNE REQUÊTE
LIMITE DE DÉBIT
par IP
JWT
cookie
TENANT
portée requête
LICENCE
lecture / écriture
SERVICE

↳ redis injoignable → on laisse passer, la connexion reste ouverte↳ licence expirée → lecture seule, jamais de blocage

FIG. 2 — CHAÎNAGE DES APPELS
AFFAIRE
première instance
APPEL
lie les deux
AFFAIRE
cour d'appel

↳ la nouvelle affaire est elle-même susceptible d'appel — la chaîne se répète

SOURCE
76 900 lignes · 3 dépôts
DONNÉES
29 entités JPA · 31 migrations
API
212 REST · 2 requêtes GraphQL
RÉALISÉ
15 mois · 5 contributeurs

LE POINT DIFFICILE

Avec le sens droite-à-gauche appliqué à la page, mêler un libellé arabe et un numéro d'affaire latin dans un même bloc de texte fait planter le moteur PDF dans sa passe de réordonnancement bidirectionnel — et chaque document juridique associe exactement les deux. La solution a été de cesser de demander à cet algorithme de le résoudre : libellé et valeur sont devenus deux nœuds de texte dans une ligne flex, chacun de direction homogène, si bien que le chemin défaillant n'est jamais emprunté.

CE QUE J'AI ÉCARTÉ

Faire monter l'affaire dans la hiérarchie via une colonne de degré. Un appel est une seconde procédure, avec ses propres audiences, sa décision et ses honoraires ; les fusionner fait perdre le dossier dont l'avocat a besoin. Un appel crée désormais une nouvelle affaire liée à l'originale, et la chaîne se répète sans cas particulier.

CE QUE JE CORRIGERAIS EN PREMIER

L'isolation des locataires est appliquée dans la couche service à partir du contexte de la requête : un seul filtre oublié devient une fuite de confidentialité. La réponse est la sécurité au niveau des lignes, indexée sur une variable de session, pour que l'isolation survive à un WHERE manquant au lieu de reposer sur la rigueur des relectures.