using StellaOps.Scanner.AiMlSecurity.Models; using System.Collections.Immutable; namespace StellaOps.Scanner.AiMlSecurity.Policy; public sealed record AiGovernancePolicy { public string? Version { get; init; } public string? ComplianceFramework { get; init; } public ImmutableArray ComplianceFrameworks { get; init; } = []; public AiModelCardRequirements ModelCardRequirements { get; init; } = new(); public AiTrainingDataRequirements TrainingDataRequirements { get; init; } = new(); public AiRiskCategories RiskCategories { get; init; } = new(); public AiSafetyRequirements SafetyRequirements { get; init; } = new(); public AiProvenanceRequirements ProvenanceRequirements { get; init; } = new(); public bool RequireRiskAssessment { get; init; } public ImmutableArray Exemptions { get; init; } = []; } public sealed record AiModelCardRequirements { public AiModelCardCompleteness MinimumCompleteness { get; init; } = AiModelCardCompleteness.Basic; public ImmutableArray RequiredSections { get; init; } = []; } public sealed record AiTrainingDataRequirements { public bool RequireProvenance { get; init; } = true; public bool SensitiveDataAllowed { get; init; } public bool RequireBiasAssessment { get; init; } = true; } public sealed record AiRiskCategories { public ImmutableArray HighRisk { get; init; } = []; } public sealed record AiSafetyRequirements { public bool RequireSafetyAssessment { get; init; } = true; public AiHumanOversightRequirements HumanOversightRequired { get; init; } = new(); } public sealed record AiHumanOversightRequirements { public bool ForHighRisk { get; init; } = true; } public sealed record AiProvenanceRequirements { public bool RequireHash { get; init; } public bool RequireSignature { get; init; } public ImmutableArray TrustedSources { get; init; } = []; public ImmutableArray KnownModelHubs { get; init; } = []; } public sealed record AiGovernanceExemption { public string? ModelPattern { get; init; } public string? Reason { get; init; } public bool RiskAccepted { get; init; } public DateOnly? ExpirationDate { get; init; } }