Règles architecturales absolues — custom-routes.ts — Dette technique — Workflows
instance.use() uniquement — jamais app.use() MàJ S63NestJS exige instance.use() pour les routes injectées. Les 102 app.use() restants sont de la dette technique en cours de migration progressive.
getDb() par connexion + db.end() dans finallyToujours ouvrir une connexion par requête, toujours la fermer dans le bloc finally. Ne jamais réutiliser une connexion entre requêtes.
/api/ — routes définies sans ce préfixeLe proxy nginx supprime le préfixe /api/ avant de transmettre à l'API. Les routes dans custom-routes.ts ne commencent jamais par /api/.
window.open()Toute génération PDF doit s'ouvrir dans une modal <iframe> intégrée à la page. La navigation vers un nouvel onglet est interdite.
sessionStorage exclusivementLe token de session du portail client est stocké uniquement en sessionStorage, jamais en localStorage.
La terminologie officielle est BC (Bilan Comportemental). Le terme EDC (Étude de Comportement) est proscrit dans tout le code, la documentation et l'interface.
http.request (pas https) dans Docker MàJ S62Les appels internes Eliot vers localhost:8080 dans le container Docker utilisent http.request, pas https. L'utilisation de https provoquerait des erreurs SSL.
instance.use() POST → _readBody() obligatoire NOUVEAU S63NestJS ne parse pas automatiquement le body des requêtes passant par instance.use(). Toutes les routes POST doivent utiliser le helper _readBody() pour accéder aux données envoyées.
-LiteralPath pour chemins avec [id]Les chemins contenant des crochets (ex: src/app/[id]/page.tsx) doivent utiliser le paramètre -LiteralPath en PowerShell pour éviter l'interprétation des wildcards.
Toutes les fonctionnalités de l'application doivent fonctionner indépendamment d'Eliot. L'agent IA est une couche optionnelle, jamais un prérequis fonctionnel.
COPIER_TOUTES_PAGES_v2.ps1 obligatoire avant tout build frontendLe script de copie doit être exécuté avant chaque docker compose build frontend. L'erreur files.zip éventuellement affichée est inoffensive (verrou OneDrive).
build --no-cache → up -d → restart nginxNe jamais utiliser docker compose restart api seul — cela ne prend pas la nouvelle image. Toujours rebuilder puis redémarrer nginx.
$env:USERPROFILE\Downloads\Jamais dans le répertoire OneDrive du projet. Les scripts Python de manipulation TypeScript évitent les problèmes d'encodage PowerShell avec les caractères français et les backticks.
git pull --rebase avant tout push sur petsuite-docsLe repo docs peut recevoir des commits de plusieurs sessions. Toujours rebaser avant de pousser pour éviter les conflits de merge.
| Dette | Localisation | Sévérité | Plan d'action |
|---|---|---|---|
102 app.use() → migrer vers instance.use() |
custom-routes.ts — liste via mon_script.py |
HAUTE | Migration progressive par module (formules, devis, factures…) |
4 createConnection sur BDD GED |
L2286, L2317, L2355, L2393 | MOYENNE | Créer helper getDbGed() + remplacer les 4 occurrences |
| 3 tools Eliot en doublon dans la liste déclarée | Bloc déclaration tools custom-routes.ts |
MOYENNE | Supprimer les 3 doublons (implémentation déjà propre) |
REG_STATUT résiduel dans un INSERT reglement |
~L56376 custom-routes.ts | HAUTE | Localiser et supprimer (mon_script.py peut identifier la ligne) |
PUT /devis/:id — lignes non supportées |
Route PUT devis | HAUTE | Ajouter logique DELETE/INSERT lignes + whitelist colonnes |
⚠️ 3 doublons dans la liste déclarée (pas dans l'implémentation) — à corriger en S64
S64+ prévu : create_seance · get_planning · send_portail_link