DS03 — El proceso de firma (Accept/Deny/Sign)

Desencadenante S2

Una vez definido el documento de firma (DS02), el auditor plantea la pregunta correcta: ¿Qué se ha decidido entonces? Un documento de firma solo dice: "E1 firma el Doc X." El proceso — aceptación (Accept), rechazo (Deny), firma (Sign), retirada (Withdraw) — es un evento propio con su propia cronología.

Máquina de estados del proceso de firma

Un proceso recorre una máquina de estados determinista:

%%{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 --> [*]

Cada cambio de estado es un artefacto de evento en el repo — un documento JSON conforme al esquema 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"
  }
}

El encadenamiento: prev_event_sha256

Cada evento remite a su evento predecesor — el historial de firmas forma una cadena SHA-256 (principio prev_sha256 del GCPN, aquí a nivel de evento):

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

Un auditor puede verificar todo el historial con tres comandos:

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?

Los tipos de evento

Evento Significado Valor probatorio
offered Firma solicitada (documento presentado para su firma) Punto de inicio del plazo, equidad del procedimiento
accepted El destinatario ha tomado conocimiento (acceso en forma textual confirmado) § 126b (1): acceso demostrado
denied El destinatario rechaza (con justificación) Documenta el rechazo — importante en caso de versiones contradictorias
sign El firmante firma (referencia a Facsimile/clave) § 371a ZPO: adición del nombre + indicación de la forma
withdraw El firmante se retracta (antes de la preclusión) Retirada a prueba de auditoría en lugar de borrado silencioso

Sin principio de borrado silencioso: un evento nunca se borra ni se sobrescribe. Una retirada es un evento withdraw — el historial permanece completo (principio del GoBD: trazabilidad).

Multifirma: dos firmantes, un documento fuente

En una GVB con dos líneas de firma, cada firmante genera su propia cadena de eventos sobre el mismo documento fuente:

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

La verificación (DS04) comprueba ambas cadenas de forma independiente — y el contenedor GCPN (DS05) agrupa ambas bajo una Container-ID.

Determinismo

Cada evento es describible de forma determinista: uuidV7 a partir de la marca de tiempo + SHA-256 del evento, máquina de estados sin transiciones indeterminadas, ningún texto libre salvo la declaración statement. Esa es la calidad de saga: el proceso puede ser reconstruido por cualquier auditor repetidamente y sin conocimiento del contexto.

Resumen


Creado: 260913 | Parte I, artículo DS03 | Serie: digital-signage