from dataclasses import dataclass from datetime import datetime from typing import Any, 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): # type: ignore costPerFailure: Union[dict, float] = Field(..., description="Cost per failure") availableScopes: List[str] = Field(..., description="Available scopes") recommendedScope: str = Field(..., description="Recommended scope") # historicalData: Dict[str, Any] = Field(..., description="Historical data") 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 CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase): # overhaulCost: float = Field(..., description="Overhaul cost") # scopeOH: str = Field(..., description="Scope OH") # costPerFailure: float = Field(..., description="Cost per failure") # metadata: Dict[str, Any] = Field(..., description="Metadata") 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 # Added optimum result for each equipment 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 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