Nicolas Cantu 61cec6f430 Sync ia_dev: token resolution via .secrets/<env>/ia_token, doc updates
**Motivations:**
- Align master with current codebase (token from projects/<id>/.secrets/<env>/ia_token)
- Id resolution by mail To or by API token; no slug

**Root causes:**
- Token moved from conf.json to .secrets/<env>/ia_token; env from directory name

**Correctifs:**
- Server and scripts resolve project+env by scanning all projects and envs

**Evolutions:**
- tickets-fetch-inbox routes by To address; notary-ai agents and API doc updated

**Pages affectées:**
- ai_working_help/server.js, docs, project_config.py, lib/project_config.sh
- projects/README.md, lecoffreio/docs/API.md, gitea-issues/tickets-fetch-inbox.py
2026-03-16 15:00:23 +01:00

26 KiB
Raw Permalink Blame History

| À jourScripts - Documentation Complète

Dernière | À jourmise à jour : 2026-01-28 Version | À jour: 2.1.0

Référence | À jourunique (checks de déploiement) : docs/DEPLOYMENT.md#cartographie-des-checks-de-déploiement-source-unique

Ce | À jourdocument consolide toute la documentation relative aux scripts backend (build, base de données, synchronisation, ancrage, reprocessing, analyse).


| À jour📋 Table des Matières

  1. | À jourScripts Backend
  2. | À jourScripts d'Ancrage V3
  3. | À jourScripts de Reprocessing
  4. | À jourScripts d'Analyse
  5. | À jourÉtat des Scripts
  6. | À jourPerformances
  7. | À jourUtilisation
  8. | À jourScripts backend vs deploy

| À jourScripts Backend

| À jourVue d'Ensemble

Tous | À jourles scripts backend sont disponibles en deux versions :

  1. | À jour****Version compilée : Pour exécution en production (sur le serveur cible)
  2. | À jour****Version locale : Pour développement local (suffix :local)

Format | À jour:

npm | ✅ **À jour**run <script>        # Production (code compilé dans dist/)
npm | ✅ **À jour**run <script>:local  # Développement (ts-node direct)

| À jourScripts de Build et Démarrage

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jourbuild | npm run build | Compile le code TypeScript vers JavaScript | | | À jourbuild-db | npm run build-db | Crée une migration Prisma en mode développement | | | À jourstart | npm run start | Démarre l'application API REST (port 3001) | | | À jourcron | npm run cron | Démarre les tâches planifiées | | | À jourapi:start | npm run api:start | Exécute les migrations puis démarre l'API | | | À jourdev | npm run dev | Lance le serveur en mode développement avec hot-reload |

| À jourScripts de Base de Données

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jourmigrate | npm run migrate | Déploie les migrations Prisma en production | | | À jourseed | npm run seed | Seed la base de données avec les données initiales |

| À jourScripts de Configuration

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jourconfig:import-env | npm run config:import-env | Importe les variables d'environnement depuis un fichier vers system_configuration |

| À jourScripts d'Analyse

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jouranalyze:user | npm run analyze:user | Analyse le profil d'un utilisateur | | | À jouranalyze:folder | npm run analyze:folder | Analyse complète d'un dossier |

| À jourScripts de Remédiation

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jourensure:seats | npm run ensure:seats | Assure que les utilisateurs avec affiliation active ont un siège (création si nécessaire pour UNLIMITED) |

| À jourScripts d'Activation

| | À jourScript | Commande | Description | |--------|---------|-------------| | | À jouractivate:subscriptions | npm run activate:subscriptions | Active automatiquement les abonnements pour des utilisateurs spécifiques | | | À jourpromote:superadmin | npm run promote:superadmin | Promouvoir super-admin | | | À jourtoken:get | npm run token:get | Génère token super-admin |


| À jourScripts d'Ancrage V3

| À jourContexte

Les | À jourscripts daudit et dancrage V3 sont disponibles en mode host-native (scripts_v2).

  • | À jour****Host-native (scripts_v2) : exécution directe sur le host (PostgreSQL local port 5432, ClamAV local port 3310) avec configuration injectée via system_configuration.

Important | À jour: les scripts V3 supposent que les migrations Prisma et les colonnes nécessaires sont présentes (sinon, lancer --migrateResolveDatabase puis relancer le script).

