package ucca

// AllRules contains all ~45 evaluation rules in 10 categories
var AllRules = []Rule{
	// =========================================================================
	// A. Datenklassifikation (R-001 bis R-006)
	// =========================================================================
	{
		Code:          "R-001",
		Category:      "A. Datenklassifikation",
		Title:         "Personal Data Processing",
		TitleDE:       "Verarbeitung personenbezogener Daten",
		Description:   "Personal data is being processed",
		DescriptionDE: "Personenbezogene Daten werden verarbeitet",
		Severity:      SeverityINFO,
		ScoreDelta:    5,
		GDPRRef:       "Art. 4(1) DSGVO",
		Controls:      []string{"C-PII-DETECT", "C-ACCESS-CONTROL"},
		Patterns:      []string{"P-PRE-ANON"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Der Use Case verarbeitet personenbezogene Daten. Dies erfordert eine Rechtsgrundlage und entsprechende Schutzmaßnahmen."
		},
	},
	{
		Code:          "R-002",
		Category:      "A. Datenklassifikation",
		Title:         "Special Category Data (Art. 9)",
		TitleDE:       "Besondere Kategorien personenbezogener Daten (Art. 9)",
		Description:   "Processing of special category data requires explicit consent or legal basis",
		DescriptionDE: "Verarbeitung besonderer Datenkategorien erfordert ausdrückliche Einwilligung oder Rechtsgrundlage",
		Severity:      SeverityWARN,
		ScoreDelta:    20,
		GDPRRef:       "Art. 9 DSGVO",
		Controls:      []string{"C-ART9-BASIS", "C-DSFA", "C-ENCRYPTION"},
		Patterns:      []string{"P-PRE-ANON", "P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.Article9Data
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Besondere Kategorien personenbezogener Daten (Gesundheit, Religion, etc.) erfordern besondere Schutzmaßnahmen und eine spezifische Rechtsgrundlage nach Art. 9 DSGVO."
		},
	},
	{
		Code:          "R-003",
		Category:      "A. Datenklassifikation",
		Title:         "Minor Data Processing",
		TitleDE:       "Verarbeitung von Daten Minderjähriger",
		Description:   "Processing data of children requires special protections",
		DescriptionDE: "Verarbeitung von Daten Minderjähriger erfordert besonderen Schutz",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 8 DSGVO",
		Controls:      []string{"C-MINOR-CONSENT", "C-DSFA"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.MinorData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Daten von Minderjährigen erfordern besonderen Schutz. Die Einwilligung muss von Erziehungsberechtigten eingeholt werden."
		},
	},
	{
		Code:          "R-004",
		Category:      "A. Datenklassifikation",
		Title:         "Biometric Data",
		TitleDE:       "Biometrische Daten",
		Description:   "Biometric data processing is high risk",
		DescriptionDE: "Verarbeitung biometrischer Daten ist hochriskant",
		Severity:      SeverityWARN,
		ScoreDelta:    20,
		GDPRRef:       "Art. 9 DSGVO",
		Controls:      []string{"C-ART9-BASIS", "C-DSFA", "C-ENCRYPTION"},
		Patterns:      []string{"P-PRE-ANON"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.BiometricData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Biometrische Daten zur eindeutigen Identifizierung fallen unter Art. 9 DSGVO und erfordern eine DSFA."
		},
	},
	{
		Code:          "R-005",
		Category:      "A. Datenklassifikation",
		Title:         "Location Data",
		TitleDE:       "Standortdaten",
		Description:   "Location tracking requires transparency and consent",
		DescriptionDE: "Standortverfolgung erfordert Transparenz und Einwilligung",
		Severity:      SeverityINFO,
		ScoreDelta:    10,
		GDPRRef:       "Art. 5, Art. 7 DSGVO",
		Controls:      []string{"C-CONSENT", "C-TRANSPARENCY"},
		Patterns:      []string{"P-LOG-MINIMIZATION"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.LocationData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Standortdaten ermöglichen Bewegungsprofile und erfordern klare Einwilligung und Aufbewahrungslimits."
		},
	},
	{
		Code:          "R-006",
		Category:      "A. Datenklassifikation",
		Title:         "Employee Data",
		TitleDE:       "Mitarbeiterdaten",
		Description:   "Employee data processing has special considerations",
		DescriptionDE: "Mitarbeiterdatenverarbeitung hat besondere Anforderungen",
		Severity:      SeverityINFO,
		ScoreDelta:    10,
		GDPRRef:       "§ 26 BDSG",
		Controls:      []string{"C-ACCESS-CONTROL", "C-TRANSPARENCY"},
		Patterns:      []string{"P-NAMESPACE-ISOLATION"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.EmployeeData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Mitarbeiterdaten unterliegen zusätzlich dem BDSG § 26 und erfordern klare Zweckbindung."
		},
	},
	// =========================================================================
	// B. Zweck & Kontext (R-010 bis R-013)
	// =========================================================================
	{
		Code:          "R-010",
		Category:      "B. Zweck & Kontext",
		Title:         "Marketing with Personal Data",
		TitleDE:       "Marketing mit personenbezogenen Daten",
		Description:   "Marketing purposes with PII require explicit consent",
		DescriptionDE: "Marketing mit PII erfordert ausdrückliche Einwilligung",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 6(1)(a) DSGVO",
		Controls:      []string{"C-CONSENT", "C-DSR-PROCESS"},
		Patterns:      []string{"P-PRE-ANON"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Purpose.Marketing && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Marketing mit personenbezogenen Daten erfordert ausdrückliche, freiwillige Einwilligung."
		},
	},
	{
		Code:          "R-011",
		Category:      "B. Zweck & Kontext",
		Title:         "Profiling Purpose",
		TitleDE:       "Profiling-Zweck",
		Description:   "Profiling requires DSFA and transparency",
		DescriptionDE: "Profiling erfordert DSFA und Transparenz",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 22 DSGVO",
		Controls:      []string{"C-DSFA", "C-TRANSPARENCY", "C-DSR-PROCESS"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Purpose.Profiling
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Profiling erfordert eine DSFA und transparente Information der Betroffenen über die Logik und Auswirkungen."
		},
	},
	{
		Code:          "R-012",
		Category:      "B. Zweck & Kontext",
		Title:         "Evaluation/Scoring Purpose",
		TitleDE:       "Bewertungs-/Scoring-Zweck",
		Description:   "Scoring of individuals requires safeguards",
		DescriptionDE: "Scoring von Personen erfordert Schutzmaßnahmen",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 22 DSGVO",
		Controls:      []string{"C-HITL", "C-TRANSPARENCY"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Purpose.EvaluationScoring
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Bewertung/Scoring von Personen erfordert menschliche Überprüfung und Transparenz über die verwendete Logik."
		},
	},
	{
		Code:          "R-013",
		Category:      "B. Zweck & Kontext",
		Title:         "Customer Support - Low Risk",
		TitleDE:       "Kundenservice - Niedriges Risiko",
		Description:   "Customer support without PII storage is low risk",
		DescriptionDE: "Kundenservice ohne PII-Speicherung ist risikoarm",
		Severity:      SeverityINFO,
		ScoreDelta:    0,
		GDPRRef:       "",
		Controls:      []string{},
		Patterns:      []string{"P-RAG-ONLY"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Purpose.CustomerSupport && !intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Kundenservice mit öffentlichen FAQ-Daten ohne Speicherung personenbezogener Daten ist risikoarm."
		},
	},
	// =========================================================================
	// C. Automatisierung (R-020 bis R-025)
	// =========================================================================
	{
		Code:          "R-020",
		Category:      "C. Automatisierung",
		Title:         "Fully Automated with Legal Effects",
		TitleDE:       "Vollautomatisiert mit rechtlichen Auswirkungen",
		Description:   "Fully automated decisions with legal effects violate Art. 22",
		DescriptionDE: "Vollautomatisierte Entscheidungen mit rechtlichen Auswirkungen verletzen Art. 22",
		Severity:      SeverityBLOCK,
		ScoreDelta:    40,
		GDPRRef:       "Art. 22 DSGVO",
		Controls:      []string{"C-HITL"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Automation == AutomationFullyAutomated && intake.Outputs.LegalEffects
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Vollautomatisierte Entscheidungen mit rechtlichen Auswirkungen ohne menschliche Beteiligung sind nach Art. 22 DSGVO unzulässig."
		},
	},
	{
		Code:          "R-021",
		Category:      "C. Automatisierung",
		Title:         "Fully Automated Rankings/Scores",
		TitleDE:       "Vollautomatisierte Rankings/Scores",
		Description:   "Automated scoring requires human review",
		DescriptionDE: "Automatisches Scoring erfordert menschliche Überprüfung",
		Severity:      SeverityWARN,
		ScoreDelta:    20,
		GDPRRef:       "Art. 22 DSGVO",
		Controls:      []string{"C-HITL", "C-TRANSPARENCY"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Automation == AutomationFullyAutomated && intake.Outputs.RankingsOrScores
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Vollautomatisierte Erstellung von Rankings oder Scores erfordert menschliche Überprüfung vor Verwendung."
		},
	},
	{
		Code:          "R-022",
		Category:      "C. Automatisierung",
		Title:         "Fully Automated Access Decisions",
		TitleDE:       "Vollautomatisierte Zugriffsentscheidungen",
		Description:   "Automated access decisions need safeguards",
		DescriptionDE: "Automatisierte Zugriffsentscheidungen benötigen Schutzmaßnahmen",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 22 DSGVO",
		Controls:      []string{"C-HITL", "C-TRANSPARENCY", "C-DSR-PROCESS"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Automation == AutomationFullyAutomated && intake.Outputs.AccessDecisions
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Automatisierte Entscheidungen über Zugang erfordern Widerspruchsmöglichkeit und menschliche Überprüfung."
		},
	},
	{
		Code:          "R-023",
		Category:      "C. Automatisierung",
		Title:         "Semi-Automated - Medium Risk",
		TitleDE:       "Teilautomatisiert - Mittleres Risiko",
		Description:   "Semi-automated processing with human review",
		DescriptionDE: "Teilautomatisierte Verarbeitung mit menschlicher Überprüfung",
		Severity:      SeverityINFO,
		ScoreDelta:    5,
		GDPRRef:       "",
		Controls:      []string{"C-AUDIT-LOG"},
		Patterns:      []string{"P-HITL-ENFORCED"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Automation == AutomationSemiAutomated && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Teilautomatisierte Verarbeitung mit menschlicher Überprüfung ist grundsätzlich konform, erfordert aber Dokumentation."
		},
	},
	{
		Code:          "R-024",
		Category:      "C. Automatisierung",
		Title:         "Assistive Only - Low Risk",
		TitleDE:       "Nur assistierend - Niedriges Risiko",
		Description:   "Assistive AI without automated decisions is low risk",
		DescriptionDE: "Assistive KI ohne automatisierte Entscheidungen ist risikoarm",
		Severity:      SeverityINFO,
		ScoreDelta:    0,
		GDPRRef:       "",
		Controls:      []string{},
		Patterns:      []string{"P-RAG-ONLY"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Automation == AutomationAssistive
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Rein assistive KI, die nur Vorschläge macht und keine Entscheidungen trifft, ist risikoarm."
		},
	},
	{
		Code:          "R-025",
		Category:      "C. Automatisierung",
		Title:         "HR Scoring - Blocked",
		TitleDE:       "HR-Scoring - Blockiert",
		Description:   "Automated HR scoring/evaluation is prohibited",
		DescriptionDE: "Automatisiertes HR-Scoring/Bewertung ist verboten",
		Severity:      SeverityBLOCK,
		ScoreDelta:    50,
		GDPRRef:       "Art. 22, § 26 BDSG",
		Controls:      []string{"C-HITL"},
		Patterns:      []string{},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Domain == DomainHR &&
				intake.Purpose.EvaluationScoring &&
				intake.Automation == AutomationFullyAutomated
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Vollautomatisierte Bewertung/Scoring von Mitarbeitern ist unzulässig. Arbeitsrechtliche Entscheidungen müssen von Menschen getroffen werden."
		},
	},
	// =========================================================================
	// D. Training vs Nutzung (R-030 bis R-035)
	// =========================================================================
	{
		Code:          "R-030",
		Category:      "D. Training vs Nutzung",
		Title:         "Training with Personal Data",
		TitleDE:       "Training mit personenbezogenen Daten",
		Description:   "Training AI with personal data is high risk",
		DescriptionDE: "Training von KI mit personenbezogenen Daten ist hochriskant",
		Severity:      SeverityBLOCK,
		ScoreDelta:    40,
		GDPRRef:       "Art. 5(1)(b)(c) DSGVO",
		Controls:      []string{"C-ART9-BASIS", "C-DSFA"},
		Patterns:      []string{"P-RAG-ONLY"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.ModelUsage.Training && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Training von KI-Modellen mit personenbezogenen Daten verstößt gegen Zweckbindung und Datenminimierung. Nutzen Sie stattdessen RAG."
		},
	},
	{
		Code:          "R-031",
		Category:      "D. Training vs Nutzung",
		Title:         "Fine-tuning with Personal Data",
		TitleDE:       "Fine-Tuning mit personenbezogenen Daten",
		Description:   "Fine-tuning with PII requires safeguards",
		DescriptionDE: "Fine-Tuning mit PII erfordert Schutzmaßnahmen",
		Severity:      SeverityWARN,
		ScoreDelta:    25,
		GDPRRef:       "Art. 5(1)(b)(c) DSGVO",
		Controls:      []string{"C-ANONYMIZE", "C-DSFA"},
		Patterns:      []string{"P-PRE-ANON"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.ModelUsage.Finetune && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Fine-Tuning mit personenbezogenen Daten ist nur nach Anonymisierung/Pseudonymisierung zulässig."
		},
	},
	{
		Code:          "R-032",
		Category:      "D. Training vs Nutzung",
		Title:         "RAG Only - Recommended",
		TitleDE:       "Nur RAG - Empfohlen",
		Description:   "RAG without training is the safest approach",
		DescriptionDE: "RAG ohne Training ist der sicherste Ansatz",
		Severity:      SeverityINFO,
		ScoreDelta:    0,
		GDPRRef:       "",
		Controls:      []string{},
		Patterns:      []string{"P-RAG-ONLY"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.ModelUsage.RAG && !intake.ModelUsage.Training && !intake.ModelUsage.Finetune
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Nur-RAG ohne Training oder Fine-Tuning ist die empfohlene Architektur für DSGVO-Konformität."
		},
	},
	{
		Code:          "R-033",
		Category:      "D. Training vs Nutzung",
		Title:         "Training with Article 9 Data",
		TitleDE:       "Training mit Art. 9 Daten",
		Description:   "Training with special category data is prohibited",
		DescriptionDE: "Training mit besonderen Datenkategorien ist verboten",
		Severity:      SeverityBLOCK,
		ScoreDelta:    50,
		GDPRRef:       "Art. 9 DSGVO",
		Controls:      []string{},
		Patterns:      []string{},
		Condition: func(intake *UseCaseIntake) bool {
			return (intake.ModelUsage.Training || intake.ModelUsage.Finetune) && intake.DataTypes.Article9Data
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Training oder Fine-Tuning mit besonderen Kategorien personenbezogener Daten (Gesundheit, Religion, etc.) ist grundsätzlich unzulässig."
		},
	},
	{
		Code:          "R-034",
		Category:      "D. Training vs Nutzung",
		Title:         "Inference with Public Data",
		TitleDE:       "Inferenz mit öffentlichen Daten",
		Description:   "Using only public data is low risk",
		DescriptionDE: "Nutzung nur öffentlicher Daten ist risikoarm",
		Severity:      SeverityINFO,
		ScoreDelta:    0,
		GDPRRef:       "",
		Controls:      []string{},
		Patterns:      []string{},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.DataTypes.PublicData && !intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Die ausschließliche Nutzung öffentlich zugänglicher Daten ohne Personenbezug ist unproblematisch."
		},
	},
	{
		Code:          "R-035",
		Category:      "D. Training vs Nutzung",
		Title:         "Training with Minor Data",
		TitleDE:       "Training mit Daten Minderjähriger",
		Description:   "Training with children's data is prohibited",
		DescriptionDE: "Training mit Kinderdaten ist verboten",
		Severity:      SeverityBLOCK,
		ScoreDelta:    50,
		GDPRRef:       "Art. 8 DSGVO, ErwG 38",
		Controls:      []string{},
		Patterns:      []string{},
		Condition: func(intake *UseCaseIntake) bool {
			return (intake.ModelUsage.Training || intake.ModelUsage.Finetune) && intake.DataTypes.MinorData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Training von KI-Modellen mit Daten von Minderjährigen ist aufgrund des besonderen Schutzes unzulässig."
		},
	},
	// =========================================================================
	// E. Speicherung (R-040 bis R-042)
	// =========================================================================
	{
		Code:          "R-040",
		Category:      "E. Speicherung",
		Title:         "Storing Prompts with PII",
		TitleDE:       "Speicherung von Prompts mit PII",
		Description:   "Storing prompts containing PII requires controls",
		DescriptionDE: "Speicherung von Prompts mit PII erfordert Kontrollen",
		Severity:      SeverityWARN,
		ScoreDelta:    15,
		GDPRRef:       "Art. 5(1)(e) DSGVO",
		Controls:      []string{"C-RETENTION", "C-ANONYMIZE", "C-DSR-PROCESS"},
		Patterns:      []string{"P-LOG-MINIMIZATION", "P-PRE-ANON"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Retention.StorePrompts && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Speicherung von Prompts mit personenbezogenen Daten erfordert Löschfristen und Anonymisierungsoptionen."
		},
	},
	{
		Code:          "R-041",
		Category:      "E. Speicherung",
		Title:         "Storing Responses with PII",
		TitleDE:       "Speicherung von Antworten mit PII",
		Description:   "Storing AI responses containing PII requires controls",
		DescriptionDE: "Speicherung von KI-Antworten mit PII erfordert Kontrollen",
		Severity:      SeverityWARN,
		ScoreDelta:    10,
		GDPRRef:       "Art. 5(1)(e) DSGVO",
		Controls:      []string{"C-RETENTION", "C-DSR-PROCESS"},
		Patterns:      []string{"P-LOG-MINIMIZATION"},
		Condition: func(intake *UseCaseIntake) bool {
			return intake.Retention.StoreResponses && intake.DataTypes.PersonalData
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Speicherung von KI-Antworten mit personenbezogenen Daten erfordert definierte Aufbewahrungsfristen."
		},
	},
	{
		Code:          "R-042",
		Category:      "E. Speicherung",
		Title:         "No Retention Policy",
		TitleDE:       "Keine Aufbewahrungsrichtlinie",
		Description:   "PII storage without retention limits is problematic",
		DescriptionDE: "PII-Speicherung ohne Aufbewahrungslimits ist problematisch",
		Severity:      SeverityWARN,
		ScoreDelta:    10,
		GDPRRef:       "Art. 5(1)(e) DSGVO",
		Controls:      []string{"C-RETENTION"},
		Patterns:      []string{"P-LOG-MINIMIZATION"},
		Condition: func(intake *UseCaseIntake) bool {
			return (intake.Retention.StorePrompts || intake.Retention.StoreResponses) &&
				intake.DataTypes.PersonalData &&
				intake.Retention.RetentionDays == 0
		},
		Rationale: func(intake *UseCaseIntake) string {
			return "Speicherung personenbezogener Daten ohne definierte Aufbewahrungsfrist verstößt gegen den Grundsatz der Speicherbegrenzung."
		},
	},
}
