ED03 - Định dạng nhật ký: JSON-Artifacts, chữ ký thời gian, V7GUID, Sidecars

Vấn đề

Một doanh nhân muốn ghi nhật ký của mình trong Git - nhưng một mục nhập trông như thế nào về mặt kỹ thuật? Thực tiễn hiện nay không có câu trả lời ràng buộc:

Tuyên bố cốt lõi

Một mục nhật ký GitCover là một JSON-Artifact với:

  1. JSON-Schema-First - lược đồ tồn tại trước mục nhập; mục nhập được xác thực dựa trên lược đồ (Pre-Commit-Hook)
  2. V7GUID (Class Identifier) - phân loại tài liệu/hành động dựa trên registry .gitcover (cái gì/loại nào); phục vụ tổ chức lưu trữ và truy vấn DB (ví dụ EF Core trong Vertical App)
  3. uuidV7 (Object ID) - bản thân nó đã là danh tính duy nhất (DocID) của mục nhập, RFC 9562 §5.7, được tạo từ một mốc thời gian được chỉ định trước (hoặc now()) qua GitCover Helper (gc-v7guid), phần còn lại được lấp đầy bằng ngẫu nhiên
  4. Composite Key V7GUID:uuidV7 - Composite Key của GCPN Sidecar, phục vụ tổ chức lưu trữ và truy vấn; thời gian ghi nhận nằm trong uuidV7 (dấu thời gian 48-bit), không có trường datetime/date riêng
  5. Bắt buộc Sidecar - mỗi chứng từ nhận một .gc.md-Sidecar với uuidV7 riêng (hành vi phân loại) và uuidV7 của tài liệu
  6. Khả năng truy vết ngược/xuôi - từ bút toán → chứng từ → mục nhật ký → uuidV7 và có thể phân giải ngược lại

Compliance by Design: Định dạng này không phải là bổ sung sau - nó mang tính cấu trúc. Schema, V7GUID (Class), uuidV7 (Object) và Sidecar là các trường bắt buộc, nếu thiếu thì một mục nhập không được đưa vào repo.

Không có datetime/date dư thừa: Thời gian ghi nhận được neo giữ trong chính uuidV7 (dấu thời gian 48-bit, RFC 9562 §5.7). Một biểu diễn chuỗi riêng trong JSON-Schemata hoặc dữ liệu JSON là dư thừa và không được đưa vào các sự kiện. Biểu diễn chuỗi cho DTO/HTMX-Transfer là trách nhiệm của Harness, không phải cấp độ sự kiện.

Mục nhật ký như một nút tuân thủ

Mục nhập kỹ thuật không phải là mục đích tự thân. Nó là nút thời gian nơi nhiều chuỗi bằng chứng hội tụ:

flowchart LR D["Diary: Agenda + Leistungszeit"] --> F["FZul/BSFZ"] D --> E["EStG/EÜR: Veranlassung"] D --> U["USt: Leistungszeitraum"] D --> G["GoBD/AO: Belegkette"] D --> C["Vertrag/Abrechnung"] D --> R["Risiko- und Fristenkontrolle"] D --> P["Git-Repos: portabler Proof"]

Diary-SSoT cho biết công việc đã được thực hiện theo chương trình nghị sự nào. Ur-Docs, Sidecars, GCPN và các tạo tác sổ cái/thanh toán cung cấp các chứng từ tương ứng. Sự tách biệt này ngăn ngừa hai lỗi: một mục Diary không bị hiểu nhầm là thay thế cho chứng từ bên ngoài, và một chứng từ được thu thập sau đó không bị trình bày sai thành bằng chứng công việc kịp thời.

