# [DEF:DatasetReviewSchemas:Module] # # @COMPLEXITY: 3 # @SEMANTICS: dataset_review, schemas, pydantic, session, profile, findings # @PURPOSE: Defines API schemas for the dataset review orchestration flow. # @LAYER: API # @RELATION: DEPENDS_ON -> [DatasetReviewModels] # [SECTION: IMPORTS] from datetime import datetime from typing import List, Optional, Any from pydantic import BaseModel, Field from src.models.dataset_review import ( SessionStatus, SessionPhase, ReadinessState, RecommendedAction, SessionCollaboratorRole, BusinessSummarySource, ConfidenceState, FindingArea, FindingSeverity, ResolutionState, SemanticSourceType, TrustLevel, SemanticSourceStatus, FieldKind, FieldProvenance, CandidateMatchType, CandidateStatus, FilterSource, FilterConfidenceState, FilterRecoveryStatus, VariableKind, MappingStatus, MappingMethod, MappingWarningLevel, ApprovalState, ClarificationStatus, QuestionState, AnswerKind, PreviewStatus, LaunchStatus, ArtifactType, ArtifactFormat ) # [/SECTION] # [DEF:SessionCollaboratorDto:Class] class SessionCollaboratorDto(BaseModel): user_id: str role: SessionCollaboratorRole added_at: datetime class Config: from_attributes = True # [/DEF:SessionCollaboratorDto:Class] # [DEF:DatasetProfileDto:Class] class DatasetProfileDto(BaseModel): profile_id: str session_id: str dataset_name: str schema_name: Optional[str] = None database_name: Optional[str] = None business_summary: str business_summary_source: BusinessSummarySource description: Optional[str] = None dataset_type: Optional[str] = None is_sqllab_view: bool completeness_score: Optional[float] = None confidence_state: ConfidenceState has_blocking_findings: bool has_warning_findings: bool manual_summary_locked: bool created_at: datetime updated_at: datetime class Config: from_attributes = True # [/DEF:DatasetProfileDto:Class] # [DEF:ValidationFindingDto:Class] class ValidationFindingDto(BaseModel): finding_id: str session_id: str area: FindingArea severity: FindingSeverity code: str title: str message: str resolution_state: ResolutionState resolution_note: Optional[str] = None caused_by_ref: Optional[str] = None created_at: datetime resolved_at: Optional[datetime] = None class Config: from_attributes = True # [/DEF:ValidationFindingDto:Class] # [DEF:SemanticSourceDto:Class] class SemanticSourceDto(BaseModel): source_id: str session_id: str source_type: SemanticSourceType source_ref: str source_version: str display_name: str trust_level: TrustLevel schema_overlap_score: Optional[float] = None status: SemanticSourceStatus created_at: datetime class Config: from_attributes = True # [/DEF:SemanticSourceDto:Class] # [DEF:SemanticCandidateDto:Class] class SemanticCandidateDto(BaseModel): candidate_id: str field_id: str source_id: Optional[str] = None candidate_rank: int match_type: CandidateMatchType confidence_score: float proposed_verbose_name: Optional[str] = None proposed_description: Optional[str] = None proposed_display_format: Optional[str] = None status: CandidateStatus created_at: datetime class Config: from_attributes = True # [/DEF:SemanticCandidateDto:Class] # [DEF:SemanticFieldEntryDto:Class] class SemanticFieldEntryDto(BaseModel): field_id: str session_id: str field_name: str field_kind: FieldKind verbose_name: Optional[str] = None description: Optional[str] = None display_format: Optional[str] = None provenance: FieldProvenance source_id: Optional[str] = None confidence_rank: Optional[int] = None is_locked: bool has_conflict: bool needs_review: bool last_changed_by: str user_feedback: Optional[str] = None created_at: datetime updated_at: datetime candidates: List[SemanticCandidateDto] = [] class Config: from_attributes = True # [/DEF:SemanticFieldEntryDto:Class] # [DEF:ImportedFilterDto:Class] class ImportedFilterDto(BaseModel): filter_id: str session_id: str filter_name: str display_name: Optional[str] = None raw_value: Any normalized_value: Optional[Any] = None source: FilterSource confidence_state: FilterConfidenceState requires_confirmation: bool recovery_status: FilterRecoveryStatus notes: Optional[str] = None created_at: datetime updated_at: datetime class Config: from_attributes = True # [/DEF:ImportedFilterDto:Class] # [DEF:TemplateVariableDto:Class] class TemplateVariableDto(BaseModel): variable_id: str session_id: str variable_name: str expression_source: str variable_kind: VariableKind is_required: bool default_value: Optional[Any] = None mapping_status: MappingStatus created_at: datetime updated_at: datetime class Config: from_attributes = True # [/DEF:TemplateVariableDto:Class] # [DEF:ExecutionMappingDto:Class] class ExecutionMappingDto(BaseModel): mapping_id: str session_id: str filter_id: str variable_id: str mapping_method: MappingMethod raw_input_value: Any effective_value: Optional[Any] = None transformation_note: Optional[str] = None warning_level: Optional[MappingWarningLevel] = None requires_explicit_approval: bool approval_state: ApprovalState approved_by_user_id: Optional[str] = None approved_at: Optional[datetime] = None created_at: datetime updated_at: datetime class Config: from_attributes = True # [/DEF:ExecutionMappingDto:Class] # [DEF:ClarificationOptionDto:Class] class ClarificationOptionDto(BaseModel): option_id: str question_id: str label: str value: str is_recommended: bool display_order: int class Config: from_attributes = True # [/DEF:ClarificationOptionDto:Class] # [DEF:ClarificationAnswerDto:Class] class ClarificationAnswerDto(BaseModel): answer_id: str question_id: str answer_kind: AnswerKind answer_value: Optional[str] = None answered_by_user_id: str impact_summary: Optional[str] = None created_at: datetime class Config: from_attributes = True # [/DEF:ClarificationAnswerDto:Class] # [DEF:ClarificationQuestionDto:Class] class ClarificationQuestionDto(BaseModel): question_id: str clarification_session_id: str topic_ref: str question_text: str why_it_matters: str current_guess: Optional[str] = None priority: int state: QuestionState created_at: datetime updated_at: datetime options: List[ClarificationOptionDto] = [] answer: Optional[ClarificationAnswerDto] = None class Config: from_attributes = True # [/DEF:ClarificationQuestionDto:Class] # [DEF:ClarificationSessionDto:Class] class ClarificationSessionDto(BaseModel): clarification_session_id: str session_id: str status: ClarificationStatus current_question_id: Optional[str] = None resolved_count: int remaining_count: int summary_delta: Optional[str] = None started_at: datetime updated_at: datetime completed_at: Optional[datetime] = None questions: List[ClarificationQuestionDto] = [] class Config: from_attributes = True # [/DEF:ClarificationSessionDto:Class] # [DEF:CompiledPreviewDto:Class] class CompiledPreviewDto(BaseModel): preview_id: str session_id: str preview_status: PreviewStatus compiled_sql: Optional[str] = None preview_fingerprint: str compiled_by: str error_code: Optional[str] = None error_details: Optional[str] = None compiled_at: Optional[datetime] = None created_at: datetime class Config: from_attributes = True # [/DEF:CompiledPreviewDto:Class] # [DEF:DatasetRunContextDto:Class] class DatasetRunContextDto(BaseModel): run_context_id: str session_id: str dataset_ref: str environment_id: str preview_id: str sql_lab_session_ref: str effective_filters: Any template_params: Any approved_mapping_ids: List[str] semantic_decision_refs: List[str] open_warning_refs: List[str] launch_status: LaunchStatus launch_error: Optional[str] = None created_at: datetime class Config: from_attributes = True # [/DEF:DatasetRunContextDto:Class] # [DEF:SessionSummary:Class] class SessionSummary(BaseModel): session_id: str user_id: str environment_id: str source_kind: str source_input: str dataset_ref: str dataset_id: Optional[int] = None readiness_state: ReadinessState recommended_action: RecommendedAction status: SessionStatus current_phase: SessionPhase created_at: datetime updated_at: datetime last_activity_at: datetime class Config: from_attributes = True # [/DEF:SessionSummary:Class] # [DEF:SessionDetail:Class] class SessionDetail(SessionSummary): collaborators: List[SessionCollaboratorDto] = [] profile: Optional[DatasetProfileDto] = None findings: List[ValidationFindingDto] = [] semantic_sources: List[SemanticSourceDto] = [] semantic_fields: List[SemanticFieldEntryDto] = [] imported_filters: List[ImportedFilterDto] = [] template_variables: List[TemplateVariableDto] = [] execution_mappings: List[ExecutionMappingDto] = [] clarification_sessions: List[ClarificationSessionDto] = [] previews: List[CompiledPreviewDto] = [] run_contexts: List[DatasetRunContextDto] = [] class Config: from_attributes = True # [/DEF:SessionDetail:Class] # [/DEF:DatasetReviewSchemas:Module]