refactor(admin): split lib document generators and data catalogs into domain barrels

obligations-document, tom-document, loeschfristen-document, compliance-scope-triggers,
sdk-flow/flow-data, processing-activities, loeschfristen-baseline-catalog,
catalog-registry, dsfa mitigation-library + risk-catalog, vvt-baseline-catalog,
vendor contract-review checklists + findings, demo-data, tom-compliance.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Sharang Parnerkar
2026-04-18 00:07:03 +02:00
parent b00fe6cb73
commit 91063f09b8
65 changed files with 9514 additions and 9544 deletions

View File

@@ -0,0 +1,191 @@
/**
* VVT Baseline-Katalog — HR & Finanzen
*/
import type { BaselineTemplate } from './types'
export const HR_VVT_TEMPLATES: BaselineTemplate[] = [
{
templateId: 'hr-mitarbeiterverwaltung',
businessFunction: 'hr',
name: 'Mitarbeiterverwaltung',
description: 'Verwaltung von Stammdaten, Vertraegen und Personalakten der Beschaeftigten',
purposes: ['Durchfuehrung des Beschaeftigungsverhaeltnisses', 'Personalverwaltung und -planung'],
legalBases: [
{ type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
{ type: 'LEGAL_OBLIGATION', description: 'Arbeitsrechtliche Pflichten', reference: '§ 26 BDSG' },
],
dataSubjectCategories: ['EMPLOYEES'],
personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'DOB', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'EMPLOYMENT_DATA'],
recipientCategories: [
{ type: 'INTERNAL', name: 'Personalabteilung' },
{ type: 'AUTHORITY', name: 'Finanzamt' },
{ type: 'AUTHORITY', name: 'Sozialversicherungstraeger' },
],
retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre nach Ende des Beschaeftigungsverhaeltnisses', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Sichere Loeschung nach Ablauf' },
tomDescription: 'Zugriffskontrolle auf Personalakten, Verschluesselung, Protokollierung',
structuredToms: {
accessControl: ['RBAC', 'Need-to-know-Prinzip', 'Personalakten nur fuer HR'],
confidentiality: ['Verschluesselung personenbezogener Daten', 'Vertraulichkeitsvereinbarungen'],
integrity: ['Aenderungsprotokollierung', 'Vier-Augen-Prinzip bei Gehaltsaenderungen'],
availability: ['Regelmaessige Backups', 'Redundante Speicherung'],
separation: ['Trennung Personal-/Gehaltsdaten'],
},
typicalSystems: ['HR-Software', 'Gehaltsabrechnung', 'Dokumentenmanagement'],
protectionLevel: 'HIGH',
dpiaRequired: false,
tags: ['hr', 'mitarbeiter', 'personal'],
},
{
templateId: 'hr-gehaltsabrechnung',
businessFunction: 'hr',
name: 'Gehaltsabrechnung',
description: 'Berechnung und Auszahlung von Gehaeltern, Sozialabgaben und Steuern',
purposes: ['Lohn- und Gehaltsabrechnung', 'Erfuellung steuer- und sozialversicherungsrechtlicher Pflichten'],
legalBases: [
{ type: 'CONTRACT', description: 'Arbeitsvertrag', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
{ type: 'LEGAL_OBLIGATION', description: 'Steuer-/Sozialversicherungsrecht', reference: 'Art. 6 Abs. 1 lit. c DSGVO' },
],
dataSubjectCategories: ['EMPLOYEES'],
personalDataCategories: ['NAME', 'ADDRESS', 'SOCIAL_SECURITY', 'TAX_ID', 'BANK_ACCOUNT', 'SALARY_DATA'],
recipientCategories: [
{ type: 'PROCESSOR', name: 'Lohnbuero / Steuerberater' },
{ type: 'AUTHORITY', name: 'Finanzamt' },
{ type: 'AUTHORITY', name: 'Krankenkassen' },
],
retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (steuerrechtlich)', legalBasis: 'AO § 147 Abs. 1 Nr. 1', deletionProcedure: 'Automatische Loeschung nach Fristablauf' },
tomDescription: 'Strenge Zugriffskontrolle, Verschluesselung, Trennung von Stamm- und Gehaltsdaten',
structuredToms: {
accessControl: ['Nur Lohnbuchhaltung/Steuerberater', 'MFA'],
confidentiality: ['Verschluesselung at-rest und in-transit', 'Vertraulichkeitsklausel'],
integrity: ['Revisionssichere Ablage', 'Pruefprotokoll'],
availability: ['Monatliche Backups', 'Jahresabschluss-Archiv'],
separation: ['Gehaltsdaten getrennt von allgemeinen Personaldaten'],
},
typicalSystems: ['DATEV', 'Lohnabrechnungssoftware'],
protectionLevel: 'HIGH',
dpiaRequired: false,
tags: ['hr', 'gehalt', 'lohn', 'steuer'],
},
{
templateId: 'hr-bewerbermanagement',
businessFunction: 'hr',
name: 'Bewerbermanagement',
description: 'Entgegennahme, Verwaltung und Bewertung von Bewerbungen',
purposes: ['Bearbeitung eingehender Bewerbungen', 'Bewerberauswahl'],
legalBases: [
{ type: 'CONTRACT', description: 'Vorvertragliche Massnahmen', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
{ type: 'LEGITIMATE_INTEREST', description: 'Bewerberauswahl', reference: '§ 26 Abs. 1 BDSG' },
],
dataSubjectCategories: ['APPLICANTS'],
personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'EDUCATION_DATA', 'EMPLOYMENT_DATA', 'PHOTO_VIDEO'],
recipientCategories: [
{ type: 'INTERNAL', name: 'Personalabteilung' },
{ type: 'INTERNAL', name: 'Fachabteilung' },
],
retentionPeriod: { duration: 6, durationUnit: 'MONTHS', description: '6 Monate nach Absage (AGG-Frist)', legalBasis: 'AGG § 15 Abs. 4', deletionProcedure: 'Automatische Loeschung 6 Monate nach Absage' },
tomDescription: 'Zugriffsbeschraenkung auf beteiligte Entscheidungstraeger, verschluesselte Uebertragung',
structuredToms: {
accessControl: ['Nur HR + Fachabteilung', 'Zeitlich begrenzter Zugriff'],
confidentiality: ['TLS fuer Bewerbungsportale', 'Verschluesselter E-Mail-Empfang'],
integrity: ['Unveraenderbare Bewerbungseingaenge'],
availability: ['Regelmaessige Backups'],
separation: ['Getrennte Bewerberdatenbank'],
},
typicalSystems: ['Bewerbermanagementsystem', 'E-Mail'],
protectionLevel: 'MEDIUM',
dpiaRequired: false,
tags: ['hr', 'bewerbung', 'recruiting'],
},
{
templateId: 'hr-zeiterfassung',
businessFunction: 'hr',
name: 'Zeiterfassung',
description: 'Erfassung von Arbeitszeiten, Urlaub und Fehlzeiten',
purposes: ['Arbeitszeiterfassung gemaess ArbZG', 'Urlaubsverwaltung'],
legalBases: [
{ type: 'LEGAL_OBLIGATION', description: 'Arbeitszeitgesetz', reference: 'Art. 6 Abs. 1 lit. c DSGVO, ArbZG § 16 Abs. 2' },
],
dataSubjectCategories: ['EMPLOYEES'],
personalDataCategories: ['NAME', 'EMPLOYMENT_DATA'],
recipientCategories: [
{ type: 'INTERNAL', name: 'Personalabteilung' },
{ type: 'INTERNAL', name: 'Vorgesetzte' },
],
retentionPeriod: { duration: 2, durationUnit: 'YEARS', description: '2 Jahre (ArbZG)', legalBasis: 'ArbZG § 16 Abs. 2', deletionProcedure: 'Automatische Loeschung' },
tomDescription: 'Zugriffskontrolle nach Abteilung, Protokollierung von Aenderungen',
structuredToms: {
accessControl: ['Vorgesetzte sehen nur eigene Abteilung', 'HR sieht alle'],
confidentiality: ['Krankmeldungen nur HR'],
integrity: ['Aenderungshistorie'],
availability: ['Taegliches Backup'],
separation: ['Trennung Zeitdaten / Gehaltsdaten'],
},
typicalSystems: ['Zeiterfassungssystem', 'HR-Software'],
protectionLevel: 'MEDIUM',
dpiaRequired: false,
tags: ['hr', 'zeiterfassung', 'arbeitszeit'],
},
]
export const FINANCE_VVT_TEMPLATES: BaselineTemplate[] = [
{
templateId: 'finance-buchhaltung',
businessFunction: 'finance',
name: 'Buchhaltung & Rechnungswesen',
description: 'Finanzbuchhaltung, Rechnungsstellung und Zahlungsverkehr',
purposes: ['Finanzbuchhaltung', 'Rechnungsstellung', 'Erfuellung handels-/steuerrechtlicher Aufbewahrungspflichten'],
legalBases: [
{ type: 'LEGAL_OBLIGATION', description: 'HGB, AO', reference: 'Art. 6 Abs. 1 lit. c DSGVO' },
{ type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
],
dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS', 'BUSINESS_PARTNERS'],
personalDataCategories: ['NAME', 'CONTACT', 'ADDRESS', 'BANK_ACCOUNT', 'PAYMENT_DATA', 'CONTRACT_DATA', 'TAX_ID'],
recipientCategories: [
{ type: 'PROCESSOR', name: 'Steuerberater / Wirtschaftspruefer' },
{ type: 'AUTHORITY', name: 'Finanzamt' },
],
retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre (HGB) / 6 Jahre (Geschaeftsbriefe)', legalBasis: 'HGB § 257, AO § 147', deletionProcedure: 'Loeschung nach Ablauf der jeweiligen Frist' },
tomDescription: 'Zugriffskontrolle nach Vier-Augen-Prinzip, revisionssichere Archivierung',
structuredToms: {
accessControl: ['Vier-Augen-Prinzip', 'RBAC nach Buchhaltungsrollen'],
confidentiality: ['Verschluesselung Finanzdaten'],
integrity: ['Revisionssichere Archivierung (GoBD)', 'Aenderungsprotokoll'],
availability: ['Redundante Speicherung', 'Jaehrliche Backups'],
separation: ['Trennung Debitoren/Kreditoren'],
},
typicalSystems: ['DATEV', 'ERP-System', 'Buchhaltungssoftware'],
protectionLevel: 'MEDIUM',
dpiaRequired: false,
tags: ['finance', 'buchhaltung', 'rechnungswesen'],
},
{
templateId: 'finance-zahlungsverkehr',
businessFunction: 'finance',
name: 'Zahlungsverkehr',
description: 'Abwicklung von Zahlungen, SEPA-Lastschriften und Ueberweisungen',
purposes: ['Zahlungsabwicklung', 'Mahnwesen'],
legalBases: [
{ type: 'CONTRACT', description: 'Vertragserfuellung', reference: 'Art. 6 Abs. 1 lit. b DSGVO' },
],
dataSubjectCategories: ['CUSTOMERS', 'SUPPLIERS'],
personalDataCategories: ['NAME', 'BANK_ACCOUNT', 'PAYMENT_DATA'],
recipientCategories: [
{ type: 'PROCESSOR', name: 'Zahlungsdienstleister' },
{ type: 'PROCESSOR', name: 'Kreditinstitut' },
],
retentionPeriod: { duration: 10, durationUnit: 'YEARS', description: '10 Jahre', legalBasis: 'HGB § 257', deletionProcedure: 'Automatische Loeschung' },
tomDescription: 'PCI-DSS-konforme Verarbeitung, Verschluesselung, Zugriffsbeschraenkung',
structuredToms: {
accessControl: ['Streng limitierter Zugriff', 'MFA'],
confidentiality: ['TLS 1.3', 'Tokenisierung von Zahlungsdaten'],
integrity: ['Transaktionsprotokoll'],
availability: ['Hochverfuegbarer Zahlungsservice'],
separation: ['Zahlungsdaten getrennt von CRM'],
},
typicalSystems: ['Banking-Software', 'Payment Gateway'],
protectionLevel: 'HIGH',
dpiaRequired: false,
tags: ['finance', 'zahlung', 'payment'],
},
]

View File

@@ -0,0 +1,30 @@
/**
* VVT Baseline-Katalog — Types
*/
import type { BusinessFunction } from '../vvt-types'
export interface BaselineTemplate {
templateId: string
businessFunction: BusinessFunction
name: string
description: string
purposes: string[]
legalBases: { type: string; description?: string; reference?: string }[]
dataSubjectCategories: string[]
personalDataCategories: string[]
recipientCategories: { type: string; name: string; description?: string }[]
retentionPeriod: { duration?: number; durationUnit?: string; description: string; legalBasis?: string; deletionProcedure?: string }
tomDescription: string
structuredToms: {
accessControl: string[]
confidentiality: string[]
integrity: string[]
availability: string[]
separation: string[]
}
typicalSystems: string[]
protectionLevel: 'LOW' | 'MEDIUM' | 'HIGH'
dpiaRequired: boolean
tags: string[]
}