from src.overhaul_scope.schema import ScopeRead from datetime import datetime from typing import Dict, List, Optional, Union from uuid import UUID from pydantic import Field from src.models import DefultBase from src.standard_scope.schema import MasterEquipmentBase class CalculationTimeConstrainsBase(DefultBase): pass class ReferenceLinkBase(DefultBase): reference_id: str = Field(..., description='Reference ID') overhaul_reference_type: str = Field(..., description='Overhaul reference type') class CalculationTimeConstrainsParametersRetrive(CalculationTimeConstrainsBase): costPerFailure: Union[dict, float] = Field(..., description='Cost per failure') availableScopes: List[str] = Field(..., description='Available scopes') recommendedScope: str = Field(..., description='Recommended scope') class CalculationTimeConstrainsParametersRead(CalculationTimeConstrainsBase): costPerFailure: Union[dict, float] = Field(..., description='Cost per failure') overhaulCost: Optional[float] = Field(None, description='Overhaul cost') reference: Optional[List[ReferenceLinkBase]] = Field(None, description='Reference') class CalculationTimeConstrainsParametersCreate(CalculationTimeConstrainsBase): overhaulCost: Optional[float] = Field(0, description='Overhaul cost') ohSessionId: Optional[UUID] = Field(None, description='Scope OH') costPerFailure: Optional[float] = Field(0, description='Cost per failure') class CalculationResultsRead(CalculationTimeConstrainsBase): overhaul_cost: float corrective_cost: float procurement_cost: float num_failures: float day: int month: int total_cost: float procurement_details: Dict sparepart_summary: dict class OptimumResult(CalculationTimeConstrainsBase): overhaul_cost: float corrective_cost: float num_failures: int days: int class EquipmentResult(CalculationTimeConstrainsBase): id: UUID corrective_costs: List[float] overhaul_costs: List[float] procurement_costs: List[float] daily_failures: List[float] location_tag: str material_cost: float service_cost: float optimum_day: int is_included: bool master_equipment: Optional[MasterEquipmentBase] = Field(None) class FleetStatistics(CalculationTimeConstrainsBase): total_equipment: int included_equipment: int excluded_equipment: int equipment_with_sparepart_constraints: int total_procurement_items: int critical_procurement_items: int class OptimalAnalysis(CalculationTimeConstrainsBase): optimal_month: int planned_month: Optional[int] timing_recommendation: str optimal_total_cost: float optimal_breakdown: Dict cost_trend: str months_from_planned: Optional[int] cost_savings_vs_planned: Optional[float] sparepart_impact: Dict class AnalysisMetadata(CalculationTimeConstrainsBase): max_interval_months: int last_overhaul_date: Optional[str] next_planned_overhaul: str calculation_type: str total_equipment_analyzed: int included_in_optimization: int class CalculationTimeConstrainsReadNoResult(CalculationTimeConstrainsBase): id: UUID created_at: datetime optimum_oh_day: Optional[int] max_interval: Optional[int] optimum_analysis: Optional[dict] session: ScopeRead class CalculationTimeConstrainsRead(CalculationTimeConstrainsBase): id: UUID reference: UUID scope: str results: List[CalculationResultsRead] optimum_oh: int optimum_oh_month: int equipment_results: List[EquipmentResult] fleet_statistics: dict optimal_analysis: dict analysis_metadata: dict class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase): intervalDays: int class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase): simulation: CalculationResultsRead class CalculationSelectedEquipmentUpdate(CalculationTimeConstrainsBase): is_included: bool location_tag: str name: str class CreateCalculationQuery(DefultBase): scope_calculation_id: Optional[str] = Field(None) with_results: Optional[int] = Field(0) simulation_id: Optional[UUID] = Field(None)