diff --git a/src/equipment/model.py b/src/equipment/model.py index dbd7962..a0033f0 100644 --- a/src/equipment/model.py +++ b/src/equipment/model.py @@ -92,4 +92,5 @@ class EquipmentTransactionRecords(Base, DefaultMixin, IdentityMixin): eac_npv = Column(Float, nullable=False) eac_annual_mnt_cost = Column(Float, nullable=False) eac_annual_acq_cost = Column(Float, nullable=False) + eac_disposal_cost = Column(Float, nullable=False) eac_eac = Column(Float, nullable=False) diff --git a/src/equipment/schema.py b/src/equipment/schema.py index 58c709a..5df60c9 100644 --- a/src/equipment/schema.py +++ b/src/equipment/schema.py @@ -70,6 +70,7 @@ class MasterBase(DefaultBase): 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) diff --git a/src/modules/equipment/Eac.py b/src/modules/equipment/Eac.py index aa5e842..fe1248f 100644 --- a/src/modules/equipment/Eac.py +++ b/src/modules/equipment/Eac.py @@ -68,16 +68,17 @@ class Eac: cumulative_values.append(row["rc_total_cost"]) # Menghitung NPV menggunakan rumus diskonto # Rumus NPV: NPV = Σ [Ct / (1 + r)^t] - # dimana Ct = cash flow pada periode t, r = inflation_rate, t = periode + # dimana Ct = cash flow pada periode t, r = disc_rate, t = periode final_value = sum( - value / ((1 + inflation_rate) ** (i + 1)) + value / ((1 + disc_rate) ** (i + 1)) for i, value in enumerate(cumulative_values) ) # Menghitung PMT biaya maintenance # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n – 1] - # dimana PV = final_value, r = inflation_rate, n = row["seq"] - pmt_mnt_cost = -npf.pmt(inflation_rate, row["seq"], final_value) + # dimana PV = final_value, r = disc_rate, n = row["seq"] + pmt_mnt_cost = -npf.pmt(disc_rate, row["seq"], final_value) + eac_disposal_cost = 0.07 * pmt_mnt_cost # Menghitung PMT biaya akuisisi # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n – 1] # dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"] @@ -102,7 +103,7 @@ class Eac: # Update lcc_equipment_tr_data update_query = """ UPDATE lcc_equipment_tr_data - SET eac_npv = %s, eac_annual_mnt_cost = %s, eac_annual_acq_cost = %s, eac_eac = %s + SET eac_npv = %s, eac_annual_mnt_cost = %s, eac_annual_acq_cost = %s, eac_disposal_cost = %s, eac_eac = %s , updated_by = 'Sys', updated_at = NOW() WHERE assetnum = %s AND tahun = %s; """ @@ -112,6 +113,7 @@ class Eac: float(final_value), float(pmt_mnt_cost), float(pmt_aq_cost), + float(eac_disposal_cost), float(eac), equipment_id, row["tahun"], @@ -158,7 +160,7 @@ class Eac: # Total NPV pada titik proyeksi ini = NPV aktual terakhir + biaya proyeksi yang didiskontokan final_value = float(last_npv) + float(discounted_proj) - + # Gunakan seq penuh (jumlah periode dari akuisisi) untuk menghitung pembayaran tahunan pemeliharaan. # Menggunakan hanya selisih dari seq aktual terakhir # (sisa_periode) mengamortisasi seluruh nilai sekarang selama @@ -170,11 +172,12 @@ class Eac: # Menghitung PMT # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n – 1] - # dimana PV = final_value, r = inflation_rate, n = row["seq"] + # dimana PV = final_value, r = disc_rate, n = row["seq"] # periods adalah jumlah periode # final_value adalah PV pada titik proyeksi periods - pmt_mnt_cost = -float(npf.pmt(inflation_rate, periods, final_value)) + pmt_mnt_cost = -float(npf.pmt(disc_rate, periods, final_value)) + eac_disposal_cost_proyeksi = 0.07 * pmt_mnt_cost # menghitung PMT biaya akuisisi # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n – 1] # dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"] @@ -200,7 +203,7 @@ class Eac: # Update lcc_equipment_tr_data update_query = """ UPDATE lcc_equipment_tr_data - SET eac_npv = %s, eac_annual_mnt_cost = %s, eac_annual_acq_cost = %s, eac_eac = %s + SET eac_npv = %s, eac_annual_mnt_cost = %s, eac_annual_acq_cost = %s, eac_disposal_cost = %s,eac_eac = %s , updated_by = 'Sys', updated_at = NOW() WHERE assetnum = %s AND tahun = %s; """ @@ -210,6 +213,7 @@ class Eac: float(final_value), float(pmt_mnt_cost), float(pmt_aq_cost), + float(eac_disposal_cost_proyeksi), float(eac), equipment_id, row["tahun"], diff --git a/src/modules/equipment/__pycache__/Eac.cpython-311.pyc b/src/modules/equipment/__pycache__/Eac.cpython-311.pyc index 1652795..e7bb452 100644 Binary files a/src/modules/equipment/__pycache__/Eac.cpython-311.pyc and b/src/modules/equipment/__pycache__/Eac.cpython-311.pyc differ diff --git a/src/modules/equipment/run.py b/src/modules/equipment/run.py index 461feb9..208f294 100644 --- a/src/modules/equipment/run.py +++ b/src/modules/equipment/run.py @@ -23,11 +23,11 @@ async def main(): # print(f"Error in query_data: {str(e)}") # return - try: - await predict_run() - except Exception as e: - print(f"Error in predict_equipment_data: {str(e)}") - return + # try: + # await predict_run() + # except Exception as e: + # print(f"Error in predict_equipment_data: {str(e)}") + # return try: # eac = Eac()