npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@curo/calculator

v2.0.0

Published

A feature-rich library for performing simple to advanced instalment credit financial calculations.

Downloads

827

Readme

Curo Calculator

Build Status Codecov Status GitHub npm bundle size

A financial calculator for solving unknown cash flow values and unknown interest rates implicit in fixed-term instalment credit products, for example leasing, loans and hire purchase contracts [1].

Overview

This calculator library is available as a Typescript package and supports features that are likely to be found only in commercially developed software. It has been designed for use in web applications with requirements that extend beyond what can be achieved using standard financial algebra.

A number of usage demos are hosted at Stackblitz to provide a quick and interactive introduction to various calculator features. Please refer to the demo README document at GitHub as it provides contextual information, additional configuration options, and a cash flow diagram [2] to help you visualise the inputs and unknowns in each calculation scenario.

Using the calculator couldn't be simpler, as demonstrated by the following 3-step example that solves for an unknown payment value.

// Step 1. Instantiate the calculator
const calc = new Calculator();

// Step 2. Define each cash flow series
calc.add(
  SeriesAdvance.builder()
    .setLabel("Loan advance")
    .setAmount(10000.0)
    .build()
);
calc.add(
  SeriesPayment.builder()
    .setNumberOf(6)
    .setLabel("Instalment")
    .setAmount(undefined) // or simply omit setter method 
    .setMode(Mode.Arrear)
    .build()
);

// Step 3. Calculate the unknown payment value
const pmtResult = calc.solveValue(new US30360(), 0.0825);

In this example you may have noticed that the payment series amount is undefined. This is intentional and is the approach you must follow when defining the unknown cash flow values you wish to calculate.

In the final step we invoke the solveValue(...) method, passing in a day count convention instance and the annual interest rate to use in the calculation, expressed as a decimal.

To determine the interest rate implicit in a series containing known cash flow values, simply pass in an appropriate day count convention instance to the solveRate(...) method, for example:

const irrResult = calc.solveRate(new US30360());

or

const aprResult = calc.solveRate(new EU200848EC());

Finally, a quick explanation of the day count convention's referred to above. A day count convention is a key component of every financial calculation as it determines the method to be used in measuring the time interval between each cash flow in a series. There are dozens of convention's defined but the more important ones supported by this calculator are as follows:

Convention | Description -----------| ------------- Actual ISDA | Convention accounts for actual days between cash flow dates based on the portion in a leap year and the portion in a non-leap year as documented here. Actual/365 | Convention accounts for actual days between cash flow dates and considers a year to have 365 days as documented here. EU 30/360 | Convention accounts for days between cash flow dates based on a 30 day month, 360 day year as documented here. EU 2008/48/EC | Convention based on the time periods between cash flow dates and the initial drawdown date, expressed in days and/or whole weeks, months or years. This convention is used specifically in APR (Annual Percentage Rate) consumer credit calculations within the European Union and is compliant with the EU2008/49/EC directive available here. US 30/360 | Convention accounts for days between cash flow dates based on a 30 day month, 360 day year as documented here. This is the default convention used by the Hewlett Packard HP12C and similar financial calculators, so choose this convention if unsure as it is the defacto convention used in the majority of fixed-term credit calculations.

By default all conventions, except EU 2008/48/EC, compute time intervals between cash flows with reference to the dates of adjacent cash flows.

To perform XIRR (eXtended Internal Rate of Return) based calculations, where time intervals are computed with reference to the first drawdown date, simply pass the appropriate argument to the respective day count convention constructor (refer to code documentation for details). When the Actual/365 convention is used in this manner the XIRR result equals that produced by the equivalent Microsoft Excel XIRR function.

Installation

To install the library as a project dependency use the following command:

npm install --save @curo/calculator

Running Tests

To run the tests clone or fork the GitHub repository and use the following commands:

npm install
npm test

License

Copyright © 2019-2023, Andrew Murphy. Released under the MIT License.

Footnotes


[1] Whilst the library uses asset finance nomenclature, it is equally capable of solving problems in investment-type scenarios.

[2] A cash flow diagram is simply a pictorial representation of the timing and direction of financial transactions and is a diagramming technique used throughout the various demos hosted at Stackblitz.

The diagram begins with a horizontal line, called a time line. The line represents the duration or contract term, and is commonly divided into compounding periods. The exchange of money in the financial arrangement is depicted by vertical arrows. Money a lender receives is represented by an arrow pointing up from the point in the time line when the transaction occurs; money paid out by the lender is represented by an arrow pointing down. The collection of all up and down arrow cash flows are what is referred to throughout the calculator documentation as a cash flow series.

To illustrate, suppose you needed to calculate the monthly repayments on a 10,000.00 loan payable over 6 months at an interest rate of 8.25% effective per annum. Assuming the payments are due in arrears, that is at the end of each compounding period, the cash flow diagram describing the problem would look like this:

image

To translate this data into a format understood by the calculator is now a straightforward exercise - if the diagram looks vaguely familiar it is because it represents the unknown payment problem demonstrated in the 3-step code example above!