package tenant import "context" // RetentionResult ist das Ergebnis einer Pruefung gegen Archive RET-03/CMP-06 // vor einer endgueltigen Tenant-Loeschung (TEN-08). type RetentionResult struct { // Blocked ist true, solange GoBD-relevante Daten des Tenants unter // Aufbewahrungspflicht oder Legal Hold stehen (Akzeptanzkriterium 1). Blocked bool // Reason beschreibt Aufbewahrungsklasse/Frist oder Legal-Hold-Grund, // fuer Admins einsehbar (Akzeptanzkriterium 2). Nur aussagekraeftig, wenn Blocked true ist. Reason string } // RetentionChecker ist die Schnittstelle zu Archive RET-03 (Loeschworkflow & // Aufbewahrungssperre) / CMP-06 (Vier-Augen-Freigabe fuer Loeschungen). // Core kennt bewusst keine Retention-Logik selbst — diese Kachel ruft nur auf, // siehe TEN-08 "Nicht Bestandteil dieser Kachel". Solange Archive RET-03 noch // nicht implementiert ist, wird ein no-op-Checker verwendet (siehe // NoRetentionCheck), der niemals blockiert — Core faellt damit auf das // TEN-04-Verhalten vor diesem Ticket zurueck, statt fehlzuschlagen. type RetentionChecker interface { CheckTenantRetention(ctx context.Context, tenantID string) (RetentionResult, error) } // NoRetentionCheck ist der Platzhalter-Checker, solange Archive RET-03 noch // nicht angebunden ist — blockiert nie. Wird in Produktion durch den echten // HTTP-Client gegen Archive ersetzt, sobald RET-03 existiert. type NoRetentionCheck struct{} func (NoRetentionCheck) CheckTenantRetention(context.Context, string) (RetentionResult, error) { return RetentionResult{Blocked: false}, nil }