You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

177 lines
7.7 KiB
Python

from datetime import datetime
from typing import List, Optional
from uuid import UUID
from pydantic import Field
from src.models import CommonParams, DefaultBase, Pagination
MAX_PRICE = 1_000_000_000_000_000 # thousands of trillion
class EquipmentBase(DefaultBase):
assetnum: Optional[str] = Field(None)
acquisition_year: Optional[int] = Field(None)
acquisition_cost: Optional[float] = Field(None, le=MAX_PRICE)
capital_cost_record_time: Optional[int] = Field(None)
design_life: Optional[int] = Field(None)
forecasting_start_year: Optional[int] = Field(None)
forecasting_target_year: Optional[int] = Field(None)
manhours_rate: Optional[float] = Field(None)
harga_saat_ini: Optional[float] = Field(None, le=MAX_PRICE)
minimum_eac_seq: Optional[int] = Field(None)
minimum_eac_year: Optional[int] = Field(None)
minimum_eac: Optional[float] = Field(None, le=MAX_PRICE)
minimum_npv: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt_aq_cost: Optional[float] = Field(None, le=MAX_PRICE)
minimum_is_actual: Optional[int] = Field(None)
efdh_equivalent_forced_derated_hours: Optional[float] = Field(None)
foh_forced_outage_hours: Optional[float] = Field(None)
category_no: Optional[str] = Field(None)
proportion: Optional[float] = Field(None)
created_at: Optional[datetime] = Field(None)
updated_at: Optional[datetime] = Field(None)
created_by: Optional[str] = Field(None)
updated_by: Optional[str] = Field(None)
class EquipmentMasterBase(DefaultBase):
location_tag: Optional[str] = Field(None)
assetnum: Optional[str] = Field(None)
name: Optional[str] = Field(None)
class MasterBase(DefaultBase):
assetnum: Optional[str] = Field(None)
tahun: Optional[int] = Field(None)
seq: Optional[int] = Field(None)
is_actual: Optional[float] = Field(None)
raw_cm_interval: Optional[float] = Field(None)
raw_cm_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_cm_labor_time: Optional[float] = Field(None)
raw_cm_labor_human: Optional[float] = Field(None)
raw_pm_interval: Optional[float] = Field(None)
raw_pm_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_pm_labor_time: Optional[float] = Field(None)
raw_pm_labor_human: Optional[float] = Field(None)
raw_predictive_interval: Optional[float] = Field(None)
raw_predictive_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_predictive_labor_time: Optional[float] = Field(None)
raw_predictive_labor_human: Optional[float] = Field(None)
raw_oh_interval: Optional[float] = Field(None)
raw_oh_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_oh_labor_time: Optional[float] = Field(None)
raw_oh_labor_human: Optional[float] = Field(None)
raw_project_task_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_loss_output_MW: Optional[float] = Field(None)
raw_loss_output_price: Optional[float] = Field(None, le=MAX_PRICE)
raw_operational_cost: Optional[float] = Field(None, le=MAX_PRICE)
raw_maintenance_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_cm_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_cm_labor_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_pm_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_pm_labor_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_predictive_labor_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_oh_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_oh_labor_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_project_material_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_lost_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_operation_cost: Optional[float] = Field(None, le=MAX_PRICE)
rc_maintenance_cost: Optional[float] = Field(None, le=MAX_PRICE)
asset_criticality: Optional[float] = Field(None)
rc_total_cost: Optional[float] = Field(None, le=MAX_PRICE)
eac_npv: Optional[float] = Field(None, le=MAX_PRICE)
eac_annual_mnt_cost: Optional[float] = Field(None, le=MAX_PRICE)
eac_annual_acq_cost: Optional[float] = Field(None, le=MAX_PRICE)
eac_disposal_cost: Optional[float] = Field(None, le=MAX_PRICE)
eac_eac: Optional[float] = Field(None, le=MAX_PRICE)
efdh_equivalent_forced_derated_hours: Optional[float] = Field(None)
foh_forced_outage_hours: Optional[float] = Field(None)
category_no: Optional[str] = Field(None)
proportion: Optional[float] = Field(None)
class HistoricalBase(MasterBase):
acquisition_year_ref: Optional[str] = Field(None)
class EquipmentCreate(EquipmentBase):
pass
class EquipmentUpdate(EquipmentBase):
pass
class ReplacementBase(DefaultBase):
"""Schema for replacement history (from lcc_ms_equipment_historical_data)."""
acquisition_year: Optional[int] = Field(None, ge=1900, le=9999)
acquisition_cost: Optional[float] = Field(None, le=MAX_PRICE)
acquisition_year_ref: Optional[str] = Field(None)
created_at: Optional[datetime] = Field(None)
class EquipmentRead(DefaultBase):
equipment_master_record: EquipmentMasterBase
equipment_data: EquipmentBase
chart_data: List[MasterBase]
min_eac_value: Optional[float] = Field(None, le=MAX_PRICE)
min_seq: Optional[float] = Field(None)
min_eac_year: Optional[float] = Field(None)
last_actual_year: Optional[int] = Field(None, ge=1900, le=9999)
maximo_data: Optional[List[dict]] = Field(None)
joined_maximo: Optional[List[dict]] = Field(None)
min_eac_disposal_cost: Optional[float] = Field(None, le=MAX_PRICE)
historical_data: Optional[List[HistoricalBase]] = Field(None)
replacement_data: Optional[List[ReplacementBase]] = Field(None)
class EquipmentTop10(EquipmentBase):
id: UUID
equipment_master: EquipmentMasterBase
forecasting_target_year: Optional[int] = Field(None, ge=1900, le=9999)
minimum_eac_seq: Optional[int] = Field(None)
minimum_eac_year: Optional[int] = Field(None)
minimum_eac: Optional[float] = Field(None, le=MAX_PRICE)
minimum_npv: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt_aq_cost: Optional[float] = Field(None, le=MAX_PRICE)
minimum_is_actual: Optional[int] = Field(None)
harga_saat_ini: Optional[float] = Field(None, le=MAX_PRICE)
remaining_life: Optional[int] = Field(None)
class EquipmentTop10Pagination(Pagination):
items: List[EquipmentTop10] = []
class EquipmentDataMaster(EquipmentBase):
id: UUID
equipment_master: Optional[EquipmentMasterBase] = Field(None)
forecasting_target_year: Optional[int] = Field(None, ge=1900, le=9999)
minimum_eac_seq: Optional[int] = Field(None, ge=0)
minimum_eac_year: Optional[int] = Field(None, ge=1900, le=9999)
minimum_eac: Optional[float] = Field(None, le=MAX_PRICE)
minimum_npv: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt: Optional[float] = Field(None, le=MAX_PRICE)
minimum_pmt_aq_cost: Optional[float] = Field(None, le=MAX_PRICE)
minimum_is_actual: Optional[int] = Field(None)
harga_saat_ini: Optional[float] = Field(None, 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
class ListQueryParams(CommonParams):
items_per_page: Optional[int] = Field(
default=5,
ge=1,
le=1000,
description="Number of items per page",
alias="itemsPerPage"
)
search: Optional[str] = Field(
default=None,
description="Search keyword"
)