Apparence
17. Imports / Exports
👔 En clair
Ce que l'application sait produire (les fichiers Excel remis au projet) et ce qu'elle sait avaler (les fichiers qu'on lui donne). Cette page décrit l'existant ; l'extension proposée — gabarit d'import du référentiel, export « développeur », aller-retour sur les anomalies — est décrite en 🆕 A7.
17.1 Exports (existant)
| Export | Format | Contenu | Depuis |
|---|---|---|---|
| Dossier de recette | XLSX (ExcelJS) | 7 feuilles : Page de garde · Synthèse · Tests-Flux · Étapes · Anomalies · Journal · CRIMs | Synthèse, Journal, Anomalies, CRIMs, Détail |
Détail des feuilles : mise en forme riche (couleurs par état/gravité/statut, en-têtes figés, page de garde avec métadonnées campagne + statistiques). Nommage : recette-<PROJET>-<CODE\|REF>-<date>.xlsx.
ℹ️ L'export Excel (ExcelJS) reste généré côté client en v2 (voir F11). Un point d'extension est prévu si le volume croît : basculer la génération dans une action serveur.
17.2 Imports (existant)
| Import | Format | Comportement |
|---|---|---|
| CRIMs (en masse) | XLSX / CSV UTF-8 | v1 : importCrims → PUT /api/crims. v2 : mutation Convex crims.bulkUpsert — upsert par code (création + mise à jour desc/module) |
✅ Q4 est tranchée (20/07/2026) : le format d'import est aligné sur le standard du marché (TestRail / Xray), et le périmètre importable est étendu bien au-delà des CRIMs. Spécification complète : 🆕 A7 — Imports / Exports Excel.
17.3 Contraintes techniques communes
Ces contraintes s'appliquent à tout import ou export volumineux et découlent des limites de la plateforme Convex (voir Exigences non-fonctionnelles) :
| Contrainte | Conséquence de conception |
|---|---|
| Query / mutation : 1 s de code utilisateur | Le parsing d'un fichier ne peut pas vivre dans une mutation → action |
| Argument d'une action Node : 5 Mio | Un fichier volumineux ne se passe pas en argument → dépôt préalable dans Convex File Storage, l'action lit le stockage |
| 16 000 documents écrits par transaction | Les écritures d'import se font par lots |
| 32 000 documents lus par transaction | Les contrôles d'existence (upsert) s'appuient sur un index, jamais sur un balayage de table |
Bibliothèque retenue : ExcelJS (déjà en place pour l'export), pour sa génération mise en forme et sa lecture en flux à mémoire constante. ⚠️ Ne jamais faire d'aller-retour lecture → écriture sur un classeur portant des validations de données (bug connu de la bibliothèque : les plages sont éclatées puis retriées, produisant des règles dupliquées). Les gabarits sont générés puis lus, jamais réécrits.