add disposal cost to equipment transaction data

main
MrWaradana 2 months ago
parent 7556455679
commit db277accbc

@ -92,4 +92,5 @@ class EquipmentTransactionRecords(Base, DefaultMixin, IdentityMixin):
eac_npv = Column(Float, nullable=False) eac_npv = Column(Float, nullable=False)
eac_annual_mnt_cost = Column(Float, nullable=False) eac_annual_mnt_cost = Column(Float, nullable=False)
eac_annual_acq_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) eac_eac = Column(Float, nullable=False)

@ -70,6 +70,7 @@ class MasterBase(DefaultBase):
eac_npv: 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_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_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) eac_eac: Optional[float] = Field(None, nullable=True, le=MAX_PRICE)

@ -68,16 +68,17 @@ class Eac:
cumulative_values.append(row["rc_total_cost"]) cumulative_values.append(row["rc_total_cost"])
# Menghitung NPV menggunakan rumus diskonto # Menghitung NPV menggunakan rumus diskonto
# Rumus NPV: NPV = Σ [Ct / (1 + r)^t] # 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( final_value = sum(
value / ((1 + inflation_rate) ** (i + 1)) value / ((1 + disc_rate) ** (i + 1))
for i, value in enumerate(cumulative_values) for i, value in enumerate(cumulative_values)
) )
# Menghitung PMT biaya maintenance # Menghitung PMT biaya maintenance
# Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1] # 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"]
pmt_mnt_cost = -npf.pmt(inflation_rate, row["seq"], final_value) pmt_mnt_cost = -npf.pmt(disc_rate, row["seq"], final_value)
eac_disposal_cost = 0.07 * pmt_mnt_cost
# Menghitung PMT biaya akuisisi # Menghitung PMT biaya akuisisi
# Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1] # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1]
# dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"] # dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"]
@ -102,7 +103,7 @@ class Eac:
# Update lcc_equipment_tr_data # Update lcc_equipment_tr_data
update_query = """ update_query = """
UPDATE lcc_equipment_tr_data 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() , updated_by = 'Sys', updated_at = NOW()
WHERE assetnum = %s AND tahun = %s; WHERE assetnum = %s AND tahun = %s;
""" """
@ -112,6 +113,7 @@ class Eac:
float(final_value), float(final_value),
float(pmt_mnt_cost), float(pmt_mnt_cost),
float(pmt_aq_cost), float(pmt_aq_cost),
float(eac_disposal_cost),
float(eac), float(eac),
equipment_id, equipment_id,
row["tahun"], row["tahun"],
@ -158,7 +160,7 @@ class Eac:
# Total NPV pada titik proyeksi ini = NPV aktual terakhir + biaya proyeksi yang didiskontokan # Total NPV pada titik proyeksi ini = NPV aktual terakhir + biaya proyeksi yang didiskontokan
final_value = float(last_npv) + float(discounted_proj) final_value = float(last_npv) + float(discounted_proj)
# Gunakan seq penuh (jumlah periode dari akuisisi) untuk menghitung pembayaran tahunan pemeliharaan. # Gunakan seq penuh (jumlah periode dari akuisisi) untuk menghitung pembayaran tahunan pemeliharaan.
# Menggunakan hanya selisih dari seq aktual terakhir # Menggunakan hanya selisih dari seq aktual terakhir
# (sisa_periode) mengamortisasi seluruh nilai sekarang selama # (sisa_periode) mengamortisasi seluruh nilai sekarang selama
@ -170,11 +172,12 @@ class Eac:
# Menghitung PMT # Menghitung PMT
# Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1] # 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 # periods adalah jumlah periode
# final_value adalah PV pada titik proyeksi periods # 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 # menghitung PMT biaya akuisisi
# Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1] # Rumus PMT: PMT = PV * [r(1 + r)^n] / [(1 + r)^n 1]
# dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"] # dimana PV = rc_total_cost_0, r = disc_rate, n = row["seq"]
@ -200,7 +203,7 @@ class Eac:
# Update lcc_equipment_tr_data # Update lcc_equipment_tr_data
update_query = """ update_query = """
UPDATE lcc_equipment_tr_data 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() , updated_by = 'Sys', updated_at = NOW()
WHERE assetnum = %s AND tahun = %s; WHERE assetnum = %s AND tahun = %s;
""" """
@ -210,6 +213,7 @@ class Eac:
float(final_value), float(final_value),
float(pmt_mnt_cost), float(pmt_mnt_cost),
float(pmt_aq_cost), float(pmt_aq_cost),
float(eac_disposal_cost_proyeksi),
float(eac), float(eac),
equipment_id, equipment_id,
row["tahun"], row["tahun"],

@ -23,11 +23,11 @@ async def main():
# print(f"Error in query_data: {str(e)}") # print(f"Error in query_data: {str(e)}")
# return # return
try: # try:
await predict_run() # await predict_run()
except Exception as e: # except Exception as e:
print(f"Error in predict_equipment_data: {str(e)}") # print(f"Error in predict_equipment_data: {str(e)}")
return # return
try: try:
# eac = Eac() # eac = Eac()

Loading…
Cancel
Save