/**
 * 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'],
  },
]
