DS03 — Le processus de signature (Accept/Deny/Sign)

Déclencheur S2

Une fois le document de signature (DS02) défini, le vérificateur pose la bonne question : qu'a-t-on donc décidé ? Un document de signature dit seulement : « E1 signe le document X. » Le processus — acceptation (Accept), refus (Deny), signature (Sign), retrait (Withdraw) — est un événement à part entière, avec sa propre chronologie.

Machine à états du processus de signature

Un processus suit une machine à états déterministe :

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% stateDiagram-v2 [*] --> drafted: Quell-Dokument erstellt drafted --> offered: Signatur angefordert offered --> accepted: Empfänger nimmt zur Kenntnis (Accept) offered --> denied: Empfänger lehnt ab (Deny) accepted --> signed: Zeichner zeichnet (Sign) signed --> withdrawn: Zeichner zieht zurück (Withdraw, vor Frist) denied --> [*] withdrawn --> [*] signed --> [*]

Chaque changement d'état est un artefact d'événement dans le dépôt — un document JSON selon le schéma signature-event-1.0 :

{
  "$schema": "https://gitcover.org/schemas/signature-event-1.0.schema.json",
  "uuidV7": "<deterministische uuidV7>",
  "type": "signature-event",
  "event": "sign",
  "actor": {
    "name": "Erich Mustermann",
    "role": "Geschäftsführer",
    "capacity": "handelnd für PARTNER-ORG"
  },
  "on": {
    "signature_doc_sha256": "<SHA-256 des Signatur-Docs (DS02)>",
    "target_doc_sha256": "<SHA-256 des Quell-Dokuments>"
  },
  "prev_event_sha256": "<SHA-256 des vorherigen Events, null beim ersten>",
  "statement": "Ich zeichne das Dokument in der angegebenen Funktion und bestätige den in der Textform übermittelten Wortlaut.",
  "evidence": {
    "facsimile_ref": {
      "file": "E1.Signature.transparent.FES.svg",
      "sha256": "8fcffe0b313f8a1e5b44c1c33cd8073e699b338b6450aa1ba9f33f5587501006",
      "guid_stamp": "01a09b48-4580-76f9-b789-024691b989c5"
    },
    "timestamp_utc": "2026-09-13T15:20:00Z"
  }
}

Le chaînage : prev_event_sha256

Chaque événement renvoie à son événement prédécesseur — l'historique des signatures forme une chaîne SHA-256 (principe prev_sha256 du GCPN, ici au niveau des événements) :

offered (event 1) ──► accepted (event 2) ──► signed (event 3)
     │                      │                     │
   sha256                 sha256                sha256
     └── prev=null ─────────┴── prev=sha(ev1) ───┴── prev=sha(ev2)

Un vérificateur peut vérifier l'intégralité de l'historique avec trois commandes :

sha256sum ev1.json                       # stimmt mit prev in ev2?
jq -r '.event' ev*.json | sort           # Zustandsfolge korrekt?
jq -r '.actor.name' ev*.json | sort -u   # Zeichner konsistent?

Les types d'événements

Événement Signification Valeur probante
offered Signature demandée (document présenté pour être signé) Point de départ du délai, équité de la procédure
accepted Le destinataire en a pris connaissance (accès en forme textuelle confirmé) § 126b (1) : accès prouvé
denied Le destinataire refuse (avec motivation) Documente le refus — important en cas de versions contradictoires
sign Le signataire signe (référence Facsimile/clé) § 371a ZPO : apposition du nom + indication de forme
withdraw Le signataire se rétracte (avant forclusion) Retrait à l'épreuve des révisions au lieu d'une suppression silencieuse

Aucune suppression silencieuse : un événement n'est jamais supprimé ni écrasé. Un retrait est un événement withdraw — l'historique reste complet (principe du GoBD : traçabilité).

Multi-signature : deux signataires, un document source

Lors d'une GVB avec deux lignes de signature, chaque signataire génère sa propre chaîne d'événements sur le même document source :

Quell-Dokument (sha256 T)
   ├── E1: offered → accepted → signed (Kette A)
   └── PARTNER-1: offered → accepted → signed (Kette B)

La vérification (DS04) contrôle les deux chaînes indépendamment — et le conteneur GCPN (DS05) regroupe les deux sous une seule Container-ID.

Déterminisme

Chaque événement est décrit de façon déterministe : uuidV7 à partir de l'horodatage + SHA-256 de l'événement, machine à états sans transitions indéterminées, aucun texte libre hormis la déclaration statement. C'est là la qualité de saga : le processus peut être reconstitué par tout vérificateur de manière répétée et sans connaissance du contexte.

Résumé


Créé : 260913 | Partie I, article DS03 | Série : digital-signage