| À jourScripts Disponibles

| À jour1. Audit des Ancrages Manquants

Script | À jour: audit-missing-anchors.js

Usage | À jour:

# | ✅ **À jour**Version compilée (recommandée)
ENV=prod | ✅ **À jour**npm run anchorage:audit

# | ✅ **À jour**En host-native (scripts_v2) : exécuter sur la machine env avec DATABASE_URL correctement configurée
# | ✅ **À jour**(recommandé : passer par deploy/scripts_v2/ pour garantir les variables et migrations)

Description | À jour:

  • | À jourAnalyse tous les documents validés sans ancrage
  • | À jourAnalyse tous les dossiers archivés sans ancrage
  • | À jourGénère un CSV avec la liste des documents/dossiers à réancrer
  • | À jourNe modifie aucune donnée (lecture seule)

Résultat | À jour:

  • | À jourAffichage console avec statistiques
  • | À jourCSV généré : logs/audit-missing-anchors_YYYYMMDD_HHMMSS.csv

| À jour2. Ancrage V3 de Dossiers Existants

Script | À jour: anchor-existing-folders-v3.js

Usage | À jour:

# | ✅ **À jour**Ancrage tous dossiers LIVE + ARCHIVED (par défaut depuis v2.0.1)
ENV=prod | ✅ **À jour**npm run anchorage

# | ✅ **À jour**Dry-run (simulation)
ENV=prod | ✅ **À jour**npm run anchorage -- --all --batch=1 --dry-run

# | ✅ **À jour**Ancrage réel avec limite batch
ENV=prod | ✅ **À jour**npm run anchorage -- --all --batch=1

# | ✅ **À jour**Ancrage de dossiers spécifiques
ENV=prod | ✅ **À jour**npm run anchorage -- --folder-uids=uid1,uid2,uid3

# | ✅ **À jour**Uniquement dossiers archivés
ENV=prod | ✅ **À jour**npm run anchorage -- --all-archived --batch=10

Options | À jour:

  • | À jour--all-archived : Tous les dossiers ARCHIVED sans ancrage
  • | À jour--all-validated : Tous les dossiers VALIDATED sans ancrage
  • | À jour--all : Tous les dossiers VALIDATED + ARCHIVED
  • | À jour--folder-uids=uid1,uid2,... : Liste UIDs dossiers spécifiques
  • | À jour--batch=N : Nombre max de dossiers par batch (défaut: 10)
  • | À jour--dry-run : Simulation sans ancrage réel
  • | À jour--skip-documents : Ancrer seulement dossiers (pas documents individuels)

| À jour3. Réancrage de Documents/Dossiers

Script | À jour: reanchor-documents.js

Usage | À jour:

# | ✅ **À jour**Dry-run (simulation)
ENV=prod | ✅ **À jour**npm run anchorage:reanchor -- --dry-run

# | ✅ **À jour**Réancrage réel
ENV=prod | ✅ **À jour**npm run anchorage:reanchor -- --document-uids=uid1,uid2

Options | À jour:

  • | À jour--document-uids=uid1,uid2,... : Liste UIDs documents spécifiques
  • | À jour--folder-uids=uid1,uid2,... : Liste UIDs dossiers spécifiques
  • | À jour--all-missing : Réancrer TOUS les documents/dossiers sans ancrage (⚠️ utiliser avec précaution)
  • | À jour--batch=N : Nombre max de documents/dossiers par batch (défaut: 50)
  • | À jour--dry-run : Simulation sans ancrage réel

| À jour4. Nettoyage Ancres Dossiers Incomplets

Script | À jour: clean-incomplete-folder-anchors.ts

Usage | À jour:

# | ✅ **À jour**Depuis le conteneur backend
cd | ✅ **À jour**lecoffre-back-main
npx | ✅ **À jour**ts-node src/scripts/clean-incomplete-folder-anchors.ts --dry-run
npx | ✅ **À jour**ts-node src/scripts/clean-incomplete-folder-anchors.ts

Actions | À jour:

  • | À jourIdentifie les dossiers ancrés avec complétion < 100%
  • | À jourSupprime les ancres correspondantes dans office_folder_anchors
  • | À jourRéinitialise les liens folder_anchor_uid = NULL dans office_folders

