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): day: int corrective_cost: float overhaul_cost: float procurement_cost: float procurement_details: Optional[Dict[str, Any]] num_failures: int 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 CalculationTimeConstrainsRead(CalculationTimeConstrainsBase): id: UUID reference: UUID scope: str results: List[CalculationResultsRead] equipment_results: List[EquipmentResult] optimum_oh: Any class CalculationTimeConstrainsCreate(CalculationTimeConstrainsBase): intervalDays: int class CalculationTimeConstrainsSimulationRead(CalculationTimeConstrainsBase): simulation: CalculationResultsRead class CalculationSelectedEquipmentUpdate(CalculationTimeConstrainsBase): is_included: bool location_tag: str