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 finalement décidé ? Un document de signature dit seulement : « E1 signe le doc X. » Le processus — acceptation (Accept), refus (Deny), signature (Sign), retrait (Withdraw) — est un événement propre avec sa propre chronologie.
Machine à états du processus de signature
Un processus traverse une machine à états déterministe :
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",
"docUid": "<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",
"docUid": "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écédent — l'historique de signature forme une chaîne SHA-256 (principe GCPN prev_sha256, ici au niveau de l'événement) :
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 tout 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 signature) | Point de départ du délai, équité de la procédure |
accepted |
Le destinataire 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 Fac-similé/clé) | § 371a ZPO : adjonction du nom + indication de forme |
withdraw |
Le signataire retire (avant déchéance) | Retrait auditable au lieu d'une suppression silencieuse |
Principe de non-suppression silencieuse : un événement n'est jamais supprimé ni écrasé. Un retrait est un événement
withdraw— l'historique reste complet (principe GoBD : traçabilité).
Modèle (offered/presented) : indexer les documents originaux + message de commit
Lors de la présentation pour signature, les documents originaux concernés sont indexés dans le dépôt Git (git add) —
ainsi, dans l'index Git, il est clairement délimité ce qui doit être signé, séparément du reste
de l'état de travail. Pour cela, un message de commit allemand est préparé, qui liste les documents originaux à signer
avec leur SHA-256 (HITL et le texte contractuel sont en allemand).
gc-docsign present <ur-doc.md> … --repo <dir> # stagt Ur-Docs, schreibt .git/PRESENTED-COMMIT-MSG.txt
gc-docsign gcsig --doc "<ur-doc.md>" --phase presented # Phase `presented` setzen
Aucun commit effectué par l'outil (NO-AUTO-COMMIT) : le commit délimité et signé GPG est effectué par le signataire (voir GCSIG).
Multi-signature : deux signataires, un document source
Lors d'une GVB avec deux lignes de signature, chaque signataire crée 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 un identifiant de conteneur.
Déterminisme
Chaque événement est décrivable de manière 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 la qualité Saga :
le processus peut être reproduit et suivi sans connaissance du contexte par tout vérificateur.
Résumé
- Le processus de signature est une machine à états (drafted → offered → accepted/denied → signed → withdrawn).
- Chaque changement d'état est un événement JSON (schéma
signature-event-1.0) avec chaîne SHA-256 (prev_event_sha256). - Les événements ne sont jamais supprimés — le retrait est un événement, pas une suppression.
- Article suivant (DS04) : la routine de vérification du vérificateur.
Créé : 260913 | Partie I, article DS03 | Série : digital-signage