DS03 — Quy trình ký (Accept/Deny/Sign)

Điểm kích hoạt S2

Sau khi Signatur-Doc (DS02) được định nghĩa, người kiểm tra đặt câu hỏi đúng: Vậy cuối cùng đã quyết định điều gì? Một Signatur-Doc chỉ nói: "E1 ký Doc X." Quy trình — Chấp nhận (Accept), Từ chối (Deny), Ký (Sign), Rút lại (Withdraw) — là một sự kiện riêng với trình tự thời gian riêng.

Máy trạng thái của quy trình ký

Một quy trình đi qua một máy trạng thái xác định:

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

Mỗi thay đổi trạng thái là một tạo tác sự kiện trong repo — một tài liệu JSON theo schema 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"
  }
}

Chuỗi liên kết: prev_event_sha256

Mỗi sự kiện tham chiếu đến sự kiện trước của nó — lịch sử ký tạo thành một chuỗi SHA-256 (nguyên tắc GCPN-prev_sha256, ở đây ở cấp sự kiện):

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

Người kiểm tra có thể xác minh toàn bộ lịch sử bằng ba lệnh:

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?

Các loại sự kiện

Sự kiện Ý nghĩa Giá trị chứng cứ
offered Yêu cầu ký (tài liệu được trình để ký) Điểm bắt đầu thời hạn, tính công bằng của thủ tục
accepted Người nhận đã ghi nhận (xác nhận truy cập dạng văn bản) § 126b (1): đã chứng minh truy cập
denied Người nhận từ chối (có lý do) Ghi nhận việc từ chối — quan trọng khi có các phiên bản mâu thuẫn
sign Người ký ký (tham chiếu Facsimile/khóa) § 371a ZPO: ghi kèm tên + hiển thị hình thức
withdraw Người ký rút lại (trước khi mất quyền) Rút lại có thể kiểm toán thay vì xóa âm thầm

Nguyên tắc không xóa âm thầm: Một sự kiện không bao giờ bị xóa hoặc ghi đè. Việc rút lại là một sự kiện withdraw — lịch sử vẫn đầy đủ (nguyên tắc GoBD: khả năng truy vết).

Mẫu (offered/presented): stage Ur-Docs + văn bản commit

Khi trình để ký, các Ur-Docs liên quan được stage trong Git-Repo (git add) — như vậy trong Git-Index được phân định rõ ràng tài liệu nào cần ký, tách khỏi phần trạng thái làm việc còn lại. Đồng thời, một văn bản commit tiếng Đức được chuẩn bị, liệt kê các Ur-Docs cần ký kèm SHA-256 (HITL và văn bản hợp đồng là tiếng Đức).

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

Không có commit do công cụ thực hiện (NO-AUTO-COMMIT): commit được phân định rõ ràng và ký GPG do người ký thực hiện (xem GCSIG).

Đa chữ ký: Hai người ký, một tài liệu nguồn

Với một GVB có hai dòng chữ ký, mỗi người ký tạo chuỗi sự kiện riêng của mình trên cùng một tài liệu nguồn:

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

Việc xác minh (DS04) kiểm tra cả hai chuỗi một cách độc lập — và GCPN-Container (DS05) gộp cả hai dưới một Container-ID.

Tính xác định

Mỗi sự kiện có thể được mô tả một cách xác định: uuidV7 từ dấu thời gian + SHA-256 của sự kiện, máy trạng thái không có chuyển đổi không xác định, không có văn bản tự do ngoài khai báo statement. Đó là chất lượng Saga: quy trình có thể được mọi người kiểm tra tái lập và không cần kiến thức ngữ cảnh để theo dõi.

Tóm tắt


Đã tạo: 260913 | Phần I, Bài DS03 | Chuỗi: digital-signage