Remove Compliance SDK category from sidebar navigation as it is now handled exclusively in the Compliance Admin. Add new SDK modules (DSB Portal, Industry Templates, Multi-Tenant, Reporting, SSO) and GCI engine components. Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
105 lines
4.0 KiB
Go
105 lines
4.0 KiB
Go
package gci
|
|
|
|
import "time"
|
|
|
|
// Level 1: Module Score
|
|
type ModuleScore struct {
|
|
ModuleID string `json:"module_id"`
|
|
ModuleName string `json:"module_name"`
|
|
Assigned int `json:"assigned"`
|
|
Completed int `json:"completed"`
|
|
RawScore float64 `json:"raw_score"` // completions/assigned
|
|
ValidityFactor float64 `json:"validity_factor"` // 0.0-1.0
|
|
FinalScore float64 `json:"final_score"` // RawScore * ValidityFactor
|
|
RiskWeight float64 `json:"risk_weight"` // module criticality weight
|
|
Category string `json:"category"` // dsgvo, nis2, iso27001, ai_act
|
|
}
|
|
|
|
// Level 2: Risk-weighted Module Score per regulation area
|
|
type RiskWeightedScore struct {
|
|
AreaID string `json:"area_id"`
|
|
AreaName string `json:"area_name"`
|
|
Modules []ModuleScore `json:"modules"`
|
|
WeightedSum float64 `json:"weighted_sum"`
|
|
TotalWeight float64 `json:"total_weight"`
|
|
AreaScore float64 `json:"area_score"` // WeightedSum / TotalWeight
|
|
}
|
|
|
|
// Level 3: Regulation Area Score
|
|
type RegulationAreaScore struct {
|
|
RegulationID string `json:"regulation_id"` // dsgvo, nis2, iso27001, ai_act
|
|
RegulationName string `json:"regulation_name"` // Display name
|
|
Score float64 `json:"score"` // 0-100
|
|
Weight float64 `json:"weight"` // regulation weight in GCI
|
|
WeightedScore float64 `json:"weighted_score"` // Score * Weight
|
|
ModuleCount int `json:"module_count"`
|
|
CompletedCount int `json:"completed_count"`
|
|
}
|
|
|
|
// Level 4: GCI Result
|
|
type GCIResult struct {
|
|
TenantID string `json:"tenant_id"`
|
|
GCIScore float64 `json:"gci_score"` // 0-100
|
|
MaturityLevel string `json:"maturity_level"` // Optimized, Managed, Defined, Reactive, HighRisk
|
|
MaturityLabel string `json:"maturity_label"` // German label
|
|
CalculatedAt time.Time `json:"calculated_at"`
|
|
Profile string `json:"profile"` // default, nis2_relevant, ki_nutzer
|
|
AreaScores []RegulationAreaScore `json:"area_scores"`
|
|
CriticalityMult float64 `json:"criticality_multiplier"`
|
|
IncidentAdj float64 `json:"incident_adjustment"`
|
|
AuditTrail []AuditEntry `json:"audit_trail"`
|
|
}
|
|
|
|
// GCI Breakdown with all 4 levels
|
|
type GCIBreakdown struct {
|
|
GCIResult
|
|
Level1Modules []ModuleScore `json:"level1_modules"`
|
|
Level2Areas []RiskWeightedScore `json:"level2_areas"`
|
|
}
|
|
|
|
// MaturityLevel constants
|
|
const (
|
|
MaturityOptimized = "OPTIMIZED"
|
|
MaturityManaged = "MANAGED"
|
|
MaturityDefined = "DEFINED"
|
|
MaturityReactive = "REACTIVE"
|
|
MaturityHighRisk = "HIGH_RISK"
|
|
)
|
|
|
|
// Maturity level labels (German)
|
|
var MaturityLabels = map[string]string{
|
|
MaturityOptimized: "Optimiert",
|
|
MaturityManaged: "Gesteuert",
|
|
MaturityDefined: "Definiert",
|
|
MaturityReactive: "Reaktiv",
|
|
MaturityHighRisk: "Hohes Risiko",
|
|
}
|
|
|
|
// AuditEntry for score transparency
|
|
type AuditEntry struct {
|
|
Timestamp time.Time `json:"timestamp"`
|
|
Factor string `json:"factor"`
|
|
Description string `json:"description"`
|
|
Value float64 `json:"value"`
|
|
Impact string `json:"impact"` // positive, negative, neutral
|
|
}
|
|
|
|
// ComplianceMatrixEntry maps roles to regulations
|
|
type ComplianceMatrixEntry struct {
|
|
Role string `json:"role"`
|
|
RoleName string `json:"role_name"`
|
|
Regulations map[string]float64 `json:"regulations"` // regulation_id -> score
|
|
OverallScore float64 `json:"overall_score"`
|
|
RequiredModules int `json:"required_modules"`
|
|
CompletedModules int `json:"completed_modules"`
|
|
}
|
|
|
|
// GCI History snapshot
|
|
type GCISnapshot struct {
|
|
TenantID string `json:"tenant_id"`
|
|
Score float64 `json:"score"`
|
|
MaturityLevel string `json:"maturity_level"`
|
|
AreaScores map[string]float64 `json:"area_scores"`
|
|
CalculatedAt time.Time `json:"calculated_at"`
|
|
}
|