from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import Field, field_validator from src.models import DefaultBase, Pagination class YeardataBase(DefaultBase): year: Optional[int] = Field(None, ge=1900) rp_per_kwh: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) total_lost: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) man_hour: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_ens_energy_not_served: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_bpp_system: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_bpp_pembangkit: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_dmn_daya_mampu_netto: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_marginal_cost: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_efdh_equivalent_forced_derated_hours: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_foh_forced_outage_hours: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) asset_crit_extra_fuel_cost: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) cf: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) eaf: Optional[float] = Field(None, ge=0, le=1_000_000_000_000_000) rbd_simulation_id: Optional[str] = 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) @field_validator( "asset_crit_ens_energy_not_served", "asset_crit_bpp_system", "asset_crit_bpp_pembangkit", "asset_crit_dmn_daya_mampu_netto", "asset_crit_marginal_cost", "asset_crit_efdh_equivalent_forced_derated_hours", "asset_crit_foh_forced_outage_hours", "asset_crit_extra_fuel_cost", "cf", "eaf", mode="before", ) @classmethod def empty_string_to_none(cls, v): if v == "": return None return v class YeardataCreate(YeardataBase): pass class YeardataUpdate(YeardataBase): pass class YeardataRead(YeardataBase): id: UUID class YeardataPagination(Pagination): items: List[YeardataRead] = []