Files
breakpilot-compliance/backend-compliance/migrations/017_loeschfristen.sql
Benjamin Admin 25d5da78ef
All checks were successful
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / test-go-ai-compliance (push) Successful in 34s
CI / test-python-backend-compliance (push) Successful in 32s
CI / test-python-document-crawler (push) Successful in 21s
CI / test-python-dsms-gateway (push) Successful in 17s
feat: Alle 5 verbleibenden SDK-Module auf 100% — RAG, Security-Backlog, Quality, Notfallplan, Loeschfristen
Paket A — RAG Proxy:
- NEU: admin-compliance/app/api/sdk/v1/rag/[[...path]]/route.ts
  → Proxy zu ai-compliance-sdk:8090, GET+POST, UUID-Validierung
- UPDATE: rag/page.tsx — setTimeout Mock → echte API-Calls
  GET /regulations → dynamische suggestedQuestions
  POST /search → Qdrant-Ergebnisse mit score, title, reference

Paket B — Security-Backlog + Quality:
- NEU: migrations/014_security_backlog.sql + 015_quality.sql
- NEU: compliance/api/security_backlog_routes.py — CRUD + Stats
- NEU: compliance/api/quality_routes.py — Metrics + Tests CRUD + Stats
- UPDATE: security-backlog/page.tsx — mockItems → API
- UPDATE: quality/page.tsx — mockMetrics/mockTests → API
- UPDATE: compliance/api/__init__.py — Router-Registrierung
- NEU: tests/test_security_backlog_routes.py (48 Tests — 48/48 bestanden)
- NEU: tests/test_quality_routes.py (67 Tests — 67/67 bestanden)

Paket C — Notfallplan Incidents + Templates:
- NEU: migrations/016_notfallplan_incidents.sql
  compliance_notfallplan_incidents + compliance_notfallplan_templates
- UPDATE: notfallplan_routes.py — GET/POST/PUT/DELETE für /incidents + /templates
- UPDATE: notfallplan/page.tsx — Incidents-Tab + Templates-Tab → API
- UPDATE: tests/test_notfallplan_routes.py (+76 neue Tests — alle bestanden)

Paket D — Loeschfristen localStorage → API:
- NEU: migrations/017_loeschfristen.sql (JSONB: legal_holds, storage_locations, ...)
- NEU: compliance/api/loeschfristen_routes.py — CRUD + Stats + Status-Update
- UPDATE: loeschfristen/page.tsx — vollständige localStorage → API Migration
  createNewPolicy → POST (API-UUID als id), deletePolicy → DELETE,
  handleSaveAndClose → PUT, adoptGeneratedPolicies → POST je Policy
  apiToPolicy() + policyToPayload() Mapper, saving-State für Buttons
- NEU: tests/test_loeschfristen_routes.py (58 Tests — alle bestanden)

Gesamt: 253 neue Tests, alle bestanden (48 + 67 + 76 + 58 + bestehende)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-03 18:04:53 +01:00

46 lines
2.4 KiB
SQL

-- Migration 017: Loeschfristen (Retention Policies)
-- Full retention policy management with legal holds and storage locations
CREATE TABLE IF NOT EXISTS compliance_loeschfristen (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
tenant_id UUID NOT NULL DEFAULT '9282a473-5c95-4b3a-bf78-0ecc0ec71d3e',
policy_id TEXT, -- "LF-2026-001"
data_object_name TEXT NOT NULL,
description TEXT,
affected_groups JSONB DEFAULT '[]'::jsonb,
data_categories JSONB DEFAULT '[]'::jsonb,
primary_purpose TEXT,
deletion_trigger TEXT NOT NULL DEFAULT 'PURPOSE_END',
-- PURPOSE_END | RETENTION_DRIVER | LEGAL_HOLD
retention_driver TEXT,
-- AO_147 | HGB_257 | USTG_14B | BGB_195 | ARBZG_16 | AGG_15 | BDSG_35 | BSIG | CUSTOM
retention_driver_detail TEXT,
retention_duration INTEGER,
retention_unit TEXT, -- DAYS | MONTHS | YEARS
retention_description TEXT,
start_event TEXT,
has_active_legal_hold BOOLEAN DEFAULT FALSE,
legal_holds JSONB DEFAULT '[]'::jsonb,
storage_locations JSONB DEFAULT '[]'::jsonb,
deletion_method TEXT DEFAULT 'MANUAL_REVIEW_DELETE',
deletion_method_detail TEXT,
responsible_role TEXT,
responsible_person TEXT,
release_process TEXT,
linked_vvt_activity_ids JSONB DEFAULT '[]'::jsonb,
status TEXT NOT NULL DEFAULT 'DRAFT',
-- DRAFT | ACTIVE | REVIEW_NEEDED | ARCHIVED
last_review_date TIMESTAMPTZ,
next_review_date TIMESTAMPTZ,
review_interval TEXT DEFAULT 'ANNUAL',
-- QUARTERLY | SEMI_ANNUAL | ANNUAL
tags JSONB DEFAULT '[]'::jsonb,
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_loeschfristen_tenant ON compliance_loeschfristen(tenant_id);
CREATE INDEX IF NOT EXISTS idx_loeschfristen_status ON compliance_loeschfristen(status);
CREATE INDEX IF NOT EXISTS idx_loeschfristen_driver ON compliance_loeschfristen(retention_driver);
CREATE INDEX IF NOT EXISTS idx_loeschfristen_review ON compliance_loeschfristen(next_review_date) WHERE next_review_date IS NOT NULL;