JSON-Schema (Schema-First)

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR S["JSON-Schema
(vor Eintrag)"] S --> V["Schema-Validierung
(Pre-Commit-Hook)"] E["Tagebucheintrag
(JSON)"] E --> V V -->|gültig| C["Commit akzeptiert
+ uuidV7 generiert"] V -->|ungültig| R["Commit abgelehnt
Schema-Verstoß"] style S fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style E fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style C fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Lược đồ tồn tại trước mục nhập - nó được lưu trong .gitcover/schemas/diary-entry-1.0.schema.json và được quản lý phiên bản. Một mục nhập không có tham chiếu lược đồ ($schema) sẽ bị Pre-Commit-Hook từ chối.

Schema diary-entry-1.0.schema.json (đơn giản hóa)

{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://gitcover.org/schemas/diary-entry-1.0.schema.json",
  "title": "GitCover Diary Entry v1.0",
  "type": "object",
  "required": [
    "$schema", "V7GUID", "docUid",
    "author", "role", "tenant", "sphere", "source"
  ],
  "properties": {
    "$schema": {
      "type": "string",
      "format": "uri",
      "const": "https://gitcover.org/schemas/diary-entry-1.0.schema.json"
    },
    "V7GUID": {
      "type": "string",
      "description": "Class Identifier - klassifiziert das Dokument/die Action aus .gitcover Registry (was/welcher Typ)"
    },
    "docUid": {
      "type": "string",
      "pattern": "^[0-9a-f]{8}-[0-9a-f]{4}-7[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$",
      "description": "Object ID - RFC 9562 §5.7 UUIDv7, generiert aus vorgegebener Zeitmarke (nicht now()), 48-Bit-Zeitstempel in der GUID verankert"
    },
    "author": { "type": "string", "description": "Akteur-Platzhalter, z. B. E1" },
    "role": {
      "type": "string",
      "enum": ["GF", "Buchhalter", "Lohnverantwortlicher", "F&E-Leiter", "Administrator"]
    },
    "tenant": { "type": "string", "description": "Tenant-Platzhalter, z. B. ORG-1" },
    "sphere": {
      "type": "string",
      "enum": ["ideell", "vermögensverwaltend", "zweckbetrieblich", "wirtschaftlich", "n/a"]
    },
    "source": {
      "type": "string",
      "enum": ["E1", "StB", "Notar", "Bank", "DRV", "FA", "BA", "VBG", "KK", "auto"]
    },
    "source_sha256": {
      "type": "string",
      "pattern": "^[0-9a-f]{64}$",
      "description": "SHA-256 des referenzierten Belegs (eindeutige Beleg-ID)"
    },
    "tags": { "type": "array", "items": { "type": "string" } }
  }
}

Quan trọng - không có trường datetime/date: Thời gian ghi nhận nằm trong uuidV7 (dấu thời gian 48-bit, RFC 9562 §5.7). Một biểu diễn chuỗi riêng là dư thừa và không được đưa vào các sự kiện. Chỉ riêng uuidV7 là DocID duy nhất; Composite Key V7GUID:uuidV7 phục vụ tổ chức lưu trữ và truy vấn DB.

V7GUID - Cấu trúc và dấu thời gian 48-bit

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR subgraph V7["V7GUID (128 Bit, RFC 9562 §5.7)"] direction LR T["timestamp_ms
Bits 0–47
48 Bit Unix-ms"] V["version
Bits 48–51
0111 (UUIDv7)"] R["rand_a
Bits 52–63
12 Bit"] VA["variant
Bits 64–65
10"] RB["rand_b
Bits 66–127
62 Bit"] end T --> DT["48-Bit-Zeitstempel
in uuidV7 verankert
(kein separates datetime-Feld)"] V7 --> ID["uuidV7-Feld
Object ID
(vorgegebene Zeitmarke)"] style T fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#E5E7EB,stroke:#6B7280,color:#0F1B33 style VA fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style RB fill:#E5E7EB,stroke:#6B7280,color:#0F1B33 style DT fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style ID fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7
Phạm vi bit Độ rộng Nội dung RFC-fix
0–47 48 Bit Mili giây Unix kể từ Epoch (1970-01-01T00:00:00Z) Có (RFC 9562 §5.7)
48–51 4 Bit Phiên bản = 0111 (UUIDv7) Có
52–63 12 Bit rand_a (ngẫu nhiên) Không
64–65 2 Bit Variant = 10 Có
66–127 62 Bit rand_b (ngẫu nhiên) Không

Nguyên tắc cốt lõi: Thành phần dấu thời gian 48-bit (bit 0–47) là có thẩm quyền đối với thời gian ghi nhận. Nó được neo giữ trong chính uuidV7 và không thể bị thay đổi sau đó mà không làm GUID trở nên không hợp lệ. Một trường datetime riêng không tồn tại - thời gian nằm trong uuidV7. Biểu diễn chuỗi cho DTO/HTMX là trách nhiệm của Harness.

Phần mở rộng GitCover: Hệ thống phân cấp và Process-ID trong bit 66–127

Đặc tả GitCover-V7GUID (work/OSS/TOP/.gitcover/specs/v7guid/) mở rộng thành phần ngẫu nhiên 62-bit (bit 66–127) bằng một hệ thống phân cấp 6 cấp và Process-ID - đây là phần mở rộng được bảo hộ bằng sáng chế (DPMA Az. 10 2025 003 091.6):

Phạm vi bit Độ rộng Nội dung
66–89 6×4 Bit Hệ thống phân cấp 6 cấp (L1–L6, mỗi cấp 4 Bit)
90–97 8 Bit ProcessTypeId (loại quy trình)
98–105 8 Bit GatewayId (điểm kiểm soát)
106–113 8 Bit Status (bitmask vòng đời)
114–121 8 Bit Kind (loại hoạt động)
122–127 6 Bit VariantId (lớp biến thể)

Lưu ý: Phần mở rộng này không bắt buộc đối với loạt bài về nhật ký - nó trở nên liên quan trong ED02 (Tenant/Sphäre/Rolle) và các bài viết sau (Harness). Ở đây, nền tảng RFC-9562 với dấu thời gian 48-bit là đủ.

Các thủ tục Helper: Tạo V7GUID từ khóa ngoài

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR F["Fremd-Key
(Zeitmarke in Daten
oder Dateiname)"] F --> H["Helper-Routine
gc-v7guid"] H --> TS["48-Bit-Zeitstempel
extrahiert/konvertiert"] TS --> G["uuidV7 generiert
(Guid.CreateVersion7)"] G --> A["JSON-Artefakt
V7GUID + uuidV7"] A --> D["GoBD-Dokumentation
zeitnahe Erfassung
nachvollziehbar"] style F fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style TS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style G fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style A fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33

Công cụ GitCover-OSS gc-v7guid (work/OSS/gc-v7guid) cung cấp các thao tác:

gen — Tạo Object-ID UUIDv7

# n Objekt-IDs mit vorgegebener Zeitmarke (nicht now()) und Zufalls-Tail (RFC 9562)
gc-v7guid gen 1 --ts 2026-08-15T09:00:00Z
# Ausgabe: 01a17e18-c662-7874-9e1c-85d47895304f

gen-doc — Xác định từ siêu dữ liệu tài liệu

# Dokumentgebundene ID aus Zeitmarke + SHA-256 des Ur-Dokuments
gc-v7guid gen-doc --ts 2026-08-15T09:00:00Z --doc-sha256 <64-hex>

decode — Trích xuất dấu thời gian và cấu trúc từ uuidV7

gc-v7guid decode 019f2c6f-0900-7000-8000-000000000000
# Ausgabe: unix_ms, utc (ISO-8601), version=7, variant=2, rfc9562

Khóa ngoài → uuidV7

Các thủ tục Helper cho phép tạo một khóa uuidV7 hợp lệ từ một khóa ngoài (ví dụ một mốc thời gian trong tên tệp như 260815_0900_Lohnabrechnung.pdf) - với mốc thời gian được chỉ định trước, không phải now():

  1. Phân tích khóa ngoài - 260815_0900 → 2026-08-15T09:00:00Z
  2. Tính dấu thời gian 48-bit - mili giây Unix kể từ Epoch
  3. Tạo uuidV7 - Guid.CreateVersion7() với dấu thời gian tường minh, phần còn lại bằng ngẫu nhiên
  4. Composite Key - V7GUID (Class từ Registry) : uuidV7 (Object với mốc thời gian)
  5. Tài liệu GoBD - việc ghi nhận kịp thời được neo giữ có thể truy vết (không có trường datetime riêng)

Liên hệ GoBD: Việc ghi nhận kịp thời (GoBD Rz. 146) được ghi lại bằng mật mã thông qua dấu thời gian 48-bit trong uuidV7 - không chỉ được tuyên bố. Dấu thời gian là một phần của danh tính, không thể thay đổi sau đó.

Cấu trúc Sidecar (.gc.md)

Mỗi chứng từ nhận một Sidecar với hai tham chiếu uuidV7:

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD D["Dokument
(PDF, XML, EML)"] D --> S["Sidecar .gc.md"] S --> U1["uuidV7 (eigen)
Identität des Sidecars
+ 48-Bit-Erfassungszeit"] S --> U2["uuidV7 (fremd)
Identität des Dokuments
in v7g_taxonomy"] S --> SH["sha256
Eindeutige Beleg-ID"] S --> T["v7g_taxonomy
Klassifizierung
(Tenant, Sphäre, Kategorie)"] S --> O["obsolescence
status: active/superseded/obsolete"] style D fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style S fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style U1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style U2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SH fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style O fill:#E5E7EB,stroke:#6B7280,color:#0F1B33

Ví dụ Sidecar

{
  "$schema": "https://gitcover.org/schemas/v7g-sidecar-2.0.schema.json",
  "V7GUID": "<V7GUID-Class-aus-Registry>",
  "docUid": "019f2c6f-0900-7001-8000-000000000001",
  "sha256": "ab94670c0dd8499c27ef2feddd1d9c5925977d55a52150a6fca0f6567d2e5e79",
  "title": "260815_Lohnabrechnung.pdf",
  "original_filename": "260815_Lohnabrechnung.pdf",
  "locations": [
    {
      "unc_path": "./ORG-1/sources/lohn/260815_Lohnabrechnung.pdf",
      "from": "260815",
      "to": null,
      "note": "Primärspeicherort"
    }
  ],
  "v7g_taxonomy": [
    {
      "v7guid": "019f2c6f-0900-7000-8000-000000000000",
      "taxonomy": "ORG-1/Lohn",
      "valid_from": "260815",
      "valid_to": null,
      "note": "Tenant: ORG-1, Category: Lohn, Sphäre: ideell"
    }
  ],
  "gcpn": {
    "prima_nota_ref": null,
    "journal_entry_ref": null
  },
  "obsolescence": {
    "status": "active",
    "superseded_by": null,
    "superseded_at": null
  }
}

Composite Key V7GUID:uuidV7:

  • V7GUID (trường 1) - Class Identifier của Sidecar (phân loại từ registry .gitcover: cái gì/loại nào)
  • uuidV7 (trường 2) - Object ID của chính Sidecar, được tạo với mốc thời gian được chỉ định trước (khi nào được phân loại?), dấu thời gian 48-bit được neo trong GUID
  • v7g_taxonomy[].v7guid - Object ID của tài liệu được phân loại (tài liệu nào được phân loại?)
  • sha256 - danh tính của tài liệu gốc được phân loại — bằng chứng về tính nguyên bản, luôn luôn và ở mọi nơi (kể cả khi tài liệu di chuyển: độc lập với đường dẫn/tên, được tính từ nội dung)

Như vậy không chỉ tài liệu được nhận diện duy nhất (thông qua SHA-256 của nó), mà cả bản thân hành vi phân loại - bao gồm thời điểm (trong uuidV7), ai đã phân loại và trong vai trò nào. Không có trường datetime riêng - thời gian nằm trong các giá trị uuidV7.

Khả năng truy vết ngược và xuôi

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR subgraph RET["Retrograd (vom Buchungssatz rückwärts)"] direction LR B["Buchungssatz
(SKR04)"] B --> BE["Beleg
(SHA-256)"] BE --> DE["Tagebucheintrag
(uuidV7)"] DE --> V7["uuidV7
(48-Bit-Zeitstempel)"] end subgraph PRO["Progressiv (vom Beleg vorwärts)"] direction LR BE2["Beleg
(SHA-256)"] BE2 --> BS["Buchungssatz
(SKR04)"] BS --> GB["Grundbuch
(JSON)"] GB --> EB["Eröffnungsbilanz"] end style B fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style BE fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style DE fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V7 fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style BE2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style BS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style EB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Hướng Bắt đầu Phân giải qua Đích
Ngược Bút toán (SKR04) source_sha256 → chứng từ → uuidV7 Mục nhật ký với dấu thời gian 48-bit
Xuôi Chứng từ (SHA-256) uuidV7 → mục nhật ký → source_sha256 Bút toán → Sổ cái → Bảng cân đối mở đầu

Liên hệ GoBD: Khả năng truy vết ngược tương ứng GoBD Rz. 146 (khả năng truy vết). Khả năng truy vết xuôi tương ứng GoBD Rz. 147 (khả năng kiểm tra). Cả hai được đảm bảo by Design thông qua uuidV7 + SHA-256 - không phải thông qua tham chiếu chéo thủ công.

Ghi nhận thời gian trong nhật ký

Mỗi mục nhật ký chứa một bảng ghi nhận thời gian:

Bắt đầu Kết thúc Giờ Hoạt động Tenant Sphäre Mục đích Nguồn
0900 1200 3,00 Dữ liệu chính tài khoản lương ORG-1 ideell — E1
1200 1400 2,00 F&E: Đặc tả V7GUID ORG-1 ideell FZul1 E1

Quy tắc cột: Cột Mục đích chỉ mang dự án FuE (FZul1, FZul2, …). Công việc không phải FuE được ghi là Verwaltung (Sphäre/Kategorie) với mục đích —. Mỗi giờ FZul thuộc về đúng một dự án (§ 7 FZulG).

Liên hệ FZul: Việc ghi nhận thời gian là nền tảng cho bảng chứng nhận giờ FZul (ED29). Việc tách F&E so với Verwaltung được thực hiện qua cột Mục đích theo từng dòng thời gian - không chỉ qua trường role của mục nhập. role mô tả chức năng của người hành động (xem bên dưới), không phải việc phân bổ tài trợ.

Ghi nhận là đầy đủ - chỉ giới hạn khi thanh toán

Nhật ký ghi nhận toàn bộ thời gian làm việc thực tế đã thực hiện và không có giới hạn trên - kể cả khi thời gian đó vượt quá giới hạn tuần theo luật tài trợ (ví dụ 40 giờ mỗi tuần và mỗi người). Một giới hạn như vậy là yếu tố tính toán trong tổng tuần và việc xác định tài trợ, không phải giới hạn của từng dòng thời gian: Không dòng nào bị cắt, rút ngắn hoặc ghi lại, chỉ vì đã đạt đến một giới hạn. Việc ghi nhận đầy đủ là điều kiện tiên quyết cho tính hợp lý của nhật ký và độ vững chắc của chuỗi bằng chứng. Việc nhóm lại giữa dự án và Verwaltung là câu hỏi thanh toán/dự phóng, không phải chỉnh sửa trên chứng từ.

Diễn biến trong ngày: Chứng từ trước, bút toán sau

Một ngày nhật ký có một trình tự cố định. Ghi nhận (chứng từ) và thanh toán/bút toán được tách biệt nghiêm ngặt:

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR A["Tagesbeginn
Pflichtjobs (z. B. Verbrauchsdaten
des Vortags abholen)"] A --> B["Während des Tages
Einträge inkrementell
fortschreiben"] B --> C["Tagesabschluss
Dauer ermitteln,
Zeilen zuordnen"] C --> D["Wochenanfang
Vorwoche absummieren"] D --> E["Ledger/Projektion
erst nach vollständiger
Klärung"] style A fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style C fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style E fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Bước Nội dung Tác dụng
Trong ngày Các hoạt động được ghi nhận tăng dần dưới dạng dòng thời gian - trong phạm vi được chỉ định, được phân bổ hoặc có thể phân bổ từ ngữ cảnh Chứng từ/nhật ký, không bút toán
Kết thúc ngày Xác định thời lượng làm việc (thông tin của doanh nhân trước, neo hệ thống chỉ như dấu hiệu); phân bổ giá trị ngày theo từng mục nhập vào các Sphäre hoặc dự án - như được chỉ định hoặc có khả năng hợp lý, được đánh dấu là ước tính; sau đó hoàn tất Sidecar-SHA và chỉ mục Ngày được kết thúc (bất biến)
Bắt đầu ngày Các nhiệm vụ bắt buộc, ví dụ lấy dữ liệu tiêu thụ của ngày hôm trước Cơ sở giá trị cho các phân bổ sau này (ví dụ tỷ lệ sử dụng điện); không có tỷ lệ trong cùng ngày
Đầu tuần Tổng hợp tuần trước (phân tách dự án/Sphäre; giới hạn tuần chỉ là yếu tố tính toán) Kiểm tra tuần, dự phóng
Sổ cái/Dự phóng Cập nhật sổ cái dự án và trọng số chỉ sau khi nhật ký được làm rõ hoàn toàn - không phải từ một mục nhập riêng lẻ

Phân định: Thông tin FZul-/Sphäre trong nhật ký là một trường chứng từ. Nó độc lập với mọi bảo lưu chứng nhận và không tạo ra bút toán. Nhật ký là bằng chứng; việc ghi sổ được thực hiện trong Sổ cái, việc tính trọng số trong các dự phóng. Nguyên tắc tương tự áp dụng cho chứng từ: một chứng từ làm chứng, bút toán đến sau và riêng biệt.

Vai trò trong nhật ký - Cá nhân, chức năng, bên, thực thi

Trường role không phải là cá nhân. Để có hiểu biết vai trò vững chắc, GitCover phân biệt năm cấp độ, vẫn tách biệt ngay cả khi cùng một người thực hiện mọi thứ trong một lần (điển hình cho KMU):

Cấp độ Câu hỏi Ví dụ
Cá nhân Ai là thể nhân? E1
Chức năng / vai trò đại diện Người đó hành động với tư cách nào? Giám đốc điều hành, Trưởng bộ phận F&E
Bên được đại diện Tuyên bố được đưa ra thay cho ai ("hành động cho")? ORG-1 hoặc PARTNER-ORG
Danh tính thực thi Thao tác kỹ thuật chạy dưới tài khoản, principal hoặc khóa nào? Tài khoản người dùng, service principal, khóa chữ ký
Hành vi tuyên bố / chữ ký Nội dung tài liệu nào được chấp nhận hoặc ký với vai trò nào? Accept, Sign (DS03)

Một người có thể có nhiều chức năng và nhiều hành vi chữ ký trên cùng một tài liệu - ví dụ với tư cách giám đốc điều hành của hai công ty. Điều này không tạo ra nhiều người, cũng không nhất thiết tạo ra nhiều tài khoản hoặc khóa. Tuy nhiên, các vai trò không được trùng nhau chỉ vì cá nhân hoặc thông tin xác thực giống hệt nhau: Mỗi hành vi chữ ký ràng buộc bản thể tài liệu + cá nhân + chức năng + bên được đại diện + sự đồng ý được bao phủ rõ ràng. Một câu hỏi chung gửi đến cá nhân có thể bao phủ nhiều chữ ký chức năng, nếu các chức năng được bao phủ được nêu rõ ràng; nó không thay thế việc phê duyệt gắn với tài liệu. Chi tiết: DS03 - Quy trình chữ ký và DS13 - Phân lớp các bên tham gia.

Ranh giới trung thực: Sự tách biệt này được mô tả như một yêu cầu và mô hình dữ liệu. Một sự ràng buộc bị ép buộc hoàn toàn về mặt kỹ thuật giữa cá nhân, chức năng, bên và sự đồng ý (đặc biệt là các role-claim từ Identity-Provider đến các sự kiện chữ ký) là đối tượng của phát triển đang diễn ra và chưa được triển khai ở mọi nơi.

Làm việc với tác nhân trong nhật ký

Nếu doanh nhân sử dụng tác nhân AI, nguyên tắc là: điều khiển, chỉ dẫn, giám sát và xác thực các tác nhân là việc sử dụng công cụ lao động bởi người hành động - thời gian được ghi nhận là thời gian của cá nhân. Nhật ký không có danh mục riêng "Agenten-Zeit" và không yêu cầu xác nhận "chồng lấn" khi các hoạt động diễn ra song song. Thay vào đó:

Khả năng được tài trợ không xuất phát từ việc sử dụng tác nhân, mà từ câu hỏi liệu hoạt động có liên quan đến một câu hỏi nghiên cứu kỹ thuật mở hay không (phân định trong từng dự án).

Những gì vào Git-Repo - và những gì không

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD IN["Ins Git-Repo"] IN --> J["JSON-Artefakte
(Tagebucheinträge, Grundbuch)"] IN --> S["Sidecars .gc.md"] IN --> B["Belege
(PDF, XML, EML)"] IN --> SC["Schemata"] IN --> D["Dictionaries"] OUT["Nicht im Git-Repo"] OUT --> P["Private Dokumente
(sofern nicht ausdrücklich eingeführt)"] OUT --> T["Temporäre Dateien"] OUT --> C["Credentials/Secrets"] style IN fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style J fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style OUT fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style P fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style C fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Quan trọng: Chỉ các tạo tác có cấu trúc (JSON, Sidecars, chứng từ, schemata, từ điển) được đưa vào Git-Repo. Tài liệu riêng tư không bao giờ được đưa vào repo, trừ khi chúng được đưa vào và phân loại rõ ràng như một tạo tác. Đây là yêu cầu về bảo vệ dữ liệu và tuân thủ (DSGVO, GoBD).

Đòn bẩy rủi ro

Hôm nay (chi phí thấp) Ngày mai (an toàn kiểm toán) Rủi ro được giảm
JSON-Artefakt với V7GUID (Class) + uuidV7 (Object) Thời gian ghi nhận được neo bằng mật mã trong uuidV7 Việc phủ nhận thời gian ghi nhận
Xác thực schema (Pre-Commit) Chỉ mục nhập hợp lệ vào repo Vi phạm schema, trường bắt buộc không đầy đủ
Sidecar với Composite Key V7GUID:uuidV7 Hành vi phân loại có thể truy vết Việc phủ nhận phân loại
source_sha256 mỗi mục nhập Khả năng truy vết ngược Việc phủ nhận gán chứng từ
Helper gc-v7guid cho khóa ngoài Ghi nhận kịp thời được ghi lại (mốc thời gian trong uuidV7) Vi phạm GoBD "không kịp thời"

Yêu cầu Harness (xem trước)

Có thể suy ra từ ED03:

ID Yêu cầu Ưu tiên
FA-1.1 Mục nhật ký dưới dạng JSON-Artifacts (Schema-First) MUST
FA-1.2 Composite Key V7GUID (Class) : uuidV7 (Object) - không có trường datetime/date riêng; thời gian trong uuidV7 (RFC 9562 §5.7) MUST
FA-1.3 uuidV7 được tạo từ mốc thời gian được chỉ định trước (không phải now()) qua Helper MUST
FA-2.1 SHA-256 làm ID chứng từ MUST
FA-2.2 Bắt buộc Sidecar .gc.md MUST
FA-2.3 Sidecar với Composite Key V7GUID:uuidV7 (Class + Object) MUST
FA-2.12 Khả năng truy vết ngược (bút toán → chứng từ → uuidV7) MUST
FA-2.13 Khả năng truy vết xuôi (chứng từ → bút toán → Grundbuch) MUST
TA-1.5 Thủ tục Helper để tạo V7GUID từ khóa ngoài (gc-v7guid) MUST
TA-1.6 Yêu cầu thời gian GoBD được ghi lại (dấu thời gian 48-bit trong uuidV7) MUST
TA-2.1 Pre-Commit: Xác thực JSON-Schema MUST

Danh sách yêu cầu đầy đủ trong Harness-Anforderungen.md.

Nguồn

Cấu trúc nguồn và liên kết tham chiếu CDN

Vai trò Vị trí Mục đích
Primary / SSoT git.gitcover.org/GCC Lưu trữ chuẩn (ký GPG, được quản lý phiên bản)
Public OSS Mirror / CDN codeberg.org/gitcover-commons Bản sao chỉ đọc; FLOSS-Discovery
Community Hub github.com/gitcover-commons Issues & Discussions; tham chiếu mã nguồn trên Codeberg

Lưu ý: Sự phân bổ này giữa nguồn, mirror và Community-Hub phản ánh tình trạng hiện tại và có thể thay đổi. Vui lòng kiểm tra nguồn chuẩn tương ứng trên gitcover.org để biết tình trạng hiện tại.