PD-84-specification.md¶
1. Metadata¶
- Story ID: PD-84
- Epic: PD-185 — B2C-MINEURS
- Titre: Encadrement contractuel de l'offre gratuite pour dossiers probatoires mineurs (catégorie
B2C_EVIDENCE_MINOR) - Date: 2026-02-23
- Version: 1.3.0
2. Périmètre¶
2.1 Couvert¶
- Règles freemium de création et gestion des dossiers probatoires en plan gratuit.
- Quota structurel: 3 dossiers actifs maximum par compte utilisateur gratuit.
- Quota structurel: 100 documents scellés maximum par dossier actif.
- Règles de clôture de dossier (lecture seule, conservation probatoire, libération de slot actif).
- Verrouillage des capacités d'export probatoire complet en gratuit.
- Exigences UX de verrouillage export (bouton visible grisé + message Premium + CTA).
- Auto-déverrouillage des fonctionnalités Premium sur dossiers existants après activation Premium.
- Séparation stricte des quotas entre comptes distincts (mineur et représentant légal).
- Applicabilité universelle du plan gratuit sans distinction d'âge.
- Mécanisme de transition de plan testable via endpoint dédié ou événement interne stubbé pour PD-84 (intégration paiement réel hors périmètre). [Traçabilité: ECT-08]
2.2 Non couvert¶
- Définition fonctionnelle de l'offre Premium (prix, packaging, limites Premium).
- Paiement, facturation, anti-fraude, PSP.
- Implémentation technique de l'export (PD-85), hotline juridique/psy, Legal PRE.
- Détection de contenu sensible (PD-86), API e-Enfance (PD-87).
- Architecture cryptographique interne détaillée de scellement (couverte par PD-60/PD-79).
- Conseil juridique individualisé et stratégie de procédure.
2.3 Clarifications contractuelles explicites¶
- Le quota "3 dossiers" s'applique aux dossiers actifs (non clôturés). Justification: la clôture "libère un slot".
- Les dossiers clôturés restent consultables en lecture seule et comptent dans l'historique, pas dans les slots actifs.
- La limitation est structurelle uniquement (aucun quota mensuel, aucune remise à zéro périodique).
- En plan PREMIUM, les quotas de dossiers actifs et de documents par dossier sont levés (pas de limite supérieure appliquée par PD-84). Le comportement Premium détaillé est couvert par la story de tarification. [Traçabilité: ECT-03/ECT-07]
3. Modèle de données¶
3.1 Entités¶
- UserAccount
user_id(UUID, unique)plan_type(FREE,PREMIUM)account_role(MINOR,LEGAL_GUARDIAN,OTHER)created_at,updated_at-
premium_activated_at(nullable) -
ProbatoryFolder
folder_id(UUID, unique)owner_user_id(FKUserAccount.user_id)category(doit inclureB2C_EVIDENCE_MINOR)display_namestatus(ACTIVE,CLOSED_READ_ONLY)sealed_document_count(entier >= 0)created_at,closed_at(nullable)-
closed_reason(nullable) -
SealedDocument
document_id(UUID, unique)folder_id(FK)document_type(IMAGE,AUDIO,VIDEO,PDF,OTHER_SUPPORTED)sealed_atprobatory_seal_ref(référence de scellement)integrity_state(VALID,INVALID)-
anchoring_state(ANCHORED,PENDING,FAILED) -
CapabilityState
owner_user_idcan_export_composite(bool)can_export_structured_archive(bool)can_access_hotline(bool)can_transfer_legal_pre(bool)-
Clarification de modélisation:
CapabilityStateest une vue calculée à la volée à partir deUserAccount.plan_type; ce n'est pas une entité persistée séparément. [Traçabilité: ECT-06] -
AuditLogEvent (dépendance PD-31)
event_idactor_user_idevent_typeevent_payloadoccurred_at
3.2 États et transitions¶
3.2.1 ProbatoryFolder¶
- États autorisés:
ACTIVE->CLOSED_READ_ONLY(transition unidirectionnelle). - Transitions interdites:
CLOSED_READ_ONLY->ACTIVE- Suppression logique ou physique du dossier via PD-84.
- Effets de transition
ACTIVE->CLOSED_READ_ONLY: - Libération d'un slot de quota actif.
- Blocage de toute modification du dossier (ajout/suppression/édition d'éléments de contenu).
- Conservation intégrale des preuves scellées associées.
- Idempotence de clôture: un appel
POST /folders/{folderId}/closesur dossier déjà clôturé retourne409 CONFLICTavec codeFOLDER_ALREADY_CLOSED. [Traçabilité: ECT-12]
3.2.2 CapabilityState¶
FREE:can_export_composite=falsecan_export_structured_archive=falsecan_access_hotline=falsecan_transfer_legal_pre=falsePREMIUM: capacités Premium applicables immédiatement aux dossiers existants.- SLA de propagation mesurable après changement de plan:
- Définition de mesure : 95% des opérations de scellement probatoire (FREE inclus) sont confirmées en moins de 5 secondes entre réception de la requête API (
PUT /account/planreçu par le serveur) et enregistrement effectif dans le journal append-only (PD-31). - Objectif:
p95 < 5spour l'application effective des capabilities calculées. - Borne absolue:
<= 30smaximum. - À expiration de la borne absolue: état d'erreur
PLAN_STATE_INCONSISTENT(observable et auditable). [Traçabilité: ECT-01, ECT-04, ESCALADE-01]
3.2.3 Transition FREE -> PREMIUM (mécanisme testable PD-84)¶
- Endpoint de test/intégration:
PUT /account/planavec payload minimal{ "plan_type": "PREMIUM" }, ou événement interne équivalent (stub) en environnement de test. - L'intégration paiement réelle est hors périmètre PD-84; le mécanisme ci-dessus existe pour valider les règles fonctionnelles et SLA. [Traçabilité: ECT-08]
- Garde-fou production : en environnement de production,
PUT /account/planNE DOIT PAS être exposé publiquement. La transition de plan en production sera déclenchée exclusivement par le service de paiement interne (événement signé). L'endpoint stub est réservé aux environnementstestetdevelopment(guard via variable d'environnementENABLE_PLAN_STUB=true, désactivé par défaut). [Traçabilité: ECT-v2-05]
3.2.4 Transition PREMIUM -> FREE (downgrade)¶
- Le downgrade
PREMIUM -> FREEest un cas d'usage valide (expiration abonnement, résiliation). - Comportement au downgrade :
- Les dossiers existants (actifs et clôturés) sont conservés intégralement (aucune suppression).
- Si le compte possède plus de 3 dossiers
ACTIVE: les dossiers existants sont conservés, mais la création de nouveaux dossiers est interdite tant que le nombre d'actifs dépasse le quota FREE (3). - Si un dossier actif contient plus de 100 documents scellés : les documents existants sont conservés, mais l'ajout de nouveaux documents est interdit tant que le compteur dépasse le quota FREE (100).
- Les exports déjà générés restent valides et consultables, mais la génération de nouveaux exports est verrouillée (
PREMIUM_REQUIRED). - Le payload
PUT /account/planaccepte{ "plan_type": "FREE" }en plus de{ "plan_type": "PREMIUM" }. [Traçabilité: ESCALADE-02]
3.3 Contraintes de cardinalité¶
- Pour un
UserAccountenFREE: nombre deProbatoryFolderenACTIVE<= 3. - Pour un
ProbatoryFolderenACTIVE: nombre deSealedDocument<= 100. - Pour un
ProbatoryFolderenCLOSED_READ_ONLY: nombre deSealedDocumentfigé. - Contrainte explicite PREMIUM: aucune borne supérieure de cardinalité n'est appliquée par PD-84 sur
ACTIVEfolders etsealed_document_count; seules les contraintes techniques globales de plateforme peuvent s'appliquer hors contrat PD-84. [Traçabilité: ECT-03/ECT-07]
3.4 Contrôle de concurrence (quotas)¶
- Les opérations de création de dossier et ajout de document scellé doivent être atomiques vis-à-vis des quotas.
- L'implémentation doit garantir l'absence de dépassement de quota sous concurrence (exemples acceptés: verrou pessimiste transactionnel, sérialisation explicite, contrainte base + transaction avec vérification atomique).
- Les tests de limites
TC-LIM-01etTC-LIM-02doivent être déterministes (résultat stable d'une exécution à l'autre). [Traçabilité: ECT-02]
4. Règles métier (exigences fonctionnelles F-84-XX)¶
- F-84-01: Le système DOIT autoriser un utilisateur gratuit à créer au maximum 3 dossiers probatoires actifs.
- F-84-02: Le système DOIT refuser la création d'un 4e dossier actif en plan gratuit avec erreur explicite de quota.
- F-84-03: Chaque dossier DOIT pouvoir être nommé par l'utilisateur et associé à la catégorie probatoire applicable.
- F-84-04: En plan FREE uniquement, chaque dossier actif DOIT accepter au maximum 100 documents scellés. En plan PREMIUM, aucune borne n'est appliquée par PD-84 (cf. section 3.3). [Traçabilité: ESCALADE-04]
- F-84-05: En plan FREE uniquement, le 101e document DOIT être refusé avec message d'incitation Premium explicite. [Traçabilité: ESCALADE-04]
- F-84-06: Aucune règle de quota mensuel ou remise à zéro périodique ne DOIT être appliquée.
- F-84-07: Les documents en plan gratuit DOIVENT suivre le même niveau de scellement probatoire technique que les documents Premium.
- F-84-08: En plan gratuit, l'export composite auto-vérifiable DOIT être indisponible.
- F-84-09: En plan gratuit, l'archive structurée DOIT être indisponible.
- F-84-10: L'UI DOIT afficher le bouton d'export visible et grisé, avec message "Disponible en Premium" et CTA de montée en gamme.
- F-84-11: L'utilisateur DOIT pouvoir consulter ses preuves en gratuit.
- F-84-12: L'utilisateur DOIT pouvoir démontrer visuellement l'existence et le contenu de ses dossiers depuis l'application.
- F-84-13: L'utilisateur DOIT pouvoir clôturer un dossier; la clôture DOIT le rendre lecture seule et libérer un slot actif.
- F-84-14: La clôture DOIT conserver les preuves scellées côté infrastructure sans suppression liée à PD-84.
- F-84-15: Le plan freemium DOIT s'appliquer à tout utilisateur gratuit sans vérification d'âge spécifique.
- F-84-16: Les quotas DOIVENT être isolés par compte utilisateur; un représentant légal a son propre quota indépendant de celui du mineur.
- F-84-17: Après activation Premium, les capacités Premium DOIVENT s'appliquer automatiquement aux dossiers existants sans action manuelle utilisateur.
- F-84-18: Le système DOIT journaliser les événements de quota/refus/clôture/changement de plan dans l'audit log (PD-31).
- F-84-19: Toute tentative de création de dossier avec une catégorie invalide DOIT être refusée avec code
INVALID_FOLDER_CATEGORY. [Traçabilité: ECT-05/ECT-14]
5. Invariants (INV-84-XX)¶
- INV-84-01 (PROBATOIRE): Les preuves gratuites ont la même valeur probatoire technique que les Premium.
- INV-84-02 (SÉCURITÉ): Aucune dégradation cryptographique selon le plan tarifaire.
- INV-84-03 (PROTECTION): Un mineur doit toujours pouvoir constituer un dossier cohérent minimal.
- INV-84-04 (QUOTA): Le nombre de dossiers actifs (3) et de documents par dossier (100) est exact, déterministe et traçable.
- INV-84-05 (URGENCE): La montée en Premium est possible immédiatement sans prérequis fonctionnel additionnel côté dossier.
- INV-84-06 (CONVERSION): L'auto-déverrouillage Premium s'applique à tous les dossiers existants sans action manuelle.
- INV-84-07 (UX): L'export grisé expose un CTA Premium visible et non intrusif.
- INV-84-08 (PROBATOIRE): La clôture libère un slot actif et conserve les preuves scellées.
- INV-84-09 (MODÈLE): Le plan freemium s'applique à tous les utilisateurs gratuits sans distinction d'âge.
- INV-84-10 (ARCHITECTURE): Le quota du représentant légal est séparé de celui du mineur.
- INV-84-11 (QUOTA): À 100 documents, le dossier est bloqué en ajout avec message d'incitation Premium.
- INV-84-12 (EPIC-PD-185): Le contenu des preuves reste chiffré et inaccessible à la plateforme (hors dérogation légale hors périmètre PD-84).
- INV-84-13 (EPIC-PD-185): Le parcours gratuit doit rester compréhensible pour un adolescent. Proxy testable PD-84 : le scénario nominal (créer dossier, ajouter preuve, consulter, constater export verrouillé, clôturer) se réalise en 5 étapes maximum sans erreur bloquante. La validation UX complète (questionnaire SUS, test utilisateur adolescent) relève d'une campagne UX transverse hors périmètre PD-84. [Traçabilité: ECT-v2-01]
- INV-84-14 (GOUVERNANCE): Aucune fonctionnalité PD-84 ne doit permettre une exportation probatoire complète gratuite.
- INV-84-15 (TRAÇABILITÉ): Toute décision de refus de quota et toute transition de dossier est auditée.
6. Critères d'acceptation (CA-84-XX)¶
- CA-84-01: Étant donné un compte
FREEavec 0 à 2 dossiersACTIVE, quand l'utilisateur crée un dossier, alors la création réussit et le totalACTIVEaugmente de 1. - CA-84-02: Étant donné un compte
FREEavec 3 dossiersACTIVE, quand l'utilisateur crée un dossier supplémentaire, alors la requête est refusée avec codeQUOTA_FOLDER_LIMIT_REACHED. - CA-84-03: Étant donné un dossier
ACTIVEavec 99 documents, quand l'utilisateur ajoute un document scellable, alors l'ajout réussit et le compteur passe à 100. - CA-84-04: Étant donné un dossier
ACTIVEavec 100 documents, quand l'utilisateur ajoute un document supplémentaire, alors la requête est refusée avec codeQUOTA_DOCUMENT_LIMIT_REACHEDet message Premium. - CA-84-05: Étant donné un compte
FREE, quand l'utilisateur demande un export composite ou archive structurée, alors la requête est refusée avec codePREMIUM_REQUIRED. - CA-84-06: L'écran de dossier en plan
FREEaffiche un contrôle d'export visible, non activable, avec texte "Disponible en Premium" et CTA. - CA-84-07: Étant donné un dossier
ACTIVE, quand l'utilisateur le clôture, alors son état devientCLOSED_READ_ONLY, le compteur de slots actifs est décrémenté de 1, et les documents restent consultables. - CA-84-08 (révisé): Étant donné un dossier
CLOSED_READ_ONLY, le refus de création de document est systématique (l'état clôturé interdit toute modification, indépendamment du quota) et l'export complet est verrouillé en plan FREE. Note de périmètre: les opérations de modification/suppression de documents individuels ne sont pas exposées par les endpoints PD-84; elles sont implicitement bloquées par l'absence d'API. [Traçabilité: ECT-10, ESCALADE-05] - CA-84-09: Étant donné deux comptes distincts (mineur, représentant légal), les quotas sont évalués indépendamment; les actions de l'un n'affectent jamais les compteurs de l'autre.
- CA-84-10: Étant donné un passage de
FREEàPREMIUM, alors les dossiers existants deviennent éligibles aux capacités Premium sans action manuelle utilisateur. - CA-84-11: Les opérations de scellement sur preuves gratuites produisent les mêmes attributs de validité technique que les opérations Premium (hash, horodatage, ancrage) selon contrats PD-60/PD-79.
- CA-84-12: Aucun job de remise à zéro mensuelle des quotas ne modifie les compteurs de dossiers/documents.
- CA-84-13: Chaque refus de quota, clôture de dossier et changement de plan génère un événement d'audit (PD-31) contenant
actor,event_type,timestamp,resource_id. - CA-84-14: Le parcours utilisateur gratuit pour créer un dossier, ajouter une preuve, consulter, constater le verrou d'export, puis clôturer un dossier se réalise sans étape cachée ni vocabulaire ambigu (mesure UX: 0 erreur bloquante sur scénario nominal en test d'acceptation fonctionnelle).
7. Interfaces API (endpoints, contrats, codes erreur)¶
Note de cadrage: Les chemins exacts existants PD-60/PD-79 ne sont pas fournis dans le besoin. Les contrats ci-dessous sont normatifs au niveau fonctionnel; le mapping URI final doit être aligné avec les conventions existantes.
7.1 Endpoints fonctionnels requis¶
POST /folders- Crée un dossier probatoire.
- Entrée minimale:
display_name,category. -
Règles: refuse si quota dossiers actifs atteint en
FREE; refuse sicategoryinvalide avec codeINVALID_FOLDER_CATEGORY. [Traçabilité: ECT-05/ECT-14] -
POST /folders/{folderId}/documents - Ajoute un document à un dossier actif.
-
Règles: refuse si dossier clôturé; refuse au-delà de 100 en
FREE; applique scellement probatoire standard. -
POST /folders/{folderId}/close - Clôture un dossier actif.
- Règles: transition unique
ACTIVE->CLOSED_READ_ONLY. -
Comportement idempotent: si dossier déjà clôturé, retourne
409 CONFLICTavec codeFOLDER_ALREADY_CLOSED. [Traçabilité: ECT-12] -
GET /folders -
Liste des dossiers (actifs et clôturés) du compte courant avec état et compte de documents.
-
GET /folders/{folderId} -
Détail dossier + statut + capacités selon plan.
-
POST /folders/{folderId}/exports/composite - En
FREE: refus contractuel. -
En
PREMIUM: hors périmètre PD-84 (PD-85). -
POST /folders/{folderId}/exports/archive - En
FREE: refus contractuel. -
En
PREMIUM: hors périmètre PD-84 (PD-85). -
GET /capabilities -
Retourne les capacités fonctionnelles effectives du compte courant (
can_export_*, etc.). -
PUT /account/plan - Endpoint de test/intégration PD-84: permet de simuler la transition de plan sans paiement réel.
- Payload minimal:
{ "plan_type": "PREMIUM" }ou{ "plan_type": "FREE" }(downgrade, voir 3.2.4). - L'intégration paiement réelle est hors périmètre PD-84. [Traçabilité: ECT-08, ESCALADE-02]
7.2 Codes de réponse et erreurs métier minimales¶
200/201: succès opérationnel.400: payload invalide.401/403: non authentifié/non autorisé.404: ressource introuvable.409: conflit d'état/transition.422: violation règle métier de quota/capacité.500: erreur interne.
Erreurs métier contractuelles: - QUOTA_FOLDER_LIMIT_REACHED - QUOTA_DOCUMENT_LIMIT_REACHED - PREMIUM_REQUIRED - FOLDER_CLOSED_READ_ONLY - INVALID_FOLDER_CATEGORY [Traçabilité: ECT-05/ECT-14] - FOLDER_ALREADY_CLOSED [Traçabilité: ECT-12] - PLAN_STATE_INCONSISTENT [Traçabilité: ECT-01, ECT-04]
7.3 Contrat de message utilisateur (minimum)¶
- Quota document atteint: "Passez en Premium pour des dossiers illimités".
- Export verrouillé: "Disponible en Premium" + CTA de montée en gamme.
7.4 Diagrammes Mermaid¶
7.4.1 Diagramme d'états — ProbatoryFolder (INV-84-08, INV-84-04)¶
stateDiagram-v2
[*] --> ACTIVE : POST /folders\n(quota FREE <= 3 — INV-84-04)
ACTIVE --> CLOSED_READ_ONLY : POST /folders/{id}/close\n(libère slot, conserve preuves — INV-84-08)
CLOSED_READ_ONLY --> CLOSED_READ_ONLY : POST /folders/{id}/close\n(409 FOLDER_ALREADY_CLOSED)
state ACTIVE {
[*] --> AcceptingDocs
AcceptingDocs --> AcceptingDocs : POST /documents\n(count < 100 FREE — INV-84-04)
AcceptingDocs --> QuotaReached : count = 100 (FREE)\n(QUOTA_DOCUMENT_LIMIT_REACHED — INV-84-11)
QuotaReached --> AcceptingDocs : plan -> PREMIUM\n(quota levé — INV-84-06)
}
note right of CLOSED_READ_ONLY
Lecture seule. Documents conservés.
Aucune transition retour vers ACTIVE.
Export verrouillé en FREE (INV-84-14).
end note 7.4.2 Diagramme d'états — Plan utilisateur (INV-84-05, INV-84-06)¶
stateDiagram-v2
[*] --> FREE : Inscription
FREE --> PREMIUM : PUT /account/plan {PREMIUM}\n(auto-déverrouillage dossiers — INV-84-06)
PREMIUM --> FREE : PUT /account/plan {FREE}\n(downgrade — quotas ré-appliqués)
FREE --> PLAN_STATE_INCONSISTENT : borne 30s dépassée\n(SLA-84-01)
PREMIUM --> PLAN_STATE_INCONSISTENT : borne 30s dépassée\n(SLA-84-01)
PLAN_STATE_INCONSISTENT --> FREE : résolution
PLAN_STATE_INCONSISTENT --> PREMIUM : résolution
note right of FREE
Quotas actifs : 3 dossiers, 100 docs/dossier.
Exports verrouillés (INV-84-14).
Capabilities calculées à la volée.
end note
note left of PREMIUM
Quotas levés (INV-84-04).
Exports déverrouillés.
Appliqué immédiatement p95 < 5s (INV-84-05).
end note 7.4.3 Diagramme de séquence — Création de dossier avec contrôle de quota (INV-84-04, INV-84-15)¶
sequenceDiagram
actor U as Utilisateur
participant API as POST /folders
participant QS as QuotaService
participant DB as PostgreSQL
participant AL as AuditLog (PD-31)
U->>API: {display_name, category}
API->>DB: SELECT plan_type FROM UserAccount
DB-->>API: plan_type
alt category invalide
API-->>U: 422 INVALID_FOLDER_CATEGORY
end
API->>QS: checkFolderQuota(user_id, plan_type)
QS->>DB: COUNT(*) FROM ProbatoryFolder WHERE status=ACTIVE AND owner=user_id
DB-->>QS: active_count
alt plan=FREE AND active_count >= 3
QS-->>API: QUOTA_EXCEEDED
API->>AL: emit(QUOTA_FOLDER_LIMIT_REACHED) — INV-84-15
API-->>U: 422 QUOTA_FOLDER_LIMIT_REACHED
else quota OK (FREE < 3 ou PREMIUM)
QS-->>API: OK
API->>DB: INSERT ProbatoryFolder (ACTIVE) — atomique (INV-84-04)
DB-->>API: folder_id
API->>AL: emit(FOLDER_CREATED) — INV-84-15
API-->>U: 201 {folder_id, status: ACTIVE}
end 7.4.4 Diagramme de séquence — Transition de plan et propagation capabilities (INV-84-05, INV-84-06)¶
sequenceDiagram
actor U as Utilisateur
participant API as PUT /account/plan
participant DB as PostgreSQL
participant CS as CapabilityState (vue calculée)
participant AL as AuditLog (PD-31)
U->>API: {plan_type: "PREMIUM"}
API->>DB: UPDATE UserAccount SET plan_type=PREMIUM, premium_activated_at=NOW()
DB-->>API: OK
API->>AL: emit(PLAN_CHANGED, FREE->PREMIUM) — INV-84-15
Note over API,CS: Capabilities recalculées à la volée (INV-84-06)
API-->>U: 200 {plan_type: PREMIUM}
par Vérification SLA-84-01
Note over API: Timer p95 < 5s, borne 30s
alt borne 30s dépassée
API->>AL: emit(PLAN_STATE_INCONSISTENT)
end
end
U->>API: GET /capabilities
API->>DB: SELECT plan_type FROM UserAccount
DB-->>API: PREMIUM
API->>CS: compute(PREMIUM)
CS-->>API: {can_export_composite: true, ...}
API-->>U: 200 {capabilities} — INV-84-05 immédiat 7.4.5 Diagramme de séquence — Ajout document avec scellement probatoire (INV-84-01, INV-84-02, INV-84-11)¶
sequenceDiagram
actor U as Utilisateur
participant API as POST /folders/{id}/documents
participant QS as QuotaService
participant SE as SealingEngine (PD-60/PD-79)
participant DB as PostgreSQL
participant AL as AuditLog (PD-31)
U->>API: {document_type, payload}
API->>DB: SELECT status, sealed_document_count FROM ProbatoryFolder
DB-->>API: {status, count}
alt status = CLOSED_READ_ONLY
API-->>U: 422 FOLDER_CLOSED_READ_ONLY
end
API->>DB: SELECT plan_type FROM UserAccount
DB-->>API: plan_type
API->>QS: checkDocumentQuota(count, plan_type)
alt plan=FREE AND count >= 100
QS-->>API: QUOTA_EXCEEDED
API->>AL: emit(QUOTA_DOCUMENT_LIMIT_REACHED) — INV-84-15
API-->>U: 422 QUOTA_DOCUMENT_LIMIT_REACHED + message Premium (INV-84-11)
else quota OK
QS-->>API: OK
API->>SE: seal(document) — même algo FREE/PREMIUM (INV-84-01, INV-84-02)
SE-->>API: {probatory_seal_ref, integrity_state, anchoring_state}
API->>DB: INSERT SealedDocument + UPDATE sealed_document_count — atomique
DB-->>API: document_id
API->>AL: emit(DOCUMENT_SEALED) — INV-84-15
API-->>U: 201 {document_id, sealed_at, integrity_state}
end 8. Sécurité et conformité¶
- SEC-84-01: Le niveau de protection cryptographique des preuves est indépendant du plan tarifaire (
FREEvsPREMIUM). - SEC-84-02: Les accès aux dossiers sont strictement bornés au propriétaire du compte (ou droits explicitement accordés hors périmètre PD-84).
- SEC-84-03: Les événements sensibles (quota refusé, clôture, changement de plan, tentative d'export verrouillé) sont audités (PD-31). La résilience en cas d'indisponibilité PD-31 (file d'attente, retry asynchrone, non-blocage des opérations métier) relève du contrat PD-31 et de l'infrastructure, pas du périmètre PD-84. PD-84 émet les événements d'audit ; la garantie de livraison est une responsabilité PD-31. L'absence d'audit ne doit pas empêcher la constitution d'un dossier (priorité INV-84-03). [Traçabilité: ECT-v2-03, ESCALADE-03]
- SEC-84-04: Les données de mineurs sont soumises à exigences RGPD renforcées (base légale, minimisation, droits des personnes) — obligations de conformité applicables au module.
- SEC-84-05: Le plan freemium n'introduit aucun mécanisme qui empêche la constitution d'un dossier minimal cohérent.
8.1 Exigences non entièrement testables dans PD-84 (hors périmètre)¶
- HORS-PÉRIMÈTRE-COMPLIANCE-01: "Recevabilité en procédure" dépend d'appréciations juridictionnelles externes; PD-84 ne peut tester que la conformité technique de chaîne probatoire.
- HORS-PÉRIMÈTRE-COMPLIANCE-02: Validation juridique complète RGPD (DPIA, registres, clauses contractuelles) relève de la gouvernance conformité transverse.
8.2 Auditabilité des tentatives d'export¶
- Toute tentative d'export refusée sur plan FREE doit générer un événement d'audit dédié (incluant
user_id,folder_id,plan_type, motif de refus). [Traçabilité: ECT-11] - L'état
PLAN_STATE_INCONSISTENTdoit être journalisé/audité. [Traçabilité: ECT-01, ECT-04]
8.3 Équivalence algorithmique des scellements¶
- Les attributs de scellement (algorithme de hash, format d'horodatage, mécanisme d'ancrage) sont identiques entre FREE et PREMIUM; seul le niveau de capabilities diffère. [Traçabilité: ECT-09]
9. SLA temporels¶
Le module inclut une transition d'état temporelle implicite: FREE -> PREMIUM avec exigence "immédiatement".
| SLA ID | Transition | Objectif p95 | Borne absolue | Comportement à expiration |
|---|---|---|---|---|
| SLA-84-01 | Activation Premium -> capacités Premium effectives sur dossiers existants. Mesure : de la réception API (PUT /account/plan) à l'enregistrement journal append-only (PD-31). | p95 < 5s | <= 30s | Si borne absolue dépassée: état d'erreur PLAN_STATE_INCONSISTENT (observable et auditable) [Traçabilité: ECT-01, ECT-04, ESCALADE-01] |
9.1 Information manquante explicite (résolue en v1.1.0)¶
Le besoin ne fournit pas de délai chiffré pour "immédiatement" (ex: secondes/minutes).Résolu: p95 < 5s, borne absolue <= 30s.Le besoin ne fournit pas de borne minimale/maximale ni de stratégie de repli en cas de propagation partielle.Résolu: étatPLAN_STATE_INCONSISTENTà expiration.- Le besoin ne précise pas si ce SLA est paramétrable runtime.
10. Dépendances et hors périmètre¶
10.1 Dépendances¶
- PD-60 (transitive via PD-79): moteur probatoire existant.
- PD-79 (directe): catégorie documentaire
B2C_EVIDENCE_MINOR. - PD-85 (directe): export dossier (fonction verrouillée par PD-84 en plan gratuit).
- PD-31 (transitive): audit log des événements.
10.2 Hors périmètre explicite¶
- Tarification Premium, paiement, facturation, remboursement.
- Implémentation technique des exports (PD-85).
- Hotline juridique/psy, transfert Legal PRE.
- API e-Enfance (PD-87), détection de contenu sensible (PD-86).
- Stratégie de communication marketing, copywriting hors messages contractuels minimaux.
- Rate limiting des endpoints : la protection contre les abus (flood de requêtes, amplification via refus quota) relève de l'infrastructure gateway/reverse proxy transverse et n'est pas spécifiée par PD-84. [Traçabilité: ECT-v2-04]
- Validation UX complète adolescent : protocole de test utilisateur (SUS, questionnaire compréhension) hors périmètre PD-84 ; le proxy testable (scénario nominal 5 étapes) est couvert par CA-84-14. [Traçabilité: ECT-v2-01]
- Toute hypothèse non présente dans cette spécification est considérée non autorisée tant qu'elle n'est pas explicitement ajoutée par révision versionnée.
10.3 Compatibilité et non-régression¶
- Aucune suppression d'invariant, de CA existant, ni de test existant.
- Les écarts mineurs ECT-19 à ECT-26 sont explicitement reportés à l'implémentation v1.x.