Aller au contenu

PD-285 — Expression de besoin

1. Contexte

La pipeline de cohérence inter-EB (Phase 2, décision D2) a détecté une incohérence dans la chaîne de contraintes de taille fichier :

  • PD-101 (iOS) : autorise l'upload jusqu'à 500 MB (storage.mobile_upload_max_bytes)
  • PD-252 (backend) : limite à 100 MB via DocumentCategoryConfig.DEFAULT.maxSizeBytes

Cela viole la règle SYSTÈME >= BACKEND >= CLIENT : le backend (100 MB) est plus restrictif que le client iOS (500 MB). Un utilisateur mobile peut tenter un upload de 300 MB qui sera accepté côté iOS mais rejeté silencieusement côté backend.

2. Problème

Un utilisateur iOS tentant d'uploader un fichier entre 100 MB et 500 MB verra son upload échouer au niveau du backend avec une erreur ERR-79-004 (taille fichier dépassée), alors que l'application mobile le lui a autorisé. L'expérience utilisateur est incohérente et l'erreur est opaque.

3. Besoin

Relever les limites de taille fichier de 100 MB (104 857 600 bytes) à 500 MB (524 288 000 bytes) pour les catégories suivantes : - DocumentCategoryConfig.DEFAULT.maxSizeBytes - DocumentCategoryConfig.B2C_EVIDENCE_MINOR.maxSizeBytes

Amender le besoin et la spécification PD-252 (politique formats préservation) pour refléter la nouvelle contrainte storage.category_max_bytes : 500 MB.

4. Périmètre

Fichiers impactés (backend)

  • src/modules/documents/services/category-config.service.ts — constantes DEFAULT.maxSizeBytes et B2C_EVIDENCE_MINOR.maxSizeBytes
  • src/modules/documents/services/category-config.service.spec.ts — tests unitaires
  • src/modules/documents/middleware/category-size.middleware.ts — middleware de pré-validation (utilise DEFAULT, impacté indirectement)

Fichiers impactés (doc PD-252)

  • ProbatioVault-doc/docs/epics/legal-compliance/PD-252-politique-formats-preservation/PD-252-besoin.md — amendement contrainte storage.category_max_bytes
  • ProbatioVault-doc/docs/epics/legal-compliance/PD-252-politique-formats-preservation/PD-252-specification.md — amendement valeur de référence

Hors périmètre

  • Configuration multipart (NORMATIVE_DEFAULTS.MAX_FILE_SIZE = 5 TB) : inchangée
  • Quotas utilisateur (cumulative size, concurrent, per day) : inchangés
  • Client iOS (PD-101) : aucun changement requis

5. Critères d'acceptation

  • CA-01 : DocumentCategoryConfig.DEFAULT.maxSizeBytes vaut 524288000 (500 × 1024 × 1024)
  • CA-02 : DocumentCategoryConfig.B2C_EVIDENCE_MINOR.maxSizeBytes vaut 524288000
  • CA-03 : Le middleware category-size.middleware.ts rejette les uploads > 500 MB (via Content-Length header)
  • CA-04 : Le service category-config.service.ts rejette les uploads > 500 MB avec ERR-79-004
  • CA-05 : Les tests unitaires sont mis à jour et passent (assertions sur les nouvelles valeurs)
  • CA-06 : Le besoin et la spécification PD-252 sont amendés avec storage.category_max_bytes : 500 MB
  • CA-07 : La pipeline de cohérence inter-EB ne signale plus d'incohérence PD-101 vs backend

6. Contraintes

  • Rétrocompatibilité : Aucun risque — on relève une limite, les fichiers < 100 MB continuent de fonctionner identiquement
  • Storage : Les buckets S3 OVH n'ont pas de limite par objet en dessous de 5 TB (PD-43). Pas d'impact infra.
  • Performance : Les uploads multipart sont déjà gérés avec des parts de 5-100 MB. Un fichier de 500 MB = 5 à 100 parts, bien dans les limites (max 10 000 parts).

7. Origine

Détecté par : coherence-report.py (Level 1.1 — Contraintes incompatibles, issue #5) Décision PO : D2 — Option A (relever backend category à 500 MB) Stories liées : PD-252 (politique formats), PD-101 (upload iOS)

8. Risques

Risque Mitigation
Upload de fichiers très volumineux (300-500 MB) Quotas existants (per day, cumulative) limitent l'abus
Timeout réseau sur gros fichiers Multipart upload avec reprise (PD-43), session 24h max

9. Arbitrages

  • B2C_EVIDENCE_MINOR est relevé à 500 MB au même titre que DEFAULT (décision PO). Les contraintes spécifiques mineurs (types MIME restreints, audit renforcé) restent inchangées — seule la taille maximale est alignée.
  • L'amendement PD-252 est documentaire (pas de nouveau code) : ajout d'une note d'amendement dans le besoin et la spécification existants.