Use-Case-Mapping-Filter für Master Controls + Mapper-Präzisionsfix
CI / detect-changes (push) Successful in 14s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / secret-scan (push) Has been skipped
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / build-sha-integrity (push) Failing after 7s
CI / validate-canonical-controls (push) Successful in 13s
CI / loc-budget (push) Failing after 15s
CI / go-lint (push) Has been skipped
CI / test-go (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m23s
CI / iace-gt-coverage (push) Has been skipped
CI / test-python-backend (push) Successful in 34s
CI / test-python-document-crawler (push) Has been skipped
CI / test-python-dsms-gateway (push) Has been skipped

Phase 2: Live-Filter an /sdk/master-controls (Use Case, Quell-Regulierung,
Verifikations-Methode, Coverage, Primärzweck-Toggle, category via Member-EXISTS).
API mit EXISTS-Filtern + gecachten Meta-Counts in master-controls/route.ts.

Phase A: neue UseCase telekommunikation + Fix der Impressum-Fehlrouten im
Register (TKG/AT-TKG->telekommunikation, telemedien->dse, GewO->handelsrecht);
echte Impressum-Quellen (TMG/Mediengesetz) bleiben impressum. Deterministischer
Seed aus source_regulation; Tests grün.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Benjamin Admin
2026-06-09 23:19:56 +02:00
parent c4d9b1426f
commit 372e1fe9e9
10 changed files with 434 additions and 45 deletions
@@ -0,0 +1,65 @@
// Display labels for the master-control mapping dimensions (use case +
// verification method). Keys mirror the backend use_case_registry; an unknown
// key humanizes gracefully so a newly-seeded use case still renders.
export const USE_CASE_LABELS: Record<string, string> = {
impressum: 'Impressum',
telekommunikation: 'Telekommunikation (TKG)',
dse: 'Datenschutzerklärung',
agb: 'AGB',
cookie_banner: 'Cookie-Banner',
widerruf: 'Widerruf',
dsr: 'Betroffenenrechte (DSR)',
loeschkonzept: 'Löschkonzept',
avv: 'Auftragsverarbeitung (AVV)',
dsfa: 'DSFA',
code_security: 'Code Security',
network_security: 'Network Security',
cra: 'Cyber Resilience Act',
isms: 'ISMS',
tisax: 'TISAX',
kritis: 'KRITIS',
dora: 'DORA',
ai_act: 'AI Act',
mica: 'MiCA',
mdr: 'Medizinprodukte (MDR)',
maschinen: 'Maschinenverordnung',
batterie: 'Batterieverordnung',
ehds: 'EHDS',
produktsicherheit: 'Produktsicherheit',
dsa: 'Digital Services Act',
dma: 'Digital Markets Act',
data_governance: 'Data Governance Act',
zahlungsdienste: 'Zahlungsdienste (PSD2)',
geldwaesche: 'Geldwäsche (GwG)',
lieferkette: 'Lieferkettengesetz',
whistleblowing: 'Whistleblowing',
barrierefreiheit: 'Barrierefreiheit (BFSG)',
verbraucherschutz: 'Verbraucherschutz',
urheberrecht: 'Urheberrecht',
wettbewerbsrecht: 'Wettbewerbsrecht',
gleichbehandlung: 'Gleichbehandlung (AGG)',
steuerrecht: 'Steuerrecht',
handelsrecht: 'Handelsrecht',
}
export const MC_VERIFICATION_LABELS: Record<string, string> = {
document: 'Dokument',
source_code: 'Source Code',
network: 'Netzwerk/Infra',
it_process: 'IT-Prozess',
hybrid: 'Hybrid',
manual: 'Manuell',
}
function humanize(key: string): string {
return key.replace(/_/g, ' ').replace(/\b\w/g, c => c.toUpperCase())
}
export function useCaseLabel(key: string): string {
return USE_CASE_LABELS[key] || humanize(key)
}
export function mcVerificationLabel(key: string): string {
return MC_VERIFICATION_LABELS[key] || humanize(key)
}