{"_id":"cash-denomination-suggest","_rev":"12-d4b4ef6cb0345bf418a1cc9027ac0336","name":"cash-denomination-suggest","dist-tags":{"latest":"3.0.1"},"versions":{"2.0.0":{"name":"cash-denomination-suggest","version":"2.0.0","keywords":["cash","denomination","suggest","payment","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"author":{"name":"56duong"},"license":"MIT","_id":"cash-denomination-suggest@2.0.0","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"homepage":"https://github.com/56duong/cash-denomination-suggest","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"0a528e24d93fb60388e19880919ff50191022a61","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-2.0.0.tgz","fileCount":3,"integrity":"sha512-S29ALAcDg5s3wkPE1IYQ+oZkKP8LS5Ap6hiBRtGOn8OM2wxA2Kl0dRqs6cxhT2dGbIOClbNdokqHPS4xsU9hEQ==","signatures":[{"sig":"MEUCIA5SZH+mwSH6xJH8F8euMqnQrWrzjiZboIbPRSQpQzPdAiEAnKAwlaUQYQnPMY3S5io0wC2E09tEf2fDRKlPxoYZQtw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":2643},"main":"index.js","type":"module","types":"./index.d.ts","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"56duong","email":"56duong@gmail.com"},"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"10.5.0","description":"Cash denomination suggestion for payment","directories":{},"_nodeVersion":"18.20.2","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cash-denomination-suggest_2.0.0_1758455656949_0.25593327029639923","host":"s3://npm-registry-packages-npm-production"}},"2.0.1":{"name":"cash-denomination-suggest","version":"2.0.1","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"author":{"name":"56duong"},"license":"MIT","_id":"cash-denomination-suggest@2.0.1","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"homepage":"https://github.com/56duong/cash-denomination-suggest","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"25569ab8ee700f81ec2380c7b3537cb5e2cd6625","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-2.0.1.tgz","fileCount":6,"integrity":"sha512-pTkv7YggH4bnciaE8OB0L0nb9ujDJK7cBzuqHy2UFtYxnje0EJHAwc2SV9XQBEqclVobKkIzYNggyNvAGxR/dw==","signatures":[{"sig":"MEUCIGWOLP/GVx+fkMSguRF1NcEIPn1M5RvLrNW2C8Y3hWZtAiEAxs9tkgAWUsjd9bhoNF5Zew/SnYMFCGcoii4qNNUZYiQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4723},"main":"index.js","type":"module","types":"./index.d.ts","gitHead":"9e28038f2510ade979f50de0485256948c4ecf6d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"56duong","email":"56duong@gmail.com"},"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"10.8.2","description":"Cash denomination suggestion for payment","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cash-denomination-suggest_2.0.1_1758457493685_0.11595716550305002","host":"s3://npm-registry-packages-npm-production"}},"2.0.2":{"name":"cash-denomination-suggest","version":"2.0.2","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"author":{"name":"56duong"},"license":"MIT","_id":"cash-denomination-suggest@2.0.2","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"homepage":"https://github.com/56duong/cash-denomination-suggest","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"1e9f12eb60348a067952fe012d01c632292200ea","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-2.0.2.tgz","fileCount":6,"integrity":"sha512-wlgWEJ1nAZP8tJWr+0ioCEStfIGJQ838tyBuB8ZVJztMKdIsVki+PmALrSB+FBlurR3ZJRpx9BJT4ASnurUBpw==","signatures":[{"sig":"MEUCIHHd8aFOjjea4oZMNO9ApdEPIi7DgO373NZZtUoM2HreAiEAuzO/KRApIMsmaq1ypUa5CTy1aanasRYy50xYfyiKy5Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":4918},"main":"index.js","type":"module","types":"./index.d.ts","gitHead":"33f8c7506d8c09c460860beefd2b30e65b71022d","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"56duong","email":"56duong@gmail.com"},"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"10.8.2","description":"Cash denomination suggestion for payment","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cash-denomination-suggest_2.0.2_1758720862776_0.8478561928765946","host":"s3://npm-registry-packages-npm-production"}},"2.0.3":{"name":"cash-denomination-suggest","version":"2.0.3","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"author":{"name":"56duong"},"license":"MIT","_id":"cash-denomination-suggest@2.0.3","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"homepage":"https://github.com/56duong/cash-denomination-suggest","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"ee4455ff44438d119f3a1b2201b50bb0d659a761","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-2.0.3.tgz","fileCount":6,"integrity":"sha512-Uhyb9d+cfHTZk6L+TqfcKEGSBbp04TrlJfCFrJjDAduUnWIMXhWy8LocKDX0ZPYjb+7zAnzlb6HTTGlnv2eLzg==","signatures":[{"sig":"MEQCICp78EKWoXUikMcONsf26qbYMB7PCnzdM/fM9WKeBVqYAiBYaAQt0LN1vDt6BSxVjbE3IuJ79WaNan3ZueAOnfnbEA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":5043},"main":"index.js","type":"module","types":"./index.d.ts","gitHead":"31c2ccd86503d6f464635f7aceed08a1bb4691f6","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"56duong","email":"56duong@gmail.com"},"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"10.8.2","description":"Cash denomination suggestion for payment","directories":{},"_nodeVersion":"20.19.5","_hasShrinkwrap":false,"_npmOperationalInternal":{"tmp":"tmp/cash-denomination-suggest_2.0.3_1760449282327_0.9492562640577367","host":"s3://npm-registry-packages-npm-production"}},"3.0.0":{"name":"cash-denomination-suggest","version":"3.0.0","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"author":{"name":"56duong"},"license":"MIT","_id":"cash-denomination-suggest@3.0.0","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"homepage":"https://github.com/56duong/cash-denomination-suggest","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"ed792fe192375de1b0ce56992ac956fbd52e5de1","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-3.0.0.tgz","fileCount":6,"integrity":"sha512-oXRJzB/RWRZbFb2wl5ku5JOvJvLD7jtUrVqfgA+IjXD8uJcUM5sYc4HrexopjMrugLTaLE6YCN/PgTKkAcjqMg==","signatures":[{"sig":"MEQCIAmqXya2Zs3ZusNIkXufHVck1cHccz4gPwtKYxzYxsjGAiBaBfeCMUFoHu0SRYWkW8hKhw5L5TWocMDk2YCOPn5Stw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICRzQVoJF7TbmP/wXIjDNZNgm7BvqOgdmCq22W/Nid35AiEArHbNbS+pGFE9vGrg1LeaXhFIOp1+dPN4XOrU09h9nlw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cash-denomination-suggest@3.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11081},"main":"index.js","type":"module","types":"./index.d.ts","gitHead":"ba4c66abe220ad7dc2f4f9e5b3776100de906bf7","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56973338-2095-4b3c-8551-efaaa28a4520"}},"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"11.19.0","description":"Cash denomination suggestion for payment","directories":{},"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"readmeFilename":"README.md","_npmOperationalInternal":{"tmp":"tmp/cash-denomination-suggest_3.0.0_1789477252998_0.31332503962895775","host":"s3://npm-registry-packages-npm-production"}},"3.0.1":{"_id":"cash-denomination-suggest@3.0.1","bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"dist":{"shasum":"04d359f3ea74577dee361929b874ffe9d9853dba","tarball":"https://registry.npmjs.org/cash-denomination-suggest/-/cash-denomination-suggest-3.0.1.tgz","fileCount":6,"integrity":"sha512-Fs31jHpeJ/GOe6GZgAxjrY0VvY21E3Cn838SoMwvGNcQUsi6NBw3WZByXiL7HSwleLXqGvO4VByJZkwwu5z1Kw==","signatures":[{"sig":"MEUCIHaoO/QyPs/58y+65mTCkmEdJy3OYFdiO1A+r2ws+LJ6AiEAzghMDFFDV1caDpR8bBsBiQtO1qerHcz/iMwUlD84LG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCICmQP7vGzNtJOE5hgqgxRg1ejnxaHvZil3No06COIR0dAiEAkOs6FUM1+7RjMeXZfXklUmC350ReWOl7V4HlcQH2l7k="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/cash-denomination-suggest@3.0.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":11086},"main":"index.js","name":"cash-denomination-suggest","type":"module","types":"./index.d.ts","author":{"name":"56duong"},"gitHead":"9f991123538ec078dce67259d3eeb24560e3211e","license":"MIT","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"version":"3.0.1","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:56973338-2095-4b3c-8551-efaaa28a4520"}},"homepage":"https://github.com/56duong/cash-denomination-suggest","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"_npmVersion":"11.19.0","description":"Cash denomination suggestion for payment","directories":{},"maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"_nodeVersion":"24.20.0","_hasShrinkwrap":false,"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/cash-denomination-suggest_3.0.1_1789477292962_0.18412432186259364"}}},"time":{"created":"2025-09-21T11:54:16.949Z","modified":"2026-09-15T13:01:33.522Z","1.0.0":"2025-09-17T14:43:04.329Z","1.0.1":"2025-09-17T14:57:04.811Z","1.0.2":"2025-09-17T15:00:48.336Z","1.0.3":"2025-09-17T15:01:33.019Z","1.0.4":"2025-09-17T15:10:35.168Z","2.0.0":"2025-09-21T11:54:17.134Z","2.0.1":"2025-09-21T12:24:53.860Z","2.0.2":"2025-09-24T13:34:22.975Z","2.0.3":"2025-10-14T13:41:22.514Z","3.0.0":"2026-09-15T13:00:53.080Z","3.0.1":"2026-09-15T13:01:33.049Z"},"bugs":{"url":"https://github.com/56duong/cash-denomination-suggest/issues"},"author":{"name":"56duong"},"license":"MIT","homepage":"https://github.com/56duong/cash-denomination-suggest","keywords":["cash","denomination","suggest","payment","payment-denomination","currency","cash-suggest","denomination-suggest","cash-denomination","cash-denomination-suggest"],"repository":{"url":"git+https://github.com/56duong/cash-denomination-suggest.git","type":"git"},"description":"Cash denomination suggestion for payment","maintainers":[{"name":"56duong","email":"56duong@gmail.com"}],"readme":"# cash-denomination-suggest\n\nSuggest cash denominations for payment.\n\n## Install\n\n```sh\nnpm install cash-denomination-suggest\n```\n\n## Usage\n\n```js\nimport { cashDenominationSuggest } from 'cash-denomination-suggest';\n\nconst denominations = [1000, 2000, 5000, 10000, 20000, 50000, 100000, 200000, 500000];\nconst value = 654000;\n\ntry {\n  const results = cashDenominationSuggest(value, denominations);\n  console.log('Suggested denominations:', results);\n  // [ 654000, 655000, 660000, 670000, 700000, 800000, 1000000 ]\n} catch (err) {\n  console.error(err);\n}\n```\n\nSuggestions now include realistic two-note combinations (e.g. `5000 + 2000 = 7000`),\nnot just multiples of a single denomination:\n\n```js\ncashDenominationSuggest(6000, denominations);\n// [ 6000, 7000, 10000, 20000, 50000, 100000, 200000, 500000 ]\n```\n\n## Rounding non-divisible values\n\nBy default, if `value` isn't evenly divisible by the smallest denomination, it's\nrounded to the nearest multiple of the smallest denomination instead of throwing\n(round up if the remainder is >= half the smallest denomination, otherwise round down):\n\n```js\ncashDenominationSuggest(33800, denominations);\n// remainder (800) >= 500, rounds up to 34000 first\n// [ 34000, 35000, 40000, 50000, 100000, 200000, 500000 ]\n```\n\nYou can customize the round-up cut-off with `threshold`, or disable rounding\nentirely to restore the old throwing behavior:\n\n```js\n// Round up when remainder >= 300 instead of the default half-denomination cutoff\ncashDenominationSuggest(15250, denominations, { enabled: true, threshold: 300 });\n\n// Throw instead of rounding, like versions before 3.0.0\ncashDenominationSuggest(33800, denominations, { enabled: false });\n// Error: Value must be divisible by the smallest denomination: 1000\n```\n\n## API\n\n### `cashDenominationSuggest(value, denominations, roundingOptions?)`\n\n- `value` (`number`) — The target value to reach or exceed.\n- `denominations` (`number[]`) — Available cash denominations.\n- `roundingOptions` (`{ enabled: boolean; threshold?: number }`, optional) —\n  Defaults to `{ enabled: true }`. If `value` isn't divisible by the smallest\n  denomination:\n  - `enabled: true` (default) — rounds `value` to the nearest multiple of the\n    smallest denomination before computing suggestions. `threshold` sets the\n    remainder cut-off for rounding up (defaults to half the smallest denomination).\n  - `enabled: false` — throws instead, matching the pre-3.0.0 behavior.\n\nReturns `number[]`, ascending, with no duplicates.\n\n### `roundToSmallest(value, smallest, threshold?)`\n\nRounds `value` to the nearest multiple of `smallest`. Exported in case you want\nto round a value independently of `cashDenominationSuggest`.\n\n## Breaking changes in 3.0.0\n\n- Adds two-denomination combo suggestions (e.g. `7000` for a `6000` target),\n  fixing gaps where a valid, natural payment combination was missing.\n- `value` no longer throws by default when it isn't divisible by the smallest\n  denomination — it's rounded instead. Pass `{ enabled: false }` to keep the\n  old throwing behavior.","readmeFilename":"README.md"}