# [DEF:DatasetReviewFindingModels:Module] # @COMPLEXITY: 2 # @PURPOSE: Validation finding model for tracking blocking, warning, and informational issues during review. # @LAYER: Domain # @RELATION: DEPENDS_ON -> [DatasetReviewEnums:Module] # @RELATION: DEPENDS_ON -> [MappingModels] import uuid from datetime import datetime from sqlalchemy import ( Column, String, Text, DateTime, ForeignKey, Enum as SQLEnum, ) from sqlalchemy.orm import relationship from src.models.mapping import Base from src.models.dataset_review_pkg._enums import ( FindingArea, FindingSeverity, ResolutionState, ) # [DEF:ValidationFinding:Class] # @COMPLEXITY: 2 # @PURPOSE: Structured finding record for dataset review validation issues with resolution tracking. # @RELATION: DEPENDS_ON -> [DatasetReviewSession] class ValidationFinding(Base): __tablename__ = "validation_findings" finding_id = Column(String, primary_key=True, default=lambda: str(uuid.uuid4())) session_id = Column( String, ForeignKey("dataset_review_sessions.session_id"), nullable=False ) area = Column(SQLEnum(FindingArea), nullable=False) severity = Column(SQLEnum(FindingSeverity), nullable=False) code = Column(String, nullable=False) title = Column(String, nullable=False) message = Column(Text, nullable=False) resolution_state = Column( SQLEnum(ResolutionState), nullable=False, default=ResolutionState.OPEN ) resolution_note = Column(Text, nullable=True) caused_by_ref = Column(String, nullable=True) created_at = Column(DateTime, default=datetime.utcnow, nullable=False) resolved_at = Column(DateTime, nullable=True) session = relationship("DatasetReviewSession", back_populates="findings") # [/DEF:ValidationFinding:Class] # [/DEF:DatasetReviewFindingModels:Module]