Aller au contenu

PD-252 — Specification canonique de la politique des formats de preservation SAE (v3)

1. Objectif

La User Story PD-252 doit produire une specification contractuelle du document preservation-format-policy.md pour combler le gap GAP-FINAL-004 (ISO 14641 §10.1.1), en definissant de maniere testable et non ambigue :

  • les formats de preservation acceptes ;
  • les niveaux de preservation associes ;
  • les regles de conversion documentaire (documentaires, non implementees en PD-252) ;
  • les validations d’ingestion ;
  • la matrice formats × durees de conservation ;
  • la tracabilite normative et la reference dans le manuel SAE (chapitre ch08).

2. Perimetre / Hors perimetre

Inclus

  • Redaction d’un document normatif preservation-format-policy.md dans le manuel SAE.
  • Formalisation exhaustive des formats acceptes par categorie.
  • Definition formelle des niveaux COMPLETE et BITSTREAM.
  • Definition des regles de conversion a l’ingestion (statut documentaire uniquement).
  • Definition des criteres de validation technique a l’ingestion.
  • Definition de la matrice format × duree legale.
  • Referencement explicite des normes ISO/NF et du RFC interne.
  • Tracabilite explicite vers GAP-FINAL-004.

Exclu

  • Implementation logicielle des conversions de formats.
  • Modification du code backend de validation MIME.
  • Deploiement/achat d’outils (VeraPDF, ClamAV).
  • Migration retroactive des archives existantes.
  • Toute evolution DDL (base de donnees).
  • Les categories backend (DEFAULT, B2C_EVIDENCE_MINOR) ne sont pas redefinies par cette policy.
  • Les bornes min/max de taille pour les categories hors DEFAULT sont hors perimetre PD-252.

3. Definitions

  • SAE : Systeme d’Archivage Electronique.
  • Format de preservation : format explicitement autorise pour conservation long terme.
  • COMPLETE : preservation de lisibilite/interpretabilite (structure + rendu + metadonnees selon format).
  • BITSTREAM : preservation d’integrite binaire uniquement, sans garantie de lisibilite future.
  • Validation MIME : controle MIME declare vs signature binaire (magic bytes).
  • PDF/A : sous-ensemble ISO 19005 pour archivage.
  • Duree legale : duree de conservation exprimee en ISO 8601 (PnY, etc.).

4. Invariants (non negociables)

ID Regle Justification
INV-252-01 Le document preservation-format-policy.md doit exister et etre reference depuis le manuel SAE (ch08). Exigence de conformite documentaire.
INV-252-02 La liste des formats de preservation doit etre exhaustive pour les categories definies dans PD-252. Eliminer l’ambiguite de perimetre.
INV-252-03 Chaque format doit etre associe a un niveau de preservation unique (COMPLETE ou BITSTREAM). Coherence de classification.
INV-252-04 Les regles de conversion a l’ingestion sont documentees comme recommandations non bloquantes en v1. Respect du hors perimetre implementation.
INV-252-05 Les validations d’ingestion minimales doivent etre explicitement listees : MIME, PDF/A, hash SHA3-384, taille, malware. Conformite et robustesse a l’entree.
INV-252-06 Toute donnee structuree utilisee dans la policy doit avoir format/contrainte contractuels definis en §5.1 et references ailleurs sans redefinition. Prevention des ambiguities de format.
INV-252-07 Le modele d’etats de classification est explicite, avec transitions autorisees/interdites et transitions retour documentees. Exigence “transitions inverses”.
INV-252-08 Le lien explicite vers GAP-FINAL-004 doit etre present dans la policy. Tracabilite audit ISO 14641.
INV-252-09 Toute regle non testable dans cette version est marquee NON TESTABLE avec justification. Contractualisation verifiable.

5. Flux nominaux

5.1 Modele de donnees contractuel (formats et contraintes)

