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:

Idea central

La conservación conforme a la GoBD con Git significa:

  1. Los Git-Bundles son self-contained - sin cuenta en la nube, sin licencia de software, sin proveedor de servicios - basta con git clone
  2. Los plazos de conservación se documentan en el repo - cada artefacto lleva su plazo en el sidecar (obsolescence + fecha del plazo)
  3. Inmutabilidad mediante Tags y Protected Branches - los estados liberados son criptográficamente inmutables
  4. Evidence-Packages para los cierres de período - git bundle + Static-Web (Z3+) para los inspectores (véase ED05)
  5. Comprobación de plazos como artefacto Git - checks/FRISTEN_CHECK.md advierte 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

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD AO["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

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD B["Buchung
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 --amend y git push --force sobre main está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

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD FY["Geschäftsjahr
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

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR FC["Fristen-Check
(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

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.