ED02 - Mô hình tổ chức KMU: Tenant, Sphäre, vai trò
Vấn đề
Một doanh nhân thành lập một tổ chức - và đứng trước câu hỏi: Làm thế nào để tôi cấu trúc tổ chức của mình sao cho các nghĩa vụ tuân thủ được thể hiện tách bạch, có thể truy vết và an toàn kiểm toán?
Thực tiễn hiện nay trong lĩnh vực KMU không có sự tách biệt rõ ràng:
- Tất cả trong một nồi - tài liệu riêng tư và tài liệu kinh doanh trộn lẫn trong một hộp thư, một ổ đĩa, một tài khoản cloud.
- Không tách biệt Tenant - một holding với nhiều công ty ghi tất cả sổ sách trong một instance, mà không rõ bản ghi nào thuộc công ty nào.
- Không tách biệt Sphäre - với tổ chức công ích, các giao dịch ideell, vermögensverwaltend, zweckbetrieblich và wirtschaftlich trộn lẫn trong một tài khoản, một thư mục, một repo.
- Không tách biệt vai trò - doanh nhân tự làm mọi thứ (GF, kế toán, tiền lương, F&E), nhưng repo không biết anh ta đang hành động với vai trò nào.
- Không có danh tính rõ ràng - các bản ghi không có định danh duy nhất để gán chúng cho một tổ chức, một Sphäre, một vai trò.
Tuyên bố cốt lõi
Cấu trúc một tổ chức như một Liên hợp GitCover có nghĩa là: Tenant (tổ chức), Sphäre (lĩnh vực hoạt động với tổ chức công ích) và vai trò (chức năng của chủ thể) được định nghĩa là trường bắt buộc của mọi artefact - không phải metadata tùy chọn. Git-Hook kiểm tra ở mỗi commit rằng sự tách biệt là đầy đủ. Nhờ đó hình thành Compliance by Design: Cấu trúc của tổ chức được neo vào cấu trúc của repo.
Compliance by Design: Tenant, Sphäre và vai trò không phải nhãn gắn sau - chúng là trường bắt buộc mang tính cấu trúc, mà thiếu chúng thì một artefact không được đưa vào repo.
Mô hình ba cấp: Tenant, Sphäre, vai trò
(Beleg, Tagebucheintrag, Grundbuch-Eintrag)"] A --> T["Tenant
Welche Organisation?"] A --> S["Sphäre
Welcher Tätigkeitsbereich?
(nur gemeinnützig)"] A --> R["Rolle
In welcher Funktion handelt der Akteur?"] T --> T1["ORG-1 (KMU)"] T --> T2["ORG-1a (Tochter)"] T --> T3["ORG-1b (Tochter)"] S --> S1["ideell"] S --> S2["vermögensverwaltend"] S --> S3["zweckbetrieblich"] S --> S4["wirtschaftlich"] R --> R1["GF (Geschäftsführer)"] R --> R2["Buchhalter"] R --> R3["Lohnverantwortlicher"] R --> R4["F&E-Leiter"] R --> R5["Administrator"] style A fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style T fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S3 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S4 fill:#D1FAE5,stroke:#0A7F5C,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 R5 fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Cấp 1 - Tenant (Tổ chức)
Một Tenant là một đơn vị tổ chức có tư cách pháp lý độc lập, có các nghĩa vụ ghi chép riêng. Trong Liên hợp GitCover, mỗi Tenant được quản lý như một Organization riêng (Git User) với các Git-Repo được gán (hoặc namespace nhánh riêng).
| Loại Tenant | Ví dụ (placeholder) | Nghĩa vụ riêng |
|---|---|---|
| Doanh nghiệp cá nhân | ORG-1 (KMU) |
GoBD, AO, hóa đơn điện tử |
| Holding với các công ty con | ORG-1 (Holding), ORG-1a/ORG-1b (công ty con) |
Mỗi công ty có sổ sách riêng, báo cáo tài chính năm riêng |
| Tổ chức công ích | ORG-1 (công ích) |
Ngoài ra: tách biệt Sphäre, § 52 AO, VBG-Freistellung |
| Konsortium / Liên hợp | ORG-1, ORG-2, ORG-3 |
Mỗi tổ chức có Tenant riêng, tham chiếu chéo qua V7GUID |
Ví dụ thực tiễn: Một doanh nhân (
E1) điều hành một holding (ORG-1) với hai công ty con (ORG-1a,ORG-1b). Mỗi công ty con là một Tenant riêng với repo riêng. Holding có một meta-repo liên kết các công ty con qua tham chiếu V7GUID - nhưng sổ sách của các công ty con vẫn tách biệt.
Cấp 2 - Sphäre (lĩnh vực hoạt động, chỉ với tổ chức công ích)
Sphäre chỉ liên quan với các tổ chức công ích - nhưng khi đó là bắt buộc. Luật thuế (§ 51–68 AO) yêu cầu tách biệt bốn Sphäre để không gây nguy hiểm cho tính công ích.
| Sphäre | Ý nghĩa | Ví dụ |
|---|---|---|
| ideell | Hoạt động mục đích theo điều lệ, miễn thuế | Chuỗi workshop, chương trình giáo dục |
| vermögensverwaltend | Quản lý tài sản của quỹ, miễn thuế | Lãi từ đầu tư, thu nhập cho thuê |
| zweckbetrieblich | Hoạt động kinh doanh phục vụ mục đích, miễn thuế (§ 65 AO) | Phí thành viên, phí gia nhập |
| wirtschaftlich | Hoạt động kinh doanh không phục vụ mục đích, chịu thuế | Bán hàng hóa thương hiệu, thu nhập quảng cáo |
steuerfrei
§ 52 AO"] V --> VV["vermögensverwaltend
steuerfrei"] V --> Z["zweckbetrieblich
steuerfrei
§ 65 AO"] V --> W["wirtschaftlich
steuerpflichtig
§ 64 AO"] I --> F["Freibetrag
§ 3 Nr. 26/26a EStG"] Z --> F W --> ST["USt/KSt
pflichtig"] style V fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style I fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style VV fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style Z fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style F fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style ST fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Rủi ro khi thiếu tách biệt Sphäre: Trộn lẫn tài sản (§ 55 Abs. 1 Nr. 5 AO) là căn cứ để thu hồi tính công ích. Một tổ chức công ích không tách biệt các giao dịch wirtschaftlich và ideell sẽ đối mặt với nguy cơ bị thu hồi trạng thái công ích - và do đó bị truy thu thuế đối với quỹ dự trữ (hồi tố tới 15(!) năm).
Cấp 3 - Vai trò (chức năng của chủ thể)
Vai trò ghi lại chủ thể đã hành động với chức năng nào. Điều này quan trọng vì trong nhiều tổ chức, một người thường đảm nhận nhiều vai trò (đặc biệt ở KMU) - và vì vai trò quyết định nghĩa vụ nào được áp dụng.
| Vai trò | Chức năng | Nghĩa vụ điển hình |
|---|---|---|
| GF (Geschäftsführer) | Đại diện ra bên ngoài, chịu trách nhiệm tổng thể | GoBD, AO, thời hạn, thẩm quyền đại diện |
| Buchhalter | Ghi sổ kế toán, lưu trữ chứng từ | GoBD, hóa đơn điện tử, lưu trữ |
| Lohnverantwortlicher | Tính lương, báo cáo BHXH | SGB IV, DEÜV, LStDV |
| F&E-Leiter | Nghiên cứu, bảng chấm công FZul | FZulG, BSFZ, F&E so với hành chính |
| Administrator | Quản lý repo, hook, quyền truy cập | Git, GPG, quyền truy cập |
Ví dụ thực tiễn: Doanh nhân
E1đồng thời là GF, kế toán, nhà nghiên cứu, nhà phát triển và trưởng F&E. Trong repo, với mỗi artefact đều được ghi lại anh ta đã hành động với vai trò nào - ví dụrole: "GF"trong một nghị quyết,role: "F&E-Leiter"trong một bảng chấm công FZul. Nhờ đó có thể truy vết liệu một bản ghi được tạo ra từ góc nhìn GF (hành chính) hay góc nhìn F&E (nghiên cứu).
Vai trò không phải cá nhân: Vai trò mô tả chức năng (và trong các tuyên bố là bên được đại diện), không phải danh tính. Cùng một người có thể hành động hoặc ký một tài liệu với nhiều vai trò; danh tính thực thi kỹ thuật (tài khoản, khóa) lại là một cấp riêng. Năm cấp cá nhân · chức năng · bên được đại diện · danh tính thực thi · hành vi ký được mô tả trong ED03.
Triển khai trong Git-Repo
Cấu trúc thư mục
ORG-1/ # Tenant: KMU
├── .gitcover/ # GitCover-Konfiguration
│ ├── LEGAL_ENTITY.v7g.json # Tenant-Identität (V7GUID)
│ ├── dictionaries/ # Sphären, Rollen, Beleg-Typen
│ └── schemas/ # JSON-Schemata für Artefakte
├── diary/ # Tagebuch (SSoT)
│ ├── entries/ # Tages-Einträge
│ └── tenants/ # Tenant-Sichten (Symlinks)
├── registry/ # Behörden-Identifikatoren
├── sources/ # Belegarchiv (PDF, XML, EML)
├── sidecars/ # .v7g.md Sidecars
├── checks/ # Fristen-Check, Sphären-Check
└── {weitere bei Bedarf}/
Artefact JSON với Tenant, Sphäre, vai trò
Mỗi artefact (mục nhật ký, chứng từ, mục sổ địa chính) chứa Tenant, Sphäre và vai trò như các trường bắt buộc. Nguyên tắc cốt lõi trung tâm của khả năng truy vết theo thời gian: Thời điểm ghi nhận không phải một trường riêng, mà được neo ngay trong uuidV7 - như dấu thời gian 48-bit theo RFC 9562 §5.7. uuidV7 có thể được tạo từ một mốc thời gian định trước (không chỉ now()) qua GitCover Helper (UuidV7Gen), phần còn lại được điền bằng ngẫu nhiên. Nhờ đó thời điểm ghi nhận được gắn kết mật mã với danh tính của artefact và không thể thay đổi về sau.
Quan trọng - Những gì nằm trong Git-Repo: Chỉ những artefact có cấu trúc này (mục JSON, sidecar, chứng từ) mới đượ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 artefact. Cái gì đã ở trong thì ở trong.
{
"$schema": "https://gitcover.org/schemas/diary-entry-1.0.schema.json",
"V7GUID": "<V7GUID-Class-aus-Registry>",
"docUid": "<uuidV7-Object-mit-vorgegebener-Zeitmarke>",
"author": "E1",
"role": "GF",
"tenant": "ORG-1",
"sphere": "ideell",
"source": "E1",
"source_sha256": "<SHA-256-...>",
"tags": ["lohnabrechnung", "sv-meldung"]
}
Giải thích Composite Key:
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).uuidV7(Object ID) là định danh đối tượng cụ thể với mốc thời gian định trước (RFC 9562 §5.7, 48-bit Unix-ms). Cả hai cùng nhau tạo thành GCPN Sidecar Composite KeyV7GUID:uuidV7. Một biểu diễn chuỗidatetimehoặcdateriêng là dư thừa và không được đưa vào tầng dữ kiện - dấu thời gian 48-bit đã nằm tronguuidV7. Các biểu diễn chuỗi cho truyền DTO/HTMX là trách nhiệm của Harness, không phải tầng dữ kiện.
Git-Hook kiểm tra sự tách biệt
vorhanden?"} P1 -->|nein| R1["Commit abgelehnt
Tenant fehlt"] P1 -->|ja| P2{"Sphäre
vorhanden?
(nur gemeinnützig)"} P2 -->|nein| R2["Commit abgelehnt
Sphäre fehlt"] P2 -->|ja| P3{"Rolle
vorhanden?"} P3 -->|nein| R3["Commit abgelehnt
Rolle fehlt"] P3 -->|ja| P4{"Sphäre
gültig?"} P4 -->|nein| R4["Commit abgelehnt
ungültige Sphäre"] P4 -->|ja| OK["Commit akzeptiert"] style C fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style H1 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
| Hook | Kiểm tra | Lỗi khi |
|---|---|---|
| Pre-Commit | Trường tenant tồn tại và hợp lệ |
Thiếu hoặc không nhận diện Tenant |
| Pre-Commit | Trường sphere tồn tại (chỉ công ích) |
Thiếu Sphäre ở Tenant công ích |
| Pre-Commit | Giá trị sphere hợp lệ (ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich) |
Giá trị Sphäre không hợp lệ |
| Pre-Commit | Trường role tồn tại và hợp lệ |
Thiếu hoặc không nhận diện vai trò |
| Post-Commit | Tạo chỉ mục tự động theo Tenant và Sphäre | - |
Liên hợp Tenant: Nhiều tổ chức
Meta-Repo"] H --> R1["ORG-1a (Tochter 1)
eigenes Repo"] H --> R2["ORG-1b (Tochter 2)
eigenes Repo"] H --> R3["ORG-1c (Tochter 3)
eigenes Repo"] R1 --> V1["V7GUID-Referenz
auf ORG-1"] R2 --> V2["V7GUID-Referenz
auf ORG-1"] R3 --> V3["V7GUID-Referenz
auf ORG-1"] H --> M["Meta-Repo
Querverweise über V7GUID
keine Buchungen"] style H fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style R1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V3 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style M fill:#10A987,stroke:#0A7F5C,color:#FBFAF7
Một liên hợp Tenant (holding với công ty con, consortium) được liên kết qua tham chiếu V7GUID - không qua repo dùng chung. Mỗi Tenant giữ sổ sách riêng, nhưng meta-repo của holding có thể tham chiếu đến chứng từ và mục của các công ty con mà không sao chép chúng.
Quan trọng: Meta-repo không chứa bút toán - chỉ có tham chiếu chéo. Sổ sách vẫn thuộc về từng Tenant. Meta-repo là một tầng chỉ mục, không phải tầng kế toán.
Đò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 |
|---|---|---|
Trường tenant cho mỗi artefact |
Gán rõ ràng khi kiểm tra holding | Trộn lẫn tài sản giữa các công ty |
Trường sphere cho mỗi mục |
Bảo vệ trạng thái công ích | Bị thu hồi theo § 55 AO (trộn lẫn tài sản) |
Trường role cho mỗi mục |
Truy vết được đã hành động với chức năng nào | Xung đột vai trò, đại diện không có thẩm quyền |
| Pre-Commit-Hook kiểm tra Sphäre | Tách biệt Sphäre không có lỗ hổng | Lỗi Sphäre thủ công |
| Tham chiếu V7GUID thay vì sao chép | Gán duy nhất không trùng lặp | Không nhất quán khi sao chép |
Yêu cầu Harness (xem trước)
Có thể suy ra từ ED02:
| ID | Yêu cầu | Ưu tiên |
|---|---|---|
| FA-1.4 | Gán Tenant (tenant: "ORG-1") cho mỗi mục |
MUST |
| FA-3.1 | Thẻ Sphäre: ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich |
MUST (công ích) |
| FA-3.2 | Thẻ Sphäre bắt buộc cho mỗi mục sổ địa chính và mục nhật ký | MUST (công ích) |
| FA-3.3 | Pre-Commit-Hook kiểm tra tính đầy đủ của thẻ Sphäre | MUST (công ích) |
| TA-2.3 | Pre-Commit-Hook: kiểm tra thẻ Sphäre (chỉ công ích) | MUST (công ích) |
| FA-1.3 | V7GUID cho mỗi mục (tính duy nhất xuyên Tenant) | MUST |
Danh sách yêu cầu đầy đủ trong Harness-Anforderungen.md.
Nguồn
- AO (§§ 51–68 - tính công ích, tách biệt Sphäre, § 55 Abs. 1 Nr. 5 - trộn lẫn tài sản)
- EStG (§ 3 Nr. 26/26a - khoản trọn gói, liên quan đến Sphäre)
- GoBD (công văn BMF, tài liệu quy trình, tách biệt Tenant)
E1/agents/(ẩn danh) - khái niệm SSoT với Tenant, Sphäre, vai trò
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ó phiên bản) |
| Public OSS Mirror / CDN | codeberg.org/gitcover-commons | Bản sao chỉ đọc; khám phá FLOSS |
| Community Hub | github.com/gitcover-commons | Issues & Discussions; tham chiếu mã nguồn trên Codeberg |
Lưu ý: Việc phân loại nguồn, mirror và Community Hub này 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.