ED08 - Plazos de conservación & inmutabilidad: Git-Hooks, Evidence-Packages
Problema
La GoBD y la AO exigen conservación a largo plazo - pero la práctica fracasa en su implementación:
- "¿10 años? Eso lo resuelve la nube." - muchos empresarios creen que el software en la nube gestiona la conservación automáticamente - pero al cancelar la cuenta los datos a menudo ya no están disponibles (véase ED01 punto de dolor 6–7)
- Cuenta en la nube cancelada, datos perdidos - la cuenta de nómina fue pausada, las antiguas cuentas de nómina solo pueden reactivarse con costes adicionales - infracción de la GoBD (§ 146 Abs. 5 AO)
- Versiones antiguas de software no reactivables - las copias de seguridad requieren la versión antigua del software, que ya no es instalable - infracción de la GoBD (§ 147 Abs. 2 AO: "inmediatamente legible")
- Falta de inmutabilidad - asientos modificados a posteriori sin trazabilidad - infracción de la GoBD (Rz. 146)
- Falta de Evidence-Packages - en una inspección externa no se puede proveer al inspector con un soporte de datos (Z3) - infracción de la GoBD (§ 147 Abs. 6 AO)
- Plazos de conservación desconocidos - ¿10 años? ¿8 años? ¿6 años? Muchos empresarios no conocen los plazos aplicables a sus documentos
Idea central
La conservación conforme a la GoBD con Git significa:
- Los Git-Bundles son self-contained - sin cuenta en la nube, sin
licencia de software, sin proveedor de servicios - basta con
git clone - Los plazos de conservación se documentan en el repo - cada
artefacto lleva su plazo en el sidecar (
obsolescence+ fecha del plazo) - Inmutabilidad mediante Tags y Protected Branches - los estados liberados son criptográficamente inmutables
- Evidence-Packages para los cierres de período -
git bundle+ Static-Web (Z3+) para los inspectores (véase ED05) - Comprobación de plazos como artefacto Git -
checks/FRISTEN_CHECK.mdadvierte de los plazos inminentes
Compliance by Design: la conservación no es algo posterior - surge mediante la elección del medio. Los Git-Bundles son self-contained y sobreviven a cualquier bloqueo de la nube, a cualquier cambio de versión de software, a cualquier cancelación del proveedor de servicios.
Plazos de conservación según AO § 147
Aufbewahrungsfristen"] AO --> J10["10 Jahre
§ 147 Abs. 1 Nr. 1"] AO --> J8["8 Jahre
§ 147 Abs. 1 Nr. 4"] AO --> J6["6 Jahre
§ 147 Abs. 1 Nr. 2/3/5"] J10 --> D10["Bücher, Aufzeichnungen
Inventare, Jahresabschlüsse
Eröffnungsbilanz
Arbeitsanweisungen"] J8 --> D8["Buchungsbelege
E-Rechnungen (XML)
Lohnbelege"] J6 --> D6["Handels- / Geschäftsbriefe
E-Mails (EML)
Sonstige Unterlagen"] 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
| Plazo | Tipo de documentos | Base legal | Ejemplos |
|---|---|---|---|
| 10 años | Libros, registros, inventarios, cierres del ejercicio, balance de apertura, instrucciones de trabajo | § 147 Abs. 1 Nr. 1 AO | Grundbuch (JSON), documentación de procedimientos, plan de cuentas |
| 8 años | Comprobantes de asiento | § 147 Abs. 1 Nr. 4 AO | Facturas electrónicas (XML), liquidaciones de nómina, notificaciones de la SV |
| 6 años | Cartas comerciales / cartas de negocio, otros documentos | § 147 Abs. 1 Nr. 2/3/5 AO | Correos electrónicos (EML), correspondencia, notas |
Importante - inicio del plazo: el plazo comienza con el cierre del año natural en el que se hizo la última anotación, se elaboró el cierre del ejercicio, se recibió el comprobante o se efectuó el registro (§ 147 Abs. 4 AO). Un asiento del 15.08.2026 inicia el plazo el 31.12.2026 - 10 años terminan el 31.12.2036.
Inmutabilidad mediante Git
Commit"] B --> H["SHA-256-Hash
des Commits"] H --> T["Tag
(Freigabe-Marker)"] T --> P["Protected Branch
(kein Force-Push)"] P --> U["Unveränderbarkeit
GoBD Rz. 146"] K["Korrektur nötig"] K --> NC["Neuer Commit
+ Obsoleszenz-Markierung"] NC --> O["Original bleibt
nachvollziehbar"] 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
| Mecanismo | Función de Git | Referencia GoBD |
|---|---|---|
| Hash de commit | Hash SHA-256 por commit - cada cambio genera un hash nuevo | Rz. 146 (inmutabilidad) |
| Tags | Marcadores inmutables para los estados liberados | Rz. 146 (liberación) |
| Protected Branches | main protegida, sin force-push, sin rebase |
Rz. 146 (sin reescritura) |
| Obsolescencia | Correcciones como nuevos commits con superseded_by |
Rz. 146 (trazabilidad) |
| Firma GPG | Commits firmados - autenticidad demostrable | Rz. 146 (autoría) |
Importante - historial lineal: solo es conforme a la GoBD un historial lineal sin reescritura.
git rebase,git commit --amendygit push --forcesobremainestán prohibidos. El Pre-Commit-Hook comprueba que no se realicen force-pushes y que las correcciones se realicen como nuevos commits con marcado de obsolescencia.
Evidence-Packages para la conservación
z. B. FY2026"] FY --> EP["Tenant Evidence Package
(Periodenabschluss)"] EP --> GB["git bundle
self-contained Archiv"] EP --> SW["Static-Web
(Z3+ Browser)"] EP --> MF["Manifest
+ SHA-256-Checksummen"] GB --> USB["USB-Stick
oder Off-Site-Backup"] SW --> USB MF --> USB USB --> PR["Prüfer
git clone oder index.html
offline, ohne 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
Un Tenant Evidence Package (véase ED05 Z3+) para un ejercicio fiscal contiene:
| Componente | Contenido | Referencia GoBD |
|---|---|---|
| git bundle | Repositorio completo (historial, commits, tags) | § 147 Abs. 6 AO (soporte de datos Z3) |
| Static-Web | Sitio web navegable desde el navegador (HTML/PDF/JSON) | Z3+ (acceso del inspector sin IAM) |
| Manifest | Sumas de verificación SHA-256 por archivo, índice V7GUID | Rz. 146 (integridad) |
| Documentación de procedimientos | Renderizada como HTML | Rz. 64–91 (documentación de procedimientos) |
| Documentos del DMS | Todos los comprobantes (PDF, XML, EML) | § 147 Abs. 1 (conservación) |
| Contratos | Documentos que abarcan varios períodos | § 147 Abs. 1 Nr. 2/3 (cartas comerciales) |
La conservación más segura: una memoria USB con
git bundle+ Static-Web + Manifest es self-contained, offline, sin IAM, sin cuenta en la nube, sin licencia de software. Sobrevive a cualquier cancelación del proveedor de servicios, a cualquier cambio de versión de software, a cualquier bloqueo de la nube. Esta es la forma más segura de conservación conforme a la GoBD - porque no hay dependencias.Por supuesto, hay que tener en cuenta la seguridad física de la memoria USB (caja fuerte, protección contra incendios, copia de seguridad off-site).
Gestión de plazos en el 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 |
Advertencia automática ante plazos inminentes
(Git-Artefakt)"] FC --> P14["über 14 Tage
grün"] FC --> P7["7–14 Tage
gelb"] FC --> P0["unter 7 Tage
orange/rot"] P0 --> W["Warnung
an Unternehmer"] 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
| Tipo de plazo | Advertencia | Acción |
|---|---|---|
| Fin del plazo de conservación | 30 días antes | Documentar la destrucción tras el vencimiento |
| Plazo de autoridades (ELSTER, SV) | 14 días antes | Preparar la transmisión |
| Plazo de prescripción (§ 169 AO) | 90 días antes | No destruir los documentos |
Apalancamiento de riesgo
| Hoy (barato) | Mañana (a prueba de auditoría) | Riesgo mitigado |
|---|---|---|
git bundle como archivo self-contained |
Conservación de 10 años sin cuenta en la nube | Infracción de la GoBD por cancelación de la cuenta |
| Tags + Protected Branches | Inmutabilidad tras la liberación | Infracción de la GoBD por modificación posterior |
| Evidence-Package (Z3+) | Acceso del inspector sin IAM, offline | Infracción de la GoBD por datos inaccesibles |
| Comprobación de plazos como artefacto Git | Incumplimiento de plazos evitado | Recargos por presentación extemporánea § 152 AO |
| Marcado de obsolescencia | Correcciones trazables | Cambios encubiertos |
| Commits firmados con GPG | Autenticidad demostrable | Negación de la autoría |
| Static-Web (Z3+) | Navegabilidad en el navegador para el inspector | Infracción de la GoBD por datos poco accesibles para el inspector |
Requisitos del Harness (vista previa)
Derivable de ED08:
| ID | Requisito | Prioridad |
|---|---|---|
| FA-4.1 | Archivo de comprobación de plazos (checks/FRISTEN_CHECK.md) |
MUST |
| FA-4.2 | Entradas de plazos con fecha, tipo, Tenant, referencia del comprobante | MUST |
| FA-4.3 | Advertencia automática para plazos < 14 días | SHOULD |
| FA-6.5 | Conservación de 10 años mediante Evidence-Packages (Git-Bundles) | MUST |
| FA-6.6 | Inmutabilidad tras la liberación (Tags, Protected Branches) | MUST |
| FA-6.7 | Generador Static-Web para el cierre de período (Z3+) | SHOULD |
| TA-2.4 | Pre-Commit: comprobación del estado de obsolescencia | SHOULD |
La lista completa de requisitos en Harness-Anforderungen.md.
Fuentes
- GoBD (escrito del BMF, Rz. 146 - inmutabilidad, Rz. 152 - plazos de conservación)
- AO (§ 146 Abs. 5 - disponibilidad, § 147 - plazos de conservación 10/8/6 años, § 147 Abs. 4 - inicio del plazo, § 147 Abs. 6 - acceso a datos Z3)
GitCover.Ledger/docs/02-Tenant-Evidence-Package.md- concepto de Tenant Evidence PackageAFJD/agents/(anonimizado) - concepto SSoT con comprobación de plazos, Evidence-Packages
Topología de fuentes y enlaces de referencia CDN
| Rol | Ubicación | Propósito |
|---|---|---|
| Primary / SSoT | git.gitcover.org/GCC | Almacén canónico (firmado con GPG, versionado) |
| Public OSS Mirror / CDN | codeberg.org/gitcover-commons | Réplica de solo lectura; descubrimiento FLOSS |
| Community Hub | github.com/gitcover-commons | Issues & Discussions; referencia del código fuente en Codeberg |
Nota: esta asignación de fuentes, réplica y Community Hub refleja el estado actual y puede cambiar. Por favor, compruebe la respectiva fuente canónica en gitcover.org para conocer el estado actual.