ED08 - Thời hạn lưu trữ & Tính bất biến: Git-Hooks, Evidence-Packages
Vấn đề
GoBD và AO yêu cầu lưu trữ dài hạn - nhưng thực tế lại thất bại trong việc triển khai:
- "10 năm? Đám mây lo được." - nhiều chủ doanh nghiệp tin rằng phần mềm đám mây tự động xử lý việc lưu trữ - nhưng khi chấm dứt tài khoản, dữ liệu thường không còn truy cập được (xem ED01 Điểm đau 6–7)
- Tài khoản đám mây bị chấm dứt, dữ liệu mất - tài khoản lương bị tạm dừng, các tài khoản lương cũ chỉ có thể kích hoạt lại với chi phí phát sinh - Vi phạm GoBD (§ 146 Abs. 5 AO)
- Các phiên bản phần mềm cũ không thể khôi phục - bản sao lưu cần đến phiên bản phần mềm cũ, vốn không còn cài đặt được - Vi phạm GoBD (§ 147 Abs. 2 AO: "đọc được ngay lập tức")
- Không có tính bất biến - các bút toán bị sửa đổi sau đó mà không thể truy vết - Vi phạm GoBD (Rz. 146)
- Không có Evidence-Packages - khi kiểm tra bên ngoài, kiểm tra viên không được cung cấp phương tiện lưu trữ dữ liệu (Z3) - Vi phạm GoBD (§ 147 Abs. 6 AO)
- Không nắm được thời hạn lưu trữ - 10 năm? 8 năm? 6 năm? Nhiều chủ doanh nghiệp không biết thời hạn áp dụng cho tài liệu của mình
Thông điệp cốt lõi
Lưu trữ tuân thủ GoBD với Git có nghĩa là:
- Git-Bundles là self-contained - không cần tài khoản đám mây, không cần giấy phép phần mềm, không cần nhà cung cấp dịch vụ - chỉ cần
git clone - Thời hạn lưu trữ được ghi nhận trong Repo - mỗi artifact đều mang thời hạn của nó trong Sidecar (
obsolescence+ ngày hết hạn) - Tính bất biến nhờ Tags và Protected Branches - các phiên bản đã phê duyệt không thể thay đổi về mặt mật mã
- Evidence-Packages cho kết thúc kỳ -
git bundle+ Static-Web (Z3+) cho kiểm tra viên (xem ED05) - Kiểm tra thời hạn dưới dạng Git artifact -
checks/FRISTEN_CHECK.mdcảnh báo về các thời hạn sắp đến
Compliance by Design: Lưu trữ không phải là việc bổ sung sau này - nó hình thành nhờ việc lựa chọn phương tiện. Git-Bundles là self-contained và tồn tại bền vững qua mọi lệnh chặn đám mây, mọi thay đổi phiên bản phần mềm, mọi việc chấm dứt hợp đồng với nhà cung cấp dịch vụ.
Thời hạn lưu trữ theo AO § 147
Thời hạn lưu trữ"] AO --> J10["10 năm
§ 147 Abs. 1 Nr. 1"] AO --> J8["8 năm
§ 147 Abs. 1 Nr. 4"] AO --> J6["6 năm
§ 147 Abs. 1 Nr. 2/3/5"] J10 --> D10["Sổ sách, ghi chép
Bản kiểm kê, báo cáo tài chính năm
Bảng cân đối mở đầu
Hướng dẫn công việc"] J8 --> D8["Chứng từ ghi sổ
Hóa đơn điện tử (XML)
Chứng từ tiền lương"] J6 --> D6["Thư từ thương mại / kinh doanh
Email (EML)
Tài liệu khác"] style AO fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style J10 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style J8 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style J6 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D10 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style D8 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style D6 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Thời hạn | Loại tài liệu | Cơ sở pháp lý | Ví dụ |
|---|---|---|---|
| 10 năm | Sổ sách, ghi chép, bản kiểm kê, báo cáo tài chính năm, bảng cân đối mở đầu, hướng dẫn công việc | § 147 Abs. 1 Nr. 1 AO | Sổ địa bạ (JSON), tài liệu quy trình, hệ thống tài khoản |
| 8 năm | Chứng từ ghi sổ | § 147 Abs. 1 Nr. 4 AO | Hóa đơn điện tử (XML), bảng tính lương, quyết định BHXH |
| 6 năm | Thư từ thương mại / kinh doanh, tài liệu khác | § 147 Abs. 1 Nr. 2/3/5 AO | Email (EML), thư từ trao đổi, ghi chú |
Quan trọng - Điểm bắt đầu thời hạn: Thời hạn bắt đầu tính từ kết thúc năm dương lịch, trong năm đó thực hiện lần ghi cuối cùng, lập báo cáo tài chính năm, nhận chứng từ hoặc thực hiện ghi chép (§ 147 Abs. 4 AO). Một bút toán ngày 15.08.2026 khởi đầu thời hạn vào ngày 31.12.2026 - 10 năm kết thúc vào ngày 31.12.2036.
Tính bất biến nhờ Git
Commit"] B --> H["Hash SHA-256
của Commit"] H --> T["Tag
(điểm đánh dấu phê duyệt)"] T --> P["Protected Branch
(không Force-Push)"] P --> U["Tính bất biến
GoBD Rz. 146"] K["Cần điều chỉnh"] K --> NC["Commit mới
+ đánh dấu lỗi thời"] NC --> O["Bản gốc vẫn
truy vết được"] style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style P fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style U fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style K fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style NC fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style O fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Cơ chế | Tính năng Git | Liên quan đến GoBD |
|---|---|---|
| Commit-Hash | Hash SHA-256 cho mỗi Commit - mỗi thay đổi tạo ra hash mới | Rz. 146 (Tính bất biến) |
| Tags | Điểm đánh dấu bất biến cho các phiên bản đã phê duyệt | Rz. 146 (Phê duyệt) |
| Protected Branches | main được bảo vệ, không Force-Push, không Rebase |
Rz. 146 (không viết lại) |
| Lỗi thời | Điều chỉnh dưới dạng Commit mới với superseded_by |
Rz. 146 (Khả năng truy vết) |
| Chữ ký GPG | Commit được ký - tính xác thực có thể chứng minh | Rz. 146 (Tác giả) |
Quan trọng - lịch sử tuyến tính: Chỉ có lịch sử tuyến tính không viết lại mới tuân thủ GoBD.
git rebase,git commit --amendvàgit push --forcetrênmainbị cấm. Pre-Commit-Hook kiểm tra rằng không có Force-Push nào xảy ra và các điều chỉnh được thực hiện dưới dạng Commit mới với đánh dấu lỗi thời.
Evidence-Packages cho việc lưu trữ
vd. FY2026"] FY --> EP["Tenant Evidence Package
(kết thúc kỳ)"] EP --> GB["git bundle
kho lưu trữ self-contained"] EP --> SW["Static-Web
(trình duyệt Z3+)"] EP --> MF["Manifest
+ checksum SHA-256"] GB --> USB["USB
hoặc Off-Site-Backup"] SW --> USB MF --> USB USB --> PR["Kiểm tra viên
git clone hoặc index.html
ngoại tuyến, không cần IAM"] style FY fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style EP fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SW fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style MF fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style USB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style PR fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Một Tenant Evidence Package (xem ED05 Z3+) cho một năm tài chính chứa:
| Thành phần | Nội dung | Liên quan đến GoBD |
|---|---|---|
| git bundle | Repo đầy đủ (lịch sử, Commit, Tag) | § 147 Abs. 6 AO (phương tiện lưu trữ dữ liệu Z3) |
| Static-Web | Trang web điều hướng được bằng trình duyệt (HTML/PDF/JSON) | Z3+ (kiểm tra viên truy cập không cần IAM) |
| Manifest | Checksum SHA-256 cho từng tệp, chỉ mục V7GUID | Rz. 146 (Tính toàn vẹn) |
| Tài liệu quy trình | Được kết xuất dưới dạng HTML | Rz. 64–91 (Tài liệu quy trình) |
| Tài liệu DMS | Tất cả chứng từ (PDF, XML, EML) | § 147 Abs. 1 (Lưu trữ) |
| Hợp đồng | Tài liệu xuyên kỳ | § 147 Abs. 1 Nr. 2/3 (Thư từ thương mại) |
Cách lưu trữ an toàn nhất: Một USB chứa
git bundle+ Static-Web + Manifest là self-contained, ngoại tuyến, không cần IAM, không cần tài khoản đám mây, không cần giấy phép phần mềm. Nó tồn tại bền vững qua mọi việc chấm dứt hợp đồng với nhà cung cấp dịch vụ, mọi thay đổi phiên bản phần mềm, mọi lệnh chặn đám mây. Đây là hình thức lưu trữ tuân thủ GoBD an toàn nhất - vì không có bất kỳ phụ thuộc nào.Tất nhiên, cần lưu ý đến sự an toàn vật lý của USB (két sắt, phòng cháy chữa cháy, Off-Site-Backup).
Quản lý thời hạn trong Repo
checks/FRISTEN_CHECK.md
# Fristen-Check
## Vorlauf (bis 010926) - PRIO 1
- [ ] 200826: ELSTER-Organisationszertifikat anfordern
- [ ] 250826: Gefahrtarifstelle festlegen
- [ ] 300826: D&O-Versicherung GF-Haftung
## Aufbewahrungsfristen (laufend)
| Frist | Unterlagen-Typ | Endet | Status |
|---:|:---|---:|:---|
| 10 Jahre | Grundbuch FY2026 | 31.12.2036 | aktiv |
| 8 Jahre | E-Rechnungen FY2026 | 31.12.2034 | aktiv |
| 6 Jahre | E-Mails FY2026 | 31.12.2032 | aktiv |
Tự động cảnh báo khi thời hạn sắp đến
(Git artifact)"] FC --> P14["trên 14 ngày
xanh lá"] FC --> P7["7–14 ngày
vàng"] FC --> P0["dưới 7 ngày
cam/đỏ"] P0 --> W["Cảnh báo
cho chủ doanh nghiệp"] style FC fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style P14 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style P7 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style P0 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33
| Loại thời hạn | Cảnh báo | Hành động |
|---|---|---|
| Thời hạn lưu trữ kết thúc | 30 ngày trước | Ghi nhận việc tiêu hủy sau khi hết hạn |
| Thời hạn cơ quan (ELSTER, SV) | 14 ngày trước | Chuẩn bị nộp |
| Thời hiệu (§ 169 AO) | 90 ngày trước | Không tiêu hủy tài liệu |
Đò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 thiểu |
|---|---|---|
git bundle dưới dạng kho lưu trữ self-contained |
Lưu trữ 10 năm không cần tài khoản đám mây | Vi phạm GoBD do chấm dứt tài khoản |
| Tags + Protected Branches | Tính bất biến sau phê duyệt | Vi phạm GoBD do sửa đổi sau đó |
| Evidence-Package (Z3+) | Kiểm tra viên truy cập không cần IAM, ngoại tuyến | Vi phạm GoBD do dữ liệu không thể truy cập |
| Kiểm tra thời hạn dưới dạng Git artifact | Tránh bỏ lỡ thời hạn | Phụ phí chậm trễ § 152 AO |
| Đánh dấu lỗi thời | Điều chỉnh truy vết được | Sửa đổi ngầm |
| Commit ký bằng GPG | Tính xác thực có thể chứng minh | Phủ nhận tác giả |
| Static-Web (Z3+) | Điều hướng bằng trình duyệt cho kiểm tra viên | Vi phạm GoBD do dữ liệu không thân thiện với kiểm tra viên |
Yêu cầu Harness (xem trước)
Có thể suy ra từ ED08:
| ID | Yêu cầu | Mức ưu tiên |
|---|---|---|
| FA-4.1 | Tệp kiểm tra thời hạn (checks/FRISTEN_CHECK.md) |
MUST |
| FA-4.2 | Mục thời hạn với ngày, loại, Tenant, tham chiếu chứng từ | MUST |
| FA-4.3 | Tự động cảnh báo khi thời hạn < 14 ngày | SHOULD |
| FA-6.5 | Lưu trữ 10 năm qua Evidence-Packages (Git-Bundles) | MUST |
| FA-6.6 | Tính bất biến sau phê duyệt (Tags, Protected Branches) | MUST |
| FA-6.7 | Trình tạo Static-Web cho kết thúc kỳ (Z3+) | SHOULD |
| TA-2.4 | Pre-Commit: Kiểm tra trạng thái lỗi thời | SHOULD |
Danh sách yêu cầu đầy đủ trong Harness-Anforderungen.md.
Nguồn
- GoBD (Công văn BMF, Rz. 146 - Tính bất biến, Rz. 152 - Thời hạn lưu trữ)
- AO (§ 146 Abs. 5 - Tính khả dụng, § 147 - Thời hạn lưu trữ 10/8/6 năm, § 147 Abs. 4 - Điểm bắt đầu thời hạn, § 147 Abs. 6 - Truy cập dữ liệu Z3)
GitCover.Ledger/docs/02-Tenant-Evidence-Package.md- Khái niệm Tenant Evidence PackageAFJD/agents/(ẩn danh) - Khái niệm SSoT với kiểm tra thời hạn, Evidence-Packages
Topology nguồn và các liên kết tham chiếu CDN
| Vai trò | Địa điểm | Mục đích |
|---|---|---|
| Primary / SSoT | git.gitcover.org/GCC | Nơi lưu trữ chính tắc (ký GPG, có 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 ý: Cách phân bổ này giữa nguồn, Mirror và Community-Hub phản ánh hiện trạng và có thể thay đổi. Vui lòng kiểm tra nguồn chính tắc tương ứng trên gitcover.org để biết trạng thái hiện tại.