from datetime import datetime from typing import List, Optional from uuid import UUID from pydantic import Field from src.models import CommonParams, DefaultBase, Pagination from src.auth.service import CurrentUser MAX_NUMERIC_VALUE = 1_000_000_000_000_000 # thousands of trillion class PlantMasterdataBase(DefaultBase): discount_rate: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) total_project_cost: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) umur_teknis: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) interest_rate: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) loan_portion: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) equity_portion: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) loan: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) loan_tenor: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) principal_interest_payment: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) corporate_tax_rate: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) wacc_on_project: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) wacc_on_equity: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) equity: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) daya_mampu_netto: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) auxiliary: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) susut_trafo: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) sfc: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) electricity_price_a: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) electricity_price_b: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) electricity_price_c: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) electricity_price_d: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) harga_bahan_bakar: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_on_project_irr: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_on_project_npv: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_on_equity_irr: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_on_equity_npv: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_roa_all: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) calc_roa_current: Optional[float] = Field(None, ge=0, le=MAX_NUMERIC_VALUE) 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 PlantMasterDataCreate(PlantMasterdataBase): discount_rate: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) total_project_cost: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) umur_teknis: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) interest_rate: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) loan_portion: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) equity_portion: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) loan: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) loan_tenor: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) principal_interest_payment: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) corporate_tax_rate: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) wacc_on_project: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) wacc_on_equity: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) equity: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) daya_mampu_netto: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) auxiliary: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) susut_trafo: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) sfc: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) electricity_price_a: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) electricity_price_b: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) electricity_price_c: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) electricity_price_d: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) harga_bahan_bakar: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_on_project_irr: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_on_project_npv: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_on_equity_irr: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_on_equity_npv: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_roa_all: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) calc_roa_current: float = Field(..., ge=0, le=MAX_NUMERIC_VALUE) class PlantMasterDataUpdate(PlantMasterdataBase): pass class PlantMasterDataRead(PlantMasterdataBase): id: UUID class PlantMasterDataPagination(Pagination): items: List[PlantMasterDataRead] = [] class ListQueryParams(CommonParams): search: Optional[str] = Field( default=None, description="Search keyword", )