ED06 - Chứng từ, DMS, hóa đơn điện tử: Tổ chức, khả năng truy vết ngược/tiến
Vấn đề
Một doanh nghiệp bắt đầu với việc lưu trữ chứng từ và đối diện với câu hỏi: Làm thế nào để sắp xếp chứng từ tuân thủ GoBD và làm cho chúng có thể được truy vết?
Thực tiễn hiện nay trong lĩnh vực doanh nghiệp vừa và nhỏ:
- Chứng từ giấy trong thư mục - không ở dạng điện tử, không thể xử lý bằng máy, không thể truy vết ngược/tiến
- PDF trong tài khoản đám mây - không tuân thủ GoBD (không có tính bất biến, không thể xử lý bằng máy, phụ thuộc vào nhà cung cấp dịch vụ)
- E-mail có tệp PDF đính kèm - không được lưu trữ (hộp thư E-mail không phải là kho lưu trữ), không có tính xác thực của chứng từ, không có chuỗi bằng chứng
- Chưa hiểu hóa đơn điện tử (XML) - nhiều doanh nhân không biết rằng từ năm 2025 tệp XML là tài liệu gốc, không phải PDF
- (Thường là) Không có trật tự - chứng từ được xếp theo ngày, không theo giao dịch; bút toán không có tham chiếu chứng từ
- (Thường là) Không có khả năng truy vết ngược - người kiểm tra không thể truy ngược từ bút toán đến chứng từ, vì thiếu tham chiếu
- (Thường là) Không có khả năng truy vết tiến - không thể truy từ chứng từ đến bút toán, vì thiếu tham chiếu chéo
Kernaussage
Lưu trữ chứng từ tuân thủ GoBD có nghĩa là:
- Mỗi chứng từ có một định danh duy nhất (DocID) -
uuidV7(Object ID) đã là duy nhất định danh của chứng từ, độc lập với tên tệp. Ngoài ra, mỗi chứng từ còn nhận được hash SHA-256 để kiểm tra toàn vẹn bằng mật mã. Khóa tổ hợpV7GUID:uuidV7dùng để tổ chức lưu trữ (ví dụ theo loại chứng từ) và truy vấn cơ sở dữ liệu (ví dụ khi dùng EF Core trong Vertical App) - không phải bản thân định danh. - Mỗi chứng từ có một Sidecar -
.v7g.mdvới phân loại (V7GUID), định danh đối tượng (uuidV7), taxonomy, trạng thái lỗi thời, thời điểm ghi nhận (tronguuidV7dưới dạng dấu thời gian 48 bit). Ngoại lệ (từ 261011): Chứng từ được đưa vào một quy trình ký (chứng từ tự lập số, ví dụ chứng từ chi phí tiếp khách) mang toàn bộ siêu dữ liệu Sidecar trong*.gcsig.md(khốisourcetích hợp, lược đồgcsig-1.4); không có.v7g.mdriêng — không có Sidecar cạnh tranh. - Mỗi bút toán tham chiếu chứng từ của nó -
source_sha256trong bản ghi sổ nhật ký → Chứng từ - Khả năng truy vết ngược - có thể tra cứu từ bút toán → chứng từ →
bản ghi sổ nhật ký →
uuidV7 - Khả năng truy vết tiến - có thể tra cứu từ chứng từ → bút toán → sổ cái → bảng cân đối khai mở đầu
- Hóa đơn điện tử: XML là tài liệu gốc - không phải PDF (từ năm 2025, § 14 UStG, EN 16931)
Tuân thủ theo thiết kế: Trật tự chứng từ không được tạo ra bằng việc sắp xếp bổ sung sau, mà bằng các trường bắt buộc có cấu trúc (SHA-256, V7GUID, Sidecar) và các Pre-Commit-Hook kiểm tra từng bút toán về tham chiếu chứng từ.
Các loại chứng từ và đặc thù GoBD của chúng
(Scan erforderlich)"] B --> PDF["PDF-Beleg
(sonstige Rechnung)"] B --> EML["E-Mail
(EML + Anhang)"] B --> XML["E-Rechnung
(XML - Ur-Dokument)"] P --> S["Scan → SHA-256
+ Sidecar"] PDF --> SH["SHA-256
+ Sidecar"] EML --> EM["EML archiviert
+ Anhang extrahiert
+ Sidecar"] XML --> XV["XML unverändert
+ Sidecar
+ Validierung (EN 16931)"] style B fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style P fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style PDF fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style EML fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style XML fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SH fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style EM fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style XV fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Loại chứng từ | Đặc thù GoBD | Thời hạn lưu giữ |
|---|---|---|
| Chứng từ giấy | Bắt buộc quét (§ 147 Abs. 2 AO); bản gốc có thể bị hủy nếu bản quét tuân thủ GoBD | 8 năm (§ 147 Abs. 3 AO) |
| Chứng từ PDF ("hóa đơn khác") | Từ năm 2025 không còn là "hóa đơn điện tử"; SHA-256 + Sidecar; có thể xử lý bằng máy? Không - PDF không có cấu trúc | 8 năm |
| E-mail (EML + tệp đính kèm) | Hộp thư E-mail không phải là kho lưu trữ; EML phải được lưu trữ cùng tệp đính kèm; xác minh người gửi | 6 năm (§ 147 Abs. 1 Nr. 2/3 AO) |
| Hóa đơn điện tử (XML) | XML là tài liệu gốc (từ năm 2025, § 14 UStG); lưu giữ mà không thay đổi; xác thực EN 16931; có thể xử lý bằng máy | 8 năm |
Quan trọng - Hóa đơn điện tử từ năm 2025: Từ ngày 1 tháng 1 năm 2025, hóa đơn điện tử là bắt buộc đối với giao dịch B2B giữa các doanh nghiệp trong nước (§ 14 UStG). Một tệp PDF đơn giản không còn là hóa đơn điện tử - đó là một "hóa đơn khác". Chỉ khi hóa đơn điện tử được phát hành, truyền tải và nhận trong một định dạng điện tử có cấu trúc (XML, EN 16931) thì đó mới là hóa đơn điện tử. Xem ED01 "Hóa đơn điện tử: Các định dạng XML là tài liệu gốc trong AO".
Phân loại chứng từ trong kho Git
Cấu trúc thư mục
ORG-1/sources/ # Belegarchiv (Tenant: ORG-1)
├── eingangsrechnungen/ # Eingangsrechnungen (Lieferanten)
│ ├── 260815/ # Nach Datum (YYMMDD)
│ │ ├── rechnung_001.xml # E-Rechnung (XRechnung)
│ │ ├── rechnung_001.xml.v7g.md # Sidecar
│ │ └── rechnung_002.pdf # Sonstige Rechnung (PDF)
│ │ └── rechnung_002.pdf.v7g.md # Sidecar
├── ausgangsrechnungen/ # Ausgangsrechnungen (Kunden)
├── lohnbelege/ # Lohnabrechnungen
├── sv-bescheide/ # SV-Bescheide, VBG-Bescheide
├── vertraege/ # Verträge (periodenübergreifend)
├── korrespondenz/ # E-Mails, Briefe
└── sonstige/ # Sonstige Belege
Sidecar cho mỗi chứng từ (bắt buộc)
Mỗi chứng từ nhận một Sidecar .v7g.md với khóa tổ hợp
V7GUID:uuidV7:
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-1.0.schema.json",
"V7GUID": "<V7GUID-Class-aus-Registry>",
"docUid": "019f2c6f-0900-7001-8000-000000000001",
"sha256": "ab94670c0dd8499c27ef2feddd1d9c5925977d55a52150a6fca0f6567d2e5e79",
"title": "260815_Rechnung_001.xml",
"original_filename": "Rechnung_001.xml",
"locations": [
{
"unc_path": "./ORG-1/sources/eingangsrechnungen/260815/rechnung_001.xml",
"from": "260815",
"to": null,
"note": "Primärspeicherort"
}
],
"v7g_taxonomy": [
{
"v7guid": "019f2c6f-0900-7000-8000-000000000000",
"taxonomy": "ORG-1/Eingangsrechnung",
"valid_from": "260815",
"valid_to": null,
"note": "Tenant: ORG-1, Category: Eingangsrechnung, Sphäre: wirtschaftlich"
}
],
"gcpn": {
"prima_nota_ref": "GB-2026-08-001",
"journal_entry_ref": "J-2026-08-001"
},
"obsolescence": {
"status": "active",
"superseded_by": null,
"superseded_at": null
}
}
Khóa tổ hợp
V7GUID:uuidV7- Tổ chức lưu trữ và truy vấn:
uuidV7(Object ID) - đã là duy nhất định danh (DocID) của chứng từ, được tạo với mốc thời gian xác định trước, dấu thời gian 48 bit được ghi trong GUIDV7GUID(Class) - phân loại loại chứng từ theo registry.gitcover(loại chứng từ, tổ chức lưu trữ, truy vấn cơ sở dữ liệu khi dùng Vertical App với EF Core)v7g_taxonomy[].v7guid- Object ID của chứng từ đã phân loạigcpn.prima_nota_ref/journal_entry_ref- tham chiếu chéo đến sổ cái/sổ nhật ký (khả năng truy vết tiến)- Khóa tổ hợp
V7GUID:uuidV7dùng để tổ chức lưu trữ và truy vấn - định danh của chứng từ làuuidV7một mình- Không có trường
datetimeriêng - thời gian nằm tronguuidV7
Khả năng truy vết ngược và tiến
SKR04 6000 an 1600"] BS --> SR["source_sha256
im Tagebucheintrag"] SR --> BE["Beleg
(SHA-256 match)"] BE --> SC["Sidecar .v7g.md
V7GUID:uuidV7"] SC --> DE["Tagebucheintrag
uuidV7"] end subgraph PRO["Progressiv (Prüfer vom Beleg vorwärts)"] direction LR BE2["Beleg
(SHA-256)"] BE2 --> SC2["Sidecar .v7g.md
gcpn.journal_entry_ref"] SC2 --> BS2["Buchungssatz
SKR04"] BS2 --> GB["Grundbuch
(JSON)"] GB --> EB["Eröffnungsbilanz"] end style BS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SR fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style BE fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style DE fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style BE2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style BS2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style EB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Hướng | Điểm bắt đầu | Đối chiếu qua | Điểm đích | Liên quan GoBD |
|---|---|---|---|---|
| Ngược | Bút toán (SKR04) | source_sha256 → Chứng từ → Sidecar uuidV7 |
Bản ghi sổ nhật ký | Rz. 146 (Khả năng truy vết) |
| Tiến | Chứng từ (SHA-256) | Sidecar gcpn.journal_entry_ref → Bút toán → Sổ cái |
Bảng cân đối khai mở đầu | Rz. 147 (Khả năng kiểm chứng) |
Liên quan GoBD: Khả năng truy vết ngược tương ứng với GoBD Rz. 146 (Khả năng truy vết - "bên thứ ba có chuyên môn trong thời gian hợp lý"). Khả năng truy vết tiến tương ứng với GoBD Rz. 147 (Khả năng kiểm chứng). Cả hai được đảm bảo theo thiết kế bằng SHA-256 + V7GUID + Sidecar - không phải bằng tham chiếu chéo thủ công.
Hóa đơn điện tử: XML là tài liệu gốc
(XML oder ZUGFeRD)"] ER --> V["Validierung
EN 16931 / XRechnung-Schema"] V -->|gültig| A["Ablage im Git-Repo
XML unverändert"] V -->|ungültig| R["Fehler-Logging
+ manuelle Prüfung"] A --> S["Sidecar .v7g.md
SHA-256 + V7GUID:uuidV7"] S --> B["Buchungssatz
source_sha256 → XML"] B --> N["Nachverfolgbarkeit
retrograd + progressiv"] style ER fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style V fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style A fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style B fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style N fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
XRechnung so với ZUGFeRD
| Định dạng | Cấu trúc | Tài liệu gốc | Trực quan hóa |
|---|---|---|---|
| XRechnung | XML thuần (EN 16931) | Tệp XML | Cần XML-Viewer (ví dụ ELSTER (e-rechnung.elster.de)[https://e-rechnung.elster.de] |
| ZUGFeRD | Kết hợp: PDF + XML nhúng | Phần XML (có giá trị quyết định từ năm 2025, BMF FAQ 12a) | Ảnh PDF (chỉ dùng để hỗ trợ hiển thị) |
Quan trọng - ZUGFeRD từ năm 2025: Khi có khác biệt giữa phần XML và phần ảnh PDF, từ năm 2025 phần có cấu trúc (XML-) là phần quyết định (BMF FAQ Frage 12a). Ảnh PDF không còn dẫn dắt. Sidecar phải tham chiếu XML với tư cách tài liệu gốc, không phải PDF.
Pre-Commit-Hook cho hóa đơn điện tử
Pre-Commit-Hook kiểm tra với hóa đơn điện tử:
| Kiểm tra | Lỗi khi |
|---|---|
| Tệp XML có cấu trúc XRechnung/ZUGFeRD hợp lệ | Cấu trúc XML không hợp lệ |
Có Sidecar .v7g.md |
Thiếu Sidecar |
sha256 trong Sidecar khớp với tệp XML |
Lệch hash (tệp đã bị thay đổi) |
v7g_taxonomy phân loại là hóa đơn điện tử |
Thiếu phân loại |
Không có trường datetime/date trong Sidecar (thời gian trong uuidV7) |
Trường thừa |
Lưu trữ E-mail
E-mail là thư từ thương mại hoặc kinh doanh theo nghĩa § 147 Abs. 1 Nr. 2/3 AO và do đó phải lưu giữ trong 6 năm. Nhiều doanh nhân không lưu trữ E-mail - đó là vi phạm GoBD.
(EML/MBOX)"] EM --> EX["Anhang extrahiert
(PDF, XML)"] EM --> AR["EML archiviert
(unverändert)"] EX --> SH["SHA-256 pro Anhang"] AR --> SH2["SHA-256 der EML"] SH --> SC["Sidecar .v7g.md
pro Beleg"] SH2 --> SC2["Sidecar .v7g.md
für E-Mail"] style EM fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style EX fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style AR fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SH fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SH2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SC2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Bước | Hành động | Liên quan GoBD |
|---|---|---|
| Nhận E-mail | Lưu tệp EML không thay đổi | § 147 Abs. 1 Nr. 2 AO (thư từ thương mại đã nhận) |
| Trích xuất tệp đính kèm | Lưu riêng tệp đính kèm PDF/XML + SHA-256 | Khả năng xử lý bằng máy (§ 147 Abs. 6 AO) |
| Sidecar cho mỗi chứng từ | .v7g.md cho EML và cho từng tệp đính kèm |
Khả năng truy vết (Rz. 146) |
| Xác minh người gửi | Ghi nhận các header DKIM/SPF trong Sidecar | Giá trị chứng minh của E-mail |
Mẹo thực tiễn: Một kho Git có thể lưu trữ song song E-mail (EML/MBOX) và tệp đính kèm (PDF, XML) - với việc phân tách rõ ràng theo loại chứng từ trong Sidecar (
v7g_taxonomy). Pre-Commit-Hook kiểm tra rằng mỗi EML đều có Sidecar và mỗi tệp đính kèm được phân loại riêng.
Tính đầy đủ của chứng từ (Pre-Commit-Hook)
vorhanden?"} P1 -->|nein| R1["Commit abgelehnt
Belegreferenz fehlt"] P1 -->|ja| P2{"Beleg existiert
im Repo?"} P2 -->|nein| R2["Commit abgelehnt
Beleg nicht gefunden"] P2 -->|ja| P3{"Sidecar .v7g.md
vorhanden?"} P3 -->|nein| R3["Commit abgelehnt
Sidecar fehlt"] P3 -->|ja| P4{"SHA-256 match?"} P4 -->|nein| R4["Commit abgelehnt
Beleg verändert"] P4 -->|ja| OK["Commit akzeptiert
Beleg-Vollständigkeit OK"] style C fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P4 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R1 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R3 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R4 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style OK fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Kiểm tra | Lỗi khi | Liên quan GoBD |
|---|---|---|
Có source_sha256 |
Thiếu tham chiếu chứng từ | Rz. 146 (Khả năng truy vết) |
| Chứng từ tồn tại trong kho Git | Chứng từ chưa được lưu trữ | § 147 Abs. 1 Nr. 4 AO (chứng từ kế toán) |
| Có Sidecar | Thiếu phân loại | Rz. 146 (Khả năng truy vết) |
| SHA-256 khớp | Chứng từ bị thay đổi sau | Rz. 146 (Tính bất biến) |
Đòn bẩy rủi ro
| Hôm nay (rẻ) | Ngày mai (an toàn khi rà soát) | Rủi ro được giảm nhẹ |
|---|---|---|
| SHA-256 cho mỗi chứng từ | Định danh chứng từ duy nhất, không phụ thuộc vào tên tệp | Phủ nhận tính xác thực của chứng từ |
Sidecar với khóa tổ hợp V7GUID:uuidV7 |
Thao tác phân loại có thể được truy vết | Phủ nhận việc phân loại |
source_sha256 cho mỗi bút toán |
Khả năng truy vết ngược | Phủ nhận việc gán chứng từ |
gcpn.journal_entry_ref trong Sidecar |
Khả năng truy vết tiến | Phủ nhận bút toán |
| Hóa đơn điện tử XML không thay đổi + Sidecar | Tuân thủ § 14b UStG (tính toàn vẹn) | Thuế đầu vào không được trừ |
| E-mail EML được lưu trữ + Sidecar | Tuân thủ § 147 Abs. 1 Nr. 2 AO | Mất bằng chứng khi tranh chấp với cơ quan nhà nước |
| Pre-Commit-Hook kiểm tra tính đầy đủ của chứng từ | Không có bút toán nào mà không có chứng từ | Vi phạm GoBD "không đầy đủ" |
Yêu cầu Harness (xem trước)
Có thể suy ra từ ED06:
| ID | Yêu cầu | Mức ưu tiên |
|---|---|---|
| FA-2.1 | SHA-256 làm ID chứng từ | MUST |
| FA-2.2 | Sidecar cho mỗi chứng từ — *.v7g.md hoặc (với chứng từ đã ký/chứng từ tự lập) tích hợp trong *.gcsig.md |
MUST |
| FA-2.3 | Sidecar với khóa tổ hợp V7GUID:uuidV7 |
MUST |
| FA-2.8 | Chức năng DMS: phân loại chứng từ | MUST |
| FA-2.9 | Tích hợp hóa đơn điện tử: nhập XRechnung/ZUGFeRD, xác thực | SHOULD |
| FA-2.10 | Lưu trữ E-mail: EML + SHA-256 + Sidecar | MUST |
| FA-2.11 | Tổ chức GoBD: chỉ mục cho từng năm tài chính | MUST |
| FA-2.12 | Khả năng truy vết ngược | MUST |
| FA-2.13 | Khả năng truy vết tiến | MUST |
| FA-2.14 | Pre-Commit-Hook: kiểm tra tính đầy đủ của chứng từ | MUST |
| FA-2.15 | Quy trình quét: Giấy → Quét → SHA-256 → Sidecar | SHOULD |
Danh sách yêu cầu đầy đủ tại Harness-Anforderungen.md.
Nguồn
- GoBD (văn bản BMF, Rz. 146 - Khả năng truy vết, Rz. 147 - Khả năng kiểm chứng)
- AO (§ 147 Abs. 1 Nr. 2/3 - thư từ thương mại, § 147 Abs. 1 Nr. 4 - chứng từ kế toán, § 147 Abs. 2 - có thể xử lý bằng máy, § 147 Abs. 3 - thời hạn lưu giữ)
- UStG (§ 14 - Hóa đơn điện tử, § 14b - Lưu giữ)
- BMF-FAQ về hóa đơn điện tử (tình trạng tháng 3 năm 2026)
- EN 16931 (CEN/TC 434 - XRechnung, ZUGFeRD)
E1/agents/(đã ẩn danh) - Khái niệm SSoT với kho lưu trữ chứng từ, Sidecar
Topo họ nguồn và các liên kết tham chiếu CDN
| Vai trò | Vị trí | Mục đích |
|---|---|---|
| Chính / SSoT | git.gitcover.org/GCC | Nơi lưu trữ chuẩn (ký GPG, có phiên bản) |
| Mirror OSS công khai / CDN | codeberg.org/gitcover-commons | Bản sao chỉ đọc; Khám phá FLOSS |
| Trung tâm cộng đồng | github.com/gitcover-commons | Issues & Discussions; Tham chiếu mã nguồn trên Codeberg |
Lưu ý: Sự phân công giữa nguồn, bản sao và trung tâm cộng đồng này phản ánh trạng thái 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 về trạng thái hiện tại.