| À jourWorkflow Recommandé

  1. | À jour****Audit initial : | À jour bash | ✅ **À jour** ENV=prod npm run anchorage:audit | ✅ **À jour**

  2. | À jour****Test avec dry-run : | À jour bash | ✅ **À jour** ENV=prod npm run anchorage -- --all-archived --batch=1 --dry-run | ✅ **À jour**

  3. | À jour****Ancrage réel : | À jour bash | ✅ **À jour** ENV=prod npm run anchorage -- --all-archived --batch=5 | ✅ **À jour**


| À jourScripts de Reprocessing

| À jourVue d'Ensemble

Les | À jourscripts de reprocessing garantissent la complétude des métadonnées (filigrane, ancrage, proof_data, antivirus) sur tous les documents de la plateforme.

| À jourScripts Disponibles

| À jour1. Bilan des Documents

Script | À jour: bilan-documents-pprod.ts

Description | À jour:

  • | À jourGénère un bilan complet de tous les documents avec leurs métadonnées
  • | À jourAnalyse : filigrane, ancrage, IPFS, proof_data, antivirus

Utilisation | À jour:

# | ✅ **À jour**En local (développement)
cd | ✅ **À jour**lecoffre-back-main
npx | ✅ **À jour**ts-node src/scripts/bilan-documents-pprod.ts [--csv]

# | ✅ **À jour**En production (sur le serveur, dans le répertoire backend)
node | ✅ **À jour**-r module-alias/register dist/scripts/bilan-documents-pprod.js [--csv]

Options | À jour:

  • | À jour--csv : Exporte également le bilan en CSV dans logs/bilan-documents-pprod_YYYYMMDD_HHMMSS.csv

| À jour2. Reprocessing Complet

Script | À jour: reprocess-all-documents-complete.ts

Description | À jour:

  • | À jourReprocessing COMPLET de TOUS les documents
  • | À jourGarantit 100% de complétude sur tous les critères : | À jour - Filigrane présent | À jour - Ancrage complet avec tx_id | À jour - Proof_data complet (structure V3.0.0) | À jour - Suppression des fichiers expirés

Utilisation | À jour:

# | ✅ **À jour**En local (développement)
cd | ✅ **À jour**lecoffre-back-main
npx | ✅ **À jour**ts-node src/scripts/reprocess-all-documents-complete.ts [--dry-run] [--only-check]

# | ✅ **À jour**En production (sur le serveur, dans le répertoire backend)
node | ✅ **À jour**-r module-alias/register dist/scripts/reprocess-all-documents-complete.js [--dry-run] [--only-check]

Options | À jour:

  • | À jour--dry-run : Mode simulation sans traitement réel
  • | À jour--only-check : Mode vérification uniquement (affiche la liste des documents sans traitement)

| À jour3. Reprocessing Documents Incomplets

Script | À jour: reprocess-incomplete-documents-from-ipfs.ts

Description | À jour:

  • | À jourReprocessing ciblé uniquement sur les documents incomplets
  • | À jourPlus rapide que le reprocessing complet

Utilisation | À jour:

# | ✅ **À jour**En local (développement)
cd | ✅ **À jour**lecoffre-back-main
npx | ✅ **À jour**ts-node src/scripts/reprocess-incomplete-documents-from-ipfs.ts [--dry-run] [--only-check]

| À jourWorkflow Recommandé

  1. | À jour****Générer un bilan initial : | À jour bash | ✅ **À jour** powershell -ExecutionPolicy Bypass -File deploy/scripts/run-bilan-documents-pprod.ps1 --csv | ✅ **À jour**

  2. | À jour****Analyser les résultats : | À jour - Identifier les documents incomplets | À jour - Analyser les statistiques globales

  3. | À jour****Reprocesser les documents : | À jour ```bash | À jour # Option A : Reprocessing ciblé (recommandé pour la maintenance) | À jour npx ts-node src/scripts/reprocess-incomplete-documents-from-ipfs.ts

| À jour # Option B : Reprocessing complet (recommandé pour garantir 100%) | À jour powershell -ExecutionPolicy Bypass -File deploy/scripts/run-reprocess-all-complete-pprod.ps1 | À jour ```

  1. | À jour****Vérifier les résultats : | À jour bash | ✅ **À jour** powershell -ExecutionPolicy Bypass -File deploy/scripts/run-bilan-documents-pprod.ps1 --csv | ✅ **À jour**

