From 246de7aa86daa5c45628329be2ab3831922007b8 Mon Sep 17 00:00:00 2001 From: Yash Solanki Date: Sat, 15 Oct 2022 14:15:11 +0530 Subject: [PATCH] Consider current month in FIRE calculation (#1349) --- .../fire-calculator/fire-calculator.component.ts | 9 ++++++++- .../lib/fire-calculator/fire-calculator.service.ts | 13 +++++-------- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts index b437f6b61..8ef10eca2 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.component.ts @@ -25,6 +25,7 @@ import { Tooltip } from 'chart.js'; import * as Color from 'color'; +import { getMonth } from 'date-fns'; import { isNumber } from 'lodash'; import { Subject, takeUntil } from 'rxjs'; @@ -50,6 +51,8 @@ export class FireCalculatorComponent @ViewChild('chartCanvas') chartCanvas; + private readonly CONTRIBUTION_PERIOD = 12; + public calculatorForm = this.formBuilder.group({ annualInterestRate: new FormControl(undefined), paymentPerPeriod: new FormControl(undefined), @@ -296,11 +299,15 @@ export class FireCalculatorComponent label: $localize`Savings` }; + const monthsPassedInCurrentYear = getMonth(new Date()); + for (let period = 1; period <= t; period++) { + const periodInMonths = + period * this.CONTRIBUTION_PERIOD - monthsPassedInCurrentYear; const { interest, principal, totalAmount } = this.fireCalculatorService.calculateCompoundInterest({ P, - period, + periodInMonths, PMT, r }); diff --git a/libs/ui/src/lib/fire-calculator/fire-calculator.service.ts b/libs/ui/src/lib/fire-calculator/fire-calculator.service.ts index fbd4f657a..c19fdca68 100644 --- a/libs/ui/src/lib/fire-calculator/fire-calculator.service.ts +++ b/libs/ui/src/lib/fire-calculator/fire-calculator.service.ts @@ -4,35 +4,32 @@ import Big from 'big.js'; @Injectable() export class FireCalculatorService { private readonly COMPOUND_PERIOD = 12; - private readonly CONTRIBUTION_PERIOD = 12; public constructor() {} public calculateCompoundInterest({ P, - period, + periodInMonths, PMT, r }: { P: number; - period: number; + periodInMonths: number; PMT: number; r: number; }) { let interest = new Big(0); - const principal = new Big(P).plus( - new Big(PMT).mul(this.CONTRIBUTION_PERIOD).mul(period) - ); + const principal = new Big(P).plus(new Big(PMT).mul(periodInMonths)); let totalAmount = principal; if (r) { const compoundInterestForPrincipal = new Big(1) .plus(new Big(r).div(this.COMPOUND_PERIOD)) - .pow(new Big(this.COMPOUND_PERIOD).mul(period).toNumber()); + .pow(periodInMonths); const compoundInterest = new Big(P).mul(compoundInterestForPrincipal); const contributionInterest = new Big( new Big(PMT).mul(compoundInterestForPrincipal.minus(1)) - ).div(new Big(r).div(this.CONTRIBUTION_PERIOD)); + ).div(new Big(r).div(this.COMPOUND_PERIOD)); interest = compoundInterest.plus(contributionInterest).minus(principal); totalAmount = compoundInterest.plus(contributionInterest); }