internal/audit/retention.go: RegisterWithArchive meldet audit_log_entry als Objekttyp bei Archives Retention-Engine an (Default-Frist 10 Jahre, GoBD- Buchungsbeleg-Frist, tenant-ueberschreibbar). RetentionRegistrar ist der RET-05-Modul-Adapter-Vertrag, wie Core ihn konsumiert — die eigentliche Implementierung lebt im Archive-Modul. WICHTIGER HINWEIS: Archive (RET-01 Retention-Objektmodell, RET-02 Fristen- Engine, RET-05 Modul-Adapter) existiert zum Zeitpunkt dieser Kachel NICHT als Code — nur als Planung in archive-kanban/. Diese Kachel implementiert ausschliesslich die Core-Seite (Registrierungsaufruf gegen die Schnittstelle) und testet sie gegen einen lokalen Fake, der den RET-05-Vertrag simuliert. Das ist KEIN Ersatz fuer eine echte Integrationspruefung gegen Archive. Core implementiert bewusst keine eigene Loeschlogik fuer Audit-Eintraege (Akzeptanzkriterium 3) — es gibt in diesem Paket keinen Delete-Codepfad ausser dem durch AUD-02 technisch unterbundenen. Pruefungen: 1. Registrierung bei Archive erfolgreich getestet, Objekttyp taucht in Archives Retention-Konfiguration auf — NICHT durchfuehrbar, da Archive nicht existiert. Stattdessen TestRegisterWithArchive_UsesCorrectObjectTypeAndRetention gegen Fake: bestaetigt korrekten Aufruf mit objectType=audit_log_entry, 10 Jahre, tenantOverridable=true. Ausgefuehrt, PASS — aber die eigentliche Pruefung bleibt OFFEN bis Archive RET-05 existiert. 2. Audit-Eintrag mit abgelaufener Frist wird von Archive korrekt als loeschfaellig markiert, Core greift nicht ein — NICHT durchfuehrbar ohne Archive RET-02. Offen. 3. Legal Hold aus Archive verhindert Loeschung trotz abgelaufener Frist — NICHT durchfuehrbar ohne Archive RET-01/02. Offen. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
42 lines
2.1 KiB
Go
42 lines
2.1 KiB
Go
package audit
|
|
|
|
import "context"
|
|
|
|
// AuditLogObjectType ist der Objekttyp-Bezeichner, unter dem Audit-Log-
|
|
// Eintraege bei der Archive-Retention-Engine registriert werden
|
|
// (Akzeptanzkriterium 1).
|
|
const AuditLogObjectType = "audit_log_entry"
|
|
|
|
// DefaultAuditRetentionYears ist die GoBD-Buchungsbeleg-Frist (Akzeptanz-
|
|
// kriterium 2) — Default, pro Tenant ueberschreibbar sofern rechtlich
|
|
// zulaessig. Die eigentliche Ueberschreibung/Durchsetzung liegt vollstaendig
|
|
// bei Archive, siehe AuditRetentionTenantOverridable.
|
|
const DefaultAuditRetentionYears = 10
|
|
|
|
// AuditRetentionTenantOverridable erlaubt Archive, die Default-Frist pro
|
|
// Tenant zu ueberschreiben — Core trifft dabei keine rechtliche Entscheidung,
|
|
// sondern erlaubt Archive lediglich, so eine Entscheidung zuzulassen.
|
|
const AuditRetentionTenantOverridable = true
|
|
|
|
// RetentionRegistrar ist der Modul-Adapter-Vertrag aus Archive RET-05, wie
|
|
// Core ihn konsumiert. Die tatsaechliche Implementierung lebt im
|
|
// Archive-Modul (RET-01/RET-02/RET-05) und existiert zum Zeitpunkt dieser
|
|
// Kachel noch nicht als Code — Core kennt nur diese Schnittstelle.
|
|
//
|
|
// WICHTIG: Core implementiert absichtlich KEINE eigene Loeschlogik fuer
|
|
// Audit-Eintraege (Akzeptanzkriterium 3). Dieses Paket enthaelt keinen
|
|
// Delete-Codepfad fuer audit_events ausser dem durch AUD-02 technisch
|
|
// unterbundenen — die tatsaechliche Loeschung/Aufbewahrungssperre erfolgt
|
|
// ausschliesslich innerhalb von Archive, ausserhalb dieses Prozesses.
|
|
type RetentionRegistrar interface {
|
|
RegisterObjectType(ctx context.Context, objectType string, defaultRetentionYears int, tenantOverridable bool) error
|
|
}
|
|
|
|
// RegisterWithArchive meldet den Audit-Log-Objekttyp bei der Archive-
|
|
// Retention-Engine an. Dies ist die EINZIGE Beruehrung dieses Pakets mit
|
|
// Retention ueberhaupt — kein zweites, Core-eigenes Retention-System
|
|
// (siehe "Bekannte Fehler vermeiden" im AUD-05-Ticket).
|
|
func RegisterWithArchive(ctx context.Context, registrar RetentionRegistrar) error {
|
|
return registrar.RegisterObjectType(ctx, AuditLogObjectType, DefaultAuditRetentionYears, AuditRetentionTenantOverridable)
|
|
}
|