| À jourScripts d'Analyse

| À jourAnalyse Profil Utilisateur

Script | À jour: analyze-user-profile.ts

Description | À jour: Analyse en détail le profil d'un utilisateur, incluant :

  • | À jourInformations personnelles
  • | À jourRôles globaux et par office
  • | À jourAffiliations multi-office
  • | À jourStatuts d'abonnement Stripe
  • | À jourPlans et limites

Usage | À jour:

# | ✅ **À jour**Par email
npm | ✅ **À jour**run analyze:user -- marie.curie@notaires.fr

# | ✅ **À jour**Par IdNot
npm | ✅ **À jour**run analyze:user -- IDN00046117I

# | ✅ **À jour**Par UID
npm | ✅ **À jour**run analyze:user -- 0135ab77-fcef-4d54-b944-3fc6aa8a107b

# | ✅ **À jour**Depuis un environnement distant (SSH + npm sur le serveur)
ssh | ✅ **À jour**ncantu@<HOST> "cd /srv/4NK/pprod.lecoffreio.4nkweb.com/lecoffre-back-main && npm run analyze:user -- laurence@notaires.fr"

Informations | À jourAffichées :

  1. | À jour****Informations Utilisateur : UID, Email, Prénom, Nom, Téléphone, Rôle global, IdNot, Office principal, Rôle principal, Dates de création et synchronisation
  2. | À jour****Affiliations aux Offices : Pour chaque office affilié, affiche UID Office, IdNot Office, CRPCEN, Statut Office, Adresse, Rôle et permissions, Statut affiliation, Sync IdNot
  3. | À jour****Abonnement Stripe : Si actif, affiche UID Subscription, Stripe Sub ID, Statut, Plan Stripe, Prix, Limites (sièges, dossiers, documents, stockage), Dates (début, fin période, résiliation), Sièges (alloués, utilisés), Métadonnées

Cas | À jourd'Usage :

  • | À jour****Debug Problèmes d'Authentification : Vérifier rôle dans office primaire, statut affiliation, sync IdNot récente
  • | À jour****Vérification Multi-Office : Vérifier office primaire, rôles dans chaque office, cohérence des permissions
  • | À jour****Audit Abonnements : Vérifier statut abonnement, plan Stripe et limites, sièges disponibles, date expiration

