use rust_decimal::Decimal;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RemainingInstallmentCalculator;
impl RemainingInstallmentCalculator {
pub fn calculate_remaining_principal(
pinjaman: Decimal,
angsuran: Decimal,
sisa_tenor: u32,
) -> Decimal {
tracing::info!(
event = "calculate_remaining_principal",
pinjaman = %pinjaman,
angsuran = %angsuran,
sisa_tenor = sisa_tenor,
"Calculating remaining principal"
);
let total_angsuran_belum_bayar = angsuran * Decimal::from(sisa_tenor);
let sisa_pokok = pinjaman - total_angsuran_belum_bayar;
tracing::info!(
event = "remaining_principal_calculated",
total_angsuran_belum_bayar = %total_angsuran_belum_bayar,
sisa_pokok = %sisa_pokok,
"Remaining principal calculated"
);
sisa_pokok
}
}