Files
breakpilot-compliance/ai-compliance-sdk/internal/maximizer/dimensions.go
Benjamin Admin 1ac716261c
Some checks failed
Build + Deploy / build-admin-compliance (push) Successful in 1m45s
Build + Deploy / build-backend-compliance (push) Successful in 4m42s
Build + Deploy / build-ai-sdk (push) Successful in 46s
Build + Deploy / build-developer-portal (push) Successful in 1m6s
Build + Deploy / build-tts (push) Successful in 1m14s
Build + Deploy / build-document-crawler (push) Successful in 31s
Build + Deploy / build-dsms-gateway (push) Successful in 24s
CI / branch-name (push) Has been skipped
CI / guardrail-integrity (push) Has been skipped
CI / loc-budget (push) Failing after 15s
CI / secret-scan (push) Has been skipped
CI / go-lint (push) Has been skipped
CI / python-lint (push) Has been skipped
CI / nodejs-lint (push) Has been skipped
CI / nodejs-build (push) Successful in 2m27s
CI / dep-audit (push) Has been skipped
CI / sbom-scan (push) Has been skipped
CI / test-go (push) Failing after 37s
CI / test-python-backend (push) Successful in 42s
CI / test-python-document-crawler (push) Successful in 25s
CI / test-python-dsms-gateway (push) Successful in 23s
CI / validate-canonical-controls (push) Successful in 18s
Build + Deploy / trigger-orca (push) Successful in 4m35s
feat: Compliance Maximizer — Regulatory Optimization Engine
Neues Modul das den regulatorischen Spielraum fuer KI-Use-Cases
deterministisch berechnet und optimale Konfigurationen vorschlaegt.

