from dataclasses import dataclass, field from datetime import datetime from app.modules.design.domain.entities import ( ADR, ApiContract, Capability, ChangeLogEntry, CodebaseAlignment, DataFlow, DataSecurity, DesignDocument, Domain, DomainEntity, DomainModule, Entity, Environment, ExternalSystem, Integration, Module, ModuleBoundaryRule, OperationalBaseline, ReleasePlan, RuntimeComponent, RuntimeTopology, Scenario, SharedTerm, ScopeAndGoals, SolutionLayer, SystemContext, TechSelection, TraceabilityLink, UbiquitousTerm, UserJourney, ValueFlow, ) from app.modules.design.domain.value_objects import FileStatus @dataclass class FileStatusEntry: path: str status: FileStatus content_lines: int @dataclass class ScanSummary: total_files: int ok: int sparse: int missing: int placeholder_heavy: int template_residue: int @dataclass class ScanResult: """Internal domain object carrying all parsed entities. API response (ScanResultResponse) only includes project_id, scanned_at, file_statuses, summary. Entity data is exposed through separate /entities/* endpoints. """ project_id: str scanned_at: datetime file_statuses: list[FileStatusEntry] summary: ScanSummary # All parsed Design entities capabilities: list[Capability] = field(default_factory=list) modules: list[Module] = field(default_factory=list) entities: list[Entity] = field(default_factory=list) value_flows: list[ValueFlow] = field(default_factory=list) user_journeys: list[UserJourney] = field(default_factory=list) integrations: list[Integration] = field(default_factory=list) data_flows: list[DataFlow] = field(default_factory=list) traceability_links: list[TraceabilityLink] = field(default_factory=list) external_systems: list[ExternalSystem] = field(default_factory=list) runtime_components: list[RuntimeComponent] = field(default_factory=list) tech_selections: list[TechSelection] = field(default_factory=list) environments: list[Environment] = field(default_factory=list) design_documents: list[DesignDocument] = field(default_factory=list) change_log_entries: list[ChangeLogEntry] = field(default_factory=list) adrs: list[ADR] = field(default_factory=list) shared_terms: list[SharedTerm] = field(default_factory=list) domains: list[Domain] = field(default_factory=list) ubiquitous_terms: list[UbiquitousTerm] = field(default_factory=list) scenarios: list[Scenario] = field(default_factory=list) domain_modules: list[DomainModule] = field(default_factory=list) domain_entities: list[DomainEntity] = field(default_factory=list) data_securities: list[DataSecurity] = field(default_factory=list) codebase_alignments: list[CodebaseAlignment] = field(default_factory=list) api_contracts: list[ApiContract] = field(default_factory=list) # MD file-specific (singleton or None) scope_and_goals: ScopeAndGoals | None = None system_context: SystemContext | None = None solution_layer: SolutionLayer | None = None module_boundary_rule: ModuleBoundaryRule | None = None runtime_topology: RuntimeTopology | None = None operational_baseline: OperationalBaseline | None = None release_plan: ReleasePlan | None = None