Aller au contenu

Journal d'Événements — NF525

Exigence NF525 : Toute action susceptible d'affecter les données de caisse doit être enregistrée de manière inaltérable.

1. Structure de la table audit_logs

Colonne Type Description
id INTEGER PK Identifiant auto-incrémenté
event_type VARCHAR(50) Type d'événement (indexé)
payload TEXT Détail JSON de l'événement
user_id INTEGER ID utilisateur ayant déclenché l'action
user_name VARCHAR(200) Nom de l'utilisateur (snapshot)
signature TEXT Signature ECDSA de cette entrée
previous_hash TEXT Signature de l'entrée précédente
timestamp DATETIME Horodatage UTC (indexé)

2. Types d'événements

2.1 Événements de caisse

Type Payload type Description
ORDER_CREATED {order_id, total_ttc, items_count, payment_method} Commande validée
ORDER_PAID {order_id, amount, payment_method, paid_at} Encaissement commande
ORDER_CANCELLED {order_id, reason, original_total} Annulation de commande
ORDER_MODIFIED {order_id, changes: [{field, old, new}]} Modification post-validation

2.2 Événements de paramétrage

Type Payload type Description
PRODUCT_CREATED {product_id, name, price} Nouveau produit
PRODUCT_MODIFIED {product_id, changes: [{field, old, new}]} Modification de produit
PRODUCT_DELETED {product_id, name} Suppression de produit
SETTINGS_CHANGED {setting, old_value, new_value} Changement de configuration

2.3 Événements d'accès

Type Payload type Description
USER_LOGIN {method: "pin"|"password", device} Connexion
USER_LOGOUT {duration_minutes} Déconnexion
USER_CREATED {user_id, name, role} Création de compte

2.4 Événements de clôture

Type Payload type Description
DAILY_CLOSE {date, orders_count, total_ht, total_tva, total_ttc, breakdown_by_vat, breakdown_by_payment} Z de caisse
MONTHLY_CLOSE {month, daily_closures_count, totals} Clôture mensuelle
EXPORT_GENERATED {period, entries_count, format} Export fiscal

3. Garanties

  1. Insertion uniquement — Aucune API de modification ou suppression du journal
  2. Chaîne signée — Chaque entrée est signée ECDSA et chaînée à la précédente
  3. Horodatage — Timestamp UTC server-side (non modifiable par le client)
  4. Snapshot utilisateur — Le nom de l'utilisateur est copié dans le log (indépendant de la table users)
  5. Validation unifiée — Les payloads des événements sont validés par les mêmes schémas (shared/schemas/) que ceux utilisés par l'API Backend et le Frontend, empêchant toute incohérence de type avant la signature.

4. API d'accès

GET /api/v1/audit/logs?event_type=ORDER_CREATED&limit=100&offset=0
GET /api/v1/audit/verify
GET /api/v1/audit/export?start_date=2026-01-01&end_date=2026-12-31
GET /api/v1/audit/stats

Code Source — Journal d'Audit

Fichier Rôle Lien GitHub
services/audit_service.py Fonction log_event() — écriture immuable → Voir sur GitHub
models/audit_log.py Modèle de la table audit_log → Voir sur GitHub
api/v1/fiscal/ Endpoints déclencheurs d'événements → Voir sur GitHub