Kernfeatures:
- 13-Dimensionen Constraint-Space (DSGVO + AI Act)
- 3-Zonen-Analyse: Verboten / Eingeschraenkt / Erlaubt
- Deterministische Optimizer-Engine (kein LLM im Kern)
- 28 Constraint-Regeln aus DSGVO, AI Act, EDPB Guidelines
- 28 Tests (Golden Suite + Meta-Tests)
- REST API: /sdk/v1/maximizer/* (9 Endpoints)
- Frontend: 3-Zonen-Visualisierung, Dimension-Form, Score-Gauges

[migration-approved]

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-23 09:10:20 +02:00

307 lines
9.1 KiB
Go

package maximizer
// DimensionConfig is the normalized representation of an AI use case
// as a point in a 13-dimensional regulatory constraint space.
// Each dimension maps to regulatory obligations from DSGVO, AI Act, etc.
type DimensionConfig struct {
AutomationLevel AutomationLevel `json:"automation_level"`
DecisionBinding DecisionBinding `json:"decision_binding"`
DecisionImpact DecisionImpact `json:"decision_impact"`
Domain DomainCategory `json:"domain"`
DataType DataTypeSensitivity `json:"data_type"`
HumanInLoop HumanInLoopLevel `json:"human_in_loop"`
Explainability ExplainabilityLevel `json:"explainability"`
RiskClassification RiskClass `json:"risk_classification"`
LegalBasis LegalBasisType `json:"legal_basis"`
TransparencyRequired bool `json:"transparency_required"`
LoggingRequired bool `json:"logging_required"`
ModelType ModelType `json:"model_type"`
DeploymentScope DeploymentScope `json:"deployment_scope"`
}
// --- Dimension Enums ---
type AutomationLevel string
const (
AutoNone AutomationLevel = "none"
AutoAssistive AutomationLevel = "assistive"
AutoPartial AutomationLevel = "partial"
AutoFull AutomationLevel = "full"
)
type DecisionBinding string
const (
BindingNonBinding DecisionBinding = "non_binding"
BindingHumanReview DecisionBinding = "human_review_required"
BindingFullyBinding DecisionBinding = "fully_binding"
)
type DecisionImpact string
const (
ImpactLow DecisionImpact = "low"
ImpactMedium DecisionImpact = "medium"
ImpactHigh DecisionImpact = "high"
)
type DomainCategory string
const (
DomainHR DomainCategory = "hr"
DomainFinance DomainCategory = "finance"
DomainEducation DomainCategory = "education"
DomainHealth DomainCategory = "health"
DomainMarketing DomainCategory = "marketing"
DomainGeneral DomainCategory = "general"
)
type DataTypeSensitivity string
const (
DataNonPersonal DataTypeSensitivity = "non_personal"
DataPersonal DataTypeSensitivity = "personal"
DataSensitive DataTypeSensitivity = "sensitive"
DataBiometric DataTypeSensitivity = "biometric"
)
type HumanInLoopLevel string
const (
HILNone HumanInLoopLevel = "none"
HILOptional HumanInLoopLevel = "optional"
HILRequired HumanInLoopLevel = "required"
)
type ExplainabilityLevel string
const (
ExplainNone ExplainabilityLevel = "none"
ExplainBasic ExplainabilityLevel = "basic"
ExplainHigh ExplainabilityLevel = "high"
)
type RiskClass string
const (
RiskMinimal RiskClass = "minimal"
RiskLimited RiskClass = "limited"
RiskHigh RiskClass = "high"
RiskProhibited RiskClass = "prohibited"
)
type LegalBasisType string
const (
LegalConsent LegalBasisType = "consent"
LegalContract LegalBasisType = "contract"
LegalLegalObligation LegalBasisType = "legal_obligation"
LegalLegitimateInterest LegalBasisType = "legitimate_interest"
LegalPublicInterest LegalBasisType = "public_interest"
)
type ModelType string
const (
ModelRuleBased ModelType = "rule_based"
ModelStatistical ModelType = "statistical"
ModelBlackboxLLM ModelType = "blackbox_llm"
)
type DeploymentScope string
const (
ScopeInternal DeploymentScope = "internal"
ScopeExternal DeploymentScope = "external"
ScopePublic DeploymentScope = "public"
)
// --- Ordinal Orderings (higher = more regulatory risk) ---
var automationOrder = map[AutomationLevel]int{
AutoNone: 0, AutoAssistive: 1, AutoPartial: 2, AutoFull: 3,
}
var bindingOrder = map[DecisionBinding]int{
BindingNonBinding: 0, BindingHumanReview: 1, BindingFullyBinding: 2,
}
var impactOrder = map[DecisionImpact]int{
ImpactLow: 0, ImpactMedium: 1, ImpactHigh: 2,
}
var dataTypeOrder = map[DataTypeSensitivity]int{
DataNonPersonal: 0, DataPersonal: 1, DataSensitive: 2, DataBiometric: 3,
}
var hilOrder = map[HumanInLoopLevel]int{
HILRequired: 0, HILOptional: 1, HILNone: 2,
}
var explainOrder = map[ExplainabilityLevel]int{
ExplainHigh: 0, ExplainBasic: 1, ExplainNone: 2,
}
var riskOrder = map[RiskClass]int{
RiskMinimal: 0, RiskLimited: 1, RiskHigh: 2, RiskProhibited: 3,
}
var modelTypeOrder = map[ModelType]int{
ModelRuleBased: 0, ModelStatistical: 1, ModelBlackboxLLM: 2,
}
var scopeOrder = map[DeploymentScope]int{
ScopeInternal: 0, ScopeExternal: 1, ScopePublic: 2,
}
// AllValues returns the ordered list of allowed values for each dimension.
var AllValues = map[string][]string{
"automation_level": {"none", "assistive", "partial", "full"},
"decision_binding": {"non_binding", "human_review_required", "fully_binding"},
"decision_impact": {"low", "medium", "high"},
"domain": {"hr", "finance", "education", "health", "marketing", "general"},
"data_type": {"non_personal", "personal", "sensitive", "biometric"},
"human_in_loop": {"required", "optional", "none"},
"explainability": {"high", "basic", "none"},
"risk_classification": {"minimal", "limited", "high", "prohibited"},
"legal_basis": {"consent", "contract", "legal_obligation", "legitimate_interest", "public_interest"},
"transparency_required": {"true", "false"},
"logging_required": {"true", "false"},
"model_type": {"rule_based", "statistical", "blackbox_llm"},
"deployment_scope": {"internal", "external", "public"},
}
// DimensionDelta represents a single change between two configs.
type DimensionDelta struct {
Dimension string `json:"dimension"`
From string `json:"from"`
To string `json:"to"`
Impact string `json:"impact"` // human-readable impact description
}
// GetValue returns the string value of a dimension by name.
func (d *DimensionConfig) GetValue(dimension string) string {
switch dimension {
case "automation_level":
return string(d.AutomationLevel)
case "decision_binding":
return string(d.DecisionBinding)
case "decision_impact":
return string(d.DecisionImpact)
case "domain":
return string(d.Domain)
case "data_type":
return string(d.DataType)
case "human_in_loop":
return string(d.HumanInLoop)
case "explainability":
return string(d.Explainability)
case "risk_classification":
return string(d.RiskClassification)
case "legal_basis":
return string(d.LegalBasis)
case "transparency_required":
if d.TransparencyRequired {
return "true"
}
return "false"
case "logging_required":
if d.LoggingRequired {
return "true"
}
return "false"
case "model_type":
return string(d.ModelType)
case "deployment_scope":
return string(d.DeploymentScope)
default:
return ""
}
}
// SetValue sets a dimension value by name. Returns false if the dimension is unknown.
func (d *DimensionConfig) SetValue(dimension, value string) bool {
switch dimension {
case "automation_level":
d.AutomationLevel = AutomationLevel(value)
case "decision_binding":
d.DecisionBinding = DecisionBinding(value)
case "decision_impact":
d.DecisionImpact = DecisionImpact(value)
case "domain":
d.Domain = DomainCategory(value)
case "data_type":
d.DataType = DataTypeSensitivity(value)
case "human_in_loop":
d.HumanInLoop = HumanInLoopLevel(value)
case "explainability":
d.Explainability = ExplainabilityLevel(value)
case "risk_classification":
d.RiskClassification = RiskClass(value)
case "legal_basis":
d.LegalBasis = LegalBasisType(value)
case "transparency_required":
d.TransparencyRequired = value == "true"
case "logging_required":
d.LoggingRequired = value == "true"
case "model_type":
d.ModelType = ModelType(value)
case "deployment_scope":
d.DeploymentScope = DeploymentScope(value)
default:
return false
}
return true
}
// Diff computes the changes between two configs.
func (d *DimensionConfig) Diff(other *DimensionConfig) []DimensionDelta {
dimensions := []string{
"automation_level", "decision_binding", "decision_impact", "domain",
"data_type", "human_in_loop", "explainability", "risk_classification",
"legal_basis", "transparency_required", "logging_required",
"model_type", "deployment_scope",
}
var deltas []DimensionDelta
for _, dim := range dimensions {
from := d.GetValue(dim)
to := other.GetValue(dim)
if from != to {
deltas = append(deltas, DimensionDelta{
Dimension: dim,
From: from,
To: to,
Impact: describeDeltaImpact(dim, from, to),
})
}
}
return deltas
}
// Clone returns a deep copy of the config.
func (d *DimensionConfig) Clone() DimensionConfig {
return *d
}
func describeDeltaImpact(dimension, from, to string) string {
switch dimension {
case "automation_level":
return "Automatisierungsgrad: " + from + " → " + to
case "decision_binding":
return "Entscheidungsbindung: " + from + " → " + to
case "human_in_loop":
return "Menschliche Kontrolle: " + from + " → " + to
case "explainability":
return "Erklaerbarkeit: " + from + " → " + to
case "data_type":
return "Datensensitivitaet: " + from + " → " + to
case "transparency_required":
return "Transparenzpflicht: " + from + " → " + to
case "logging_required":
return "Protokollierungspflicht: " + from + " → " + to
default:
return dimension + ": " + from + " → " + to
}
}