Split 5 oversized files (501-583 LOC each) into focused units all under 500 LOC: - license_policy.go → +_types.go (engine logic / type definitions) - models.go → +_intake.go, +_assessment.go (enums+domains / intake structs / output+DB types) - pdf_export.go → +_markdown.go (PDF export / markdown export) - escalation_store.go → +_dsb.go (main escalation ops / DSB pool ops) - obligations_registry.go → +_grouping.go (registry core / grouping methods) All files remain in package ucca. Zero behavior changes. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
176 lines
7.0 KiB
Go
176 lines
7.0 KiB
Go
package ucca
|
|
|
|
// ============================================================================
|
|
// Input Structs
|
|
// ============================================================================
|
|
|
|
// UseCaseIntake represents the user's input describing their planned AI use case
|
|
type UseCaseIntake struct {
|
|
// Free-text description of the use case
|
|
UseCaseText string `json:"use_case_text"`
|
|
|
|
// Business domain
|
|
Domain Domain `json:"domain"`
|
|
|
|
// Title for the assessment (optional)
|
|
Title string `json:"title,omitempty"`
|
|
|
|
// Data types involved
|
|
DataTypes DataTypes `json:"data_types"`
|
|
|
|
// Purpose of the processing
|
|
Purpose Purpose `json:"purpose"`
|
|
|
|
// Level of automation
|
|
Automation AutomationLevel `json:"automation"`
|
|
|
|
// Output characteristics
|
|
Outputs Outputs `json:"outputs"`
|
|
|
|
// Hosting configuration
|
|
Hosting Hosting `json:"hosting"`
|
|
|
|
// Model usage configuration
|
|
ModelUsage ModelUsage `json:"model_usage"`
|
|
|
|
// Retention configuration
|
|
Retention Retention `json:"retention"`
|
|
|
|
// Financial regulations context (DORA, MaRisk, BAIT)
|
|
// Only applicable for financial domains (banking, finance, insurance, investment)
|
|
FinancialContext *FinancialContext `json:"financial_context,omitempty"`
|
|
|
|
// Opt-in to store raw text (otherwise only hash)
|
|
StoreRawText bool `json:"store_raw_text,omitempty"`
|
|
}
|
|
|
|
// DataTypes specifies what kinds of data are processed
|
|
type DataTypes struct {
|
|
PersonalData bool `json:"personal_data"`
|
|
Article9Data bool `json:"article_9_data"` // Special categories (health, religion, etc.)
|
|
MinorData bool `json:"minor_data"` // Data of children
|
|
LicensePlates bool `json:"license_plates"` // KFZ-Kennzeichen
|
|
Images bool `json:"images"` // Photos/images of persons
|
|
Audio bool `json:"audio"` // Voice recordings
|
|
LocationData bool `json:"location_data"` // GPS/location tracking
|
|
BiometricData bool `json:"biometric_data"` // Fingerprints, face recognition
|
|
FinancialData bool `json:"financial_data"` // Bank accounts, salaries
|
|
EmployeeData bool `json:"employee_data"` // HR/employment data
|
|
CustomerData bool `json:"customer_data"` // Customer information
|
|
PublicData bool `json:"public_data"` // Publicly available data only
|
|
}
|
|
|
|
// Purpose specifies the processing purpose
|
|
type Purpose struct {
|
|
CustomerSupport bool `json:"customer_support"`
|
|
Marketing bool `json:"marketing"`
|
|
Analytics bool `json:"analytics"`
|
|
Automation bool `json:"automation"`
|
|
EvaluationScoring bool `json:"evaluation_scoring"` // Scoring/ranking of persons
|
|
DecisionMaking bool `json:"decision_making"` // Automated decisions
|
|
Profiling bool `json:"profiling"`
|
|
Research bool `json:"research"`
|
|
InternalTools bool `json:"internal_tools"`
|
|
PublicService bool `json:"public_service"`
|
|
}
|
|
|
|
// Outputs specifies output characteristics
|
|
type Outputs struct {
|
|
RecommendationsToUsers bool `json:"recommendations_to_users"`
|
|
RankingsOrScores bool `json:"rankings_or_scores"` // Outputs rankings/scores
|
|
LegalEffects bool `json:"legal_effects"` // Has legal consequences
|
|
AccessDecisions bool `json:"access_decisions"` // Grants/denies access
|
|
ContentGeneration bool `json:"content_generation"` // Generates text/media
|
|
DataExport bool `json:"data_export"` // Exports data externally
|
|
}
|
|
|
|
// Hosting specifies where the AI runs
|
|
type Hosting struct {
|
|
Provider string `json:"provider,omitempty"` // e.g., "Azure", "AWS", "Hetzner", "On-Prem"
|
|
Region string `json:"region"` // "eu", "third_country", "on_prem"
|
|
DataResidency string `json:"data_residency,omitempty"` // Where data is stored
|
|
}
|
|
|
|
// ModelUsage specifies how the model is used
|
|
type ModelUsage struct {
|
|
RAG bool `json:"rag"` // Retrieval-Augmented Generation only
|
|
Finetune bool `json:"finetune"` // Fine-tuning with data
|
|
Training bool `json:"training"` // Full training with data
|
|
Inference bool `json:"inference"` // Inference only
|
|
}
|
|
|
|
// Retention specifies data retention
|
|
type Retention struct {
|
|
StorePrompts bool `json:"store_prompts"`
|
|
StoreResponses bool `json:"store_responses"`
|
|
RetentionDays int `json:"retention_days,omitempty"`
|
|
AnonymizeAfterUse bool `json:"anonymize_after_use"`
|
|
}
|
|
|
|
// ============================================================================
|
|
// Financial Regulations Structs (DORA, MaRisk, BAIT)
|
|
// ============================================================================
|
|
|
|
// FinancialEntityType represents the type of financial institution
|
|
type FinancialEntityType string
|
|
|
|
const (
|
|
FinancialEntityCreditInstitution FinancialEntityType = "CREDIT_INSTITUTION"
|
|
FinancialEntityPaymentServiceProvider FinancialEntityType = "PAYMENT_SERVICE_PROVIDER"
|
|
FinancialEntityEMoneyInstitution FinancialEntityType = "E_MONEY_INSTITUTION"
|
|
FinancialEntityInvestmentFirm FinancialEntityType = "INVESTMENT_FIRM"
|
|
FinancialEntityInsuranceCompany FinancialEntityType = "INSURANCE_COMPANY"
|
|
FinancialEntityCryptoAssetProvider FinancialEntityType = "CRYPTO_ASSET_PROVIDER"
|
|
FinancialEntityOther FinancialEntityType = "OTHER_FINANCIAL"
|
|
)
|
|
|
|
// SizeCategory represents the significance category of a financial institution
|
|
type SizeCategory string
|
|
|
|
const (
|
|
SizeCategorySignificant SizeCategory = "SIGNIFICANT"
|
|
SizeCategoryLessSignificant SizeCategory = "LESS_SIGNIFICANT"
|
|
SizeCategorySmall SizeCategory = "SMALL"
|
|
)
|
|
|
|
// ProviderLocation represents the location of an ICT service provider
|
|
type ProviderLocation string
|
|
|
|
const (
|
|
ProviderLocationEU ProviderLocation = "EU"
|
|
ProviderLocationEEA ProviderLocation = "EEA"
|
|
ProviderLocationAdequacyDecision ProviderLocation = "ADEQUACY_DECISION"
|
|
ProviderLocationThirdCountry ProviderLocation = "THIRD_COUNTRY"
|
|
)
|
|
|
|
// FinancialEntity describes the financial institution context
|
|
type FinancialEntity struct {
|
|
Type FinancialEntityType `json:"type"`
|
|
Regulated bool `json:"regulated"`
|
|
SizeCategory SizeCategory `json:"size_category"`
|
|
}
|
|
|
|
// ICTService describes ICT service characteristics for DORA compliance
|
|
type ICTService struct {
|
|
IsCritical bool `json:"is_critical"`
|
|
IsOutsourced bool `json:"is_outsourced"`
|
|
ProviderLocation ProviderLocation `json:"provider_location"`
|
|
ConcentrationRisk bool `json:"concentration_risk"`
|
|
}
|
|
|
|
// FinancialAIApplication describes financial-specific AI application characteristics
|
|
type FinancialAIApplication struct {
|
|
AffectsCustomerDecisions bool `json:"affects_customer_decisions"`
|
|
AlgorithmicTrading bool `json:"algorithmic_trading"`
|
|
RiskAssessment bool `json:"risk_assessment"`
|
|
AMLKYC bool `json:"aml_kyc"`
|
|
ModelValidationDone bool `json:"model_validation_done"`
|
|
}
|
|
|
|
// FinancialContext aggregates all financial regulation-specific information
|
|
type FinancialContext struct {
|
|
FinancialEntity FinancialEntity `json:"financial_entity"`
|
|
ICTService ICTService `json:"ict_service"`
|
|
AIApplication FinancialAIApplication `json:"ai_application"`
|
|
}
|