from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import Field from src.models import DefaultBase, Pagination MAX_PRICE = 1_000_000_000_000_000 # thousands of trillion class EquipmentBase(DefaultBase): assetnum: Optional[str] = Field(None, nullable=True) acquisition_year: Optional[int] = Field(None, nullable=True) acquisition_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) capital_cost_record_time: Optional[int] = Field(None, nullable=True) design_life: Optional[int] = Field(None, nullable=True) forecasting_start_year: Optional[int] = Field(None, nullable=True) forecasting_target_year: Optional[int] = Field(None, nullable=True) manhours_rate: Optional[float] = Field(None, nullable=True) harga_saat_ini: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_eac_seq: Optional[int] = Field(None, nullable=True) minimum_eac_year: Optional[int] = Field(None, nullable=True) minimum_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_npv: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt_aq_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_is_actual: Optional[int] = Field(None, nullable=True) efdh_equivalent_forced_derated_hours: Optional[float] = Field(None, nullable=True) foh_forced_outage_hours: Optional[float] = Field(None, nullable=True) category_no: Optional[str] = Field(None, nullable=True) proportion: Optional[float] = Field(None, nullable=True) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) created_by: Optional[str] = Field(None, nullable=True) updated_by: Optional[str] = Field(None, nullable=True) class EquipmentMasterBase(DefaultBase): location_tag: Optional[str] = Field(None, nullable=True) assetnum: Optional[str] = Field(None, nullable=True) name: Optional[str] = Field(None, nullable=True) class MasterBase(DefaultBase): assetnum: Optional[str] = Field(None, nullable=True) tahun: Optional[int] = Field(None, nullable=True) seq: Optional[int] = Field(None, nullable=True) is_actual: Optional[float] = Field(None, nullable=True) raw_cm_interval: Optional[float] = Field(None, nullable=True) raw_cm_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_cm_labor_time: Optional[float] = Field(None, nullable=True) raw_cm_labor_human: Optional[float] = Field(None, nullable=True) raw_pm_interval: Optional[float] = Field(None, nullable=True) raw_pm_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_pm_labor_time: Optional[float] = Field(None, nullable=True) raw_pm_labor_human: Optional[float] = Field(None, nullable=True) raw_predictive_interval: Optional[float] = Field(None, nullable=True) raw_predictive_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_predictive_labor_time: Optional[float] = Field(None, nullable=True) raw_predictive_labor_human: Optional[float] = Field(None, nullable=True) raw_oh_interval: Optional[float] = Field(None, nullable=True) raw_oh_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_oh_labor_time: Optional[float] = Field(None, nullable=True) raw_oh_labor_human: Optional[float] = Field(None, nullable=True) raw_project_task_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_loss_output_MW: Optional[float] = Field(None, nullable=True) raw_loss_output_price: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_operational_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) raw_maintenance_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_cm_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_cm_labor_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_pm_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_pm_labor_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_predictive_labor_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_oh_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_oh_labor_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_project_material_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_lost_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_operation_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) rc_maintenance_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) asset_criticality: Optional[float] = Field(None, nullable=True) rc_total_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) eac_npv: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) eac_annual_mnt_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) eac_annual_acq_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) eac_disposal_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) eac_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) efdh_equivalent_forced_derated_hours: Optional[float] = Field(None, nullable=True) foh_forced_outage_hours: Optional[float] = Field(None, nullable=True) category_no: Optional[str] = Field(None, nullable=True) proportion: Optional[float] = Field(None, nullable=True) class EquipmentCreate(EquipmentBase): pass class EquipmentUpdate(EquipmentBase): pass class EquipmentRead(DefaultBase): equipment_master_record: EquipmentMasterBase equipment_data: EquipmentBase chart_data: List[MasterBase] min_eac_value: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) min_seq: Optional[float] = Field(None, nullable=True) min_eac_year: Optional[float] = Field(None, nullable=True) last_actual_year: Optional[int] = Field(None, nullable=True) maximo_data: Optional[List[dict]] = Field(None, nullable=True) joined_maximo: Optional[List[dict]] = Field(None, nullable=True) min_eac_disposal_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) class EquipmentTop10(EquipmentBase): id: UUID equipment_master: EquipmentMasterBase forecasting_target_year: Optional[int] = Field(None, nullable=True) minimum_eac_seq: Optional[int] = Field(None, nullable=True) minimum_eac_year: Optional[int] = Field(None, nullable=True) minimum_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_npv: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt_aq_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_is_actual: Optional[int] = Field(None, nullable=True) harga_saat_ini: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) remaining_life: Optional[int] = Field(None, nullable=True) class EquipmentTop10Pagination(Pagination): items: List[EquipmentTop10] = [] class EquipmentDataMaster(EquipmentBase): id: UUID equipment_master: Optional[EquipmentMasterBase] = Field(None, nullable=True) forecasting_target_year: Optional[int] = Field(None, nullable=True) minimum_eac_seq: Optional[int] = Field(None, nullable=True) minimum_eac_year: Optional[int] = Field(None, nullable=True) minimum_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_npv: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_pmt_aq_cost: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) minimum_is_actual: Optional[int] = Field(None, nullable=True) harga_saat_ini: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) # class EquipmentTop10EconomicLife(DefaultBase): # equipment: EquipmentDataMaster # economic_life: int class EquipmentPagination(Pagination): items: List[EquipmentDataMaster] = [] class CountRemainingLifeResponse(DefaultBase): safe: int warning: int critical: int