From 7bd1e55a4695d701092c06c5a00e80a9c1b3315e Mon Sep 17 00:00:00 2001 From: MrWaradana Date: Wed, 27 Aug 2025 15:30:03 +0700 Subject: [PATCH] refactor: add numeric value validation --- .gitignore | 6 +- .python-version | 1 + src/equipment/schema.py | 72 +++++------ src/masterdata/schema.py | 8 +- src/plant_masterdata/schema.py | 114 ++++++++--------- src/plant_transaction_data/schema.py | 182 +++++++++++++-------------- src/yeardata/schema.py | 8 +- 7 files changed, 201 insertions(+), 190 deletions(-) create mode 100644 .python-version diff --git a/.gitignore b/.gitignore index 49334db..90dad27 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,8 @@ env/ .env -__pycache__/* \ No newline at end of file +__pycache__/* + +venv/ +.venv +venv \ No newline at end of file diff --git a/.python-version b/.python-version new file mode 100644 index 0000000..2c07333 --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.11 diff --git a/src/equipment/schema.py b/src/equipment/schema.py index 237f7ee..5a312f9 100644 --- a/src/equipment/schema.py +++ b/src/equipment/schema.py @@ -5,11 +5,12 @@ 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) + 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) @@ -33,39 +34,39 @@ class MasterBase(DefaultBase): 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) + 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) + 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_labor_time: Optional[float] = Field(None, nullable=True) raw_predictive_labor_human: Optional[float] = Field(None, nullable=True) - raw_oh_material_cost: 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) + 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) - raw_operational_cost: Optional[float] = Field(None, nullable=True) - raw_maintenance_cost: Optional[float] = Field(None, nullable=True) - rc_cm_material_cost: Optional[float] = Field(None, nullable=True) - rc_cm_labor_cost: Optional[float] = Field(None, nullable=True) - rc_pm_material_cost: Optional[float] = Field(None, nullable=True) - rc_pm_labor_cost: Optional[float] = Field(None, nullable=True) - rc_predictive_labor_cost: Optional[float] = Field(None, nullable=True) - rc_oh_material_cost: Optional[float] = Field(None, nullable=True) - rc_oh_labor_cost: Optional[float] = Field(None, nullable=True) - rc_project_material_cost: Optional[float] = Field(None, nullable=True) - rc_lost_cost: Optional[float] = Field(None, nullable=True) - rc_operation_cost: Optional[float] = Field(None, nullable=True) - rc_maintenance_cost: Optional[float] = Field(None, nullable=True) - rc_total_cost: Optional[float] = Field(None, nullable=True) - eac_npv: Optional[float] = Field(None, nullable=True) - eac_annual_mnt_cost: Optional[float] = Field(None, nullable=True) - eac_annual_acq_cost: Optional[float] = Field(None, nullable=True) - eac_eac: 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) + 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_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) class EquipmentCreate(EquipmentBase): @@ -80,7 +81,7 @@ class EquipmentRead(DefaultBase): equipment_master_record: EquipmentMasterBase equipment_data: EquipmentBase chart_data: List[MasterBase] - min_eac_value: Optional[float] = Field(None, nullable=True) + min_eac_value: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) min_seq: Optional[float] = Field(None, nullable=True) last_actual_year: Optional[int] = Field(None, nullable=True) @@ -91,13 +92,13 @@ class EquipmentTop10EconomicLife(EquipmentBase): 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) - minimum_npv: Optional[float] = Field(None, nullable=True) - minimum_pmt: Optional[float] = Field(None, nullable=True) - minimum_pmt_aq_cost: Optional[float] = 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) # min_eac_info: Optional[str] = Field(None, nullable=True) - harga_saat_ini: Optional[float] = Field(None, nullable=True) + harga_saat_ini: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) economic_life: Optional[int] = Field(None, nullable=True) @@ -107,14 +108,13 @@ class EquipmentDataMaster(EquipmentBase): 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) - minimum_npv: Optional[float] = Field(None, nullable=True) - minimum_pmt: Optional[float] = Field(None, nullable=True) - minimum_pmt_aq_cost: Optional[float] = 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) # min_eac_info: Optional[str] = Field(None, nullable=True) - harga_saat_ini: Optional[float] = Field(None, nullable=True) - + harga_saat_ini: Optional[float] = Field(None, nullable=True, le=MAX_PRICE) # class EquipmentTop10EconomicLife(DefaultBase): # equipment: EquipmentDataMaster diff --git a/src/masterdata/schema.py b/src/masterdata/schema.py index 33b1dbb..ac322ef 100644 --- a/src/masterdata/schema.py +++ b/src/masterdata/schema.py @@ -14,7 +14,9 @@ class MasterdataBase(DefaultBase): name: Optional[str] = Field(None, nullable=True) description: Optional[str] = Field(None, nullable=True) unit_of_measurement: Optional[str] = Field(None, nullable=True) - value_num: Optional[float] = Field(None, nullable=True) + value_num: Optional[float] = Field( + None, nullable=True, ge=0, le=1_000_000_000_000_000 # 1 quadrillion + ) value_str: Optional[str] = Field(None, nullable=True) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) @@ -26,7 +28,9 @@ class MasterDataCreate(MasterdataBase): name: str = Field(..., nullable=True) description: str = Field(..., nullable=True) unit_of_measurement: str = Field(..., nullable=True) - value_num: float = Field(..., nullable=True) + value_num: float = Field( + ..., nullable=True, ge=0, le=1_000_000_000_000_000 # 1 quadrillion + ) value_str: str = Field(..., nullable=True) diff --git a/src/plant_masterdata/schema.py b/src/plant_masterdata/schema.py index c164e76..363df84 100644 --- a/src/plant_masterdata/schema.py +++ b/src/plant_masterdata/schema.py @@ -7,35 +7,37 @@ from src.models import 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, nullable=True) - total_project_cost: Optional[float] = Field(None, nullable=True) - umur_teknis: Optional[float] = Field(None, nullable=True) - interest_rate: Optional[float] = Field(None, nullable=True) - loan_portion: Optional[float] = Field(None, nullable=True) - equity_portion: Optional[float] = Field(None, nullable=True) - loan: Optional[float] = Field(None, nullable=True) - loan_tenor: Optional[float] = Field(None, nullable=True) - principal_interest_payment: Optional[float] = Field(None, nullable=True) - corporate_tax_rate: Optional[float] = Field(None, nullable=True) - wacc_on_project: Optional[float] = Field(None, nullable=True) - wacc_on_equity: Optional[float] = Field(None, nullable=True) - equity: Optional[float] = Field(None, nullable=True) - daya_mampu_netto: Optional[float] = Field(None, nullable=True) - auxiliary: Optional[float] = Field(None, nullable=True) - susut_trafo: Optional[float] = Field(None, nullable=True) - sfc: Optional[float] = Field(None, nullable=True) - electricity_price_a: Optional[float] = Field(None, nullable=True) - electricity_price_b: Optional[float] = Field(None, nullable=True) - electricity_price_c: Optional[float] = Field(None, nullable=True) - electricity_price_d: Optional[float] = Field(None, nullable=True) - harga_bahan_bakar: Optional[float] = Field(None, nullable=True) - calc_on_project_irr: Optional[float] = Field(None, nullable=True) - calc_on_project_npv: Optional[float] = Field(None, nullable=True) - calc_on_equity_irr: Optional[float] = Field(None, nullable=True) - calc_on_equity_npv: Optional[float] = Field(None, nullable=True) - calc_roa_all: Optional[float] = Field(None, nullable=True) - calc_roa_current: Optional[float] = Field(None, nullable=True) + discount_rate: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + total_project_cost: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + umur_teknis: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + interest_rate: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan_portion: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + equity_portion: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan_tenor: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + principal_interest_payment: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + corporate_tax_rate: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + wacc_on_project: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + wacc_on_equity: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + equity: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + daya_mampu_netto: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + auxiliary: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + susut_trafo: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + sfc: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_a: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_b: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_c: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_d: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + harga_bahan_bakar: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_project_irr: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_project_npv: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_equity_irr: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_equity_npv: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_roa_all: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_roa_current: Optional[float] = Field(None, nullable=True, ge=0, le=MAX_NUMERIC_VALUE) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) created_by: Optional[str] = Field(None, nullable=True) @@ -43,34 +45,34 @@ class PlantMasterdataBase(DefaultBase): class PlantMasterDataCreate(PlantMasterdataBase): - discount_rate: float = Field(..., nullable=True) - total_project_cost: float = Field(..., nullable=True) - umur_teknis: float = Field(..., nullable=True) - interest_rate: float = Field(..., nullable=True) - loan_portion: float = Field(..., nullable=True) - equity_portion: float = Field(..., nullable=True) - loan: float = Field(..., nullable=True) - loan_tenor: float = Field(..., nullable=True) - principal_interest_payment: float = Field(..., nullable=True) - corporate_tax_rate: float = Field(..., nullable=True) - wacc_on_project: float = Field(..., nullable=True) - wacc_on_equity: float = Field(..., nullable=True) - equity: float = Field(..., nullable=True) - daya_mampu_netto: float = Field(..., nullable=True) - auxiliary: float = Field(..., nullable=True) - susut_trafo: float = Field(..., nullable=True) - sfc: float = Field(..., nullable=True) - electricity_price_a: float = Field(..., nullable=True) - electricity_price_b: float = Field(..., nullable=True) - electricity_price_c: float = Field(..., nullable=True) - electricity_price_d: float = Field(..., nullable=True) - harga_bahan_bakar: float = Field(..., nullable=True) - calc_on_project_irr: float = Field(..., nullable=True) - calc_on_project_npv: float = Field(..., nullable=True) - calc_on_equity_irr: float = Field(..., nullable=True) - calc_on_equity_npv: float = Field(..., nullable=True) - calc_roa_all: float = Field(..., nullable=True) - calc_roa_current: float = Field(..., nullable=True) + discount_rate: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + total_project_cost: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + umur_teknis: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + interest_rate: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan_portion: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + equity_portion: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + loan_tenor: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + principal_interest_payment: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + corporate_tax_rate: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + wacc_on_project: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + wacc_on_equity: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + equity: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + daya_mampu_netto: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + auxiliary: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + susut_trafo: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + sfc: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_a: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_b: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_c: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + electricity_price_d: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + harga_bahan_bakar: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_project_irr: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_project_npv: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_equity_irr: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_on_equity_npv: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_roa_all: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) + calc_roa_current: float = Field(..., nullable=True, ge=0, le=MAX_NUMERIC_VALUE) class PlantMasterDataUpdate(PlantMasterdataBase): diff --git a/src/plant_transaction_data/schema.py b/src/plant_transaction_data/schema.py index 480e922..5173bea 100644 --- a/src/plant_transaction_data/schema.py +++ b/src/plant_transaction_data/schema.py @@ -7,58 +7,58 @@ from src.models import DefaultBase, Pagination class PlantTransactionDataBase(DefaultBase): - tahun: Optional[int] = Field(None, nullable=True) - is_actual: Optional[int] = Field(None, nullable=True) - seq: Optional[int] = Field(None, nullable=True) - net_capacity_factor: Optional[float] = Field(None, nullable=True) - eaf: Optional[float] = Field(None, nullable=True) - production_bruto: Optional[float] = Field(None, nullable=True) - production_netto: Optional[float] = Field(None, nullable=True) - energy_sales: Optional[float] = Field(None, nullable=True) - fuel_consumption: Optional[float] = Field(None, nullable=True) - revenue_a: Optional[float] = Field(None, nullable=True) - revenue_b: Optional[float] = Field(None, nullable=True) - revenue_c: Optional[float] = Field(None, nullable=True) - revenue_d: Optional[float] = Field(None, nullable=True) - revenue_total: Optional[float] = Field(None, nullable=True) - revenue_pv: Optional[float] = Field(None, nullable=True) - revenue_annualized: Optional[float] = Field(None, nullable=True) - cost_a_replacement: Optional[float] = Field(None, nullable=True) - cost_a_pm: Optional[float] = Field(None, nullable=True) - cost_a_acquisition: Optional[float] = Field(None, nullable=True) - cost_a_pinjaman: Optional[float] = Field(None, nullable=True) - cost_a_depreciation: Optional[float] = Field(None, nullable=True) - cost_a_total: Optional[float] = Field(None, nullable=True) - cost_a_pv: Optional[float] = Field(None, nullable=True) - cost_a_annualized: Optional[float] = Field(None, nullable=True) - cost_c_fuel: Optional[float] = Field(None, nullable=True) - cost_c_pv: Optional[float] = Field(None, nullable=True) - cost_c_annualized: Optional[float] = Field(None, nullable=True) - cost_bd_om: Optional[float] = Field(None, nullable=True) - cost_bd_pm_nonmi: Optional[float] = Field(None, nullable=True) - cost_bd_bd: Optional[float] = Field(None, nullable=True) - cost_bd_total: Optional[float] = Field(None, nullable=True) - cost_bd_pv: Optional[float] = Field(None, nullable=True) - cost_bd_annualized: Optional[float] = Field(None, nullable=True) - total_expense: Optional[float] = Field(None, nullable=True) - total_cost_eac: Optional[float] = Field(None, nullable=True) - total_profit_loss: Optional[float] = Field(None, nullable=True) - total_residual_value: Optional[float] = Field(None, nullable=True) - calc_depreciation: Optional[float] = Field(None, nullable=True) - calc_interest_payment: Optional[float] = Field(None, nullable=True) - calc_principal_payment: Optional[float] = Field(None, nullable=True) - calc_dept_amount: Optional[float] = Field(None, nullable=True) - calc2_ebitda: Optional[float] = Field(None, nullable=True) - calc2_earning_before_tax: Optional[float] = Field(None, nullable=True) - calc2_tax: Optional[float] = Field(None, nullable=True) - calc2_earning_after_tax: Optional[float] = Field(None, nullable=True) - calc2_nopat: Optional[float] = Field(None, nullable=True) - calc3_interest_after_tax: Optional[float] = Field(None, nullable=True) - calc3_free_cash_flow_on_project: Optional[float] = Field(None, nullable=True) - calc3_discounted_fcf_on_project: Optional[float] = Field(None, nullable=True) - calc4_principal_repayment: Optional[float] = Field(None, nullable=True) - calc4_free_cash_flow_on_equity: Optional[float] = Field(None, nullable=True) - calc4_discounted_fcf_on_equity: Optional[float] = Field(None, nullable=True) + tahun: Optional[int] = Field(None, nullable=True, ge=1900, le=9999) + is_actual: Optional[int] = Field(None, nullable=True, ge=0, le=1) + seq: Optional[int] = Field(None, nullable=True, ge=0, le=9999) + net_capacity_factor: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + eaf: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + production_bruto: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + production_netto: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + energy_sales: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fuel_consumption: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_a: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_b: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_c: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_d: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_total: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_pv: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + revenue_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_replacement: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_pm: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_acquisition: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_pinjaman: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_depreciation: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_total: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_pv: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_a_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_c_fuel: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_c_pv: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_c_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_om: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_pm_nonmi: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_bd: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_total: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_pv: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + cost_bd_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + total_expense: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + total_cost_eac: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + total_profit_loss: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + total_residual_value: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc_depreciation: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc_interest_payment: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc_principal_payment: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc_dept_amount: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc2_ebitda: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc2_earning_before_tax: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc2_tax: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc2_earning_after_tax: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc2_nopat: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc3_interest_after_tax: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc3_free_cash_flow_on_project: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc3_discounted_fcf_on_project: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc4_principal_repayment: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc4_free_cash_flow_on_equity: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + calc4_discounted_fcf_on_equity: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) created_by: Optional[str] = Field(None, nullable=True) @@ -66,51 +66,51 @@ class PlantTransactionDataBase(DefaultBase): class PlantTransactionChart(DefaultBase): - tahun: Optional[int] = Field(None, nullable=True) - is_actual: Optional[int] = Field(None, nullable=True) - seq: Optional[int] = Field(None, nullable=True) - chart_total_revenue: Optional[float] = Field(None, nullable=True) - chart_revenue_a: Optional[float] = Field(None, nullable=True) - chart_revenue_b: Optional[float] = Field(None, nullable=True) - chart_revenue_c: Optional[float] = Field(None, nullable=True) - chart_revenue_d: Optional[float] = Field(None, nullable=True) - chart_revenue_annualized: Optional[float] = Field(None, nullable=True) - chart_fuel_cost_component_c: Optional[float] = Field(None, nullable=True) - chart_fuel_cost: Optional[float] = Field(None, nullable=True) - chart_fuel_cost_annualized: Optional[float] = Field(None, nullable=True) - chart_oem_component_bd: Optional[float] = Field(None, nullable=True) - chart_oem_bd_cost: Optional[float] = Field(None, nullable=True) - chart_oem_periodic_maintenance_cost: Optional[float] = Field(None, nullable=True) - chart_oem_annualized: Optional[float] = Field(None, nullable=True) - chart_capex_component_a: Optional[float] = Field(None, nullable=True) - chart_capex_biaya_investasi_tambahan: Optional[float] = Field(None, nullable=True) - chart_capex_acquisition_cost: Optional[float] = Field(None, nullable=True) - chart_capex_annualized: Optional[float] = Field(None, nullable=True) - fs_chart_total_revenue: Optional[float] = Field(None, nullable=True) - fs_chart_revenue_a: Optional[float] = Field(None, nullable=True) - fs_chart_revenue_b: Optional[float] = Field(None, nullable=True) - fs_chart_revenue_c: Optional[float] = Field(None, nullable=True) - fs_chart_revenue_d: Optional[float] = Field(None, nullable=True) - fs_chart_revenue_annualized: Optional[float] = Field(None, nullable=True) - fs_chart_fuel_cost_component_c: Optional[float] = Field(None, nullable=True) - fs_chart_fuel_cost: Optional[float] = Field(None, nullable=True) - fs_chart_fuel_cost_annualized: Optional[float] = Field(None, nullable=True) - fs_chart_oem_component_bd: Optional[float] = Field(None, nullable=True) - fs_chart_oem_bd_cost: Optional[float] = Field(None, nullable=True) - fs_chart_oem_periodic_maintenance_cost: Optional[float] = Field(None, nullable=True) - fs_chart_oem_annualized: Optional[float] = Field(None, nullable=True) - fs_chart_capex_component_a: Optional[float] = Field(None, nullable=True) + tahun: Optional[int] = Field(None, nullable=True, ge=0, le=9999) + is_actual: Optional[int] = Field(None, nullable=True, ge=0, le=1) + seq: Optional[int] = Field(None, nullable=True, ge=0, le=9999) + chart_total_revenue: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_revenue_a: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_revenue_b: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_revenue_c: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_revenue_d: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_revenue_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_fuel_cost_component_c: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_fuel_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_fuel_cost_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_oem_component_bd: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_oem_bd_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_oem_periodic_maintenance_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_oem_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_capex_component_a: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_capex_biaya_investasi_tambahan: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_capex_acquisition_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + chart_capex_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_total_revenue: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_revenue_a: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_revenue_b: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_revenue_c: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_revenue_d: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_revenue_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_fuel_cost_component_c: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_fuel_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_fuel_cost_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_oem_component_bd: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_oem_bd_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_oem_periodic_maintenance_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_oem_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_capex_component_a: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) fs_chart_capex_biaya_investasi_tambahan: Optional[float] = Field( - None, nullable=True + None, nullable=True, ge=0, le=1_000_000_000_000_000 ) - fs_chart_capex_acquisition_cost: Optional[float] = Field(None, nullable=True) - fs_chart_capex_annualized: Optional[float] = Field(None, nullable=True) + fs_chart_capex_acquisition_cost: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) + fs_chart_capex_annualized: Optional[float] = Field(None, nullable=True, ge=0, le=1_000_000_000_000_000) class PlantChartData(DefaultBase): items: List[PlantTransactionChart] - bep_year: Optional[int] = Field(int, nullable=True) - bep_total_lcc: Optional[float] = Field(float, nullable=True) + bep_year: Optional[int] = Field(int, nullable=True, ge=0, le=9999) + bep_total_lcc: Optional[float] = Field(float, nullable=True, ge=0, le=1_000_000_000_000_000) class PlantTransactionDataCreate(PlantTransactionDataBase): diff --git a/src/yeardata/schema.py b/src/yeardata/schema.py index 6e34923..3cb47b2 100644 --- a/src/yeardata/schema.py +++ b/src/yeardata/schema.py @@ -7,10 +7,10 @@ from src.models import DefaultBase, Pagination class YeardataBase(DefaultBase): - year: Optional[int] = Field(None, nullable=True) - rp_per_kwh: Optional[float] = Field(None, nullable=True) - total_lost: Optional[float] = Field(None, nullable=True) - man_hour: Optional[float] = Field(None, nullable=True) + year: Optional[int] = Field(None, nullable=True, ge=1900) + rp_per_kwh: Optional[float] = Field(None, nullable=True, gt=0, le=1_000_000_000_000_000) + total_lost: Optional[float] = Field(None, nullable=True, gt=0, le=1_000_000_000_000_000) + man_hour: Optional[float] = Field(None, nullable=True, gt=0, le=1_000_000_000_000_000) created_at: Optional[datetime] = Field(None, nullable=True) updated_at: Optional[datetime] = Field(None, nullable=True) created_by: Optional[str] = Field(None, nullable=True)