{"id":19153207,"url":"https://github.com/kfiku/loanjs","last_synced_at":"2025-04-16T08:54:23.631Z","repository":{"id":22210293,"uuid":"25542942","full_name":"kfiku/LoanJS","owner":"kfiku","description":"Calculate loan in js (browser/node.js) for equal installments, installments decreasing, the sum of interest, etc.","archived":false,"fork":false,"pushed_at":"2023-07-25T00:16:18.000Z","size":1768,"stargazers_count":29,"open_issues_count":1,"forks_count":15,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-12T17:25:50.605Z","etag":null,"topics":["browserify","calculator","equal-installments","javascript","loan"],"latest_commit_sha":null,"homepage":"http://kfiku.github.io/LoanJS/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/kfiku.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2014-10-21T19:58:40.000Z","updated_at":"2024-09-26T20:41:29.000Z","dependencies_parsed_at":"2024-06-18T20:01:22.949Z","dependency_job_id":"4db7ee79-9c58-45ad-abc7-d0df7e27ef75","html_url":"https://github.com/kfiku/LoanJS","commit_stats":{"total_commits":193,"total_committers":6,"mean_commits":"32.166666666666664","dds":"0.33678756476683935","last_synced_commit":"b7f4b4afffd79338942c20a8e4e4755eb368f1b1"},"previous_names":[],"tags_count":29,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfiku%2FLoanJS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfiku%2FLoanJS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfiku%2FLoanJS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/kfiku%2FLoanJS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/kfiku","download_url":"https://codeload.github.com/kfiku/LoanJS/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248860298,"owners_count":21173342,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["browserify","calculator","equal-installments","javascript","loan"],"created_at":"2024-11-09T08:21:45.819Z","updated_at":"2025-04-16T08:54:23.590Z","avatar_url":"https://github.com/kfiku.png","language":"JavaScript","readme":"# LoanJS\n\n[\u003cimg src=\"http://npm.packagequality.com/badge/loanjs.png\" align=\"right\"/\u003e](http://packagequality.com/#?package=loanjs)\n[![NPM version](https://badge.fury.io/js/loanjs.svg)](http://badge.fury.io/js/loanjs)\n![core gzip size](https://img.badgesize.io/https:/unpkg.com/loanjs/dist/loan.min.js?label=core%20gzip%20size\u0026compression=gzip)\n[![Build status](https://github.com/kfiku/LoanJS/actions/workflows/node.js.yml/badge.svg)](https://github.com/kfiku/LoanJS/actions/workflows/node.js.yml)\n\n\nSuper **small** and **fast** module to calculate loan in js (browser/node.js) for **equal**/**decreasing**/**annuity**/**annuityDue** installments, the **sum of interest**, etc, with TypeScript support\n\n## Getting Started\n\nInstall with:\n\n```\nnpm install loanjs\n```\n\n#### Calculating Loan:\n```js\nimport { Loan } from 'loanjs';\n// or\nconst { Loan } = require('loanjs');\n\nconst loan = new Loan(\n  1000, // amount\n  12,   // installments number\n  5,    // interest rate\n  'annuity'  // loanType: 'annuity' | 'annuityDue' | 'diminishing' | GetNextInstalmentPartFunction\n);\n/** returns\n{\n  installments  : [\n    {\n      capital     : number,\n      interest    : number,\n      installment : number,\n      remain      : number\n    },\n    //...\n  ],\n  amount        : number,\n  interestSum   : number,\n  capitalSum    : number,\n  sum           : number\n}\n*/\n```\n\n## Documentation\n\n### Loan\nLoanJS.Loan(amount, installmentsNumber, interestRate, loanType)\n\n### Arguments\n| Argument           | type           | default   | Description\n| ------------------ | -------------- | --------- | ------------------\n| amount             | number         | *required | full amount of Loan\n| installmentsNumber | number         | *required | how many installments will be (in months)\n| interestRate       | number         | *required | interest rate in percent (ex. 3.5)\n| loanType           | string or fn   | annuity | annuity \\| annuityDue \\| diminishing \\| GetNextInstalmentPartFunction\n\n```ts\ninterface InstallmentPart {\n  capital: number;\n  interest: number;\n  installment: number;\n}\n\ntype GetNextInstalmentPartFunction = (\n  amount: number,\n  installmentsNumber: number,\n  interestRateMonth: number,\n  capitalSum: number\n) =\u003e InstallmentPart;\n```\n\n### Returns\n```js\n{\n  installments  : [\n    {\n      capital     : number,\n      interest    : number,\n      installment : number,\n      remain      : number\n    }\n  ],\n  amount        : number,\n  interestSum   : number,\n  capitalSum    : number,\n  sum           : number\n}\n```\n\n## Examples\n\n### typescript example\n\n```ts\nimport { Loan } from 'loanjs';\n\nconst annuityLoan = new Loan(1000, 12, 5, 'annuity');\n\nconst annuityDueLoan = new Loan(1000, 12, 5, 'annuityDue');\n\nconst diminishingLoan = new Loan(1000, 12, 5, 'diminishing');\n\nconst customInstalmentLoan = new Loan(1000, 12, 5, getNext10Instalment);\nfunction getNext10Instalment (amount: number, installmentsNumber: number, capitalSum: number, interestRateMonth: number) {\n  const capital = rnd(amount / installmentsNumber);\n  const interest = 10;\n  const installment = capital + interest;\n\n  return { capital, interest, installment };\n}\n```\n\n### nodejs example\n\n```js\nimport { Loan } from 'loanjs';\n// or\nconst { Loan } = require('loanjs');\n\nconst loan_1 = new Loan(1000, 12, 5, 'diminishing');\n// loan on 1 000($) in 12 loanType installments (ex. months) with 5% interest rate\n\nconst loan_2 = new Loan(500000, 360, 3.5, 'annuity');\n// loan on 500 000($) in 360 equal installments (30 years) with 3.5% interest rate\n```\n\n### Browser example:\n\u003e You can also render loan as html table\n\n```html\n\u003cscript src=\"../../dist/loan.js\"\u003e\u003c/script\u003e\n\u003cscript src=\"../../dist/loanToHtmlTable.js\"\u003e\u003c/script\u003e\n\u003cscript\u003e\n    const loan = new LoanJS.Loan(1000, 12, 5, 'annuity');\n\n    const div = document.createElement(\"div\");\n    div.innerHTML = LoanJS.loanToHtmlTable(loan); // loan rendering as html table string\n    document.body.appendChild(div);\n\u003c/script\u003e\n```\n\nmore examples [here](https://github.com/kfiku/LoanJS/tree/master/example)\n\n## Similar projects\n* [InterestJS](https://github.com/kfiku/InterestJS) - counting regular savings\n\n## Contributing\n\nIm open for contributors :).\n\n\n## Release History\n\n#### 2023-07-25 v1.1.0\n * add `annuityDue` interest rate loan type\n * changing the fourth argument `diminishing` to `loanType` (`annuity` | `diminishing` | `annuityDue`), with backward compatibility (false == 'annuity', true == 'diminishing')\n * refactor getNextInstalment to be open for extensions\n * add option to provide function to loanType to customize instalments counting\n\n#### 2023-06-23 v1.0.11\n * add TypeScript types\n * code cleanup\n * packages update\n\n#### 2017-08-06 v1.0.0\n * go to es6\n * make dist files\n * make 100% covered tests\n\n#### 2016-02-29 v0.1.4\n * update dependencies\n\n#### 2015-10-12 v0.1.3\n * fixing typo intrest -\u003e interest [#3](https://github.com/kfiku/LoanJS/issues/3)\n * update dependencies\n\n#### 2014-11-10 v0.0.4\n * update dependencies\n\n#### 2014-11-10 v0.0.2\n * now you can use it in node/browserify and browser\n\n\n\n## License\n\nCopyright (c) 2023 Grzegorz Klimek\nLicensed under the MIT license.\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfiku%2Floanjs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fkfiku%2Floanjs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fkfiku%2Floanjs/lists"}