Donnee Format / Encodage Longueur / Taille Jeu de caracteres Sensibilite casse Regex Comportement si invalide
formatName String canonique 1..32 caracteres ASCII imprimable case-sensitive ^[A-Z0-9/+.-]{1,32}$ Rejet de l’entree de policy
mimeType RFC 6838 type/subtype (normalisation lowercase obligatoire avant validation) 3..127 caracteres ASCII lowercase + symboles RFC comparaison et stockage en lowercase apres normalisation ^[a-z0-9!#$&^_.+-]+/[a-z0-9!#$&^_.+-]+$ (apres normalisation) Rejet
preservationLevel Enum 1 valeur COMPLETE|BITSTREAM case-sensitive ^(COMPLETE|BITSTREAM)$ Rejet
retentionDuration ISO 8601 duree (sous-ensemble mono-composant) 2..16 caracteres ASCII uppercase + chiffres case-sensitive ^P(\d+Y|\d+M|\d+D)$ Rejet
conversionPriority Enum 1 valeur P1|P2|P3 case-sensitive ^P[1-3]$ Rejet
normativeReference String NORME §section 8..128 caracteres UTF-8 case-sensitive ^[A-Z0-9 .:_-]+ §[0-9.]+$ Rejet
integrityHashAlgorithm Constante SHA3-384 ASCII case-sensitive ^SHA3-384$ Rejet

Notes contractuelles :

  • Les durees combinees (ex: P1Y6M) sont explicitement hors scope de ce contrat v1.
  • Canonicalisation des labels de formats : le nom canonique est celui utilise dans ISO 19005 et les standards respectifs ; aucun alias n’est autorise.
  • Distinction normativeReference vs citations documentaires : Le champ normativeReference (regex ^[A-Z0-9 .:_-]+ §[0-9.]+$) s’applique aux references structurees avec section specifique (ex: ISO 14641 §10.1.1, NF Z42-013 §6.2.4). Les mentions de normes sans section (ex: ISO 19005-1, RFC-PV-PACK) sont des citations documentaires et ne sont PAS des valeurs du champ normativeReference. Les citations documentaires n’ont pas de regex contractuelle ; leur presence est verifiee par existence textuelle dans la policy.

5.2 Parametres numeriques contractualises

Parametre Valeur par defaut Min Max Unite Contexte Percentile Hors bornes
Taille fichier categorie DEFAULT 500 0 500 MB Validation ingestion backend (rappel — valeur definie dans DocumentCategoryConfig, relevee de 100 a 500 MB par PD-285) N/A Rejet ingestion
Duree “contrats commerciaux” 10 10 10 ans Matrice legale N/A Rejet de la policy
Duree “factures” 10 10 10 ans Matrice legale N/A Rejet de la policy
Duree “documents probatoires” 30 30 30 ans Matrice legale N/A Rejet de la policy
Duree “preuves numeriques (mineurs)” 30 30 30 ans Matrice legale N/A Rejet de la policy
Duree “donnees techniques” 5 5 5 ans Matrice legale N/A Rejet de la policy

5.3 SLA temporels

  • Aucune transition temporelle d’etat technique n’est geree par PD-252 (story documentaire).
  • Les durees de conservation sont des contraintes de contenu de policy (pas un moteur d’expiration implemente ici).
  • Mention obligatoire : Aucune transition temporelle identifiee (au sens SLA d’execution applicative).

5.4 Flux F1 — Catalogue des formats acceptes

  1. Definir les categories : Documents textuels, Images, Donnees structurees, Texte brut, Audio/Video.
  2. Pour chaque categorie, lister les formats autorises.
  3. Associer a chaque format un niveau COMPLETE ou BITSTREAM.
  4. Controler unicite des noms de format.
  5. Pour Factur-X : utiliser la representation PDF/A-3B avec facture XML embarquee (CII ou UBL, conforme EN 16931), niveau de preservation COMPLETE.
  6. Discrimination FACTUR-X / PDF/A-3B : ces deux formats partagent le meme mimeType=application/pdf. La discrimination repose sur la detection d'un flux XML embarque conforme CII ou UBL (EN 16931). Cette detection est couverte par la validation PDF/A (PLANIFIE, PD-NEW). En attendant l'implementation, la classification repose sur le formatName declare par l'utilisateur a l'ingestion.

5.4b Liste canonique des formats de preservation

formatName mimeType preservationLevel Categorie
PDF/A-1B application/pdf COMPLETE Documents textuels
PDF/A-2B application/pdf COMPLETE Documents textuels
PDF/A-3B application/pdf COMPLETE Documents textuels
JPEG image/jpeg BITSTREAM Images
PNG image/png BITSTREAM Images
TIFF image/tiff BITSTREAM Images
JSON application/json COMPLETE Donnees structurees
XML application/xml COMPLETE Donnees structurees
FACTUR-X application/pdf COMPLETE Documents textuels
TXT text/plain BITSTREAM Texte brut
CSV text/csv BITSTREAM Texte brut
MP4 video/mp4 BITSTREAM Audio/Video
WAV audio/wav BITSTREAM Audio/Video
MOV video/quicktime BITSTREAM Audio/Video

5.5 Flux F2 — Regles de conversion a l’ingestion (documentaires)

  1. Lister format source et format cible de preservation.
  2. Associer une priorite (P1..P3) et le statut “story separee”.
  3. Marquer explicitement “non bloquant v1”.
  4. Si une implementation est planifiee mais non creee, utiliser PLANIFIE (PD-NEW) avec la note : Story non encore creee dans le backlog. Sera creee lors de la planification du sprint suivant.

5.6 Flux F3 — Validations a l’ingestion

  1. MIME declare vs contenu reel.
  2. Validation PDF/A pour documents PDF/A revendiques.
  3. Calcul hash SHA3-384.
  4. Controle taille selon categorie.
  5. Scan malware avant stockage.

Tableau de suivi documentaire des validations :

Validation Regle contractuelle Statut implementation
MIME declare vs contenu reel Obligatoire IMPLEMENTE
Validation PDF/A Obligatoire pour tout format base PDF/A (PDF/A-1B, PDF/A-2B, PDF/A-3B, FACTUR-X) PLANIFIE (PD-NEW)
Hash integrite SHA3-384 Obligatoire IMPLEMENTE
Controle taille Obligatoire selon categorie backend IMPLEMENTE
Scan malware Obligatoire avant stockage PLANIFIE (PD-NEW)

Note statuts planifies :

  • PD-NEW = Story non encore creee dans le backlog. Sera creee lors de la planification du sprint suivant.
  • Clause de non-conformite technique : Les validations en statut PLANIFIE (PD-NEW) sont des exigences cibles documentees, et non des declarations de conformite technique. La policy reconnait explicitement le gap entre l'exigence documentee et l'implementation effective. Ce tracking constitue une mesure compensatoire de gouvernance au sens ISO 14641 §10.3 (plan d'actions correctives). En audit, la presence du statut PLANIFIE avec suivi backlog atteste de la prise en charge du gap, pas de sa resolution.

5.7 Flux F4 — Matrice formats × durees legales

  1. Pour chaque type documentaire, definir duree legale.
  2. Associer formats admissibles.
  3. Associer niveau de preservation.
  4. Verifier alignement avec sections normatives citees.
Type documentaire Duree Formats acceptes Niveau
Contrats commerciaux P10Y PDF/A-1B, PDF/A-2B, PDF/A-3B COMPLETE
Factures P10Y PDF/A-1B, PDF/A-2B, PDF/A-3B, FACTUR-X COMPLETE
Documents probatoires (textuels) P30Y PDF/A-1B, PDF/A-2B COMPLETE
Documents probatoires (images) P30Y TIFF BITSTREAM
Preuves numeriques (mineurs) P30Y JPEG, PNG, TIFF, MP4, WAV, MOV BITSTREAM
Donnees techniques (structurees) P5Y JSON, XML COMPLETE
Donnees techniques (texte brut) P5Y CSV, TXT BITSTREAM

Note duree "Preuves numeriques (mineurs)" : P30Y est la duree plafond conservatrice couvrant la majorite du mineur (18 ans) + delai de prescription legale (Code civil art. 2235). Alignee sur les documents probatoires. L'hypothese H-03 s'applique.

5.8 Modele d’etats et transitions (niveaux de preservation)

Etat de classification d’un document a l’issue de l’ingestion : UNCLASSIFIED, COMPLETE, BITSTREAM, REJECTED.

  • UNCLASSIFIED -> COMPLETE : AUTORISEE (format dont le preservationLevel est COMPLETE dans §5.4b).
  • UNCLASSIFIED -> BITSTREAM : AUTORISEE (format dont le preservationLevel est BITSTREAM dans §5.4b).
  • UNCLASSIFIED -> REJECTED : AUTORISEE (validation echouee).
  • COMPLETE -> * : INTERDITE (toute reclassification est hors perimetre PD-252 et necessiterait une story dediee).
  • BITSTREAM -> * : INTERDITE (toute reclassification est hors perimetre PD-252 et necessiterait une story dediee).
  • REJECTED -> * : INTERDITE (nouvelle ingestion requise ; reclassification hors perimetre PD-252).

Transitions inverses explicitement interdites :

  • COMPLETE -> BITSTREAM : INTERDITE (immutabilite de classification post-ingestion).
  • BITSTREAM -> COMPLETE : INTERDITE (requalification hors perimetre PD-252).
  • COMPLETE/BITSTREAM -> UNCLASSIFIED : INTERDITE.
  • REJECTED -> UNCLASSIFIED : INTERDITE.

5.9 Mecanisme de validation

La conformite de la policy est verifiee par revue documentaire structuree (checklist) lors de l’audit ISO 14641. Les cas d’erreur (§6) decrivent les non-conformites detectables par cette revue. Aucun moteur applicatif de validation n’est introduit par PD-252.

5bis. Diagrammes

5bis.1 Diagramme d’etats — Classification de preservation (INV-252-07)

Modele d’etats du niveau de preservation d’un document a l’ingestion (ref. §5.8). Toutes les transitions depuis un etat terminal (COMPLETE, BITSTREAM, REJECTED) sont interdites (INV-252-07).

stateDiagram-v2
    [*] --> UNCLASSIFIED : Document soumis a l’ingestion

    UNCLASSIFIED --> COMPLETE : preservationLevel = COMPLETE (§5.4b)\n[INV-252-03]
    UNCLASSIFIED --> BITSTREAM : preservationLevel = BITSTREAM (§5.4b)\n[INV-252-03]
    UNCLASSIFIED --> REJECTED : Validation echouee (§5.6)\n[INV-252-05]

    COMPLETE --> [*] : Etat terminal — immutable
    BITSTREAM --> [*] : Etat terminal — immutable
    REJECTED --> [*] : Etat terminal — nouvelle ingestion requise

    note right of COMPLETE
        Transitions interdites :
        COMPLETE → BITSTREAM (INV-252-07)
        COMPLETE → UNCLASSIFIED (INV-252-07)
    end note

    note right of REJECTED
        Transition interdite :
        REJECTED → UNCLASSIFIED (INV-252-07)
        Nouvelle ingestion = nouveau document
    end note

5bis.2 Diagramme de sequence — Validations a l’ingestion (INV-252-05)

Chaine de validation d’un document a l’ingestion (ref. §5.6, §5.8). Chaque validation est une etape bloquante : un echec entraine la transition vers REJECTED (ERR-252-01..08).

sequenceDiagram
    participant U as Utilisateur
    participant API as Backend API
    participant MIME as Validation MIME
    participant PDFA as Validation PDF/A
    participant HASH as Hash SHA3-384
    participant SIZE as Controle taille
    participant AV as Scan malware
    participant CLASS as Classification

    U->>API: Soumission document (formatName, mimeType, fichier)
    activate API

    API->>MIME: Controle MIME declare vs magic bytes
    alt MIME invalide (ERR-252-02)
        MIME-->>API: REJET
        API-->>U: REJECTED
    else MIME valide
        MIME-->>API: OK
    end

    API->>PDFA: Validation PDF/A (si format PDF/A-*)
    Note over PDFA: PLANIFIE (PD-NEW)<br/>INV-252-04
    alt PDF/A invalide
        PDFA-->>API: REJET
        API-->>U: REJECTED
    else PDF/A valide ou N/A
        PDFA-->>API: OK
    end

    API->>HASH: Calcul hash SHA3-384
    Note over HASH: INV-252-05<br/>integrityHashAlgorithm = SHA3-384
    HASH-->>API: hash

    API->>SIZE: Controle taille (max 500 MB categorie DEFAULT)
    alt Taille hors bornes (§5.2)
        SIZE-->>API: REJET
        API-->>U: REJECTED
    else Taille conforme
        SIZE-->>API: OK
    end

    API->>AV: Scan malware avant stockage
    Note over AV: PLANIFIE (PD-NEW)<br/>INV-252-05
    alt Malware detecte
        AV-->>API: REJET
        API-->>U: REJECTED
    else Clean
        AV-->>API: OK
    end

    API->>CLASS: Classification selon preservationLevel (§5.4b)
    alt preservationLevel = COMPLETE (INV-252-03)
        CLASS-->>API: COMPLETE
    else preservationLevel = BITSTREAM (INV-252-03)
        CLASS-->>API: BITSTREAM
    end

    API-->>U: Document classe (COMPLETE | BITSTREAM)
    deactivate API

6. Cas d’erreur

Regle generale de granularite :

  • Chaque cas d’erreur s’applique au niveau de l’entree concernee (ligne/format).
  • La policy dans son ensemble est declaree non conforme tant qu’au moins un cas d’erreur non resolu subsiste.
ID Cas Regle de reponse
ERR-252-01 Format non liste dans la policy Rejet de l’entree concernee ; policy non conforme tant que non corrige
ERR-252-02 mimeType non conforme RFC/regex (apres normalisation lowercase) Rejet
ERR-252-03 Niveau de preservation hors enum Rejet
ERR-252-04 Duree non ISO 8601 (sous-ensemble mono-composant) ou hors matrice attendue Rejet
ERR-252-05 Reference normative absente/mal formee Rejet
ERR-252-06 Conversion definie sans priorite Rejet
ERR-252-07 Transition d’etat non documentee Rejet
ERR-252-08 Reference manquante a GAP-FINAL-004 Rejet

7. Criteres d’acceptation (testables)

ID Critere Observable
CA-01 Le document preservation-format-policy.md existe Fichier present a docs/sae-manual/preservation-format-policy.md
CA-02 Le tableau des formats est exhaustif 5 categories presentes et liste canonique exacte de 14 formats (§5.4b)
CA-03 Les niveaux COMPLETE/BITSTREAM sont definis formellement Definitions explicites + mapping format->niveau
CA-04 Les conversions a l’ingestion sont documentees Tableau source/cible/priorite/story separee
CA-05 Les validations d’ingestion sont listees 5 validations minimales presentes + statut implementation
CA-06 La matrice format × duree legale est presente et coherente Tableau complet avec valeurs exactes (§5.7)
CA-07 References normatives et citations documentaires presentes References structurees (avec §section) conformes a la regex §5.1 + citations documentaires (ISO 19005-½/3, RFC-PV-PACK) presentes textuellement
CA-08 Le chapitre ch08 du manuel SAE reference la policy Lien explicite ch08 -> policy
CA-09 La tracabilite GAP-FINAL-004 est explicite Mention textuelle + lien de tracabilite
CA-10 Les formats/contraintes de donnees sont definis une seule fois §5.1 contient toutes les definitions, autres sections referencent
CA-11 Les transitions retour sont explicitees/interdites Tableau/enumeration des transitions present
CA-12 Les parametres numeriques identifies ont bornes et unites §5.2 complet sans valeur implicite

8. Scenarios de test (Given / When / Then)

  1. GWT-01 — Exhaustivite formats
    Given la policy est redigee
    When on verifie les categories de formats et la liste canonique
    Then les 5 categories attendues sont presentes avec la liste exacte des 14 formats de §5.4b.

  2. GWT-02 — Niveaux de preservation
    Given un format liste dans la policy
    When on consulte son entree
    Then un niveau unique (COMPLETE ou BITSTREAM) est defini.

  3. GWT-03 — Conversions documentees
    Given la section conversion
    When on lit une ligne de conversion
    Then format source, cible, priorite et statut “story separee” sont presents.

  4. GWT-04 — Validations ingestion
    Given la section validation
    When on compare avec la liste contractuelle
    Then MIME, PDF/A, SHA3-384, taille et malware sont tous presents.

  5. GWT-05 — Matrice legale
    Given la matrice format × duree
    When on verifie les types documentaires demandes
    Then chaque type a duree, formats et niveau renseignes avec les valeurs exactes de §5.7.

  6. GWT-06 — Normes et tracabilite
    Given la section references
    When on audite les citations normatives
    Then ISO 14641 §10.1.1, NF Z42-013 §6.2.4, ISO 19005-1, ISO 19005-2, ISO 19005-3 et RFC-PV-PACK sont presents, ainsi que GAP-FINAL-004.

  7. GWT-07 — Contraintes de donnees
    Given un champ mimeType invalide (ex. application)
    When la policy est validee
    Then l’entree est rejetee.

  8. GWT-08 — Transitions inverses
    Given un document classe COMPLETE
    When une transition vers BITSTREAM est demandee
    Then la transition est rejetee comme interdite.

9. Hypotheses explicites

ID Hypothese Impact si faux
H-01 Les categories actuelles de formats sont stables pour v1 Revision de la policy et des CA
H-02 Le hash d’integrite de reference reste SHA3-384 Mise a jour invariants + tests
H-03 Les durees legales fournies dans le besoin sont validees juridiquement Risque de non-conformite reglementaire
H-04 Le chapitre ch08 est modifiable pour ajouter la reference Tracabilite documentaire incomplete
H-05 La policy DOCUMENTE les validations attendues. Si certaines ne sont pas encore implementees, la policy le signale avec la story de destination (ex: PD-NEW, story non encore creee dans le backlog ; creation prevue au sprint suivant). La policy ne constitue pas une declaration de conformite technique. Ecart entre cible documentaire et etat technique reel (a suivre via backlog)

10. Points a clarifier

10.1 Contraintes techniques du projet cible (obligatoire)

  • Projet cible principal : ProbatioVault-doc (documentation du manuel SAE, artefact Markdown).
  • Chemin cible fige : docs/sae-manual/preservation-format-policy.md.
  • Stack reelle concernee par PD-252 : documentation Markdown + structure documentaire du manuel SAE.
  • References techniques connexes (non modifiees par PD-252) :
  • ProbatioVault-backend : NestJS + TypeORM + PostgreSQL (source des regles MIME/taille deja implementees).
  • Aucune implementation applicative dans cette story.

10.2 Clarifications ouvertes

ID Point a clarifier Donnee manquante / impact
Q-252-05 Modalite de lien tracable vers GAP-FINAL-004 (URL, identifiant audit, annexe) Verifiabilite d’audit (forme de preuve) — NON TESTABLE tant que la forme n’est pas figee

References

  • Epic : Reference epique (non fournie dans l’expression de besoin)
  • JIRA : PD-252
  • Repos concernes : ProbatioVault-doc, ProbatioVault-backend (reference de regles existantes)
  • Documents associes :
  • preservation-format-policy.md (a produire)
  • Manuel SAE (ch08)
  • ISO 14641:2018 §10.1.1
  • NF Z42-013:2020 §6.2.4
  • ISO 19005-1
  • ISO 19005-2
  • ISO 19005-3
  • RFC interne RFC-PV-PACK.md
  • Audit PD-244 (GAP-FINAL-004)