[Full-stack] Audit / traçabilité des modifications dossier et profils (parent/AM) #128
Open
opened 2026-05-13 14:55:16 +00:00 by jmartin
·
0 comments
No Branch/Tag Specified
master
develop
docs/117-cdc-v1.4-srs-users
docs/rationalisation-0.1.0
feature/164-staff-modal-uniformisation
feature/155-rename-admin-prefix-dashboard
docs/155-phase2-spec
feature/152-remove-est-multiple
feature/161-admin-creation-staff
feature/160-suppressions-dashboard
feature/159-suppressions-backend
feature/135-edition-dossier
feature/153-onglet-dossiers
feature/129-creation-dossier-parent
feature/156-creation-dossier-am
feature/158-affiliation-enfant-foyer
feature/157-enfant-sans-responsable
feature/132-creation-enfant-onglet-enfants
fix/151-get-relais-gestionnaire
backup/auth-fixes
archive/maquette-initiale
v0.1.0
stable
Labels
Clear labels
a11y
admin
api
auth
backend
bug
cdc
cleanup
critique
database
documentation
duplicate
email
enhancement
frontend
gestionnaire
good first issue
help wanted
infra
invalid
juridique
monitoring
on-premise
p0-bloquant
p1-bloquant
p2
p3
p4
phase-1
question
rgpd
security
tests
ui
upload
ux
v0.1.0
wontfix
Accessibilité
Administration
Authentification
Backend NestJS
Something isn't working
Cahier des charges
Nettoyage/Refactoring
Critique
Base de données PostgreSQL
Improvements or additions to documentation
This issue or pull request already exists
Email/Notifications
New feature or request
Frontend Flutter/Web
Gestionnaire
Good for newcomers
Extra attention is needed
Infrastructure Docker/CI-CD
This doesn't seem right
Juridique/Légal
Monitoring/Logs
Configuration on-premise
Priorité 0 - BLOQUANT
Priorité 1 - BLOQUANT
Priorité 2
Priorité 3
Priorité 4
Phase 1
Further information is requested
RGPD/Conformité
Sécurité
Tests unitaires/E2E
Upload fichiers
UX/UI
Issue rattachée au périmètre release 0.1.0
This will not be worked on
Milestone
No items
No Milestone
Projects
Clear projects
No projects
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: jmartin/petitspas#128
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Contexte
Pour la sécurité et le suivi des dossiers (familles et assistantes maternelles), il faut pouvoir savoir qui a modifié quoi, quand sur les données d'un dossier ou d'un profil. C'est essentiel en cas de litige ou désaccord entre co-parents, de support / audit, et pour la conformité minimale.
Aujourd'hui :
cree_le/modifie_le(dossier_famille,utilisateurs), mais ils ne disent pas qui a modifié, ni quels champs, ni les événements transverses (refus, validation, fusion de comptes…).Objectif
Mettre en place un journal d'audit (qui / quand / quoi) couvrant :
…sans logger tout le bruit applicatif.
Périmètre & règles produit
1. Règle simple — alignée inscription
À chaque modification d'une information fournie lors de la création du dossier parent ou AM, un événement est loggé. La liste exacte est dérivée des champs persistés à l'inscription (
RegisterParentCompletDto,RegisterAMCompletDtoet entités liées), ce qui couvre notamment :Exclus par défaut (sauf décision ultérieure) : lectures, listings, requêtes purement techniques, heartbeats, etc.
2. Actions structurelles et événements métier (toujours loggés)
numero_dossier, tout regroupement ou scission identifiable → événement dédié (qui, quand, identifiants concernés, type d'opération).Architecture proposée
Journal d'audit en BDD (recommandé vs simple fichier)
numero_dossierouuser_id, sauvegardes PG, cohérence transactionnelle.idoccurred_at(timestamptz)actor_user_id(nullable si action système) +actor_rolenumero_dossier(dénormalisé pour filtrage)entity_type(utilisateur|parent|assistante_maternelle|enfant|dossier_famille| …)entity_idaction(create|update|delete| événement métier :refus,validation,suspension,fusion_comptes,affectation_numero_dossier, …)changesJSON (ancien / nouveau ou patch, ou résumé pour les événements)request_id,ip,source(gestionnaire_ui,selfservice_reprise, …)Colonnes « création / dernière modification »
cree_le/modifie_leexistent déjà surdossier_familleetutilisateurs.@UpdateDateColumn/ triggers.numero_dossier: soit vue / requête surmax(modifie_le), soit colonne dérivée sur une entité pivot — à trancher en spec.Fichier
Réservé éventuellement en complément (export append-only, intégration SI) ; pas comme source unique si l'app affiche l'historique.
Accès gestionnaire (exigence métier)
numero_dossier), notamment en cas de litige entre co-parents.GET …/dossiers/:numeroDossier/auditou sous-ressource des routes gestionnaire existantes), pagination, tri par date, contrôle d'accès gestionnaire / admin (même périmètre que la validation dossier).Visibilité parents & AM (phase suivante)
À terme, lorsque les parents et les AM auront leur tableau de bord, un sous-menu discret (non mis en avant, mais accessible) donnera accès au même historique côté demandeur, incluant toutes les lignes d'audit (gestionnaire, admin, parent, AM).
→ Le ticket peut être livré en deux temps si nécessaire : MVP (API + écran gestionnaire), phase dashboard (entrée parent/AM dans leur tableau de bord, dépend de l'avancée des dashboards).
Points transverses
apply…(context)) : l'audit doit recevoir unsourceoucorrelation_idpour distinguer gestionnaire vs demandeur.Critères de done (V1)
database/BDD.sql: table d'audit + index utiles (numero_dossier,occurred_at,actor_user_id).@CreateDateColumn/@UpdateDateColumnmanquants sur les entités du dossier.appendAuditLog(...)(ou équivalent) branché sur :numero_dossier, fusion / association de comptes.GET …/dossiers/:numeroDossier/audit(gestionnaire / admin) — pagination, tri par date.Hors périmètre (à scinder en autres tickets si besoin)