Implémentation | À jour:

  • | À jour****Fichier : lecoffre-back-main/src/scripts/analyze-user-profile.ts
  • | À jour****Dépendances : @prisma/client, ConfigLoader, BackendVariables
  • | À jour****Sécurité : Exécution locale ou via SSH (pas d'endpoint HTTP), lecture seule, logs non persistés

| À jourÉtat des Scripts

Dernière | À jourmise à jour : 2026-01-27

| À jourScripts à Jour

| À jourScripts de Migration V1 (Utilisation légitime de infos.json)

Ces | À jourscripts utilisent infos.json pour la migration V1 → V2, ce qui est correct :

| | À jourScript | Usage | Fichier source | Statut | |--------|-------|----------------|--------| | | À jourinject-s3-vars-from-infos.ts | Injection variables Scaleway dans system_configuration | infos-migration-scaleway.json (priorité) ou infos.json (fallback) | À jour - Lit le nouveau fichier en priorité | | | À jourmigrate-files-from-s3.ts | Migration fichiers depuis S3 Scaleway | system_configuration (variables SCW_*) | À jour | | | À jourmigrate-ribs-from-s3.ts | Migration RIBs depuis S3 Scaleway | system_configuration (variables SCW_*) | À jour | | | À jourimport-v1-data-direct-into-v2.sh | Import données V1 depuis base Scaleway | .env.<env>.connectDB (DATABASE_V1_* et DATABASE_*) | À jour - Usage légitime pour credentials V1 | | | À jourimport-v1.sh | Script principal d'import V1 | connectDB (V1) + infos.json (S3/métadonnées) | À jour - Usage légitime | | | À jourrecover-files-from-v1.ts | Récupération fichiers V1 | system_configuration (variables SCW_*) | À jour |

| À jourScripts de Déploiement

| | À jourScript | Usage | Fichier source | Statut | |--------|-------|----------------|--------| | | À jourset-settings.sh | Injection variables dans system_configuration | env-full-<env>-for-bdd-injection.txt + inject-s3-vars-from-infos.ts | À jour - Le script TypeScript gère la priorité | | | À jourgenerate-env-full-from-infos-v2.sh | Génération env-full-*.txt depuis infos_v2.json | infos_v2.json | À jour | | | À jourdeploy.sh | Déploiement principal | env-full-<env>-for-bdd-injection.txt | À jour | | | À jourbuild-and-deploy.sh | Build et déploiement | env-full-<env>-for-bdd-injection.txt | À jour |

| À jourScripts de Configuration SSH/Infrastructure

Ces | À jourscripts utilisent infos.json pour charger des variables de configuration SSH et infrastructure, ce qui est correct car infos.json contient toujours ces variables pour compatibilité :

| | À jourScript | Usage | Fichier source | Statut | |--------|-------|----------------|--------| | | À jourrun-cleanup-disk-space.sh | Nettoyage espace disque | infos.json (variables SSH DEPLOY_SSH_*) | À jour - Usage légitime pour config SSH | | | À jourrun-emergency-cleanup.sh | Nettoyage d'urgence | infos.json (variables SSH DEPLOY_SSH_*) | À jour - Usage légitime pour config SSH | | | À jourrun-check-postgresql.sh | Vérification PostgreSQL | infos.json (variables SSH DEPLOY_SSH_*) | À jour - Usage légitime pour config SSH |

| À jourScripts de Backup/Extraction

Ces | À jourscripts utilisent infos.json pour accéder à Scaleway (extraction code), ce qui est correct pour les opérations de backup :

| | À jourScript | Usage | Fichier source | Statut | |--------|-------|----------------|--------| | | À jourbackup-prod-to-git.sh | Backup production vers Git | infos.json (credentials base de données) | À jour - Usage légitime pour backup | | | À joursync-infos-json-in-project.sh | Synchronisation infos.json entre serveurs | infos.json (synchronisation) | À jour - Usage légitime pour synchronisation |

| À jourScripts TypeScript (Backend)

| À jourScripts de Migration

| | À jourScript | Usage | Statut | |--------|-------|--------| | | À jourinject-s3-vars-from-infos.ts | Injection variables Scaleway | À jour - Lit infos-migration-scaleway.json en priorité | | | À jourmigrate-files-from-s3.ts | Migration fichiers depuis S3 | À jour - Utilise system_configuration | | | À jourmigrate-ribs-from-s3.ts | Migration RIBs depuis S3 | À jour - Utilise system_configuration | | | À jourrecover-files-from-v1.ts | Récupération fichiers V1 | À jour - Utilise system_configuration | | | À jourimport-env-to-db.ts | Import variables dans system_configuration | À jour - Lit env-full-*.txt |

| À jourVérifications Effectuées

  • | À jour Aucun script ne lit directement SCW_* depuis env-full-*.txt (retirées)
  • | À jour Tous les scripts de migration utilisent system_configuration (variables SCW_* injectées)
  • | À jour Le script inject-s3-vars-from-infos.ts lit infos-migration-scaleway.json en priorité
  • | À jour Aucune référence à SECURE_API_KEY ou SECURE_API_BASE_URL dans les scripts
  • | À jour Aucune référence à NEXT_PUBLIC_FC_* ou FRANCE_CONNECT_* dans les scripts
  • | À jour Aucune référence à DOCAPOST_* dans les scripts (déjà retiré)
  • | À jour Aucune référence à SENTRY_* dans les scripts
  • | À jour env-full-<env>-for-bdd-injection.txt ne contient plus de variables Scaleway
  • | À jour infos-migration-scaleway.json créé et utilisé en priorité
  • | À jour infos.json reste disponible comme fallback pour compatibilité

| À jourConclusion

Tous | À jourles scripts sont à jour et fonctionnels.

  • | À jourLes scripts de migration utilisent correctement infos-migration-scaleway.json (priorité) ou infos.json (fallback)
  • | À jourLes scripts de déploiement utilisent correctement env-full-<env>-for-bdd-injection.txt (sans variables Scaleway)
  • | À jourLes scripts de configuration SSH utilisent légitimement infos.json pour les variables DEPLOY_SSH_*
  • | À jourLes scripts de backup utilisent légitimement infos.json pour accéder à Scaleway

Aucun | À jourscript obsolète identifié.


| À jourPerformances

| À jourTemps de Traitement des Fichiers

Les | À jourtemps de traitement typiques pour un fichier PDF sont :

| | À jourÉtape | Temps moyen | Description | |-------|-------------|-------------| | | À jour****Antivirus | 2-36ms | Scan ClamAV du buffer | | | À jour****Normalisation | 0ms | Normalisation du nom de fichier | | | À jour****Conversion | 8-130ms | Conversion en PDF (si nécessaire) + ajout filigrane | | | À jour****Ancrage | 2825-3474ms | Ancrage blockchain Bitcoin Signet (opération la plus longue) | | | À jour****Chiffrement | 0-1ms | Chiffrement du fichier filigrané | | | À jour****IPFS | 904-1685ms | Upload du fichier chiffré sur IPFS | | | À jour****Proof | 0ms | Génération data proof final | | | À jour****Watermark IPFS | 1023-1073ms | Upload du filigrane séparé sur IPFS | | | À jour****Total | 5147-5590ms | Temps total de traitement (~5-6 secondes) |

| À jourObservations

  • | À jour****Ancrage blockchain : Représente ~50-60% du temps total (2.8-3.5 secondes)
  • | À jour****Upload IPFS : Représente ~20-30% du temps total (fichier + filigrane)
  • | À jour****Autres opérations : Très rapides (< 200ms au total)

| À jourOptimisations Possibles

  • | À jourL'ancrage blockchain est l'opération la plus longue et dépend de la latence réseau avec l'API d'ancrage
  • | À jourLes uploads IPFS peuvent être optimisés avec des connexions parallèles si plusieurs fichiers
  • | À jourLe scan antivirus est très rapide (< 40ms) et ne nécessite pas d'optimisation

| À jourUtilisation

| À jourEn Production

Tous | À jourles scripts peuvent être exécutés sur le serveur cible (dans le répertoire backend) :

# | ✅ **À jour**Sur le serveur, dans lecoffre-back-main/
npm | ✅ **À jour**run <script>

# | ✅ **À jour**Avec arguments
npm | ✅ **À jour**run <script> -- --arg=value

# | ✅ **À jour**Exemples
npm | ✅ **À jour**run activate:subscriptions -- --email=user@example.com

| À jourEn Développement Local

Les | À jourscripts :local utilisent ts-node pour exécuter directement le TypeScript sans compilation :

# | ✅ **À jour**Depuis lecoffre-back-main/
npm | ✅ **À jour**run <script>:local

# | ✅ **À jour**Exemples
npm | ✅ **À jour**run anchorage:audit:local
npm | ✅ **À jour**run analyze:user:local -- --email=user@example.com

| À jourPoints d'Attention

| À jourScripts en Production

  • | À jour Toujours exécuter sur le serveur cible : npm run <script> (dans le répertoire backend)
  • | À jour⚠️ Ne jamais lancer directement avec node sur l'hôte (problèmes de chemins et variables)
  • | À jour⚠️ Les scripts modifient la base de données : toujours faire une sauvegarde avant

| À jourScripts Longs

Ces | À jourscripts peuvent prendre du temps :

  • | À jouranchorage:complete : Plusieurs heures
  • | À jourimport:stripe : 5-15 minutes

| À jourScripts Dangereux

Ces | À jourscripts modifient des données critiques :

  • | À jourconfig:import-env : Remplace les configurations
  • | À jouranchorage:fix : Modifie les relations
  • | À jouractivate:subscriptions : Crée des abonnements

| À jour8. Scripts backend vs deploy

Les | À jourdétails des checks de déploiement sont centralisés dans la section source unique : docs/DEPLOYMENT.md | À jour- cartographie des checks de déploiement


| À jourRéférences


Dernière | À jourmise à jour : 2026-01-28 (consolidation SCRIPTS.md, SCRIPTS_STATUS.md, USER_PROFILE_ANALYSIS.md, import_time.md)