diff --git a/.github/workflows/package.yml b/.github/workflows/package.yml index a47fd89..dd2a20d 100644 --- a/.github/workflows/package.yml +++ b/.github/workflows/package.yml @@ -21,16 +21,11 @@ jobs: secrets: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - build: - uses: skyleague/node-standards/.github/workflows/reusable-build.yml@main - secrets: - NPM_TOKEN: ${{ secrets.NPM_TOKEN }} - release: - needs: [typescript, build] + needs: [typescript] uses: skyleague/node-standards/.github/workflows/reusable-release.yml@main with: - build_artifact_name: ${{ needs.build.outputs.artifact_name }} + build_artifact_name: ${{ needs.typescript.outputs.artifact-name }} beta_release: ${{ inputs.beta_release || false }} secrets: NPM_TOKEN: ${{ secrets.NPM_TOKEN }} diff --git a/.gitignore b/.gitignore index 3337d23..d8c9d4f 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ yalc.lock !.github !.vscode !.npmrc +!.husky !.gitignore !.gitkeep diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100755 index 0000000..34eed8b --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1 @@ +npx --no -- commitlint --edit $1 \ No newline at end of file diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100755 index 0000000..5d3da0c --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1 @@ +npx --no -- lint-staged --concurrent=true --allow-empty \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index ef23fca..2eb6c44 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,8 +2,13 @@ "[json]": { "editor.tabSize": 2 }, + "debug.javascript.terminalOptions": { + "remoteRoot": null, + "skipFiles": ["/**"], + "sourceMaps": true + }, "editor.codeActionsOnSave": { - "source.fixAll.eslint": true + "source.fixAll.eslint": "always" }, "editor.formatOnSave": true, "editor.wordSeparators": "`~!@#%^&*()-=+[{]}\\|;:'\",.<>/?", @@ -12,38 +17,28 @@ "eslint.validate": ["javascript", "typescript"], "files.eol": "\n", "files.exclude": { + "**/.coverage": true, + "**/.dist": true, "**/.DS_Store": true, "**/.git": true, "**/.hg": true, + "**/.husky": true, "**/.svn": true, "**/CVS": true, - "**/.coverage": true, - "**/.husky": true, - "**/.dist": true, - "src/**/*.d.ts": true, "**/node_modules": true }, "files.watcherExclude": { - "**/.git/objects/**": true, - "**/.git/subtree-cache/**": true, "**/.coverage/*/**": true, "**/.dist/**": true, - "src/**/*.d.ts": true, - "**/node_modules/*/**": true + "**/.git/objects/**": true, + "**/.git/subtree-cache/**": true, + "**/node_modules/*/**": true, + "src/**/*.d.ts": true }, "typescript.format.semicolons": "remove", "typescript.implementationsCodeLens.enabled": true, - "typescript.inlayHints.enumMemberValues.enabled": true, - "typescript.inlayHints.functionLikeReturnTypes.enabled": false, - "typescript.inlayHints.parameterNames.enabled": "literals", - "typescript.inlayHints.parameterNames.suppressWhenArgumentMatchesName": true, - "typescript.referencesCodeLens.enabled": true, - "typescript.tsdk": "node_modules/typescript/lib", "typescript.preferences.autoImportFileExcludePatterns": ["**/index.ts"], - "debug.javascript.terminalOptions": { - "skipFiles": ["/**"], - "sourceMaps": true, - "remoteRoot": null - }, - "debug.javascript.autoAttachFilter": "smart" + "typescript.referencesCodeLens.enabled": true, + "typescript.tsdk": "./node_modules/typescript/lib", + "typescript.enablePromptUseWorkspaceTsdk": true } diff --git a/LICENSE.md b/LICENSE.md index ffcc91e..695a629 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,4 +1,4 @@ -Copyright (c) 2023, SkyLeague Technologies B.V.. 'SkyLeague' and the astronaut logo are trademarks of SkyLeague Technologies, registered at Chamber of Commerce in The Netherlands under number 86650564. +Copyright (c) 2024, SkyLeague Technologies B.V.. 'SkyLeague' and the astronaut logo are trademarks of SkyLeague Technologies, registered at Chamber of Commerce in The Netherlands under number 86650564. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: diff --git a/package-lock.json b/package-lock.json index ff55f26..2c14763 100644 --- a/package-lock.json +++ b/package-lock.json @@ -14,20 +14,20 @@ "tslib": "^2.6.2" }, "devDependencies": { - "@skyleague/axioms": "^3.0.2", - "@skyleague/node-standards": "^4.1.0", - "@skyleague/therefore": "^4.1.0", + "@skyleague/axioms": "^3.6.0", + "@skyleague/node-standards": "^5.1.9", + "@skyleague/therefore": "^4.1.1", "@types/split2": "^4.2.3", "camelcase": "^8.0.0", - "got": "^14.0.0", - "nock": "^13.4.0", + "got": "^14.2.0", + "nock": "^13.5.1", "typescript": "^5.3.3" }, "engines": { - "node": ">=18" + "node": ">=20" }, "peerDependencies": { - "got": "^14.0.0" + "got": "^14.2.0" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -240,9 +240,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", - "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", + "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -252,9 +252,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.6", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", - "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", + "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", "dev": true, "dependencies": { "@babel/helper-string-parser": "^7.23.4", @@ -282,16 +282,16 @@ } }, "node_modules/@commitlint/cli": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.4.3.tgz", - "integrity": "sha512-zop98yfB3A6NveYAZ3P1Mb6bIXuCeWgnUfVNkH4yhIMQpQfzFwseadazOuSn0OOfTt0lWuFauehpm9GcqM5lww==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/cli/-/cli-18.6.0.tgz", + "integrity": "sha512-FiH23cr9QG8VdfbmvJJZmdfHGVMCouOOAzoXZ3Cd7czGC52RbycwNt8YCI7SA69pAl+t30vh8LMaO/N+kcel6w==", "dev": true, "dependencies": { - "@commitlint/format": "^18.4.3", - "@commitlint/lint": "^18.4.3", - "@commitlint/load": "^18.4.3", - "@commitlint/read": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/format": "^18.6.0", + "@commitlint/lint": "^18.6.0", + "@commitlint/load": "^18.6.0", + "@commitlint/read": "^18.6.0", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0", "lodash.isfunction": "^3.0.9", "resolve-from": "5.0.0", @@ -306,9 +306,9 @@ } }, "node_modules/@commitlint/config-conventional": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.4.3.tgz", - "integrity": "sha512-729eRRaNta7JZF07qf6SAGSghoDEp9mH7yHU0m7ff0q89W97wDrWCyZ3yoV3mcQJwbhlmVmZPTkPcm7qiAu8WA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-conventional/-/config-conventional-18.6.0.tgz", + "integrity": "sha512-CDCOf2eJz9D/TL44IBks0stM9TmdLCNE2B48owIU3YCadwzts/bobXPScagIgPQF6hhKYMEdj5zpUDlmbwuqwQ==", "dev": true, "dependencies": { "conventional-changelog-conventionalcommits": "^7.0.2" @@ -318,12 +318,12 @@ } }, "node_modules/@commitlint/config-validator": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.4.3.tgz", - "integrity": "sha512-FPZZmTJBARPCyef9ohRC9EANiQEKSWIdatx5OlgeHKu878dWwpyeFauVkhzuBRJFcCA4Uvz/FDtlDKs008IHcA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-18.6.0.tgz", + "integrity": "sha512-Ptfa865arNozlkjxrYG3qt6wT9AlhNUHeuDyKEZiTL/l0ftncFhK/KN0t/EAMV2tec+0Mwxo0FmhbESj/bI+1g==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "ajv": "^8.11.0" }, "engines": { @@ -331,12 +331,12 @@ } }, "node_modules/@commitlint/ensure": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.4.3.tgz", - "integrity": "sha512-MI4fwD9TWDVn4plF5+7JUyLLbkOdzIRBmVeNlk4dcGlkrVA+/l5GLcpN66q9LkFsFv6G2X31y89ApA3hqnqIFg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/ensure/-/ensure-18.6.0.tgz", + "integrity": "sha512-xY07NmOBJ7JuhX3tic021PaeLepZARIQyqpAQoNQZoml1keBFfB6MbA7XlWZv0ebbarUFE4yhKxOPw+WFv7/qw==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "lodash.camelcase": "^4.3.0", "lodash.kebabcase": "^4.1.1", "lodash.snakecase": "^4.1.1", @@ -348,21 +348,21 @@ } }, "node_modules/@commitlint/execute-rule": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.3.tgz", - "integrity": "sha512-t7FM4c+BdX9WWZCPrrbV5+0SWLgT3kCq7e7/GhHCreYifg3V8qyvO127HF796vyFql75n4TFF+5v1asOOWkV1Q==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/execute-rule/-/execute-rule-18.4.4.tgz", + "integrity": "sha512-a37Nd3bDQydtg9PCLLWM9ZC+GO7X5i4zJvrggJv5jBhaHsXeQ9ZWdO6ODYR+f0LxBXXNYK3geYXJrCWUCP8JEg==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/format": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.4.3.tgz", - "integrity": "sha512-8b+ItXYHxAhRAXFfYki5PpbuMMOmXYuzLxib65z2XTqki59YDQJGpJ/wB1kEE5MQDgSTQWtKUrA8n9zS/1uIDQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/format/-/format-18.6.0.tgz", + "integrity": "sha512-8UNWfs2slPPSQiiVpLGJTnPHv7Jkd5KYxfbNXbmLL583bjom4RrylvyrCVnmZReA8nNad7pPXq6mDH4FNVj6xg==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0" }, "engines": { @@ -370,44 +370,70 @@ } }, "node_modules/@commitlint/is-ignored": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.4.3.tgz", - "integrity": "sha512-ZseOY9UfuAI32h9w342Km4AIaTieeFskm2ZKdrG7r31+c6zGBzuny9KQhwI9puc0J3GkUquEgKJblCl7pMnjwg==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/is-ignored/-/is-ignored-18.6.0.tgz", + "integrity": "sha512-Xjx/ZyyJ4FdLuz0FcOvqiqSFgiO2yYj3QN9XlvyrxqbXTxPVC7QFEXJYBVPulUSN/gR7WXH1Udw+HYYfD17xog==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "semver": "7.5.4" }, "engines": { "node": ">=v18" } }, + "node_modules/@commitlint/is-ignored/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@commitlint/is-ignored/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@commitlint/lint": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.4.3.tgz", - "integrity": "sha512-18u3MRgEXNbnYkMOWoncvq6QB8/90m9TbERKgdPqVvS+zQ/MsuRhdvHYCIXGXZxUb0YI4DV2PC4bPneBV/fYuA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/lint/-/lint-18.6.0.tgz", + "integrity": "sha512-ycbuDWfyykPmslgiHzhz8dL6F0BJYltXLVfc+M49z0c+FNITM0v+r0Vd2+Tdtq06VTc894p2+YSmZhulY8Jn3Q==", "dev": true, "dependencies": { - "@commitlint/is-ignored": "^18.4.3", - "@commitlint/parse": "^18.4.3", - "@commitlint/rules": "^18.4.3", - "@commitlint/types": "^18.4.3" + "@commitlint/is-ignored": "^18.6.0", + "@commitlint/parse": "^18.6.0", + "@commitlint/rules": "^18.6.0", + "@commitlint/types": "^18.6.0" }, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/load": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.4.3.tgz", - "integrity": "sha512-v6j2WhvRQJrcJaj5D+EyES2WKTxPpxENmNpNG3Ww8MZGik3jWRXtph0QTzia5ZJyPh2ib5aC/6BIDymkUUM58Q==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/load/-/load-18.6.0.tgz", + "integrity": "sha512-RRssj7TmzT0bowoEKlgwg8uQ7ORXWkw7lYLsZZBMi9aInsJuGNLNWcMxJxRZbwxG3jkCidGUg85WmqJvRjsaDA==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/execute-rule": "^18.4.3", - "@commitlint/resolve-extends": "^18.4.3", - "@commitlint/types": "^18.4.3", - "@types/node": "^18.11.9", + "@commitlint/config-validator": "^18.6.0", + "@commitlint/execute-rule": "^18.4.4", + "@commitlint/resolve-extends": "^18.6.0", + "@commitlint/types": "^18.6.0", "chalk": "^4.1.0", "cosmiconfig": "^8.3.6", "cosmiconfig-typescript-loader": "^5.0.0", @@ -420,31 +446,22 @@ "node": ">=v18" } }, - "node_modules/@commitlint/load/node_modules/@types/node": { - "version": "18.19.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.4.tgz", - "integrity": "sha512-xNzlUhzoHotIsnFoXmJB+yWmBvFZgKCI9TtPIEdYIMM1KWfwuY8zh7wvc1u1OAXlC7dlf6mZVx/s+Y5KfFz19A==", - "dev": true, - "dependencies": { - "undici-types": "~5.26.4" - } - }, "node_modules/@commitlint/message": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.3.tgz", - "integrity": "sha512-ddJ7AztWUIoEMAXoewx45lKEYEOeOlBVWjk8hDMUGpprkuvWULpaXczqdjwVtjrKT3JhhN+gMs8pm5G3vB2how==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/message/-/message-18.4.4.tgz", + "integrity": "sha512-lHF95mMDYgAI1LBXveJUyg4eLaMXyOqJccCK3v55ZOEUsMPrDi8upqDjd/NmzWmESYihaOMBTAnxm+6oD1WoDQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/parse": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.4.3.tgz", - "integrity": "sha512-eoH7CXM9L+/Me96KVcfJ27EIIbA5P9sqw3DqjJhRYuhaULIsPHFs5S5GBDCqT0vKZQDx0DgxhMpW6AQbnKrFtA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/parse/-/parse-18.6.0.tgz", + "integrity": "sha512-Y/G++GJpATFw54O0jikc/h2ibyGHgghtPnwsOk3O/aU092ydJ5XEHYcd7xGNQYuLweLzQis2uEwRNk9AVIPbQQ==", "dev": true, "dependencies": { - "@commitlint/types": "^18.4.3", + "@commitlint/types": "^18.6.0", "conventional-changelog-angular": "^7.0.0", "conventional-commits-parser": "^5.0.0" }, @@ -453,14 +470,13 @@ } }, "node_modules/@commitlint/read": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.4.3.tgz", - "integrity": "sha512-H4HGxaYA6OBCimZAtghL+B+SWu8ep4X7BwgmedmqWZRHxRLcX2q0bWBtUm5FsMbluxbOfrJwOs/Z0ah4roP/GQ==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/read/-/read-18.6.0.tgz", + "integrity": "sha512-w39ji8VfWhPKRquPhRHB3Yd8XIHwaNHgOh28YI1QEmZ59qVpuVUQo6h/NsVb+uoC6LbXZiofTZv2iFR084jKEA==", "dev": true, "dependencies": { - "@commitlint/top-level": "^18.4.3", - "@commitlint/types": "^18.4.3", - "fs-extra": "^11.0.0", + "@commitlint/top-level": "^18.4.4", + "@commitlint/types": "^18.6.0", "git-raw-commits": "^2.0.11", "minimist": "^1.2.6" }, @@ -469,13 +485,13 @@ } }, "node_modules/@commitlint/resolve-extends": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.4.3.tgz", - "integrity": "sha512-30sk04LZWf8+SDgJrbJCjM90gTg2LxsD9cykCFeFu+JFHvBFq5ugzp2eO/DJGylAdVaqxej3c7eTSE64hR/lnw==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/resolve-extends/-/resolve-extends-18.6.0.tgz", + "integrity": "sha512-k2Xp+Fxeggki2i90vGrbiLDMefPius3zGSTFFlRAPKce/SWLbZtI+uqE9Mne23mHO5lmcSV8z5m6ziiJwGpOcg==", "dev": true, "dependencies": { - "@commitlint/config-validator": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/config-validator": "^18.6.0", + "@commitlint/types": "^18.6.0", "import-fresh": "^3.0.0", "lodash.mergewith": "^4.6.2", "resolve-from": "^5.0.0", @@ -486,15 +502,15 @@ } }, "node_modules/@commitlint/rules": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.4.3.tgz", - "integrity": "sha512-8KIeukDf45BiY+Lul1T0imSNXF0sMrlLG6JpLLKolkmYVQ6PxxoNOriwyZ3UTFFpaVbPy0rcITaV7U9JCAfDTA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/rules/-/rules-18.6.0.tgz", + "integrity": "sha512-pTalvCEvuCWrBWZA/YqO/3B3nZnY3Ncc+TmQsRajBdC1tkQIm5Iovdo4Ec7f2Dw1tVvpYMUUNAgcWqsY0WckWg==", "dev": true, "dependencies": { - "@commitlint/ensure": "^18.4.3", - "@commitlint/message": "^18.4.3", - "@commitlint/to-lines": "^18.4.3", - "@commitlint/types": "^18.4.3", + "@commitlint/ensure": "^18.6.0", + "@commitlint/message": "^18.4.4", + "@commitlint/to-lines": "^18.4.4", + "@commitlint/types": "^18.6.0", "execa": "^5.0.0" }, "engines": { @@ -502,18 +518,18 @@ } }, "node_modules/@commitlint/to-lines": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.3.tgz", - "integrity": "sha512-fy1TAleik4Zfru1RJ8ZU6cOSvgSVhUellxd3WZV1D5RwHZETt1sZdcA4mQN2y3VcIZsUNKkW0Mq8CM9/L9harQ==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/to-lines/-/to-lines-18.4.4.tgz", + "integrity": "sha512-mwe2Roa59NCz/krniAdCygFabg7+fQCkIhXqBHw00XQ8Y7lw4poZLLxeGI3p3bLpcEOXdqIDrEGLwHmG5lBdwQ==", "dev": true, "engines": { "node": ">=v18" } }, "node_modules/@commitlint/top-level": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.3.tgz", - "integrity": "sha512-E6fJPBLPFL5R8+XUNSYkj4HekIOuGMyJo3mIx2PkYc3clel+pcWQ7TConqXxNWW4x1ugigiIY2RGot55qUq1hw==", + "version": "18.4.4", + "resolved": "https://registry.npmjs.org/@commitlint/top-level/-/top-level-18.4.4.tgz", + "integrity": "sha512-PBwW1drgeavl9CadB7IPRUk6rkUP/O8jEkxjlC+ofuh3pw0bzJdAT+Kw7M1Yc9KtTb9xTaqUB8uvRtaybHa/tQ==", "dev": true, "dependencies": { "find-up": "^5.0.0" @@ -523,9 +539,9 @@ } }, "node_modules/@commitlint/types": { - "version": "18.4.3", - "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.4.3.tgz", - "integrity": "sha512-cvzx+vtY/I2hVBZHCLrpoh+sA0hfuzHwDc+BAFPimYLjJkpHnghQM+z8W/KyLGkygJh3BtI3xXXq+dKjnSWEmA==", + "version": "18.6.0", + "resolved": "https://registry.npmjs.org/@commitlint/types/-/types-18.6.0.tgz", + "integrity": "sha512-oavoKLML/eJa2rJeyYSbyGAYzTxQ6voG5oeX3OrxpfrkRWhJfm4ACnhoRf5tgiybx2MZ+EVFqC1Lw3W8/uwpZA==", "dev": true, "dependencies": { "chalk": "^4.1.0" @@ -534,34 +550,10 @@ "node": ">=v18" } }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@cspotcode/source-map-support/node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "peer": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.11.tgz", - "integrity": "sha512-FnzU0LyE3ySQk7UntJO4+qIiQgI7KoODnZg5xzXIrFJlKd2P2gwHsHY4927xj9y5PJmJSzULiUCWmv7iWnNa7g==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.0.tgz", + "integrity": "sha512-fGFDEctNh0CcSwsiRPxiaqX0P5rq+AqE0SRhYGZ4PX46Lg1FNR6oCxJghf8YgY0WQEgQuh3lErUFE4KxLeRmmw==", "cpu": [ "ppc64" ], @@ -575,9 +567,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.0.tgz", + "integrity": "sha512-3bMAfInvByLHfJwYPJRlpTeaQA75n8C/QKpEaiS4HrFWFiJlNI0vzq/zCjBrhAYcPyVPG7Eo9dMrcQXuqmNk5g==", "cpu": [ "arm" ], @@ -591,9 +583,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.0.tgz", + "integrity": "sha512-aVpnM4lURNkp0D3qPoAzSG92VXStYmoVPOgXveAUoQBWRSuQzt51yvSju29J6AHPmwY1BjH49uR29oyfH1ra8Q==", "cpu": [ "arm64" ], @@ -607,9 +599,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.0.tgz", + "integrity": "sha512-uK7wAnlRvjkCPzh8jJ+QejFyrP8ObKuR5cBIsQZ+qbMunwR8sbd8krmMbxTLSrDhiPZaJYKQAU5Y3iMDcZPhyQ==", "cpu": [ "x64" ], @@ -623,9 +615,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.11.tgz", - "integrity": "sha512-ETp87DRWuSt9KdDVkqSoKoLFHYTrkyz2+65fj9nfXsaV3bMhTCjtQfw3y+um88vGRKRiF7erPrh/ZuIdLUIVxQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.0.tgz", + "integrity": "sha512-AjEcivGAlPs3UAcJedMa9qYg9eSfU6FnGHJjT8s346HSKkrcWlYezGE8VaO2xKfvvlZkgAhyvl06OJOxiMgOYQ==", "cpu": [ "arm64" ], @@ -639,9 +631,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.0.tgz", + "integrity": "sha512-bsgTPoyYDnPv8ER0HqnJggXK6RyFy4PH4rtsId0V7Efa90u2+EifxytE9pZnsDgExgkARy24WUQGv9irVbTvIw==", "cpu": [ "x64" ], @@ -655,9 +647,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.0.tgz", + "integrity": "sha512-kQ7jYdlKS335mpGbMW5tEe3IrQFIok9r84EM3PXB8qBFJPSc6dpWfrtsC/y1pyrz82xfUIn5ZrnSHQQsd6jebQ==", "cpu": [ "arm64" ], @@ -671,9 +663,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.0.tgz", + "integrity": "sha512-uG8B0WSepMRsBNVXAQcHf9+Ko/Tr+XqmK7Ptel9HVmnykupXdS4J7ovSQUIi0tQGIndhbqWLaIL/qO/cWhXKyQ==", "cpu": [ "x64" ], @@ -687,9 +679,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.0.tgz", + "integrity": "sha512-2ezuhdiZw8vuHf1HKSf4TIk80naTbP9At7sOqZmdVwvvMyuoDiZB49YZKLsLOfKIr77+I40dWpHVeY5JHpIEIg==", "cpu": [ "arm" ], @@ -703,9 +695,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.0.tgz", + "integrity": "sha512-uTtyYAP5veqi2z9b6Gr0NUoNv9F/rOzI8tOD5jKcCvRUn7T60Bb+42NDBCWNhMjkQzI0qqwXkQGo1SY41G52nw==", "cpu": [ "arm64" ], @@ -719,9 +711,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.0.tgz", + "integrity": "sha512-c88wwtfs8tTffPaoJ+SQn3y+lKtgTzyjkD8NgsyCtCmtoIC8RDL7PrJU05an/e9VuAke6eJqGkoMhJK1RY6z4w==", "cpu": [ "ia32" ], @@ -735,9 +727,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.0.tgz", + "integrity": "sha512-lR2rr/128/6svngnVta6JN4gxSXle/yZEZL3o4XZ6esOqhyR4wsKyfu6qXAL04S4S5CgGfG+GYZnjFd4YiG3Aw==", "cpu": [ "loong64" ], @@ -751,9 +743,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.0.tgz", + "integrity": "sha512-9Sycc+1uUsDnJCelDf6ZNqgZQoK1mJvFtqf2MUz4ujTxGhvCWw+4chYfDLPepMEvVL9PDwn6HrXad5yOrNzIsQ==", "cpu": [ "mips64el" ], @@ -767,9 +759,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.0.tgz", + "integrity": "sha512-CoWSaaAXOZd+CjbUTdXIJE/t7Oz+4g90A3VBCHLbfuc5yUQU/nFDLOzQsN0cdxgXd97lYW/psIIBdjzQIwTBGw==", "cpu": [ "ppc64" ], @@ -783,9 +775,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.0.tgz", + "integrity": "sha512-mlb1hg/eYRJUpv8h/x+4ShgoNLL8wgZ64SUr26KwglTYnwAWjkhR2GpoKftDbPOCnodA9t4Y/b68H4J9XmmPzA==", "cpu": [ "riscv64" ], @@ -799,9 +791,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.0.tgz", + "integrity": "sha512-fgf9ubb53xSnOBqyvWEY6ukBNRl1mVX1srPNu06B6mNsNK20JfH6xV6jECzrQ69/VMiTLvHMicQR/PgTOgqJUQ==", "cpu": [ "s390x" ], @@ -815,9 +807,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.0.tgz", + "integrity": "sha512-H9Eu6MGse++204XZcYsse1yFHmRXEWgadk2N58O/xd50P9EvFMLJTQLg+lB4E1cF2xhLZU5luSWtGTb0l9UeSg==", "cpu": [ "x64" ], @@ -831,9 +823,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.0.tgz", + "integrity": "sha512-lCT675rTN1v8Fo+RGrE5KjSnfY0x9Og4RN7t7lVrN3vMSjy34/+3na0q7RIfWDAj0e0rCh0OL+P88lu3Rt21MQ==", "cpu": [ "x64" ], @@ -847,9 +839,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.0.tgz", + "integrity": "sha512-HKoUGXz/TOVXKQ+67NhxyHv+aDSZf44QpWLa3I1lLvAwGq8x1k0T+e2HHSRvxWhfJrFxaaqre1+YyzQ99KixoA==", "cpu": [ "x64" ], @@ -863,9 +855,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.0.tgz", + "integrity": "sha512-GDwAqgHQm1mVoPppGsoq4WJwT3vhnz/2N62CzhvApFD1eJyTroob30FPpOZabN+FgCjhG+AgcZyOPIkR8dfD7g==", "cpu": [ "x64" ], @@ -879,9 +871,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.0.tgz", + "integrity": "sha512-0vYsP8aC4TvMlOQYozoksiaxjlvUcQrac+muDqj1Fxy6jh9l9CZJzj7zmh8JGfiV49cYLTorFLxg7593pGldwQ==", "cpu": [ "arm64" ], @@ -895,9 +887,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.0.tgz", + "integrity": "sha512-p98u4rIgfh4gdpV00IqknBD5pC84LCub+4a3MO+zjqvU5MVXOc3hqR2UgT2jI2nh3h8s9EQxmOsVI3tyzv1iFg==", "cpu": [ "ia32" ], @@ -911,9 +903,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.0.tgz", + "integrity": "sha512-NgJnesu1RtWihtTtXGFMU5YSE6JyyHPMxCwBZK7a6/8d31GuSo9l0Ss7w1Jw5QnKUawG6UEehs883kcXf5fYwg==", "cpu": [ "x64" ], @@ -1033,13 +1025,13 @@ "dev": true }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -1082,9 +1074,9 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", + "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", "dev": true }, "node_modules/@hutson/parse-repository-url": { @@ -1156,9 +1148,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.20", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz", - "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==", + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", @@ -1210,9 +1202,9 @@ } }, "node_modules/@octokit/core": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.2.tgz", - "integrity": "sha512-cZUy1gUvd4vttMic7C0lwPed8IYXWYp8kHIMatyhY8t8n3Cpw2ILczkV5pGMPqef7v0bLo0pOHrEHarsau2Ydg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.1.0.tgz", + "integrity": "sha512-BDa2VAMLSh3otEiaMJ/3Y36GU4qf6GI+VivQ/P41NC6GHcdxpKlqV0ikSZ5gdQsmS3ojXeRx5vasgNTinF0Q4g==", "dev": true, "dependencies": { "@octokit/auth-token": "^4.0.0", @@ -1347,9 +1339,9 @@ } }, "node_modules/@pkgr/core": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.0.tgz", - "integrity": "sha512-Zwq5OCzuwJC2jwqmpEQt7Ds1DTi6BWSwoGkbb1n9pO3hzb35BoJELx7c0T23iDkBGkh2e7tvOtjF3tr3OaQHDQ==", + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.1.1.tgz", + "integrity": "sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==", "dev": true, "engines": { "node": "^12.20.0 || ^14.18.0 || >=16.0.0" @@ -1400,9 +1392,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.2.tgz", - "integrity": "sha512-RKzxFxBHq9ysZ83fn8Iduv3A283K7zPPYuhL/z9CQuyFrjwpErJx0h4aeb/bnJ+q29GRLgJpY66ceQ/Wcsn3wA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", "cpu": [ "arm" ], @@ -1413,9 +1405,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.2.tgz", - "integrity": "sha512-yZ+MUbnwf3SHNWQKJyWh88ii2HbuHCFQnAYTeeO1Nb8SyEiWASEi5dQUygt3ClHWtA9My9RQAYkjvrsZ0WK8Xg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", "cpu": [ "arm64" ], @@ -1426,9 +1418,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.2.tgz", - "integrity": "sha512-vqJ/pAUh95FLc/G/3+xPqlSBgilPnauVf2EXOQCZzhZJCXDXt/5A8mH/OzU6iWhb3CNk5hPJrh8pqJUPldN5zw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", "cpu": [ "arm64" ], @@ -1439,9 +1431,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.2.tgz", - "integrity": "sha512-otPHsN5LlvedOprd3SdfrRNhOahhVBwJpepVKUN58L0RnC29vOAej1vMEaVU6DadnpjivVsNTM5eNt0CcwTahw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", "cpu": [ "x64" ], @@ -1452,9 +1444,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.2.tgz", - "integrity": "sha512-ewG5yJSp+zYKBYQLbd1CUA7b1lSfIdo9zJShNTyc2ZP1rcPrqyZcNlsHgs7v1zhgfdS+kW0p5frc0aVqhZCiYQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", "cpu": [ "arm" ], @@ -1465,9 +1457,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.2.tgz", - "integrity": "sha512-pL6QtV26W52aCWTG1IuFV3FMPL1m4wbsRG+qijIvgFO/VBsiXJjDPE/uiMdHBAO6YcpV4KvpKtd0v3WFbaxBtg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", "cpu": [ "arm64" ], @@ -1478,9 +1470,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.2.tgz", - "integrity": "sha512-On+cc5EpOaTwPSNetHXBuqylDW+765G/oqB9xGmWU3npEhCh8xu0xqHGUA+4xwZLqBbIZNcBlKSIYfkBm6ko7g==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", "cpu": [ "arm64" ], @@ -1491,9 +1483,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.2.tgz", - "integrity": "sha512-Wnx/IVMSZ31D/cO9HSsU46FjrPWHqtdF8+0eyZ1zIB5a6hXaZXghUKpRrC4D5DcRTZOjml2oBhXoqfGYyXKipw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", "cpu": [ "riscv64" ], @@ -1504,9 +1496,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.2.tgz", - "integrity": "sha512-ym5x1cj4mUAMBummxxRkI4pG5Vht1QMsJexwGP8547TZ0sox9fCLDHw9KCH9c1FO5d9GopvkaJsBIOkTKxksdw==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", "cpu": [ "x64" ], @@ -1517,9 +1509,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.2.tgz", - "integrity": "sha512-m0hYELHGXdYx64D6IDDg/1vOJEaiV8f1G/iO+tejvRCJNSwK4jJ15e38JQy5Q6dGkn1M/9KcyEOwqmlZ2kqaZg==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", "cpu": [ "x64" ], @@ -1530,9 +1522,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.2.tgz", - "integrity": "sha512-x1CWburlbN5JjG+juenuNa4KdedBdXLjZMp56nHFSHTOsb/MI2DYiGzLtRGHNMyydPGffGId+VgjOMrcltOksA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", "cpu": [ "arm64" ], @@ -1543,9 +1535,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.2.tgz", - "integrity": "sha512-VVzCB5yXR1QlfsH1Xw1zdzQ4Pxuzv+CPr5qpElpKhVxlxD3CRdfubAG9mJROl6/dmj5gVYDDWk8sC+j9BI9/kQ==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", "cpu": [ "ia32" ], @@ -1556,9 +1548,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.2.tgz", - "integrity": "sha512-SYRedJi+mweatroB+6TTnJYLts0L0bosg531xnQWtklOI6dezEagx4Q0qDyvRdK+qgdA3YZpjjGuPFtxBmddBA==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", "cpu": [ "x64" ], @@ -2016,9 +2008,9 @@ } }, "node_modules/@semantic-release/npm/node_modules/type-fest": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", - "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -2118,9 +2110,9 @@ } }, "node_modules/@semantic-release/release-notes-generator/node_modules/type-fest": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", - "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -2160,9 +2152,9 @@ } }, "node_modules/@skyleague/axioms": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/@skyleague/axioms/-/axioms-3.0.2.tgz", - "integrity": "sha512-pFBdpUQ6lYtIUVMqo7w83SlXd8Lnc06doNqXcKLl8wznPbvloTIbyK2DR2H8/3BPEET/VPNfPMTBNtQCyu4ltw==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@skyleague/axioms/-/axioms-3.6.0.tgz", + "integrity": "sha512-FqEXkGcOTPFjITtNNU8DZ551K/8qsSbwW9gJnjgi4tN5dM9tdHavqxHtcGObQidaxfI8u+fE3GfX/IktN6xwjQ==", "dev": true, "dependencies": { "fast-deep-equal": "^3.1.3", @@ -2174,42 +2166,42 @@ } }, "node_modules/@skyleague/node-standards": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@skyleague/node-standards/-/node-standards-4.1.0.tgz", - "integrity": "sha512-Cs9MnihQbs/+2YYrb4oEZCJymtJrQu2rcLvN0S4xGZza6gxPfm9vc78iEoYhlnXYlnv7RcgTa0sMdaCP5yi+Rw==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/@skyleague/node-standards/-/node-standards-5.1.9.tgz", + "integrity": "sha512-7gIgSIAW3MQ+80Ggx3by/G8f3tv9Cxdl8yy5tJgLEPge+zWtdvdgLc5S/vIiOYxU+8KOUVcrj25cxwpLolFUZw==", "dev": true, "dependencies": { - "@commitlint/cli": "^18.4.3", - "@commitlint/config-conventional": "^18.4.3", + "@commitlint/cli": "^18.6.0", + "@commitlint/config-conventional": "^18.6.0", "@semantic-release/changelog": "^6.0.3", - "@types/node": "^20.10.5", - "@typescript-eslint/eslint-plugin": "^6.14.0", - "@typescript-eslint/parser": "^6.14.0", - "@vitest/coverage-v8": "^1.0.4", + "@types/node": "^20.11.16", + "@typescript-eslint/eslint-plugin": "^6.20.0", + "@typescript-eslint/parser": "^6.20.0", + "@vitest/coverage-v8": "^1.2.2", "conventional-changelog": "^5.1.0", "enquirer": "^2.4.1", - "esbuild": "^0.19.9", + "esbuild": "^0.20.0", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", "eslint-import-resolver-typescript": "^3.6.1", "eslint-plugin-import": "^2.29.1", - "eslint-plugin-prettier": "^5.0.1", - "eslint-plugin-unicorn": "^49.0.0", + "eslint-plugin-prettier": "^5.1.3", + "eslint-plugin-unicorn": "^50.0.1", "eslint-plugin-unused-imports": "^3.0.0", "fast-glob": "^3.3.2", "find-root": "^1.1.0", - "husky": "^8.0.3", + "husky": "^9.0.10", "is-ci": "^3.0.1", "line-diff": "^2.1.1", - "lint-staged": "^15.2.0", - "prettier": "^3.1.1", - "prettier-plugin-packagejson": "^2.4.7", - "semantic-release": "^22.0.12", + "lint-staged": "^15.2.1", + "prettier": "^3.2.5", + "prettier-plugin-packagejson": "^2.4.10", + "semantic-release": "^23.0.0", "semver": "^7.5.4", "tslib": "^2.6.2", - "tsx": "^4.6.2", + "tsx": "^4.7.0", "variable-diff": "^2.0.2", - "vitest": "^1.0.4", + "vitest": "^1.2.2", "yargs": "^17.7.2" }, "bin": { @@ -2223,12 +2215,12 @@ } }, "node_modules/@skyleague/therefore": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@skyleague/therefore/-/therefore-4.1.0.tgz", - "integrity": "sha512-7oAOeYDeAU/sIMaMEfQu8H58XNpUXhp50DfoO1XkRo7B+ftBhKMl2OMcyFmpUo7uPRGzcXsRmktSD6eOb4t05w==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/@skyleague/therefore/-/therefore-4.1.1.tgz", + "integrity": "sha512-7VzzaSSvBq0blnOOHZzz6+lGwsgcoiaNaVBOoZMQGhqwk798ys58selWGJoieQHxHtWTuXuO24c02s+RcAV6Cw==", "dev": true, "dependencies": { - "@skyleague/axioms": "^3.0.0", + "@skyleague/axioms": "^3.1.0", "camelcase": "^8.0.0", "code-block-writer": "^12.0.0", "decamelize": "^6.0.0", @@ -2252,7 +2244,7 @@ "ajv": "^8.12.0", "got": "^14.0.0", "prettier": "^3.1.1", - "ts-node": "^10.9.2" + "tsx": "^4.7.0" }, "peerDependenciesMeta": { "prettier": { @@ -2272,33 +2264,11 @@ "node": ">=14.16" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true, - "peer": true - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true, - "peer": true + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/http-cache-semantics": { "version": "4.0.4", @@ -2331,9 +2301,9 @@ "dev": true }, "node_modules/@types/node": { - "version": "20.10.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.6.tgz", - "integrity": "sha512-Vac8H+NlRNNlAmDfGUP7b5h/KA+AtWIzuXy0E6OyP8f1tCLYAtPvKRRDJjAPqhpCb0t6U2j7/xqAuLEebW2kiw==", + "version": "20.11.16", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.16.tgz", + "integrity": "sha512-gKb0enTmRCzXSSUJDq6/sPcqrfCv2mkkG6Jt/clpn5eiCbKTY+SgZUxo+p8ZKMof5dCp9vHQUAB7wOUTod22wQ==", "dev": true, "dependencies": { "undici-types": "~5.26.4" @@ -2361,16 +2331,16 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.17.0.tgz", - "integrity": "sha512-Vih/4xLXmY7V490dGwBQJTpIZxH4ZFH6eCVmQ4RFkB+wmaCTDAx4dtgoWwMNGKLkqRY1L6rPqzEbjorRnDo4rQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", + "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", "dev": true, "dependencies": { "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.17.0", - "@typescript-eslint/type-utils": "6.17.0", - "@typescript-eslint/utils": "6.17.0", - "@typescript-eslint/visitor-keys": "6.17.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.2.4", @@ -2396,15 +2366,15 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.17.0.tgz", - "integrity": "sha512-C4bBaX2orvhK+LlwrY8oWGmSl4WolCfYm513gEccdWZj0CwGadbIADb0FtVEcI+WzUyjyoBj2JRP8g25E6IB8A==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", + "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.17.0", - "@typescript-eslint/types": "6.17.0", - "@typescript-eslint/typescript-estree": "6.17.0", - "@typescript-eslint/visitor-keys": "6.17.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4" }, "engines": { @@ -2424,13 +2394,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.17.0.tgz", - "integrity": "sha512-RX7a8lwgOi7am0k17NUO0+ZmMOX4PpjLtLRgLmT1d3lBYdWH4ssBUbwdmc5pdRX8rXon8v9x8vaoOSpkHfcXGA==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", + "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.17.0", - "@typescript-eslint/visitor-keys": "6.17.0" + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" }, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2441,13 +2411,13 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.17.0.tgz", - "integrity": "sha512-hDXcWmnbtn4P2B37ka3nil3yi3VCQO2QEB9gBiHJmQp5wmyQWqnjA85+ZcE8c4FqnaB6lBwMrPkgd4aBYz3iNg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", + "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.17.0", - "@typescript-eslint/utils": "6.17.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", "debug": "^4.3.4", "ts-api-utils": "^1.0.1" }, @@ -2468,9 +2438,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.17.0.tgz", - "integrity": "sha512-qRKs9tvc3a4RBcL/9PXtKSehI/q8wuU9xYJxe97WFxnzH8NWWtcW3ffNS+EWg8uPvIerhjsEZ+rHtDqOCiH57A==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", + "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", "dev": true, "engines": { "node": "^16.0.0 || >=18.0.0" @@ -2481,13 +2451,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.17.0.tgz", - "integrity": "sha512-gVQe+SLdNPfjlJn5VNGhlOhrXz4cajwFd5kAgWtZ9dCZf4XJf8xmgCTLIqec7aha3JwgLI2CK6GY1043FRxZwg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", + "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.17.0", - "@typescript-eslint/visitor-keys": "6.17.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -2509,17 +2479,17 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.17.0.tgz", - "integrity": "sha512-LofsSPjN/ITNkzV47hxas2JCsNCEnGhVvocfyOcLzT9c/tSZE7SfhS/iWtzP1lKNOEfLhRTZz6xqI8N2RzweSQ==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", + "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.12", "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.17.0", - "@typescript-eslint/types": "6.17.0", - "@typescript-eslint/typescript-estree": "6.17.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", "semver": "^7.5.4" }, "engines": { @@ -2534,12 +2504,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.17.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.17.0.tgz", - "integrity": "sha512-H6VwB/k3IuIeQOyYczyyKN8wH6ed8EwliaYHLxOIhyF0dYEIsN8+Bk3GE19qafeMKyZJJHP8+O1HiFhFLUNKSg==", + "version": "6.21.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", + "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.17.0", + "@typescript-eslint/types": "6.21.0", "eslint-visitor-keys": "^3.4.1" }, "engines": { @@ -2557,9 +2527,9 @@ "dev": true }, "node_modules/@vitest/coverage-v8": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.1.tgz", - "integrity": "sha512-TCXSh6sA92t7D5p7HJ64sPCi+szP8E3NiKTsR3YR8vVEVZB9yclQu2btktCthxahKBl7PwheP5OuejYg13xccg==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.2.2.tgz", + "integrity": "sha512-IHyKnDz18SFclIEEAHb9Y4Uxx0sPKC2VO1kdDCs1BF6Ip4S8rQprs971zIsooLUn7Afs71GRxWMWpkCGZpRMhw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", @@ -2570,7 +2540,7 @@ "istanbul-lib-source-maps": "^4.0.1", "istanbul-reports": "^3.1.6", "magic-string": "^0.30.5", - "magicast": "^0.3.2", + "magicast": "^0.3.3", "picocolors": "^1.0.0", "std-env": "^3.5.0", "test-exclude": "^6.0.0", @@ -2584,13 +2554,13 @@ } }, "node_modules/@vitest/expect": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.1.tgz", - "integrity": "sha512-Qpw01C2Hyb3085jBkOJLQ7HRX0Ncnh2qV4p+xWmmhcIUlMykUF69zsnZ1vPmAjZpomw9+5tWEGOQ0GTfR8U+kA==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.2.2.tgz", + "integrity": "sha512-3jpcdPAD7LwHUUiT2pZTj2U82I2Tcgg2oVPvKxhn6mDI2On6tfvPQTjAI4628GUGDZrCm4Zna9iQHm5cEexOAg==", "dev": true, "dependencies": { - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", "chai": "^4.3.10" }, "funding": { @@ -2598,12 +2568,12 @@ } }, "node_modules/@vitest/runner": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.1.tgz", - "integrity": "sha512-8HokyJo1SnSi3uPFKfWm/Oq1qDwLC4QDcVsqpXIXwsRPAg3gIDh8EbZ1ri8cmQkBxdOu62aOF9B4xcqJhvt4xQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.2.2.tgz", + "integrity": "sha512-JctG7QZ4LSDXr5CsUweFgcpEvrcxOV1Gft7uHrvkQ+fsAVylmWQvnaAr/HDp3LAH1fztGMQZugIheTWjaGzYIg==", "dev": true, "dependencies": { - "@vitest/utils": "1.1.1", + "@vitest/utils": "1.2.2", "p-limit": "^5.0.0", "pathe": "^1.1.1" }, @@ -2639,9 +2609,9 @@ } }, "node_modules/@vitest/snapshot": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.1.tgz", - "integrity": "sha512-WnMHjv4VdHLbFGgCdVVvyRkRPnOKN75JJg+LLTdr6ah7YnL75W+7CTIMdzPEPzaDxA8r5yvSVlc1d8lH3yE28w==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.2.2.tgz", + "integrity": "sha512-SmGY4saEw1+bwE1th6S/cZmPxz/Q4JWsl7LvbQIky2tKE35US4gd0Mjzqfr84/4OD0tikGWaWdMja/nWL5NIPA==", "dev": true, "dependencies": { "magic-string": "^0.30.5", @@ -2653,9 +2623,9 @@ } }, "node_modules/@vitest/spy": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.1.tgz", - "integrity": "sha512-hDU2KkOTfFp4WFFPWwHFauddwcKuGQ7gF6Un/ZZkCogoAiTMN7/7YKvUDbywPZZ754iCQGjdUmXN3t4k0jm1IQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.2.2.tgz", + "integrity": "sha512-k9Gcahssw8d7X3pSLq3e3XEu/0L78mUkCjivUqCQeXJm9clfXR/Td8+AP+VC1O6fKPIDLcHDTAmBOINVuv6+7g==", "dev": true, "dependencies": { "tinyspy": "^2.2.0" @@ -2665,12 +2635,13 @@ } }, "node_modules/@vitest/utils": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.1.tgz", - "integrity": "sha512-E9LedH093vST/JuBSyHLFMpxJKW3dLhe/flUSPFedoyj4wKiFX7Jm8gYLtOIiin59dgrssfmFv0BJ1u8P/LC/A==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.2.2.tgz", + "integrity": "sha512-WKITBHLsBHlpjnDQahr+XK6RE7MiAsgrIkr0pGhQ9ygoxBfUeG0lUG5iLlzqjmKSlBv3+j5EGsriBzh+C3Tq9g==", "dev": true, "dependencies": { "diff-sequences": "^29.6.3", + "estree-walker": "^3.0.3", "loupe": "^2.3.7", "pretty-format": "^29.7.0" }, @@ -2700,9 +2671,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.3.1", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", - "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", + "integrity": "sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==", "dev": true, "engines": { "node": ">=0.4.0" @@ -2820,13 +2791,6 @@ "integrity": "sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==", "dev": true }, - "node_modules/arg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true, - "peer": true - }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2840,13 +2804,16 @@ "dev": true }, "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -2886,6 +2853,25 @@ "node": ">=8" } }, + "node_modules/array.prototype.filter": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", + "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-array-method-boxes-properly": "^1.0.0", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/array.prototype.findlastindex": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", @@ -2942,17 +2928,18 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", "dev": true, "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", "is-shared-array-buffer": "^1.0.2" }, "engines": { @@ -2981,9 +2968,9 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", + "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", "dev": true, "engines": { "node": ">= 0.4" @@ -3031,6 +3018,38 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/builtin-modules": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", @@ -3155,6 +3174,26 @@ "node": ">=8" } }, + "node_modules/caniuse-lite": { + "version": "1.0.30001584", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001584.tgz", + "integrity": "sha512-LOz7CCQ9M1G7OjJOF9/mzmqmj3jE/7VOmrfw6Mgs0E8cjOsbRXQJHsPBfmBOXDskXKrHLyyW3n7kpDW/4BsfpQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, "node_modules/cardinal": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", @@ -3169,9 +3208,9 @@ } }, "node_modules/chai": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", - "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.4.1.tgz", + "integrity": "sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", @@ -3224,9 +3263,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -3692,6 +3731,19 @@ "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", "dev": true }, + "node_modules/core-js-compat": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", + "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "dev": true, + "dependencies": { + "browserslist": "^4.22.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -3741,13 +3793,6 @@ "typescript": ">=4" } }, - "node_modules/create-require": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true, - "peer": true - }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -3982,16 +4027,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/diff": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, - "peer": true, - "engines": { - "node": ">=0.3.1" - } - }, "node_modules/diff-sequences": { "version": "29.6.3", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", @@ -4046,6 +4081,12 @@ "readable-stream": "^2.0.2" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.656", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.656.tgz", + "integrity": "sha512-9AQB5eFTHyR3Gvt2t/NwR0le2jBSUNwCnMbUCejFWHD+so4tH40/dRLgoE+jxlPeWS43XJewyvCv+I8LPMl49Q==", + "dev": true + }, "node_modules/emoji-regex": { "version": "10.3.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.3.0.tgz", @@ -4085,9 +4126,9 @@ } }, "node_modules/env-ci": { - "version": "10.0.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-10.0.0.tgz", - "integrity": "sha512-U4xcd/utDYFgMh0yWj07R1H6L5fwhVbmxBCpnL0DbVSDZVnsC82HONw0wxtxNkIAcua3KtbomQvIk5xFZGAQJw==", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-11.0.0.tgz", + "integrity": "sha512-apikxMgkipkgTvMdRT9MNqWx5VLOci79F4VBd7Op/7OPjjoanjdAvn6fglMCCEf/1bAh8eOiuEVCUs4V3qP3nQ==", "dev": true, "dependencies": { "execa": "^8.0.0", @@ -4231,6 +4272,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -4293,6 +4343,21 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es-array-method-boxes-properly": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", + "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", + "dev": true + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/es-set-tostringtag": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", @@ -4340,9 +4405,9 @@ "dev": true }, "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "version": "0.20.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.0.tgz", + "integrity": "sha512-6iwE3Y2RVYCME1jLpBqq7LQWK3MW6vjV2bZy6gt/WrqkY+WE74Spyc0ThAOYpMtITvnjX09CrC6ym7A/m9mebA==", "dev": true, "hasInstallScript": true, "bin": { @@ -4352,35 +4417,35 @@ "node": ">=12" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" + "@esbuild/aix-ppc64": "0.20.0", + "@esbuild/android-arm": "0.20.0", + "@esbuild/android-arm64": "0.20.0", + "@esbuild/android-x64": "0.20.0", + "@esbuild/darwin-arm64": "0.20.0", + "@esbuild/darwin-x64": "0.20.0", + "@esbuild/freebsd-arm64": "0.20.0", + "@esbuild/freebsd-x64": "0.20.0", + "@esbuild/linux-arm": "0.20.0", + "@esbuild/linux-arm64": "0.20.0", + "@esbuild/linux-ia32": "0.20.0", + "@esbuild/linux-loong64": "0.20.0", + "@esbuild/linux-mips64el": "0.20.0", + "@esbuild/linux-ppc64": "0.20.0", + "@esbuild/linux-riscv64": "0.20.0", + "@esbuild/linux-s390x": "0.20.0", + "@esbuild/linux-x64": "0.20.0", + "@esbuild/netbsd-x64": "0.20.0", + "@esbuild/openbsd-x64": "0.20.0", + "@esbuild/sunos-x64": "0.20.0", + "@esbuild/win32-arm64": "0.20.0", + "@esbuild/win32-ia32": "0.20.0", + "@esbuild/win32-x64": "0.20.0" } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -4620,9 +4685,9 @@ } }, "node_modules/eslint-plugin-prettier": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.2.tgz", - "integrity": "sha512-dhlpWc9vOwohcWmClFcA+HjlvUpuyynYs0Rf+L/P6/0iQE6vlHW9l5bkfzN62/Stm9fbq8ku46qzde76T1xlSg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz", + "integrity": "sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==", "dev": true, "dependencies": { "prettier-linter-helpers": "^1.0.0", @@ -4650,15 +4715,17 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "49.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-49.0.0.tgz", - "integrity": "sha512-0fHEa/8Pih5cmzFW5L7xMEfUTvI9WKeQtjmKpTUmY+BiFCDxkxrTdnURJOHKykhtwIeyYsxnecbGvDCml++z4Q==", + "version": "50.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-50.0.1.tgz", + "integrity": "sha512-KxenCZxqSYW0GWHH18okDlOQcpezcitm5aOSz6EnobyJ6BIByiPDviQRjJIUAjG/tMN11958MxaQ+qCoU6lfDA==", "dev": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^2.1.4", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.34.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", @@ -4677,7 +4744,7 @@ "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.52.0" + "eslint": ">=8.56.0" } }, "node_modules/eslint-plugin-unicorn/node_modules/find-up": { @@ -4974,6 +5041,15 @@ "node": ">=4.0" } }, + "node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, "node_modules/esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", @@ -5070,9 +5146,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" @@ -5315,16 +5391,20 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.3.tgz", + "integrity": "sha512-JIcZczvcMVE7AUOP+X72bh8HqHBRxFdz5PDHYtNG/lE3yk9b3KZBJlwFcTyPYjg3L4RLLmZJzvjxhaZVapxFrQ==", "dev": true, "dependencies": { + "es-errors": "^1.0.0", "function-bind": "^1.1.2", "has-proto": "^1.0.1", "has-symbols": "^1.0.3", "hasown": "^2.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -5824,9 +5904,9 @@ } }, "node_modules/got": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/got/-/got-14.0.0.tgz", - "integrity": "sha512-X01vTgaX9SwaMq5DfImvS+3GMQFFs5HtrrlS9CuzUSzkxAf/tWGEyynuI+Qy7BjciMczZGjyVSmawYbP4eYhYA==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/got/-/got-14.2.0.tgz", + "integrity": "sha512-dBq2KkHcQl3AwPoIWsLsQScCPpUgRulz1qZVthjPYKYOPmYfBnekR3vxecjZbm91Vc3JUGnV9mqFX7B+Fe2quw==", "dev": true, "dependencies": { "@sindresorhus/is": "^6.1.0", @@ -5957,12 +6037,12 @@ } }, "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, "dependencies": { - "has-symbols": "^1.0.2" + "has-symbols": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -6074,24 +6154,24 @@ } }, "node_modules/husky": { - "version": "8.0.3", - "resolved": "https://registry.npmjs.org/husky/-/husky-8.0.3.tgz", - "integrity": "sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==", + "version": "9.0.10", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.0.10.tgz", + "integrity": "sha512-TQGNknoiy6bURzIO77pPRu+XHi6zI7T93rX+QnJsoYFf3xdjKOur+IlfqzJGMHIK/wXrLg+GsvMs8Op7vI2jVA==", "dev": true, "bin": { - "husky": "lib/bin.js" + "husky": "bin.mjs" }, "engines": { - "node": ">=14" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/typicode" } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -6237,14 +6317,16 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", "dev": true, "dependencies": { "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6323,6 +6405,21 @@ "is-ci": "bin.js" } }, + "node_modules/is-ci/node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "engines": { + "node": ">=8" + } + }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -6532,12 +6629,12 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", "dev": true, "dependencies": { - "which-typed-array": "^1.1.11" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -6744,9 +6841,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", - "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", + "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", "dev": true }, "node_modules/jsonfile": { @@ -6857,9 +6954,9 @@ "dev": true }, "node_modules/lint-staged": { - "version": "15.2.0", - "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.0.tgz", - "integrity": "sha512-TFZzUEV00f+2YLaVPWBWGAMq7So6yQx+GG8YRMDeOEIf95Zn5RyiLMsEiX4KTNl9vq/w+NqRJkLA1kPIo15ufQ==", + "version": "15.2.2", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.2.tgz", + "integrity": "sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==", "dev": true, "dependencies": { "chalk": "5.3.0", @@ -6867,7 +6964,7 @@ "debug": "4.3.4", "execa": "8.0.1", "lilconfig": "3.0.0", - "listr2": "8.0.0", + "listr2": "8.0.1", "micromatch": "4.0.5", "pidtree": "0.6.0", "string-argv": "0.3.2", @@ -7030,9 +7127,9 @@ } }, "node_modules/listr2": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.0.tgz", - "integrity": "sha512-u8cusxAcyqAiQ2RhYvV7kRKNLgUvtObIbhOX2NCXqvp1UU32xIg5CT22ykS2TPKJXZWJwtK3IKLiqAGlGNE+Zg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.0.1.tgz", + "integrity": "sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==", "dev": true, "dependencies": { "cli-truncate": "^4.0.0", @@ -7312,18 +7409,18 @@ } }, "node_modules/lru-cache": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz", - "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==", + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", "dev": true, "engines": { "node": "14 || >=16.14" } }, "node_modules/magic-string": { - "version": "0.30.5", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", - "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" @@ -7333,13 +7430,13 @@ } }, "node_modules/magicast": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.2.tgz", - "integrity": "sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.3.tgz", + "integrity": "sha512-ZbrP1Qxnpoes8sz47AM0z08U+jW6TyRgZzcWy3Ma3vDhJttwMwAFDMMQFobwdBxByBD46JYmxRzeF7w2+wJEuw==", "dev": true, "dependencies": { - "@babel/parser": "^7.23.3", - "@babel/types": "^7.23.3", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", "source-map-js": "^1.0.2" } }, @@ -7358,13 +7455,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/make-error": { - "version": "1.3.6", - "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true, - "peer": true - }, "node_modules/make-synchronous": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/make-synchronous/-/make-synchronous-1.0.0.tgz", @@ -7406,15 +7496,15 @@ } }, "node_modules/marked": { - "version": "9.1.6", - "resolved": "https://registry.npmjs.org/marked/-/marked-9.1.6.tgz", - "integrity": "sha512-jcByLnIFkd5gSXZmjNvS1TlmRhCXZjIzHYlaGkPlLIekG55JDR2Z4va9tZwCiP+/RDERiNhMOFu01xd6O5ct1Q==", + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-11.2.0.tgz", + "integrity": "sha512-HR0m3bvu0jAPYiIvLUUQtdg1g6D247//lvcekpHO1WMvbwDlwSkZAX9Lw4F4YHE1T0HaaNve0tuAWuV1UJ6vtw==", "dev": true, "bin": { "marked": "bin/marked.js" }, "engines": { - "node": ">= 16" + "node": ">= 18" } }, "node_modules/marked-terminal": { @@ -7582,15 +7672,15 @@ } }, "node_modules/mlly": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", - "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.5.0.tgz", + "integrity": "sha512-NPVQvAY1xr1QoVeG0cy8yUYC7FQcOx6evl/RjT1wL5FvzPnzOysoqB/jmx/DhssT2dYa8nxECLAaFI/+gVLhDQ==", "dev": true, "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", + "acorn": "^8.11.3", + "pathe": "^1.1.2", "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "ufo": "^1.3.2" } }, "node_modules/ms": { @@ -7636,9 +7726,9 @@ "dev": true }, "node_modules/nock": { - "version": "13.4.0", - "resolved": "https://registry.npmjs.org/nock/-/nock-13.4.0.tgz", - "integrity": "sha512-W8NVHjO/LCTNA64yxAPHV/K47LpGYcVzgKd3Q0n6owhwvD0Dgoterc25R4rnZbckJEb6Loxz1f5QMuJpJnbSyQ==", + "version": "13.5.1", + "resolved": "https://registry.npmjs.org/nock/-/nock-13.5.1.tgz", + "integrity": "sha512-+s7b73fzj5KnxbKH4Oaqz07tQ8degcMilU4rrmnKvI//b0JMBU4wEXFQ8zqr+3+L4eWSfU3H/UoIVGUV0tue1Q==", "dev": true, "dependencies": { "debug": "^4.1.0", @@ -7727,6 +7817,12 @@ "es6-promise": "^3.2.1" } }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, "node_modules/normalize-package-data": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-6.0.0.tgz", @@ -7755,9 +7851,9 @@ } }, "node_modules/npm": { - "version": "10.2.5", - "resolved": "https://registry.npmjs.org/npm/-/npm-10.2.5.tgz", - "integrity": "sha512-lXdZ7titEN8CH5YJk9C/aYRU9JeDxQ4d8rwIIDsvH3SMjLjHTukB2CFstMiB30zXs4vCrPN2WH6cDq1yHBeJAw==", + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-10.4.0.tgz", + "integrity": "sha512-RS7Mx0OVfXlOcQLRePuDIYdFCVBPCNapWHplDK+mh7GDdP/Tvor4ocuybRRPSvfcRb2vjRJt1fHCqw3cr8qACQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -7821,7 +7917,6 @@ "semver", "spdx-expression-parse", "ssri", - "strip-ansi", "supports-color", "tar", "text-table", @@ -7839,12 +7934,12 @@ "@npmcli/fs": "^3.1.0", "@npmcli/map-workspaces": "^3.0.4", "@npmcli/package-json": "^5.0.0", - "@npmcli/promise-spawn": "^7.0.0", - "@npmcli/run-script": "^7.0.2", - "@sigstore/tuf": "^2.2.0", + "@npmcli/promise-spawn": "^7.0.1", + "@npmcli/run-script": "^7.0.4", + "@sigstore/tuf": "^2.3.0", "abbrev": "^2.0.0", "archy": "~1.0.0", - "cacache": "^18.0.1", + "cacache": "^18.0.2", "chalk": "^5.3.0", "ci-info": "^4.0.0", "cli-columns": "^4.0.0", @@ -7887,7 +7982,7 @@ "npm-user-validate": "^2.0.0", "npmlog": "^7.0.1", "p-map": "^4.0.0", - "pacote": "^17.0.5", + "pacote": "^17.0.6", "parse-conflict-json": "^3.0.1", "proc-log": "^3.0.0", "qrcode-terminal": "^0.12.0", @@ -7895,7 +7990,6 @@ "semver": "^7.5.4", "spdx-expression-parse": "^3.0.1", "ssri": "^10.0.5", - "strip-ansi": "^7.1.0", "supports-color": "^9.4.0", "tar": "^6.2.0", "text-table": "~0.2.0", @@ -7952,7 +8046,19 @@ "node": ">=12" } }, - "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "dev": true, + "inBundle": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/emoji-regex": { "version": "9.2.2", "dev": true, "inBundle": true, @@ -7975,6 +8081,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm/node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/npm/node_modules/@isaacs/string-locale-compare": { "version": "1.1.0", "dev": true, @@ -7998,7 +8119,7 @@ } }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "7.2.2", + "version": "7.3.1", "dev": true, "inBundle": true, "license": "ISC", @@ -8030,7 +8151,7 @@ "parse-conflict-json": "^3.0.0", "proc-log": "^3.0.0", "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.2", + "promise-call-limit": "^3.0.1", "read-package-json-fast": "^3.0.2", "semver": "^7.3.7", "ssri": "^10.0.5", @@ -8045,7 +8166,7 @@ } }, "node_modules/npm/node_modules/@npmcli/config": { - "version": "8.0.3", + "version": "8.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -8103,7 +8224,7 @@ } }, "node_modules/npm/node_modules/@npmcli/git": { - "version": "5.0.3", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -8204,7 +8325,7 @@ } }, "node_modules/npm/node_modules/@npmcli/promise-spawn": { - "version": "7.0.0", + "version": "7.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -8228,15 +8349,15 @@ } }, "node_modules/npm/node_modules/@npmcli/run-script": { - "version": "7.0.2", + "version": "7.0.4", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/node-gyp": "^3.0.0", + "@npmcli/package-json": "^5.0.0", "@npmcli/promise-spawn": "^7.0.0", "node-gyp": "^10.0.0", - "read-package-json-fast": "^3.0.0", "which": "^4.0.0" }, "engines": { @@ -8254,7 +8375,7 @@ } }, "node_modules/npm/node_modules/@sigstore/bundle": { - "version": "2.1.0", + "version": "2.1.1", "dev": true, "inBundle": true, "license": "Apache-2.0", @@ -8265,6 +8386,15 @@ "node": "^16.14.0 || >=18.0.0" } }, + "node_modules/npm/node_modules/@sigstore/core": { + "version": "0.2.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, "node_modules/npm/node_modules/@sigstore/protobuf-specs": { "version": "0.2.1", "dev": true, @@ -8275,12 +8405,13 @@ } }, "node_modules/npm/node_modules/@sigstore/sign": { - "version": "2.2.0", + "version": "2.2.1", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", "make-fetch-happen": "^13.0.0" }, @@ -8289,13 +8420,27 @@ } }, "node_modules/npm/node_modules/@sigstore/tuf": { - "version": "2.2.0", + "version": "2.3.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { "@sigstore/protobuf-specs": "^0.2.1", - "tuf-js": "^2.1.0" + "tuf-js": "^2.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/npm/node_modules/@sigstore/verify": { + "version": "0.1.0", + "dev": true, + "inBundle": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", + "@sigstore/protobuf-specs": "^0.2.1" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -8332,18 +8477,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/abort-controller": { - "version": "3.0.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "event-target-shim": "^5.0.0" - }, - "engines": { - "node": ">=6.5" - } - }, "node_modules/npm/node_modules/agent-base": { "version": "7.1.0", "dev": true, @@ -8370,15 +8503,12 @@ } }, "node_modules/npm/node_modules/ansi-regex": { - "version": "6.0.1", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=8" } }, "node_modules/npm/node_modules/ansi-styles": { @@ -8406,14 +8536,10 @@ "license": "MIT" }, "node_modules/npm/node_modules/are-we-there-yet": { - "version": "4.0.1", + "version": "4.0.2", "dev": true, "inBundle": true, "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^4.1.0" - }, "engines": { "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } @@ -8424,26 +8550,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/base64-js": { - "version": "1.5.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/bin-links": { "version": "4.0.3", "dev": true, @@ -8477,30 +8583,6 @@ "balanced-match": "^1.0.0" } }, - "node_modules/npm/node_modules/buffer": { - "version": "6.0.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, "node_modules/npm/node_modules/builtins": { "version": "5.0.1", "dev": true, @@ -8511,7 +8593,7 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "18.0.1", + "version": "18.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -8603,27 +8685,6 @@ "node": ">= 10" } }, - "node_modules/npm/node_modules/cli-columns/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/cli-columns/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/cli-table3": { "version": "0.6.3", "dev": true, @@ -8697,27 +8758,6 @@ "node": ">=8.0.0" } }, - "node_modules/npm/node_modules/columnify/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/columnify/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/common-ancestor-path": { "version": "1.0.1", "dev": true, @@ -8806,12 +8846,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm/node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "inBundle": true, - "license": "MIT" - }, "node_modules/npm/node_modules/diff": { "version": "5.1.0", "dev": true, @@ -8858,24 +8892,6 @@ "inBundle": true, "license": "MIT" }, - "node_modules/npm/node_modules/event-target-shim": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/npm/node_modules/events": { - "version": "3.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=0.8.x" - } - }, "node_modules/npm/node_modules/exponential-backoff": { "version": "3.1.1", "dev": true, @@ -8947,27 +8963,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/glob": { "version": "10.3.10", "dev": true, @@ -9071,26 +9066,6 @@ "node": ">=0.10.0" } }, - "node_modules/npm/node_modules/ieee754": { - "version": "1.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "BSD-3-Clause" - }, "node_modules/npm/node_modules/ignore-walk": { "version": "6.0.4", "dev": true, @@ -9282,7 +9257,7 @@ } }, "node_modules/npm/node_modules/libnpmdiff": { - "version": "6.0.4", + "version": "6.0.6", "dev": true, "inBundle": true, "license": "ISC", @@ -9302,7 +9277,7 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "7.0.5", + "version": "7.0.7", "dev": true, "inBundle": true, "license": "ISC", @@ -9324,7 +9299,7 @@ } }, "node_modules/npm/node_modules/libnpmfund": { - "version": "5.0.2", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -9362,7 +9337,7 @@ } }, "node_modules/npm/node_modules/libnpmpack": { - "version": "6.0.4", + "version": "6.0.6", "dev": true, "inBundle": true, "license": "ISC", @@ -9377,7 +9352,7 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "9.0.3", + "version": "9.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -9388,7 +9363,7 @@ "npm-registry-fetch": "^16.0.0", "proc-log": "^3.0.0", "semver": "^7.3.7", - "sigstore": "^2.1.0", + "sigstore": "^2.2.0", "ssri": "^10.0.5" }, "engines": { @@ -9787,7 +9762,7 @@ } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "8.0.1", + "version": "8.0.2", "dev": true, "inBundle": true, "license": "ISC", @@ -9884,7 +9859,7 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "17.0.5", + "version": "17.0.6", "dev": true, "inBundle": true, "license": "ISC", @@ -9904,7 +9879,7 @@ "promise-retry": "^2.0.1", "read-package-json": "^7.0.0", "read-package-json-fast": "^3.0.0", - "sigstore": "^2.0.0", + "sigstore": "^2.2.0", "ssri": "^10.0.0", "tar": "^6.1.11" }, @@ -9955,7 +9930,7 @@ } }, "node_modules/npm/node_modules/postcss-selector-parser": { - "version": "6.0.13", + "version": "6.0.15", "dev": true, "inBundle": true, "license": "MIT", @@ -9976,15 +9951,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/process": { - "version": "0.11.10", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 0.6.0" - } - }, "node_modules/npm/node_modules/promise-all-reject-late": { "version": "1.0.1", "dev": true, @@ -9995,7 +9961,7 @@ } }, "node_modules/npm/node_modules/promise-call-limit": { - "version": "1.0.2", + "version": "3.0.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10091,71 +10057,35 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/readable-stream": { - "version": "4.4.2", + "node_modules/npm/node_modules/retry": { + "version": "0.12.0", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "abort-controller": "^3.0.0", - "buffer": "^6.0.3", - "events": "^3.3.0", - "process": "^0.11.10", - "string_decoder": "^1.3.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 4" } }, - "node_modules/npm/node_modules/retry": { - "version": "0.12.0", + "node_modules/npm/node_modules/safer-buffer": { + "version": "2.1.2", "dev": true, "inBundle": true, "license": "MIT", + "optional": true + }, + "node_modules/npm/node_modules/semver": { + "version": "7.5.4", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/safe-buffer": { - "version": "5.2.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "inBundle": true, - "license": "MIT" - }, - "node_modules/npm/node_modules/safer-buffer": { - "version": "2.1.2", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true - }, - "node_modules/npm/node_modules/semver": { - "version": "7.5.4", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" + "node": ">=10" } }, "node_modules/npm/node_modules/semver/node_modules/lru-cache": { @@ -10210,15 +10140,17 @@ } }, "node_modules/npm/node_modules/sigstore": { - "version": "2.1.0", + "version": "2.2.0", "dev": true, "inBundle": true, "license": "Apache-2.0", "dependencies": { - "@sigstore/bundle": "^2.1.0", + "@sigstore/bundle": "^2.1.1", + "@sigstore/core": "^0.2.0", "@sigstore/protobuf-specs": "^0.2.1", - "@sigstore/sign": "^2.1.0", - "@sigstore/tuf": "^2.1.0" + "@sigstore/sign": "^2.2.1", + "@sigstore/tuf": "^2.3.0", + "@sigstore/verify": "^0.1.0" }, "engines": { "node": "^16.14.0 || >=18.0.0" @@ -10306,15 +10238,6 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/npm/node_modules/string_decoder": { - "version": "1.3.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, "node_modules/npm/node_modules/string-width": { "version": "4.2.3", "dev": true, @@ -10344,37 +10267,7 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/string-width-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width-cjs/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/npm/node_modules/string-width/node_modules/strip-ansi": { + "node_modules/npm/node_modules/strip-ansi": { "version": "6.0.1", "dev": true, "inBundle": true, @@ -10386,21 +10279,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/strip-ansi": { - "version": "7.1.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, "node_modules/npm/node_modules/strip-ansi-cjs": { "name": "strip-ansi", "version": "6.0.1", @@ -10414,15 +10292,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/strip-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/supports-color": { "version": "9.4.0", "dev": true, @@ -10507,7 +10376,7 @@ } }, "node_modules/npm/node_modules/tuf-js": { - "version": "2.1.0", + "version": "2.2.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10655,15 +10524,6 @@ "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, @@ -10679,16 +10539,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm/node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "node_modules/npm/node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "6.0.1", "dev": true, "inBundle": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/npm/node_modules/wrap-ansi/node_modules/emoji-regex": { @@ -10714,6 +10574,21 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/npm/node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/npm/node_modules/write-file-atomic": { "version": "5.0.1", "dev": true, @@ -10884,15 +10759,16 @@ } }, "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.2.tgz", + "integrity": "sha512-bzBq58S+x+uo0VjurFT0UktpKHOZmv4/xePiOA1nbB9pMqpGK7rUPNgf+1YC+7mE+0HzhTMqNUuCqvKhj6FnBw==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "array.prototype.filter": "^1.0.3", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.0.0" } }, "node_modules/object.values": { @@ -11134,9 +11010,9 @@ } }, "node_modules/pathe": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", - "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", + "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", "dev": true }, "node_modules/pathval": { @@ -11288,9 +11164,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", "dev": true, "funding": [ { @@ -11325,9 +11201,9 @@ } }, "node_modules/prettier": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.1.1.tgz", - "integrity": "sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==", + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", + "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", "dev": true, "bin": { "prettier": "bin/prettier.cjs" @@ -11352,13 +11228,13 @@ } }, "node_modules/prettier-plugin-packagejson": { - "version": "2.4.8", - "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.8.tgz", - "integrity": "sha512-ZK37c6pRUKeUIpQWNEdMgNUiGSG5BTfeeAIA01mRjVGTfWxxVzM55Cs+LaHyweFJbEgkgCNsqMA3LGEAjfOPtA==", + "version": "2.4.10", + "resolved": "https://registry.npmjs.org/prettier-plugin-packagejson/-/prettier-plugin-packagejson-2.4.10.tgz", + "integrity": "sha512-qFzOfQDHi1tzvVJRuZ2jh1j6IFV5MURh5m5WDt+qfEMOf4SSL5RpwSysiX8u0W1PJYsM0vKJGNULt43wwteKiQ==", "dev": true, "dependencies": { - "sort-package-json": "2.6.0", - "synckit": "0.8.8" + "sort-package-json": "2.7.0", + "synckit": "0.9.0" }, "peerDependencies": { "prettier": ">= 1.16.0" @@ -11369,6 +11245,22 @@ } } }, + "node_modules/prettier-plugin-packagejson/node_modules/synckit": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.9.0.tgz", + "integrity": "sha512-7RnqIMq572L8PeEzKeBINYEJDDxpcH8JEgLwUqBd3TkofhFRbkq4QLR0u+36avGAhCRbk2nnmjcW9SE531hPDg==", + "dev": true, + "dependencies": { + "@pkgr/core": "^0.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/pretty-format": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", @@ -11592,9 +11484,9 @@ } }, "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", - "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -11665,9 +11557,9 @@ } }, "node_modules/read-pkg/node_modules/type-fest": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", - "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -11899,9 +11791,9 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", - "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, "node_modules/rimraf": { @@ -11920,10 +11812,13 @@ } }, "node_modules/rollup": { - "version": "4.9.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.2.tgz", - "integrity": "sha512-66RB8OtFKUTozmVEh3qyNfH+b+z2RXBVloqO2KCC/pjFaGaHtxP9fVfOQKPSGXg2mElmjmxjW/fZ7iKrEpMH5Q==", + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, "bin": { "rollup": "dist/bin/rollup" }, @@ -11932,19 +11827,19 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.9.2", - "@rollup/rollup-android-arm64": "4.9.2", - "@rollup/rollup-darwin-arm64": "4.9.2", - "@rollup/rollup-darwin-x64": "4.9.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.9.2", - "@rollup/rollup-linux-arm64-gnu": "4.9.2", - "@rollup/rollup-linux-arm64-musl": "4.9.2", - "@rollup/rollup-linux-riscv64-gnu": "4.9.2", - "@rollup/rollup-linux-x64-gnu": "4.9.2", - "@rollup/rollup-linux-x64-musl": "4.9.2", - "@rollup/rollup-win32-arm64-msvc": "4.9.2", - "@rollup/rollup-win32-ia32-msvc": "4.9.2", - "@rollup/rollup-win32-x64-msvc": "4.9.2", + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", "fsevents": "~2.3.2" } }, @@ -11972,13 +11867,13 @@ } }, "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.0.tgz", + "integrity": "sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "has-symbols": "^1.0.3", "isarray": "^2.0.5" }, @@ -11996,23 +11891,26 @@ "dev": true }, "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.2.tgz", + "integrity": "sha512-83S9w6eFq12BBIJYvjMux6/dkirb8+4zJRA9cxNBVb7Wq5fJBW+Xze48WqR8pxua7bDuAaaAxtVVd4Idjp1dBQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", + "call-bind": "^1.0.5", + "get-intrinsic": "^1.2.2", "is-regex": "^1.1.4" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/semantic-release": { - "version": "22.0.12", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-22.0.12.tgz", - "integrity": "sha512-0mhiCR/4sZb00RVFJIUlMuiBkW3NMpVIW2Gse7noqEMoFGkvfPPAImEQbkBV8xga4KOPP4FdTRYuLLy32R1fPw==", + "version": "23.0.0", + "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-23.0.0.tgz", + "integrity": "sha512-Jz7jEWO2igTtske112gC4PPE2whCMVrsgxUPG3/SZI7VE357suIUZFlJd1Yu0g2I6RPc2HxNEfUg7KhmDTjwqg==", "dev": true, "dependencies": { "@semantic-release/commit-analyzer": "^11.0.0", @@ -12021,9 +11919,9 @@ "@semantic-release/npm": "^11.0.0", "@semantic-release/release-notes-generator": "^12.0.0", "aggregate-error": "^5.0.0", - "cosmiconfig": "^8.0.0", + "cosmiconfig": "^9.0.0", "debug": "^4.0.0", - "env-ci": "^10.0.0", + "env-ci": "^11.0.0", "execa": "^8.0.0", "figures": "^6.0.0", "find-versions": "^5.1.0", @@ -12033,7 +11931,7 @@ "hosted-git-info": "^7.0.0", "import-from-esm": "^1.3.1", "lodash-es": "^4.17.21", - "marked": "^9.0.0", + "marked": "^11.0.0", "marked-terminal": "^6.0.0", "micromatch": "^4.0.2", "p-each-series": "^3.0.0", @@ -12049,7 +11947,7 @@ "semantic-release": "bin/semantic-release.js" }, "engines": { - "node": "^18.17 || >=20.6.1" + "node": ">=20.8.1" } }, "node_modules/semantic-release/node_modules/@semantic-release/error": { @@ -12092,6 +11990,32 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/cosmiconfig": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", @@ -12214,23 +12138,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semantic-release/node_modules/parse-json": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", - "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.22.13", - "index-to-position": "^0.1.2", - "type-fest": "^4.7.1" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/semantic-release/node_modules/path-key": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", @@ -12280,6 +12187,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/semantic-release/node_modules/read-pkg/node_modules/parse-json": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-8.1.0.tgz", + "integrity": "sha512-rum1bPifK5SSar35Z6EKZuYPJx85pkNaFrxBK3mwdfSJ1/WKbYrjoW/zTPSjRRamfmVX1ACBIdFAO0VRErW/EA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "index-to-position": "^0.1.2", + "type-fest": "^4.7.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/semantic-release/node_modules/signal-exit": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", @@ -12305,9 +12229,9 @@ } }, "node_modules/semantic-release/node_modules/type-fest": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.9.0.tgz", - "integrity": "sha512-KS/6lh/ynPGiHD/LnAobrEFq3Ad4pBzOlJ1wAnJx9N4EYoqFhMfLIBjUT2UEx4wg5ZE+cC1ob6DCSpppVo+rtg==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-4.10.2.tgz", + "integrity": "sha512-anpAG63wSpdEbLwOqH8L84urkL6PiVIov3EMmgIhhThevh9aiMQov+6Btx0wldNcvm4wV+e2/Rt1QdDwKHFbHw==", "dev": true, "engines": { "node": ">=16" @@ -12317,9 +12241,9 @@ } }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dev": true, "dependencies": { "lru-cache": "^6.0.0" @@ -12371,15 +12295,16 @@ } }, "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", "dev": true, "dependencies": { "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -12653,9 +12578,9 @@ "dev": true }, "node_modules/sort-package-json": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.6.0.tgz", - "integrity": "sha512-XSQ+lY9bAYA8ZsoChcEoPlgcSMaheziEp1beox1JVxy1SV4F2jSq9+h2rJ+3mC/Dhu9Ius1DLnInD5AWcsDXZw==", + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/sort-package-json/-/sort-package-json-2.7.0.tgz", + "integrity": "sha512-6AayF8bp6L+WROgpbhTMUtB9JSFmpGHjmW7DyaNPS1HwlTw2oSVlUUtlkHSEZmg5o89F3zvLBZNvMeZ1T4fjQg==", "dev": true, "dependencies": { "detect-indent": "^7.0.1", @@ -12736,9 +12661,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", + "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==", "dev": true }, "node_modules/spdx-expression-parse": { @@ -12806,9 +12731,9 @@ } }, "node_modules/string-width": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.0.0.tgz", - "integrity": "sha512-GPQHj7row82Hjo9hKZieKcHIhaAIKOJvFSIZXuCU9OASVZrMNUaZuz++SPVrBjnLsnk4k+z9f2EIypgxf2vNFw==", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.1.0.tgz", + "integrity": "sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==", "dev": true, "dependencies": { "emoji-regex": "^10.3.0", @@ -13221,15 +13146,15 @@ } }, "node_modules/tinybench": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", - "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.6.0.tgz", + "integrity": "sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==", "dev": true }, "node_modules/tinypool": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", - "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.2.tgz", + "integrity": "sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==", "dev": true, "engines": { "node": ">=14.0.0" @@ -13293,65 +13218,21 @@ } }, "node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.0.tgz", + "integrity": "sha512-d+3WxW4r8WQy2cZWpNRPPGExX8ffOLGcIhheUANKbL5Sqjbhkneki76fRAWeXkaslV2etTb4tSJBSxOsH5+CJw==", "dev": true, "engines": { - "node": ">=16.13.0" + "node": ">=18" }, "peerDependencies": { "typescript": ">=4.2.0" } }, - "node_modules/ts-node": { - "version": "10.9.2", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz", - "integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==", - "dev": true, - "peer": true, - "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, "dependencies": { "@types/json5": "^0.0.29", @@ -13384,373 +13265,1208 @@ "fsevents": "~2.3.3" } }, - "node_modules/type-check": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", - "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "prelude-ls": "^1.2.1" - }, + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">= 0.8.0" + "node": ">=12" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], "dev": true, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=14.17" + "node": ">=12" } }, - "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", - "dev": true + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/uglify-js": { - "version": "3.17.4", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", - "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], "dev": true, "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "os": [ + "linux" + ], "engines": { - "node": ">=0.8.0" + "node": ">=12" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/undici-types": { - "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/unicode-emoji-modifier-base": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", - "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", + "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", + "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", + "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", + "dev": true + }, + "node_modules/unicode-emoji-modifier-base": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unicode-emoji-modifier-base/-/unicode-emoji-modifier-base-1.0.0.tgz", + "integrity": "sha512-yLSH4py7oFH3oG/9K+XWrz1pSi3dfUrWEnInbxMfArOfc1+33BlGPQtLsOYwvdMy11AwUBetYuaRxSPqgkq+8g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicorn-magic": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", + "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unique-string": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", + "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "dev": true, + "dependencies": { + "crypto-random-string": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", + "dev": true + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-join": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", + "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", + "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/variable-diff": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/variable-diff/-/variable-diff-2.0.2.tgz", + "integrity": "sha512-PqE1fUTrENftNWiNlfVqwFODxu9Zcl+AGOC9zdw+9N2KYW5kwtK0oXtJotwycAs1YwWttUcM739eM0x7CrkOyQ==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + } + }, + "node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite-node": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.2.2.tgz", + "integrity": "sha512-1as4rDTgVWJO3n1uHmUYqq7nsFgINQ9u+mRcXpjeOMJUmviqNKjcZB7UfRZrlM7MjYXMKpuWp5oGkjaFLnjawg==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "debug": "^4.3.4", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^5.0.0" + }, + "bin": { + "vite-node": "vite-node.mjs" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/unicorn-magic": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.1.0.tgz", - "integrity": "sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==", + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/unique-string": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-3.0.0.tgz", - "integrity": "sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==", + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], "dev": true, - "dependencies": { - "crypto-random-string": "^4.0.0" - }, + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universal-user-agent": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", - "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", - "dev": true - }, - "node_modules/universalify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", - "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 10.0.0" + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dependencies": { - "punycode": "^2.1.0" + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-join": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-5.0.0.tgz", - "integrity": "sha512-n2huDr9h9yzd6exQVnH/jU5mr+Pfx08LRXXZhkLLetAMESRj+anQsTAh940iMrIetKAmry9coFuZQ2jY8/p3WA==", + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], "dev": true, + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "optional": true, + "os": [ + "netbsd" ], - "bin": { - "uuid": "dist/bin/uuid" + "engines": { + "node": ">=12" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], "dev": true, - "peer": true + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz", - "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=10.12.0" + "node": ">=12" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/variable-diff": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/variable-diff/-/variable-diff-2.0.2.tgz", - "integrity": "sha512-PqE1fUTrENftNWiNlfVqwFODxu9Zcl+AGOC9zdw+9N2KYW5kwtK0oXtJotwycAs1YwWttUcM739eM0x7CrkOyQ==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], "dev": true, - "dependencies": { - "chalk": "^4.1.0" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.10.tgz", - "integrity": "sha512-2P8J7WWgmc355HUMlFrwofacvr98DAjoE52BfdbwQtyLH06XKwaL/FMnmKM2crF0iX4MpmMKoDlNCB1ok7zHCw==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "esbuild": "^0.19.3", - "postcss": "^8.4.32", - "rollup": "^4.2.0" - }, - "bin": { - "vite": "bin/vite.js" - }, + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "node": ">=12" } }, - "node_modules/vite-node": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.1.tgz", - "integrity": "sha512-2bGE5w4jvym5v8llF6Gu1oBrmImoNSs4WmRVcavnG2me6+8UQntTqLiAMFyiAobp+ZXhj5ZFhI7SmLiFr/jrow==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", "dev": true, - "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^5.0.0" - }, + "hasInstallScript": true, "bin": { - "vite-node": "vite-node.mjs" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": ">=12" }, - "funding": { - "url": "https://opencollective.com/vitest" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" } }, "node_modules/vitest": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.1.tgz", - "integrity": "sha512-Ry2qs4UOu/KjpXVfOCfQkTnwSXYGrqTbBZxw6reIYEFjSy1QUARRg5pxiI5BEXy+kBVntxUYNMlq4Co+2vD3fQ==", + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.2.2.tgz", + "integrity": "sha512-d5Ouvrnms3GD9USIK36KG8OZ5bEvKEkITFtnGv56HFaSlbItJuYr7hv2Lkn903+AvRAgSixiamozUVfORUekjw==", "dev": true, "dependencies": { - "@vitest/expect": "1.1.1", - "@vitest/runner": "1.1.1", - "@vitest/snapshot": "1.1.1", - "@vitest/spy": "1.1.1", - "@vitest/utils": "1.1.1", - "acorn-walk": "^8.3.0", + "@vitest/expect": "1.2.2", + "@vitest/runner": "1.2.2", + "@vitest/snapshot": "1.2.2", + "@vitest/spy": "1.2.2", + "@vitest/utils": "1.2.2", + "acorn-walk": "^8.3.2", "cac": "^6.7.14", "chai": "^4.3.10", "debug": "^4.3.4", @@ -13762,9 +14478,9 @@ "std-env": "^3.5.0", "strip-literal": "^1.3.0", "tinybench": "^2.5.1", - "tinypool": "^0.8.1", + "tinypool": "^0.8.2", "vite": "^5.0.0", - "vite-node": "1.1.1", + "vite-node": "1.2.2", "why-is-node-running": "^2.2.2" }, "bin": { @@ -13987,16 +14703,16 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.14.tgz", + "integrity": "sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==", "dev": true, "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", + "available-typed-arrays": "^1.0.6", + "call-bind": "^1.0.5", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "has-tostringtag": "^1.0.1" }, "engines": { "node": ">= 0.4" @@ -14178,16 +14894,6 @@ "node": ">=8" } }, - "node_modules/yn": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, - "peer": true, - "engines": { - "node": ">=6" - } - }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index 9163dec..abaa7fb 100644 --- a/package.json +++ b/package.json @@ -24,18 +24,15 @@ "build": "node --import tsx/esm build.config.ts", "build:docs": "npx typedoc", "build:index": "node --import tsx/esm scripts/build-index.ts", - "check:cost": "npx cost-of-modules --no-install --include-dev", - "check:coverage": "npx vitest run --coverage=true", - "check:full": "npm run lint && npm run check:types && npm run check:coverage && npm run check:project", - "check:project": "npx node-standards lint", - "check:types": "npx tsc -p tsconfig.json", - "format": "npx prettier \"**/*.{ts,js,json,yml,yaml,md}\" --write", - "lint": "npx eslint \"./{src,test,typings}/**/*.ts\" --cache --no-eslintrc --config .eslintrc.cjs", + "check:coverage": "vitest run --coverage=true", + "check:project": "node-standards lint", + "check:types": "tsc -p tsconfig.json", + "format": "prettier \"**/*.{ts,js,json,yml,yaml,md}\" --write", + "lint": "eslint \"./{src,test,typings}/**/*.ts\" --cache --no-eslintrc --config .eslintrc.cjs", "lint:fix": "npm run lint -- --fix", - "lint:full": "bash -c \"FULL_LINT=true npm run lint\"", "package": "rm -rf .dist && npm run build", - "prepare": "npx husky install || true", - "test": "npx vitest run" + "prepare": "husky || true", + "test": "vitest run" }, "dependencies": { "ajv": "^8.12.0", @@ -43,17 +40,17 @@ "tslib": "^2.6.2" }, "devDependencies": { - "@skyleague/axioms": "^3.0.2", - "@skyleague/node-standards": "^4.1.0", - "@skyleague/therefore": "^4.1.0", + "@skyleague/axioms": "^3.6.0", + "@skyleague/node-standards": "^5.1.9", + "@skyleague/therefore": "^4.1.1", "@types/split2": "^4.2.3", "camelcase": "^8.0.0", - "got": "^14.0.0", - "nock": "^13.4.0", + "got": "^14.2.0", + "nock": "^13.5.1", "typescript": "^5.3.3" }, "peerDependencies": { - "got": "^14.0.0" + "got": "^14.2.0" }, "engines": { "node": ">=20" diff --git a/src/api-consumers/rest.type.ts b/src/api-consumers/rest.type.ts index f3fd8d7..2ff3c1f 100644 --- a/src/api-consumers/rest.type.ts +++ b/src/api-consumers/rest.type.ts @@ -272,6 +272,8 @@ type Local0 = | 'BLOCK_AND_SEIZE_FUNDS' | 'WITHDRAW_BLOCKED_FUNDS' | 'MAKE_BULK_CHANGE_INTEREST_AVAILABILITY' + | 'MANAGE_DEPOSIT_ACCOUNT_RECIPIENT' + | 'MANAGE_DEPOSIT_ASSOCIATION' | 'CREATE_CARDS' | 'VIEW_CARDS' | 'DELETE_CARDS' @@ -356,7 +358,6 @@ type Local0 = | 'RESEND_FAILED_MESSAGES' | 'SEND_MANUAL_SMS' | 'SEND_MANUAL_EMAIL' - | 'MANAGE_CONFIGURATION_AS_CODE' | 'GET_MANAGE_CONFIGURATION_AS_CODE' | 'PUT_MANAGE_CONFIGURATION_AS_CODE' | 'MANAGE_RISK_LEVELS' @@ -420,6 +421,7 @@ type Local0 = | 'CREATE_PROFIT_SHARING_PROPOSALS' | 'APPROVE_PROFIT_SHARING_PROPOSALS' | 'ADJUST_PROFIT_SHARING_PROPOSALS' + | 'TRIGGER_COMPUTATION' | 'VIEW_PROFIT_SHARING_SYSTEM_OPTIONS' | 'CREATE_PROFIT_SHARING_SYSTEM_OPTIONS' | 'EDIT_PROFIT_SHARING_SYSTEM_OPTIONS' @@ -437,6 +439,8 @@ type Local0 = | 'VIEW_PROFIT_SHARING_ACCOUNTS_SETTINGS' | 'CREATE_PROFIT_SHARING_ACCOUNT_SETTINGS' | 'EDIT_PROFIT_SHARING_ACCOUNT_SETTINGS' + | 'VIEW_PROFIT_SHARING_GL_ACCOUNTS' + | 'VIEW_PROFIT_SHARING_BRANCHES' /** * A single change that needs to be made to a resource diff --git a/src/api-consumers/schemas/api-consumer.schema.js b/src/api-consumers/schemas/api-consumer.schema.js index 047fc6e..caabe5a 100644 --- a/src/api-consumers/schemas/api-consumer.schema.js +++ b/src/api-consumers/schemas/api-consumer.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"ApiConsumer","type":"object","description":"Represents an API consumer.","properties":{"access":{"title":"access","$ref":"#/$defs/ApiConsumerAccessaf30"},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The encoded key of the branch this API consumer is assigned to."},"creationDate":{"type":"string","title":"creationDate","description":"The date when the API consumer was created in UTC.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"id":{"type":"string","title":"id","description":"The ID of the API consumer."},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last time the API consumer was modified in UTC.","format":"date-time"},"name":{"type":"string","title":"name","description":"The API consumer name."},"role":{"title":"role","$ref":"#/$defs/RoleIdentifieraf30"},"transactionLimits":{"type":"object","title":"transactionLimits","description":"The API consumer transaction limits.","properties":{},"additionalProperties":{"type":"integer"}}},"required":["name"],"additionalProperties":true,"$defs":{"ApiConsumerAccessaf30":{"type":"object","title":"ApiConsumerAccessaf30","description":"Represents the API consumer permissions and access rights.","properties":{"administratorAccess":{"type":"boolean","title":"administratorAccess","description":"`TRUE` if the API consumer has the administrator user type, `FALSE` otherwise. Administrators (admins) have all permissions and can perform any action in Mambu."},"apiAccess":{"type":"boolean","title":"apiAccess","description":"`TRUE` if the API consumer can authenticate and interact with Mambu APIs, `FALSE` otherwise. The API consumer may still require additional permissions for specific API requests."},"canManageAllBranches":{"type":"boolean","title":"canManageAllBranches","description":"`TRUE` if the API consumer permissions apply to all branches, `FALSE` if they only apply to specific branches."},"canManageEntitiesAssignedToOtherOfficers":{"type":"boolean","title":"canManageEntitiesAssignedToOtherOfficers","description":"`TRUE` if the API consumer (that has the credit officer access) can access entities (for example, clients or accounts) assigned to other credit officers, `FALSE` otherwise."},"creditOfficerAccess":{"type":"boolean","title":"creditOfficerAccess","description":"`TRUE` if the API consumer has the credit officer user type, `FALSE` otherwise. Credit officers have the option of having clients and groups assigned to them."},"managedBranches":{"type":"array","title":"managedBranches","description":"The list of branches that can be managed by the API consumer. If the API consumer has the `canManageAllBranches` property set to `TRUE`, this list does not apply.","items":{"$ref":"#/$defs/UserManagedBranchaf30"}},"permissions":{"type":"array","title":"permissions","description":"Permissions for the API consumer. The non-admin API consumers and users are authorized to do actions based a set of permissions in order to access Mambu features. Permissions may be relevant for the API and/or the Mambu UI.","items":{"enum":["AUDIT_TRANSACTIONS","VIEW_EXCHANGE_RATES","CREATE_EXCHANGE_RATE","VIEW_LOAN_ACCOUNT_DETAILS","CREATE_LOAN_ACCOUNT","EDIT_LOAN_ACCOUNT","APPROVE_LOANS","DIBURSE_LOANS","APPLY_LOAN_FEES","ENTER_REPAYMENT","EDIT_PLANNED_FEES","EDIT_REPAYMENT_SCHEDULE","APPLY_LOAN_ADJUSTMENTS","BACKDATE_LOAN_TRANSACTIONS","APPLY_ACCRUED_LOAN_INTEREST","POST_TRANSACTIONS_ON_LOCKED_LOAN_ACCOUNTS","EDIT_PENALTY_RATE","VIEW_INVESTOR_FUNDS_DETAILS","CREATE_INVESTOR_FUNDS","EDIT_INVESTOR_FUNDS","DELETE_INVESTOR_FUNDS","SELL_LOAN_FRACTION","REQUEST_LOAN_APPROVAL","EDIT_LOAN_TRANCHES","REJECT_LOANS","WRITE_OFF_LOAN_ACCOUNTS","PAY_OFF_LOAN","REVERSE_LOAN_ACCOUNT_WRITE_OFF","CLOSE_LOAN_ACCOUNTS","LOCK_LOAN_ACCOUNTS","WITHDRAW_LOAN_ACCOUNTS","DELETE_LOAN_ACCOUNT","SET_DISBURSEMENT_CONDITIONS","RESCHEDULE_LOAN_ACCOUNT","REFINANCE_LOAN_ACCOUNT","EDIT_LOAN_TRANSACTIONS","BULK_LOAN_CORRECTIONS","EDIT_INTEREST_RATE","EDIT_REPAYMENT_METHOD_VALUE","EDIT_PERIODIC_PAYMENT_FOR_ACTIVE_ACCOUNT","UNDO_LOAN_ACCOUNT_CLOSURE","UNDO_REJECT_LOANS","UNDO_WITHDRAW_LOAN_ACCOUNTS","LINK_ACCOUNTS","EDIT_PRINCIPAL_PAYMENT_ACTIVE_REVOLVING_CREDIT","PERFORM_REPAYMENTS_WITH_CUSTOM_AMOUNTS_ALLOCATION","MANAGE_LOAN_ASSOCIATION","MAKE_WITHDRAWAL_REDRAW","VIEW_SAVINGS_ACCOUNT_DETAILS","CREATE_SAVINGS_ACCOUNT","EDIT_SAVINGS_ACCOUNT","APPROVE_SAVINGS","MAKE_DEPOSIT","MAKE_BULK_DEPOSITS","MAKE_WITHDRAWAL","BACKDATE_SAVINGS_TRANSACTIONS","APPLY_SAVINGS_ADJUSTMENTS","MAKE_TRANSFER","MAKE_INTER_CLIENTS_TRANSFERS","CLOSE_SAVINGS_ACCOUNTS","REOPEN_SAVINGS_ACCOUNT","APPLY_SAVINGS_FEES","DELETE_SAVINGS_ACCOUNT","POST_TRANSACTIONS_ON_DORMANT_ACCOUNTS","EDIT_SAVINGS_TRANSACTIONS","BULK_DEPOSIT_CORRECTIONS","ACTIVATE_MATURITY","APPLY_ACCRUED_SAVINGS_INTEREST","LOCK_SAVINGS_ACCOUNT","UNLOCK_SAVINGS_ACCOUNT","UNDO_MATURITY","MAKE_EARLY_WITHDRAWALS","BLOCK_AND_SEIZE_FUNDS","WITHDRAW_BLOCKED_FUNDS","MAKE_BULK_CHANGE_INTEREST_AVAILABILITY","CREATE_CARDS","VIEW_CARDS","DELETE_CARDS","REVERSE_CARD_WITHDRAWAL_TRANSACTION","CARD_BALANCE_INQUIRY","CREATE_AUTHORIZATION_HOLD","UPDATE_AUTHORIZATION_HOLD","VIEW_AUTHORIZATION_HOLD","CREATE_CARD_TRANSACTION","CREATE_ACCOUNT_HOLD","UPDATE_ACCOUNT_HOLD","VIEW_ACCOUNT_HOLD","VIEW_SECURITIES_DETAILS","CREATE_SECURITIES","EDIT_SECURITIES","DELETE_SECURITIES","CREATE_LINES_OF_CREDIT","EDIT_LINES_OF_CREDIT","VIEW_LINE_OF_CREDIT_DETAILS","ADD_ACCOUNTS_TO_LINE_OF_CREDIT","REMOVE_ACCOUNTS_FROM_LINE_OF_CREDIT","APPROVE_LINE_OF_CREDIT","UNDO_APPROVE_LINE_OF_CREDIT","WITHDRAW_LINE_OF_CREDIT","UNDO_WITHDRAW_LINE_OF_CREDIT","REJECT_LINE_OF_CREDIT","UNDO_REJECT_LINE_OF_CREDIT","CLOSE_LINES_OF_CREDIT","DELETE_LINES_OF_CREDIT","VIEW_LOAN_PRODUCT_DETAILS","CREATE_LOAN_PRODUCT","DELETE_LOAN_PRODUCTS","EDIT_LOAN_PRODUCT","VIEW_SAVINGS_PRODUCT_DETAILS","CREATE_SAVINGS_PRODUCT","EDIT_SAVINGS_PRODUCT","DELETE_SAVINGS_PRODUCT","VIEW_CLIENT_DETAILS","CREATE_CLIENT","EDIT_CLIENT","DELETE_CLIENTS","VIEW_GROUP_DETAILS","CREATE_GROUP","EDIT_GROUP","DELETE_GROUP","CHANGE_CLIENT_TYPE","CHANGE_GROUP_TYPE","APPROVE_CLIENT","REJECT_CLIENT","EXIT_CLIENT","BLACKLIST_CLIENT","UNDO_CLIENT_STATE_CHANGED","ANONYMIZE_CLIENT","MANAGE_CLIENT_ASSOCIATION","MANAGE_GROUP_ASSOCIATION","EDIT_CLIENT_ID","EDIT_GROUP_ID","EDIT_BLACKLISTED_CLIENT_CFV","VIEW_ACCOUNTING_REPORTS","LOG_JOURNAL_ENTRIES","BOOKING_DATE_LOANS_GL","BOOKING_DATE_SAVINGS_GL","RECTIFY_ADJUSTMENT","VIEW_ACCOUNTING_RATES","CREATE_ACCOUNTING_RATES","VIEW_DOCUMENTS","CREATE_DOCUMENTS","EDIT_DOCUMENTS","DELETE_DOCUMENTS","VIEW_TASK","CREATE_TASK","EDIT_TASK","DELETE_TASK","VIEW_USER_DETAILS","CREATE_USER","EDIT_USER","DELETE_USER","VIEW_ROLE","CREATE_ROLE","EDIT_ROLE","DELETE_ROLE","RESEND_FAILED_MESSAGES","SEND_MANUAL_SMS","SEND_MANUAL_EMAIL","MANAGE_CONFIGURATION_AS_CODE","GET_MANAGE_CONFIGURATION_AS_CODE","PUT_MANAGE_CONFIGURATION_AS_CODE","MANAGE_RISK_LEVELS","MANAGE_EOD_PROCESSING","MANAGE_CURRENCIES","VIEW_INTELLIGENCE","CREATE_INDEX_RATE","VIEW_COMMENTS","CREATE_COMMENTS","EDIT_COMMENTS","VIEW_COMMUNICATION_HISTORY","DOWNLOAD_BACKUPS","IMPORT_DATA","VIEW_TRANSACTION_CHANNELS","CREATE_TRANSACTION_CHANNELS","EDIT_TRANSACTION_CHANNELS","DELETE_TRANSACTION_CHANNELS","POST_TRANSACTIONS_WITHOUT_OPENED_TILL","VIEW_CUSTOM_FIELD","VIEW_BRANCH_DETAILS","CREATE_BRANCH","EDIT_BRANCH","VIEW_CENTRE_DETAILS","CREATE_CENTRE","EDIT_CENTRE","DELETE_CENTRE","MANAGE_HOLIDAYS","MANAGE_INDEX_RATES","MANAGE_EVENTS_STREAMING","MANAGE_AUDIT_TRAIL","MANAGE_PAYMENTS","MANAGE_CARDS_CAPABILITY","CREATE_API_CONSUMERS_AND_KEYS","DELETE_API_CONSUMERS_AND_KEYS","EDIT_API_CONSUMERS_AND_KEYS","VIEW_API_CONSUMERS_AND_KEYS","MANAGE_NOTIFICATIONS","VIEW_MAMBU_FUNCTIONS","CREATE_MAMBU_FUNCTIONS","EDIT_MAMBU_FUNCTIONS","DELETE_MAMBU_FUNCTIONS","VIEW_MAMBU_FUNCTIONS_SECRETS","CREATE_MAMBU_FUNCTIONS_SECRETS","EDIT_MAMBU_FUNCTIONS_SECRETS","DELETE_MAMBU_FUNCTIONS_SECRETS","VIEW_CURRENT_USER_DETAILS","VIEW_PROFIT_SHARING_CLASSES","CREATE_PROFIT_SHARING_CLASSES","EDIT_PROFIT_SHARING_CLASSES","DELETE_PROFIT_SHARING_CLASSES","VIEW_PROFIT_SHARING_POOLS","CREATE_PROFIT_SHARING_POOLS","EDIT_PROFIT_SHARING_POOLS","DELETE_PROFIT_SHARING_POOLS","VIEW_PROFIT_SHARING_INCOME_CATEGORIES","CREATE_PROFIT_SHARING_INCOME_CATEGORIES","EDIT_PROFIT_SHARING_INCOME_CATEGORIES","DELETE_PROFIT_SHARING_INCOME_CATEGORIES","VIEW_PROFIT_SHARING_PROPOSALS","EDIT_PROFIT_SHARING_PROPOSALS","CREATE_PROFIT_SHARING_PROPOSALS","APPROVE_PROFIT_SHARING_PROPOSALS","ADJUST_PROFIT_SHARING_PROPOSALS","VIEW_PROFIT_SHARING_SYSTEM_OPTIONS","CREATE_PROFIT_SHARING_SYSTEM_OPTIONS","EDIT_PROFIT_SHARING_SYSTEM_OPTIONS","DELETE_PROFIT_SHARING_SYSTEM_OPTIONS","VIEW_PROFIT_SHARING_EXPENSES","CREATE_PROFIT_SHARING_EXPENSES","EDIT_PROFIT_SHARING_EXPENSES","DELETE_PROFIT_SHARING_EXPENSES","VIEW_PROFIT_SHARING_DEDUCTIONS","CREATE_PROFIT_SHARING_DEDUCTIONS","EDIT_PROFIT_SHARING_DEDUCTIONS","DELETE_PROFIT_SHARING_DEDUCTIONS","VIEW_PROFIT_SHARING_DEPOSIT_PRODUCTS","EDIT_PROFIT_SHARING_DEPOSIT_PRODUCT_LINK","VIEW_PROFIT_SHARING_ACCOUNTS_SETTINGS","CREATE_PROFIT_SHARING_ACCOUNT_SETTINGS","EDIT_PROFIT_SHARING_ACCOUNT_SETTINGS"]}}},"additionalProperties":true},"UserManagedBranchaf30":{"type":"object","title":"UserManagedBranchaf30","description":"Represents a branch that can be managed by the user or API consumer.","properties":{"branchKey":{"type":"string","title":"branchKey","description":"The encoded key of the branch, it is automatically generated."}},"additionalProperties":true},"RoleIdentifieraf30":{"type":"object","title":"RoleIdentifieraf30","description":"Represents the role identifier.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated automatically, globally unique."},"id":{"type":"string","title":"id","description":"The ID of the role, which can be generated and customized, but must be unique."}},"additionalProperties":true}}};const schema14 = {"type":"object","title":"RoleIdentifieraf30","description":"Represents the role identifier.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated automatically, globally unique."},"id":{"type":"string","title":"id","description":"The ID of the role, which can be generated and customized, but must be unique."}},"additionalProperties":true};const schema12 = {"type":"object","title":"ApiConsumerAccessaf30","description":"Represents the API consumer permissions and access rights.","properties":{"administratorAccess":{"type":"boolean","title":"administratorAccess","description":"`TRUE` if the API consumer has the administrator user type, `FALSE` otherwise. Administrators (admins) have all permissions and can perform any action in Mambu."},"apiAccess":{"type":"boolean","title":"apiAccess","description":"`TRUE` if the API consumer can authenticate and interact with Mambu APIs, `FALSE` otherwise. The API consumer may still require additional permissions for specific API requests."},"canManageAllBranches":{"type":"boolean","title":"canManageAllBranches","description":"`TRUE` if the API consumer permissions apply to all branches, `FALSE` if they only apply to specific branches."},"canManageEntitiesAssignedToOtherOfficers":{"type":"boolean","title":"canManageEntitiesAssignedToOtherOfficers","description":"`TRUE` if the API consumer (that has the credit officer access) can access entities (for example, clients or accounts) assigned to other credit officers, `FALSE` otherwise."},"creditOfficerAccess":{"type":"boolean","title":"creditOfficerAccess","description":"`TRUE` if the API consumer has the credit officer user type, `FALSE` otherwise. Credit officers have the option of having clients and groups assigned to them."},"managedBranches":{"type":"array","title":"managedBranches","description":"The list of branches that can be managed by the API consumer. If the API consumer has the `canManageAllBranches` property set to `TRUE`, this list does not apply.","items":{"$ref":"#/$defs/UserManagedBranchaf30"}},"permissions":{"type":"array","title":"permissions","description":"Permissions for the API consumer. The non-admin API consumers and users are authorized to do actions based a set of permissions in order to access Mambu features. Permissions may be relevant for the API and/or the Mambu UI.","items":{"enum":["AUDIT_TRANSACTIONS","VIEW_EXCHANGE_RATES","CREATE_EXCHANGE_RATE","VIEW_LOAN_ACCOUNT_DETAILS","CREATE_LOAN_ACCOUNT","EDIT_LOAN_ACCOUNT","APPROVE_LOANS","DIBURSE_LOANS","APPLY_LOAN_FEES","ENTER_REPAYMENT","EDIT_PLANNED_FEES","EDIT_REPAYMENT_SCHEDULE","APPLY_LOAN_ADJUSTMENTS","BACKDATE_LOAN_TRANSACTIONS","APPLY_ACCRUED_LOAN_INTEREST","POST_TRANSACTIONS_ON_LOCKED_LOAN_ACCOUNTS","EDIT_PENALTY_RATE","VIEW_INVESTOR_FUNDS_DETAILS","CREATE_INVESTOR_FUNDS","EDIT_INVESTOR_FUNDS","DELETE_INVESTOR_FUNDS","SELL_LOAN_FRACTION","REQUEST_LOAN_APPROVAL","EDIT_LOAN_TRANCHES","REJECT_LOANS","WRITE_OFF_LOAN_ACCOUNTS","PAY_OFF_LOAN","REVERSE_LOAN_ACCOUNT_WRITE_OFF","CLOSE_LOAN_ACCOUNTS","LOCK_LOAN_ACCOUNTS","WITHDRAW_LOAN_ACCOUNTS","DELETE_LOAN_ACCOUNT","SET_DISBURSEMENT_CONDITIONS","RESCHEDULE_LOAN_ACCOUNT","REFINANCE_LOAN_ACCOUNT","EDIT_LOAN_TRANSACTIONS","BULK_LOAN_CORRECTIONS","EDIT_INTEREST_RATE","EDIT_REPAYMENT_METHOD_VALUE","EDIT_PERIODIC_PAYMENT_FOR_ACTIVE_ACCOUNT","UNDO_LOAN_ACCOUNT_CLOSURE","UNDO_REJECT_LOANS","UNDO_WITHDRAW_LOAN_ACCOUNTS","LINK_ACCOUNTS","EDIT_PRINCIPAL_PAYMENT_ACTIVE_REVOLVING_CREDIT","PERFORM_REPAYMENTS_WITH_CUSTOM_AMOUNTS_ALLOCATION","MANAGE_LOAN_ASSOCIATION","MAKE_WITHDRAWAL_REDRAW","VIEW_SAVINGS_ACCOUNT_DETAILS","CREATE_SAVINGS_ACCOUNT","EDIT_SAVINGS_ACCOUNT","APPROVE_SAVINGS","MAKE_DEPOSIT","MAKE_BULK_DEPOSITS","MAKE_WITHDRAWAL","BACKDATE_SAVINGS_TRANSACTIONS","APPLY_SAVINGS_ADJUSTMENTS","MAKE_TRANSFER","MAKE_INTER_CLIENTS_TRANSFERS","CLOSE_SAVINGS_ACCOUNTS","REOPEN_SAVINGS_ACCOUNT","APPLY_SAVINGS_FEES","DELETE_SAVINGS_ACCOUNT","POST_TRANSACTIONS_ON_DORMANT_ACCOUNTS","EDIT_SAVINGS_TRANSACTIONS","BULK_DEPOSIT_CORRECTIONS","ACTIVATE_MATURITY","APPLY_ACCRUED_SAVINGS_INTEREST","LOCK_SAVINGS_ACCOUNT","UNLOCK_SAVINGS_ACCOUNT","UNDO_MATURITY","MAKE_EARLY_WITHDRAWALS","BLOCK_AND_SEIZE_FUNDS","WITHDRAW_BLOCKED_FUNDS","MAKE_BULK_CHANGE_INTEREST_AVAILABILITY","CREATE_CARDS","VIEW_CARDS","DELETE_CARDS","REVERSE_CARD_WITHDRAWAL_TRANSACTION","CARD_BALANCE_INQUIRY","CREATE_AUTHORIZATION_HOLD","UPDATE_AUTHORIZATION_HOLD","VIEW_AUTHORIZATION_HOLD","CREATE_CARD_TRANSACTION","CREATE_ACCOUNT_HOLD","UPDATE_ACCOUNT_HOLD","VIEW_ACCOUNT_HOLD","VIEW_SECURITIES_DETAILS","CREATE_SECURITIES","EDIT_SECURITIES","DELETE_SECURITIES","CREATE_LINES_OF_CREDIT","EDIT_LINES_OF_CREDIT","VIEW_LINE_OF_CREDIT_DETAILS","ADD_ACCOUNTS_TO_LINE_OF_CREDIT","REMOVE_ACCOUNTS_FROM_LINE_OF_CREDIT","APPROVE_LINE_OF_CREDIT","UNDO_APPROVE_LINE_OF_CREDIT","WITHDRAW_LINE_OF_CREDIT","UNDO_WITHDRAW_LINE_OF_CREDIT","REJECT_LINE_OF_CREDIT","UNDO_REJECT_LINE_OF_CREDIT","CLOSE_LINES_OF_CREDIT","DELETE_LINES_OF_CREDIT","VIEW_LOAN_PRODUCT_DETAILS","CREATE_LOAN_PRODUCT","DELETE_LOAN_PRODUCTS","EDIT_LOAN_PRODUCT","VIEW_SAVINGS_PRODUCT_DETAILS","CREATE_SAVINGS_PRODUCT","EDIT_SAVINGS_PRODUCT","DELETE_SAVINGS_PRODUCT","VIEW_CLIENT_DETAILS","CREATE_CLIENT","EDIT_CLIENT","DELETE_CLIENTS","VIEW_GROUP_DETAILS","CREATE_GROUP","EDIT_GROUP","DELETE_GROUP","CHANGE_CLIENT_TYPE","CHANGE_GROUP_TYPE","APPROVE_CLIENT","REJECT_CLIENT","EXIT_CLIENT","BLACKLIST_CLIENT","UNDO_CLIENT_STATE_CHANGED","ANONYMIZE_CLIENT","MANAGE_CLIENT_ASSOCIATION","MANAGE_GROUP_ASSOCIATION","EDIT_CLIENT_ID","EDIT_GROUP_ID","EDIT_BLACKLISTED_CLIENT_CFV","VIEW_ACCOUNTING_REPORTS","LOG_JOURNAL_ENTRIES","BOOKING_DATE_LOANS_GL","BOOKING_DATE_SAVINGS_GL","RECTIFY_ADJUSTMENT","VIEW_ACCOUNTING_RATES","CREATE_ACCOUNTING_RATES","VIEW_DOCUMENTS","CREATE_DOCUMENTS","EDIT_DOCUMENTS","DELETE_DOCUMENTS","VIEW_TASK","CREATE_TASK","EDIT_TASK","DELETE_TASK","VIEW_USER_DETAILS","CREATE_USER","EDIT_USER","DELETE_USER","VIEW_ROLE","CREATE_ROLE","EDIT_ROLE","DELETE_ROLE","RESEND_FAILED_MESSAGES","SEND_MANUAL_SMS","SEND_MANUAL_EMAIL","MANAGE_CONFIGURATION_AS_CODE","GET_MANAGE_CONFIGURATION_AS_CODE","PUT_MANAGE_CONFIGURATION_AS_CODE","MANAGE_RISK_LEVELS","MANAGE_EOD_PROCESSING","MANAGE_CURRENCIES","VIEW_INTELLIGENCE","CREATE_INDEX_RATE","VIEW_COMMENTS","CREATE_COMMENTS","EDIT_COMMENTS","VIEW_COMMUNICATION_HISTORY","DOWNLOAD_BACKUPS","IMPORT_DATA","VIEW_TRANSACTION_CHANNELS","CREATE_TRANSACTION_CHANNELS","EDIT_TRANSACTION_CHANNELS","DELETE_TRANSACTION_CHANNELS","POST_TRANSACTIONS_WITHOUT_OPENED_TILL","VIEW_CUSTOM_FIELD","VIEW_BRANCH_DETAILS","CREATE_BRANCH","EDIT_BRANCH","VIEW_CENTRE_DETAILS","CREATE_CENTRE","EDIT_CENTRE","DELETE_CENTRE","MANAGE_HOLIDAYS","MANAGE_INDEX_RATES","MANAGE_EVENTS_STREAMING","MANAGE_AUDIT_TRAIL","MANAGE_PAYMENTS","MANAGE_CARDS_CAPABILITY","CREATE_API_CONSUMERS_AND_KEYS","DELETE_API_CONSUMERS_AND_KEYS","EDIT_API_CONSUMERS_AND_KEYS","VIEW_API_CONSUMERS_AND_KEYS","MANAGE_NOTIFICATIONS","VIEW_MAMBU_FUNCTIONS","CREATE_MAMBU_FUNCTIONS","EDIT_MAMBU_FUNCTIONS","DELETE_MAMBU_FUNCTIONS","VIEW_MAMBU_FUNCTIONS_SECRETS","CREATE_MAMBU_FUNCTIONS_SECRETS","EDIT_MAMBU_FUNCTIONS_SECRETS","DELETE_MAMBU_FUNCTIONS_SECRETS","VIEW_CURRENT_USER_DETAILS","VIEW_PROFIT_SHARING_CLASSES","CREATE_PROFIT_SHARING_CLASSES","EDIT_PROFIT_SHARING_CLASSES","DELETE_PROFIT_SHARING_CLASSES","VIEW_PROFIT_SHARING_POOLS","CREATE_PROFIT_SHARING_POOLS","EDIT_PROFIT_SHARING_POOLS","DELETE_PROFIT_SHARING_POOLS","VIEW_PROFIT_SHARING_INCOME_CATEGORIES","CREATE_PROFIT_SHARING_INCOME_CATEGORIES","EDIT_PROFIT_SHARING_INCOME_CATEGORIES","DELETE_PROFIT_SHARING_INCOME_CATEGORIES","VIEW_PROFIT_SHARING_PROPOSALS","EDIT_PROFIT_SHARING_PROPOSALS","CREATE_PROFIT_SHARING_PROPOSALS","APPROVE_PROFIT_SHARING_PROPOSALS","ADJUST_PROFIT_SHARING_PROPOSALS","VIEW_PROFIT_SHARING_SYSTEM_OPTIONS","CREATE_PROFIT_SHARING_SYSTEM_OPTIONS","EDIT_PROFIT_SHARING_SYSTEM_OPTIONS","DELETE_PROFIT_SHARING_SYSTEM_OPTIONS","VIEW_PROFIT_SHARING_EXPENSES","CREATE_PROFIT_SHARING_EXPENSES","EDIT_PROFIT_SHARING_EXPENSES","DELETE_PROFIT_SHARING_EXPENSES","VIEW_PROFIT_SHARING_DEDUCTIONS","CREATE_PROFIT_SHARING_DEDUCTIONS","EDIT_PROFIT_SHARING_DEDUCTIONS","DELETE_PROFIT_SHARING_DEDUCTIONS","VIEW_PROFIT_SHARING_DEPOSIT_PRODUCTS","EDIT_PROFIT_SHARING_DEPOSIT_PRODUCT_LINK","VIEW_PROFIT_SHARING_ACCOUNTS_SETTINGS","CREATE_PROFIT_SHARING_ACCOUNT_SETTINGS","EDIT_PROFIT_SHARING_ACCOUNT_SETTINGS"]}}},"additionalProperties":true};const schema13 = {"type":"object","title":"UserManagedBranchaf30","description":"Represents a branch that can be managed by the user or API consumer.","properties":{"branchKey":{"type":"string","title":"branchKey","description":"The encoded key of the branch, it is automatically generated."}},"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.administratorAccess !== undefined){const _errs2 = errors;if(typeof data.administratorAccess !== "boolean"){validate11.errors = [{instancePath:instancePath+"/administratorAccess",schemaPath:"#/properties/administratorAccess/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.apiAccess !== undefined){const _errs4 = errors;if(typeof data.apiAccess !== "boolean"){validate11.errors = [{instancePath:instancePath+"/apiAccess",schemaPath:"#/properties/apiAccess/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.canManageAllBranches !== undefined){const _errs6 = errors;if(typeof data.canManageAllBranches !== "boolean"){validate11.errors = [{instancePath:instancePath+"/canManageAllBranches",schemaPath:"#/properties/canManageAllBranches/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.canManageEntitiesAssignedToOtherOfficers !== undefined){const _errs8 = errors;if(typeof data.canManageEntitiesAssignedToOtherOfficers !== "boolean"){validate11.errors = [{instancePath:instancePath+"/canManageEntitiesAssignedToOtherOfficers",schemaPath:"#/properties/canManageEntitiesAssignedToOtherOfficers/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.creditOfficerAccess !== undefined){const _errs10 = errors;if(typeof data.creditOfficerAccess !== "boolean"){validate11.errors = [{instancePath:instancePath+"/creditOfficerAccess",schemaPath:"#/properties/creditOfficerAccess/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.managedBranches !== undefined){let data5 = data.managedBranches;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data5)){var valid1 = true;const len0 = data5.length;for(let i0=0; i0, + get schema() { + return CommunicationMessagesSearchSortCriteria.validate.schema + }, + get errors() { + return CommunicationMessagesSearchSortCriteria.validate.errors ?? undefined + }, + is: (o: unknown): o is CommunicationMessagesSearchSortCriteria => + CommunicationMessagesSearchSortCriteria.validate(o) === true, + assert: (o: unknown) => { + if (!CommunicationMessagesSearchSortCriteria.validate(o)) { + throw new ValidationError(CommunicationMessagesSearchSortCriteria.errors ?? []) + } + }, +} as const + export interface ErrorResponse { errors?: RestError[] } @@ -372,6 +416,19 @@ export interface RestError { errorSource?: string } +export type Search1Response = CommunicationMessage[] + +export const Search1Response = { + validate: (await import('./schemas/search1-response.schema.js')).validate as ValidateFunction, + get schema() { + return Search1Response.validate.schema + }, + get errors() { + return Search1Response.validate.errors ?? undefined + }, + is: (o: unknown): o is Search1Response => Search1Response.validate(o) === true, +} as const + export type SearchRequest = CommunicationMessageFilterCriteria[] export const SearchRequest = { diff --git a/src/communications/schemas/communication-message.schema.js b/src/communications/schemas/communication-message.schema.js index a30f2ed..d53d775 100644 --- a/src/communications/schemas/communication-message.schema.js +++ b/src/communications/schemas/communication-message.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"CommunicationMessage","type":"object","description":"Represents a communication message.","properties":{"body":{"type":"string","title":"body","description":"The contents of the message."},"clientKey":{"type":"string","title":"clientKey","description":"The client the message was sent to."},"creationDate":{"type":"string","title":"creationDate","description":"The date the communication message was created in UTC.","format":"date-time"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The deposit account that triggered this message."},"destination":{"type":"string","title":"destination","description":"The destination (phone number or email address) this message was sent to."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the communication message, which is generated automatically, and must be unique."},"event":{"title":"event","description":"The event that triggered this message.","enum":["MANUAL","DO_NOTHING","CLIENT_CREATED","CLIENT_APPROVED","GROUP_ACTIVITY","GROUP_CREATED","LOAN_CREATED","INTEREST_RATE_CHANGED","CLIENT_REJECTED","CLIENT_ACTIVITY","LOAN_REPAYMENT","LOAN_REPAYMENT_REVERSAL","FEE_APPLIED","FEE_ADJUSTED","FEE_CHARGED","PENALTY_APPLIED","PENALTY_ADJUSTMENT","FEES_DUE_REDUCED","FEE_REDUCTION_ADJUSTMENT","LOAN_APPROVAL","LOAN_ACCOUNT_CLOSURE","LOAN_ACCOUNT_WRITE_OFF","LOAN_ACCOUNT_REJECTION","LOAN_ACCOUNT_RESCHEDULED","LOAN_ACCOUNT_REFINANCED","REPAYMENT_REMINDER","ACCOUNT_IN_ARREARS","LOAN_DISBURSEMENT","LOAN_DISBURSEMENT_REVERSAL","LOAN_ACCOUNT_ACTIVITY","LOAN_ANTICIPATED_DISBURSEMENT","SAVINGS_CREATED","SAVINGS_DEPOSIT","SAVINGS_DEPOSIT_REVERSAL","SAVINGS_APPROVAL","SAVINGS_ACCOUNT_ACTIVATED","SAVINGS_ACCOUNT_CLOSURE","SAVINGS_ACCOUNT_REJECTION","SAVINGS_WITHDRAWAL","SAVINGS_WITHDRAWAL_REVERSAL","SAVINGS_ACCOUNT_ACTIVITY","DEPOSIT_INTEREST_APPLIED","DEPOSIT_INTEREST_APPLIED_ADJUSTMENT","ACCOUNT_AUTHORISATION_HOLD_CREATED","ACCOUNT_AUTHORISATION_HOLD_REVERSED","ACCOUNT_AUTHORISATION_HOLD_SETTLED","CARDS_AUTHORISATION_HOLD_CREATED","CARDS_AUTHORISATION_HOLD_SETTLED","CARDS_AUTHORISATION_HOLD_AMOUNT_DECREASED","CARDS_AUTHORISATION_HOLD_AMOUNT_INCREASED","CARDS_AUTHORISATION_HOLD_EXPIRED","CARDS_AUTHORISATION_HOLD_REVERSED","PORTAL_ACTIVATED","PORTAL_PASSWORD_RESET","END_OF_DAY_PROCESSING_COMPLETED","DATA_ACCESS_STATE_CHANGED","CREDIT_ARRANGEMENT_CREATED","CREDIT_ARRANGEMENT_CLOSED","CREDIT_ARRANGEMENT_APPROVED","CREDIT_ARRANGEMENT_REJECTED","CREDIT_ARRANGEMENT_WITHDRAWN","CREDIT_ARRANGEMENT_DELETED","CREDIT_ARRANGEMENT_ACCOUNT_ADDED","CREDIT_ARRANGEMENT_ACCOUNT_REMOVED","CREDIT_ARRANGEMENT_EDITED","PAYMENT_ORDER_ACTIVITY","COLLECTION_ORDER_ACTIVITY","JOURNAL_ENTRY_ADDED","JOURNAL_ENTRY_ADJUSTED","SAVINGS_TRANSACTION_EDITED"]},"failureCause":{"type":"string","title":"failureCause","description":"The failure code if the message failed to send."},"failureReason":{"title":"failureReason","description":"The reason for the communication message failure.","enum":["MESSAGING_EXCEPTION","INVALID_SMTP_CREDENTIALS","UNSUPPORTED_ENCODING_EXCEPTION","EMAIL_SERVICE_NOT_ENABLED","SMS_TOO_LONG","SMS_SERVICE_NOT_ENABLED","SMS_NOT_SENT","SMS_SERVICE_ERROR","SMS_CONNECTION_EXCEPTION","WEBHOOK_NOTIFICATIONS_DISABLED","INVALID_HTTP_RESPONSE","HTTP_ERROR_WHILE_SENDING","INVALID_JSON_BODY_SYNTAX","MISSING_TEMPLATE_KEY","UNDEFINED_DESTINATION","INVALID_HTTP_PROTOCOL","BLACKLISTED_URL","INVALID_SMS_GATEWAY_CREDENTIALS","MISSING_SMS_RECIPIENT","SMS_GATEWAY_ERROR","MISSING_EMAIL_RECIPIENT_ADDRESS","OTHER"]},"groupKey":{"type":"string","title":"groupKey","description":"The group the message was sent to."},"loanAccountKey":{"type":"string","title":"loanAccountKey","description":"The loan account that triggered this message."},"numRetries":{"type":"integer","title":"numRetries","description":"The number of retries to send the message."},"referenceId":{"type":"string","title":"referenceId","description":"The reference ID of the communication message, generated by the SMS dispatcher."},"repaymentKey":{"type":"string","title":"repaymentKey","description":"The repayment that triggered this message."},"sendDate":{"type":"string","title":"sendDate","description":"The date the communication message was sent in UTC.","format":"date-time"},"senderKey":{"type":"string","title":"senderKey","description":"The encoded key of the sender. If specified, it should be the encoded key of the current user."},"state":{"title":"state","description":"The state of the message.","enum":["SENT","QUEUED","QUEUED_FOR_STREAM","WAITING","SENDING_ASYNC","FAILED"]},"subject":{"type":"string","title":"subject","description":"The subject of the message."},"templateKey":{"type":"string","title":"templateKey","description":"The communication message template key."},"type":{"title":"type","description":"The type of communication message.","enum":["EMAIL","SMS","WEB_HOOK","EVENT_STREAM","TASK"]},"userKey":{"type":"string","title":"userKey","description":"The user the message was sent to."}},"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.body !== undefined){const _errs2 = errors;if(typeof data.body !== "string"){validate10.errors = [{instancePath:instancePath+"/body",schemaPath:"#/properties/body/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.clientKey !== undefined){const _errs4 = errors;if(typeof data.clientKey !== "string"){validate10.errors = [{instancePath:instancePath+"/clientKey",schemaPath:"#/properties/clientKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.creationDate === "string")){validate10.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs8 = errors;if(typeof data.depositAccountKey !== "string"){validate10.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.destination !== undefined){const _errs10 = errors;if(typeof data.destination !== "string"){validate10.errors = [{instancePath:instancePath+"/destination",schemaPath:"#/properties/destination/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs12 = errors;if(typeof data.encodedKey !== "string"){validate10.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.event !== undefined){const _errs14 = errors;let valid1;valid1 = false;for(const v0 of schema11.properties.event.enum){if(func0(data.event, v0)){valid1 = true;break;}}if(!valid1){validate10.errors = [{instancePath:instancePath+"/event",schemaPath:"#/properties/event/enum",keyword:"enum",params:{allowedValues: schema11.properties.event.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs14 === errors;}else {var valid0 = true;}if(valid0){if(data.failureCause !== undefined){const _errs15 = errors;if(typeof data.failureCause !== "string"){validate10.errors = [{instancePath:instancePath+"/failureCause",schemaPath:"#/properties/failureCause/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.failureReason !== undefined){const _errs17 = errors;let valid2;valid2 = false;for(const v1 of schema11.properties.failureReason.enum){if(func0(data.failureReason, v1)){valid2 = true;break;}}if(!valid2){validate10.errors = [{instancePath:instancePath+"/failureReason",schemaPath:"#/properties/failureReason/enum",keyword:"enum",params:{allowedValues: schema11.properties.failureReason.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.groupKey !== undefined){const _errs18 = errors;if(typeof data.groupKey !== "string"){validate10.errors = [{instancePath:instancePath+"/groupKey",schemaPath:"#/properties/groupKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs18 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAccountKey !== undefined){const _errs20 = errors;if(typeof data.loanAccountKey !== "string"){validate10.errors = [{instancePath:instancePath+"/loanAccountKey",schemaPath:"#/properties/loanAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.numRetries !== undefined){let data11 = data.numRetries;const _errs22 = errors;if(!(((typeof data11 == "number") && (!(data11 % 1) && !isNaN(data11))) && (isFinite(data11)))){validate10.errors = [{instancePath:instancePath+"/numRetries",schemaPath:"#/properties/numRetries/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.referenceId !== undefined){const _errs24 = errors;if(typeof data.referenceId !== "string"){validate10.errors = [{instancePath:instancePath+"/referenceId",schemaPath:"#/properties/referenceId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.repaymentKey !== undefined){const _errs26 = errors;if(typeof data.repaymentKey !== "string"){validate10.errors = [{instancePath:instancePath+"/repaymentKey",schemaPath:"#/properties/repaymentKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs26 === errors;}else {var valid0 = true;}if(valid0){if(data.sendDate !== undefined){const _errs28 = errors;if(errors === _errs28){if(errors === _errs28){if(!(typeof data.sendDate === "string")){validate10.errors = [{instancePath:instancePath+"/sendDate",schemaPath:"#/properties/sendDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs28 === errors;}else {var valid0 = true;}if(valid0){if(data.senderKey !== undefined){const _errs30 = errors;if(typeof data.senderKey !== "string"){validate10.errors = [{instancePath:instancePath+"/senderKey",schemaPath:"#/properties/senderKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs30 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){const _errs32 = errors;let valid3;valid3 = false;for(const v2 of schema11.properties.state.enum){if(func0(data.state, v2)){valid3 = true;break;}}if(!valid3){validate10.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema11.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs32 === errors;}else {var valid0 = true;}if(valid0){if(data.subject !== undefined){const _errs33 = errors;if(typeof data.subject !== "string"){validate10.errors = [{instancePath:instancePath+"/subject",schemaPath:"#/properties/subject/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs33 === errors;}else {var valid0 = true;}if(valid0){if(data.templateKey !== undefined){const _errs35 = errors;if(typeof data.templateKey !== "string"){validate10.errors = [{instancePath:instancePath+"/templateKey",schemaPath:"#/properties/templateKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs35 === errors;}else {var valid0 = true;}if(valid0){if(data.type !== undefined){const _errs37 = errors;let valid4;valid4 = false;for(const v3 of schema11.properties.type.enum){if(func0(data.type, v3)){valid4 = true;break;}}if(!valid4){validate10.errors = [{instancePath:instancePath+"/type",schemaPath:"#/properties/type/enum",keyword:"enum",params:{allowedValues: schema11.properties.type.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs37 === errors;}else {var valid0 = true;}if(valid0){if(data.userKey !== undefined){const _errs38 = errors;if(typeof data.userKey !== "string"){validate10.errors = [{instancePath:instancePath+"/userKey",schemaPath:"#/properties/userKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs38 === errors;}else {var valid0 = true;}}}}}}}}}}}}}}}}}}}}}}else {validate10.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate10.errors = vErrors;return errors === 0;};validate.schema=schema11; \ No newline at end of file +import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"CommunicationMessage","type":"object","description":"Represents a communication message.","properties":{"body":{"type":"string","title":"body","description":"The contents of the message."},"clientKey":{"type":"string","title":"clientKey","description":"The client the message was sent to."},"creationDate":{"type":"string","title":"creationDate","description":"The date the communication message was created in UTC.","format":"date-time"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The deposit account that triggered this message."},"destination":{"type":"string","title":"destination","description":"The destination (phone number or email address) this message was sent to."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the communication message, which is generated automatically, and must be unique."},"event":{"title":"event","description":"The event that triggered this message.","enum":["MANUAL","DO_NOTHING","CLIENT_CREATED","CLIENT_APPROVED","GROUP_ACTIVITY","GROUP_CREATED","LOAN_CREATED","INTEREST_RATE_CHANGED","CLIENT_REJECTED","CLIENT_ACTIVITY","LOAN_REPAYMENT","LOAN_REPAYMENT_REVERSAL","FEE_APPLIED","FEE_ADJUSTED","FEE_CHARGED","PENALTY_APPLIED","PENALTY_ADJUSTMENT","FEES_DUE_REDUCED","FEE_REDUCTION_ADJUSTMENT","LOAN_APPROVAL","LOAN_ACCOUNT_CLOSURE","LOAN_ACCOUNT_WRITE_OFF","LOAN_ACCOUNT_REJECTION","LOAN_ACCOUNT_RESCHEDULED","LOAN_ACCOUNT_REFINANCED","REPAYMENT_REMINDER","ACCOUNT_IN_ARREARS","LOAN_DISBURSEMENT","LOAN_DISBURSEMENT_REVERSAL","LOAN_ACCOUNT_ACTIVITY","LOAN_ANTICIPATED_DISBURSEMENT","SAVINGS_CREATED","SAVINGS_DEPOSIT","SAVINGS_DEPOSIT_REVERSAL","SAVINGS_APPROVAL","SAVINGS_ACCOUNT_ACTIVATED","SAVINGS_ACCOUNT_CLOSURE","SAVINGS_ACCOUNT_REJECTION","SAVINGS_WITHDRAWAL","SAVINGS_WITHDRAWAL_REVERSAL","SAVINGS_ACCOUNT_ACTIVITY","DEPOSIT_INTEREST_APPLIED","DEPOSIT_INTEREST_APPLIED_ADJUSTMENT","ACCOUNT_AUTHORISATION_HOLD_CREATED","ACCOUNT_AUTHORISATION_HOLD_REVERSED","ACCOUNT_AUTHORISATION_HOLD_SETTLED","CARDS_AUTHORISATION_HOLD_CREATED","CARDS_AUTHORISATION_HOLD_SETTLED","CARDS_AUTHORISATION_HOLD_AMOUNT_DECREASED","CARDS_AUTHORISATION_HOLD_AMOUNT_INCREASED","CARDS_AUTHORISATION_HOLD_EXPIRED","CARDS_AUTHORISATION_HOLD_REVERSED","PORTAL_ACTIVATED","PORTAL_PASSWORD_RESET","END_OF_DAY_PROCESSING_COMPLETED","DATA_ACCESS_STATE_CHANGED","CREDIT_ARRANGEMENT_CREATED","CREDIT_ARRANGEMENT_CLOSED","CREDIT_ARRANGEMENT_APPROVED","CREDIT_ARRANGEMENT_REJECTED","CREDIT_ARRANGEMENT_WITHDRAWN","CREDIT_ARRANGEMENT_DELETED","CREDIT_ARRANGEMENT_ACCOUNT_ADDED","CREDIT_ARRANGEMENT_ACCOUNT_REMOVED","CREDIT_ARRANGEMENT_EDITED","PAYMENT_ORDER_ACTIVITY","COLLECTION_ORDER_ACTIVITY","JOURNAL_ENTRY_ADDED","JOURNAL_ENTRY_ADJUSTED","SAVINGS_TRANSACTION_EDITED"]},"failureCause":{"type":"string","title":"failureCause","description":"The failure code if the message failed to send."},"failureReason":{"title":"failureReason","description":"The reason for the communication message failure.","enum":["MESSAGING_EXCEPTION","INVALID_SMTP_CREDENTIALS","UNSUPPORTED_ENCODING_EXCEPTION","EMAIL_SERVICE_NOT_ENABLED","SMS_TOO_LONG","SMS_SERVICE_NOT_ENABLED","SMS_NOT_SENT","SMS_SERVICE_ERROR","SMS_CONNECTION_EXCEPTION","WEBHOOK_NOTIFICATIONS_DISABLED","INVALID_HTTP_RESPONSE","HTTP_ERROR_WHILE_SENDING","INVALID_JSON_BODY_SYNTAX","MISSING_TEMPLATE_KEY","MAX_MESSAGE_SIZE_LIMIT_EXCEEDED","UNDEFINED_DESTINATION","INVALID_HTTP_PROTOCOL","BLACKLISTED_URL","INVALID_SMS_GATEWAY_CREDENTIALS","MISSING_SMS_RECIPIENT","SMS_GATEWAY_ERROR","MISSING_EMAIL_RECIPIENT_ADDRESS","OTHER"]},"groupKey":{"type":"string","title":"groupKey","description":"The group the message was sent to."},"loanAccountKey":{"type":"string","title":"loanAccountKey","description":"The loan account that triggered this message."},"numRetries":{"type":"integer","title":"numRetries","description":"The number of retries to send the message."},"referenceId":{"type":"string","title":"referenceId","description":"The reference ID of the communication message, generated by the SMS dispatcher."},"repaymentKey":{"type":"string","title":"repaymentKey","description":"The repayment that triggered this message."},"sendDate":{"type":"string","title":"sendDate","description":"The date the communication message was sent in UTC.","format":"date-time"},"senderKey":{"type":"string","title":"senderKey","description":"The encoded key of the sender. If specified, it should be the encoded key of the current user."},"state":{"title":"state","description":"The state of the message.","enum":["SENT","QUEUED","QUEUED_FOR_STREAM","WAITING","SENDING_ASYNC","FAILED"]},"subject":{"type":"string","title":"subject","description":"The subject of the message."},"templateKey":{"type":"string","title":"templateKey","description":"The communication message template key."},"type":{"title":"type","description":"The type of communication message.","enum":["EMAIL","SMS","WEB_HOOK","EVENT_STREAM","TASK"]},"userKey":{"type":"string","title":"userKey","description":"The user the message was sent to."}},"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.body !== undefined){const _errs2 = errors;if(typeof data.body !== "string"){validate10.errors = [{instancePath:instancePath+"/body",schemaPath:"#/properties/body/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.clientKey !== undefined){const _errs4 = errors;if(typeof data.clientKey !== "string"){validate10.errors = [{instancePath:instancePath+"/clientKey",schemaPath:"#/properties/clientKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.creationDate === "string")){validate10.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs8 = errors;if(typeof data.depositAccountKey !== "string"){validate10.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.destination !== undefined){const _errs10 = errors;if(typeof data.destination !== "string"){validate10.errors = [{instancePath:instancePath+"/destination",schemaPath:"#/properties/destination/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs12 = errors;if(typeof data.encodedKey !== "string"){validate10.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.event !== undefined){const _errs14 = errors;let valid1;valid1 = false;for(const v0 of schema11.properties.event.enum){if(func0(data.event, v0)){valid1 = true;break;}}if(!valid1){validate10.errors = [{instancePath:instancePath+"/event",schemaPath:"#/properties/event/enum",keyword:"enum",params:{allowedValues: schema11.properties.event.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs14 === errors;}else {var valid0 = true;}if(valid0){if(data.failureCause !== undefined){const _errs15 = errors;if(typeof data.failureCause !== "string"){validate10.errors = [{instancePath:instancePath+"/failureCause",schemaPath:"#/properties/failureCause/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.failureReason !== undefined){const _errs17 = errors;let valid2;valid2 = false;for(const v1 of schema11.properties.failureReason.enum){if(func0(data.failureReason, v1)){valid2 = true;break;}}if(!valid2){validate10.errors = [{instancePath:instancePath+"/failureReason",schemaPath:"#/properties/failureReason/enum",keyword:"enum",params:{allowedValues: schema11.properties.failureReason.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.groupKey !== undefined){const _errs18 = errors;if(typeof data.groupKey !== "string"){validate10.errors = [{instancePath:instancePath+"/groupKey",schemaPath:"#/properties/groupKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs18 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAccountKey !== undefined){const _errs20 = errors;if(typeof data.loanAccountKey !== "string"){validate10.errors = [{instancePath:instancePath+"/loanAccountKey",schemaPath:"#/properties/loanAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.numRetries !== undefined){let data11 = data.numRetries;const _errs22 = errors;if(!(((typeof data11 == "number") && (!(data11 % 1) && !isNaN(data11))) && (isFinite(data11)))){validate10.errors = [{instancePath:instancePath+"/numRetries",schemaPath:"#/properties/numRetries/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.referenceId !== undefined){const _errs24 = errors;if(typeof data.referenceId !== "string"){validate10.errors = [{instancePath:instancePath+"/referenceId",schemaPath:"#/properties/referenceId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.repaymentKey !== undefined){const _errs26 = errors;if(typeof data.repaymentKey !== "string"){validate10.errors = [{instancePath:instancePath+"/repaymentKey",schemaPath:"#/properties/repaymentKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs26 === errors;}else {var valid0 = true;}if(valid0){if(data.sendDate !== undefined){const _errs28 = errors;if(errors === _errs28){if(errors === _errs28){if(!(typeof data.sendDate === "string")){validate10.errors = [{instancePath:instancePath+"/sendDate",schemaPath:"#/properties/sendDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs28 === errors;}else {var valid0 = true;}if(valid0){if(data.senderKey !== undefined){const _errs30 = errors;if(typeof data.senderKey !== "string"){validate10.errors = [{instancePath:instancePath+"/senderKey",schemaPath:"#/properties/senderKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs30 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){const _errs32 = errors;let valid3;valid3 = false;for(const v2 of schema11.properties.state.enum){if(func0(data.state, v2)){valid3 = true;break;}}if(!valid3){validate10.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema11.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs32 === errors;}else {var valid0 = true;}if(valid0){if(data.subject !== undefined){const _errs33 = errors;if(typeof data.subject !== "string"){validate10.errors = [{instancePath:instancePath+"/subject",schemaPath:"#/properties/subject/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs33 === errors;}else {var valid0 = true;}if(valid0){if(data.templateKey !== undefined){const _errs35 = errors;if(typeof data.templateKey !== "string"){validate10.errors = [{instancePath:instancePath+"/templateKey",schemaPath:"#/properties/templateKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs35 === errors;}else {var valid0 = true;}if(valid0){if(data.type !== undefined){const _errs37 = errors;let valid4;valid4 = false;for(const v3 of schema11.properties.type.enum){if(func0(data.type, v3)){valid4 = true;break;}}if(!valid4){validate10.errors = [{instancePath:instancePath+"/type",schemaPath:"#/properties/type/enum",keyword:"enum",params:{allowedValues: schema11.properties.type.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs37 === errors;}else {var valid0 = true;}if(valid0){if(data.userKey !== undefined){const _errs38 = errors;if(typeof data.userKey !== "string"){validate10.errors = [{instancePath:instancePath+"/userKey",schemaPath:"#/properties/userKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs38 === errors;}else {var valid0 = true;}}}}}}}}}}}}}}}}}}}}}}else {validate10.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate10.errors = vErrors;return errors === 0;};validate.schema=schema11; \ No newline at end of file diff --git a/src/communications/schemas/communication-messages-search-sort-criteria.schema.js b/src/communications/schemas/communication-messages-search-sort-criteria.schema.js new file mode 100644 index 0000000..43d380c --- /dev/null +++ b/src/communications/schemas/communication-messages-search-sort-criteria.schema.js @@ -0,0 +1,5 @@ +/** + * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code + * eslint-disable + */ +import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"CommunicationMessagesSearchSortCriteria","type":"object","description":"The unit that composes the body used used for communication messages client directed searching.","properties":{"filterCriteria":{"type":"array","title":"filterCriteria","description":"The list of filtering criteria.","items":{"$ref":"#/$defs/CommunicationMessageFilterCriteriaaf30"}},"sortingCriteria":{"title":"sortingCriteria","$ref":"#/$defs/CommunicationMessageSearchSortingCriteriaaf30"}},"required":["filterCriteria","sortingCriteria"],"additionalProperties":true,"$defs":{"CommunicationMessageFilterCriteriaaf30":{"type":"object","title":"CommunicationMessageFilterCriteriaaf30","description":"The unit that composes the list used for communication messages client directed searching","properties":{"field":{"title":"field","anyOf":[{"description":"The field(s) to use to perform the search.","enum":["encodedKey","creationDate","sendDate","senderKey","clientKey","groupKey","userKey","state","failureReason","failureCause","destination","type","event"]},{"type":"string"}]},"operator":{"title":"operator","description":"| **Operator** | **Affected values** | **Available for** |\n|--------------- |----------------------|----------------------------------------------------------------------|\n| EQUALS | ONE_VALUE | BIG_DECIMAL,BOOLEAN,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY |\n| EQUALS_CASE_SENSITIVE | ONE_VALUE | BIG_DECIMAL,BOOLEAN,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY \t\t |\n| MORE_THAN | ONE_VALUE | BIG_DECIMAL,NUMBER,MONEY |\n| LESS_THAN | ONE_VALUE | BIG_DECIMAL,NUMBER,MONEY |\n| BETWEEN | TWO_VALUES | BIG_DECIMAL,NUMBER,MONEY,DATE,DATE_TIME |\n| ON | ONE_VALUE | DATE,DATE_TIME |\n| AFTER | ONE_VALUE | DATE,DATE_TIME |\n| BEFORE | ONE_VALUE | DATE,DATE_TIME |\n| BEFORE_INCLUSIVE | ONE_VALUE | DATE,DATE_TIME |\n| STARTS_WITH | ONE_VALUE | STRING |\n| STARTS_WITH_CASE_SENSITIVE | ONE_VALUE | STRING |\n| IN | LIST | ENUM,KEY |\n| TODAY | NO_VALUE | DATE,DATE_TIME |\n| THIS_WEEK | NO_VALUE | DATE,DATE_TIME |\n| THIS_MONTH | NO_VALUE | DATE,DATE_TIME |\n| THIS_YEAR | NO_VALUE | DATE,DATE_TIME |\n| LAST_DAYS | ONE_VALUE | NUMBER |\n| EMPTY | NO_VALUE | BIG_DECIMAL,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY,DATE,DATE_TIME |\n| NOT_EMPTY | NO_VALUE | BIG_DECIMAL,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY,DATE,DATE_TIME |","enum":["EQUALS","EQUALS_CASE_SENSITIVE","DIFFERENT_THAN","MORE_THAN","LESS_THAN","BETWEEN","ON","AFTER","AFTER_INCLUSIVE","BEFORE","BEFORE_INCLUSIVE","STARTS_WITH","STARTS_WITH_CASE_SENSITIVE","IN","TODAY","THIS_WEEK","THIS_MONTH","THIS_YEAR","LAST_DAYS","EMPTY","NOT_EMPTY"]},"secondValue":{"type":"string","title":"secondValue","description":"The second value to match the searching criteria, when the `BETWEEN` operator is used."},"value":{"type":"string","title":"value","description":"The value to match the searching criteria."},"values":{"type":"array","title":"values","description":"List of values when the `IN` operator is used.","items":{"type":"string"}}},"required":["field","operator"],"additionalProperties":true},"CommunicationMessageSearchSortingCriteriaaf30":{"type":"object","title":"CommunicationMessageSearchSortingCriteriaaf30","description":"The sorting criteria used for Messages search.","properties":{"field":{"title":"field","description":"Sort Messages By","enum":["encodedKey","creationDate","sendDate","senderKey","clientKey","groupKey","userKey","type"]},"order":{"title":"order","description":"The sorting order: `ASC` or `DESC`. The default order is `DESC`.","enum":["ASC","DESC"]}},"required":["field"],"additionalProperties":true}}};const schema12 = {"type":"object","title":"CommunicationMessageFilterCriteriaaf30","description":"The unit that composes the list used for communication messages client directed searching","properties":{"field":{"title":"field","anyOf":[{"description":"The field(s) to use to perform the search.","enum":["encodedKey","creationDate","sendDate","senderKey","clientKey","groupKey","userKey","state","failureReason","failureCause","destination","type","event"]},{"type":"string"}]},"operator":{"title":"operator","description":"| **Operator** | **Affected values** | **Available for** |\n|--------------- |----------------------|----------------------------------------------------------------------|\n| EQUALS | ONE_VALUE | BIG_DECIMAL,BOOLEAN,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY |\n| EQUALS_CASE_SENSITIVE | ONE_VALUE | BIG_DECIMAL,BOOLEAN,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY \t\t |\n| MORE_THAN | ONE_VALUE | BIG_DECIMAL,NUMBER,MONEY |\n| LESS_THAN | ONE_VALUE | BIG_DECIMAL,NUMBER,MONEY |\n| BETWEEN | TWO_VALUES | BIG_DECIMAL,NUMBER,MONEY,DATE,DATE_TIME |\n| ON | ONE_VALUE | DATE,DATE_TIME |\n| AFTER | ONE_VALUE | DATE,DATE_TIME |\n| BEFORE | ONE_VALUE | DATE,DATE_TIME |\n| BEFORE_INCLUSIVE | ONE_VALUE | DATE,DATE_TIME |\n| STARTS_WITH | ONE_VALUE | STRING |\n| STARTS_WITH_CASE_SENSITIVE | ONE_VALUE | STRING |\n| IN | LIST | ENUM,KEY |\n| TODAY | NO_VALUE | DATE,DATE_TIME |\n| THIS_WEEK | NO_VALUE | DATE,DATE_TIME |\n| THIS_MONTH | NO_VALUE | DATE,DATE_TIME |\n| THIS_YEAR | NO_VALUE | DATE,DATE_TIME |\n| LAST_DAYS | ONE_VALUE | NUMBER |\n| EMPTY | NO_VALUE | BIG_DECIMAL,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY,DATE,DATE_TIME |\n| NOT_EMPTY | NO_VALUE | BIG_DECIMAL,LONG,MONEY,NUMBER,PERCENT,STRING,ENUM,KEY,DATE,DATE_TIME |","enum":["EQUALS","EQUALS_CASE_SENSITIVE","DIFFERENT_THAN","MORE_THAN","LESS_THAN","BETWEEN","ON","AFTER","AFTER_INCLUSIVE","BEFORE","BEFORE_INCLUSIVE","STARTS_WITH","STARTS_WITH_CASE_SENSITIVE","IN","TODAY","THIS_WEEK","THIS_MONTH","THIS_YEAR","LAST_DAYS","EMPTY","NOT_EMPTY"]},"secondValue":{"type":"string","title":"secondValue","description":"The second value to match the searching criteria, when the `BETWEEN` operator is used."},"value":{"type":"string","title":"value","description":"The value to match the searching criteria."},"values":{"type":"array","title":"values","description":"List of values when the `IN` operator is used.","items":{"type":"string"}}},"required":["field","operator"],"additionalProperties":true};const schema13 = {"type":"object","title":"CommunicationMessageSearchSortingCriteriaaf30","description":"The sorting criteria used for Messages search.","properties":{"field":{"title":"field","description":"Sort Messages By","enum":["encodedKey","creationDate","sendDate","senderKey","clientKey","groupKey","userKey","type"]},"order":{"title":"order","description":"The sorting order: `ASC` or `DESC`. The default order is `DESC`.","enum":["ASC","DESC"]}},"required":["field"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.filterCriteria === undefined) && (missing0 = "filterCriteria")) || ((data.sortingCriteria === undefined) && (missing0 = "sortingCriteria"))){validate10.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.filterCriteria !== undefined){let data0 = data.filterCriteria;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH. + */ + shortMonthHandlingMethod?: 'LAST_DAY_IN_MONTH' | 'FIRST_DAY_OF_NEXT_MONTH' +} + /** * Represents information about a deposit account. */ @@ -1320,12 +1334,20 @@ export interface Installment { * The encoded key of the installment, which is auto generated, and unique. */ encodedKey?: string + /** + * The expected closing balance is the remaining amount per installment only applicable for interest only equal installment products. + */ + expectedClosingBalance?: number fee?: InstallmentFee /** * The breakdown of the fee amounts that have been applied to the loan account. */ feeDetails?: InstallmentFeeDetails[] interest?: InstallmentAllocationElementTaxableAmount + /** + * The interest accrued calculated on previous repayment closing balance only applicable interest only equal installment products. + */ + interestAccrued?: number /** * `TRUE` if a payment holiday is offered for the installment, `FALSE` otherwise. */ @@ -1397,6 +1419,20 @@ export interface InstallmentFeeDetails { tax?: AmountWithReduced } +/** + * Represents interest rate change threshold settings for loan accounts and loan products. + */ +export interface InterestRateChangePMTAdjustmentThreshold { + /** + * The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS + */ + method?: 'WORKING_DAYS' | 'CALENDAR_DAYS' + /** + * The number of days that trigger an interest rate change. + */ + numberOfDays?: number +} + /** * The interest settings, holds all the properties regarding interests for the loan account. */ @@ -1413,10 +1449,11 @@ export interface InterestSettings { * Indicates whether late interest is accrued for this loan account */ accrueLateInterest?: boolean + interestApplicationDays?: DaysInMonth /** * The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment. */ - interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' + interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' | 'FIXED_DAYS_OF_MONTH' /** * The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed. */ @@ -1424,7 +1461,7 @@ export interface InterestSettings { /** * The interest calculation method. Holds the type of interest calculation method. */ - interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' + interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' | 'EQUAL_INSTALLMENTS' /** * The interest change frequency. Holds the possible values for how often is interest charged on loan or deposit accounts */ @@ -1433,6 +1470,7 @@ export interface InterestSettings { * The interest rate. Represents the interest rate for the loan account. The interest on loans is accrued on a daily basis, which allows charging the clients only for the days they actually used the loan amount. */ interestRate?: number + interestRateChangePMTAdjustmentThreshold?: InterestRateChangePMTAdjustmentThreshold /** * Interest rate update frequency unit count. */ @@ -1920,6 +1958,11 @@ export interface PrepaymentSettings { * The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated. */ elementsRecalculationMethod?: 'PRINCIPAL_EXPECTED_FIXED' | 'TOTAL_EXPECTED_FIXED' + ercFreeAllowanceAmount?: number + /** + * Early repayment charge fee free allowance in percentage per year + */ + ercFreeAllowancePercentage?: number /** * Prepayment recalculation method copied from the loan product on which this account is based. */ @@ -2047,6 +2090,10 @@ export interface RevolvingAccountSettings { * The schedule settings, holds all schedule properties. */ export interface ScheduleSettings { + /** + * The PMT is calculated as the loan would have [amortizationPeriod] installments. + */ + amortizationPeriod?: number billingCycle?: BillingCycleDays /** * The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset) diff --git a/src/credit-arrangements/schemas/credit-arrangement-accounts.schema.js b/src/credit-arrangements/schemas/credit-arrangement-accounts.schema.js index 7697591..23e66f9 100644 --- a/src/credit-arrangements/schemas/credit-arrangement-accounts.schema.js +++ b/src/credit-arrangements/schemas/credit-arrangement-accounts.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"CreditArrangementAccounts","type":"object","description":"Represents loan and deposit accounts linked to a credit arrangement.","properties":{"depositAccounts":{"type":"array","title":"depositAccounts","description":"List of the deposit accounts linked to the credit arrangement.","items":{"$ref":"#/$defs/DepositAccountaf30"}},"loanAccounts":{"type":"array","title":"loanAccounts","description":"List of loan accounts linked to the credit arrangement.","items":{"$ref":"#/$defs/LoanAccountaf30"}}},"additionalProperties":true,"$defs":{"DepositAccountaf30":{"type":"object","title":"DepositAccountaf30","description":"Represents information about a deposit account.","properties":{"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder, which is an individual client or group."},"accountHolderType":{"title":"accountHolderType","description":"The account holder type.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the deposit account.","enum":["PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","MATURED","LOCKED","DORMANT","CLOSED","CLOSED_WRITTEN_OFF","WITHDRAWN","CLOSED_REJECTED"]},"accountType":{"title":"accountType","description":"The deposit account type and the product that it belongs to.","enum":["CURRENT_ACCOUNT","REGULAR_SAVINGS","FIXED_DEPOSIT","SAVINGS_PLAN","INVESTOR_ACCOUNT"]},"accruedAmounts":{"title":"accruedAmounts","$ref":"#/$defs/DepositAccountAccruedAmountsaf30"},"activationDate":{"type":"string","title":"activationDate","description":"The date when the deposit account was activated, in the organization's timezone and time format.","format":"date-time"},"approvedDate":{"type":"string","title":"approvedDate","description":"The date when the deposit account was approved, in the organization's timezone and time format.","format":"date-time"},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch that this deposit account is assigned to."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre that this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user that this deposit is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/DepositAccountBalancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date when the deposit account was closed, in UTC.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date this deposit account was created, in UTC.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the credit arrangement where this account is registered."},"currencyCode":{"type":"string","title":"currencyCode","description":"The currency code."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the deposit account, which is auto-generated and unique."},"id":{"type":"string","title":"id","description":"The ID of the deposit account, which can be generated and customized - but must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/DepositAccountInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/DepositAccountInternalControlsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date when the account was last evaluated for interest calculations and maturity, in the organization's timezone and time format.","format":"date-time"},"lastInterestCalculationDate":{"type":"string","title":"lastInterestCalculationDate","description":"The date when interest was last calculated for the account, in the organization's timezone and time format.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date when regular interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastInterestStoredDate":{"type":"string","title":"lastInterestStoredDate","description":"The date when interest was last applied on the account, in the organization's timezone and time format.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last update date for the deposit account, in UTC.","format":"date-time"},"lastOverdraftInterestReviewDate":{"type":"string","title":"lastOverdraftInterestReviewDate","description":"The date when the overdraft interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the deposit account was set to In Arrears, or null if the account is not In Arrears. The date is in the organization's timezone and time format.","format":"date-time"},"linkedSettlementAccountKeys":{"type":"array","title":"linkedSettlementAccountKeys","description":"Lists all loan account keys on which the deposit account is used as the settlement account.","items":{"type":"string"}},"lockedDate":{"type":"string","title":"lockedDate","description":"The date when the deposit account was locked, in the organization's timezone and time format.","format":"date-time"},"maturityDate":{"type":"string","title":"maturityDate","description":"The date when the account matures, for fixed or compulsory savings plans, in the organization's timezone and time format.","format":"date-time"},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this deposit account. If this account was imported, you can track which migration event it came from."},"name":{"type":"string","title":"name","description":"The deposit account name."},"notes":{"type":"string","title":"notes","description":"The notes or description attached to this object."},"overdraftInterestSettings":{"title":"overdraftInterestSettings","$ref":"#/$defs/DepositAccountOverdraftInterestSettingsaf30"},"overdraftSettings":{"title":"overdraftSettings","$ref":"#/$defs/DepositAccountOverdraftSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key to the product type that this account is based on."},"withholdingTaxSourceKey":{"type":"string","title":"withholdingTaxSourceKey","description":"The tax source where the account withholding taxes will be updated."}},"required":["accountHolderKey","accountHolderType","name","productTypeKey"],"additionalProperties":true},"DepositAccountAccruedAmountsaf30":{"type":"object","title":"DepositAccountAccruedAmountsaf30","description":"Represents information about the accrued amounts of deposit accounts.","properties":{"interestAccrued":{"type":"number","title":"interestAccrued","description":"The amount of positive interest that has been accrued in the account."},"negativeInterestAccrued":{"type":"number","title":"negativeInterestAccrued","description":"The amount of negative interest that has been accrued in the account."},"overdraftInterestAccrued":{"type":"number","title":"overdraftInterestAccrued","description":"The amount of overdraft interest that has been accrued in the account."},"technicalOverdraftInterestAccrued":{"type":"number","title":"technicalOverdraftInterestAccrued","description":"The amount of technical overdraft interest that has been accrued in the account."}},"additionalProperties":true},"DepositAccountBalancesaf30":{"type":"object","title":"DepositAccountBalancesaf30","description":"Represents information about the balances of a deposit account.","properties":{"availableBalance":{"type":"number","title":"availableBalance","description":"The current available balance for deposit transactions."},"blockedBalance":{"type":"number","title":"blockedBalance","description":"The sum of all the blocked amounts on an account."},"feesDue":{"type":"number","title":"feesDue","description":"The amount of fees due to be paid on this account."},"forwardAvailableBalance":{"type":"number","title":"forwardAvailableBalance","description":"The sum of all the authorization hold amounts that have `CRDT` as the `creditDebitIndicator` for an account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts that have `DBIT` as the `creditDebitIndicator` for an account."},"lockedBalance":{"type":"number","title":"lockedBalance","description":"The locked amount that is not available for withdrawal in the account. For more information, see [Deposit Account Overview Details](https://support.mambu.com/docs/deposit-account-overview-details)."},"overdraftAmount":{"type":"number","title":"overdraftAmount","description":"The overdraft amount that has been taken out in the account. For more information, see [Overdraft Products](https://support.mambu.com/docs/en/overdraft-products)."},"overdraftInterestDue":{"type":"number","title":"overdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of an authorized overdraft."},"technicalOverdraftAmount":{"type":"number","title":"technicalOverdraftAmount","description":"The technical overdraft amount that has been taken out in the account. For more information, see [Technical Overdraft](https://support.mambu.com/docs/en/overdraft-products#technical-overdraft)."},"technicalOverdraftInterestDue":{"type":"number","title":"technicalOverdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of a technical overdraft."},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of the account."}},"additionalProperties":true},"DepositAccountInterestSettingsaf30":{"type":"object","title":"DepositAccountInterestSettingsaf30","description":"Represents information about the deposit account's interest settings.","properties":{"interestPaymentSettings":{"title":"interestPaymentSettings","$ref":"#/$defs/DepositAccountInterestPaymentSettingsaf30"},"interestRateSettings":{"title":"interestRateSettings","$ref":"#/$defs/DepositAccountInterestRateSettingsaf30"}},"additionalProperties":true},"DepositAccountInterestPaymentSettingsaf30":{"type":"object","title":"DepositAccountInterestPaymentSettingsaf30","description":"Represents information about the interest payment settings.","properties":{"interestPaymentDates":{"type":"array","title":"interestPaymentDates","description":"The list of all dates when the interest is paid into the deposit account.","items":{"$ref":"#/$defs/MonthAndDayaf30"}},"interestPaymentPoint":{"title":"interestPaymentPoint","description":"The interest payment point, which specifies when the interest should be paid to the account.","enum":["FIRST_DAY_OF_MONTH","EVERY_WEEK","EVERY_OTHER_WEEK","EVERY_MONTH","EVERY_3_MONTHS","ON_FIXED_DATES","DAILY","ANNUALLY","BI_ANNUALLY","ON_ACCOUNT_MATURITY"]}},"additionalProperties":true},"MonthAndDayaf30":{"type":"object","title":"MonthAndDayaf30","description":"Wrapper for month and day for instances where the year isn't needed","properties":{"day":{"type":"integer","title":"day","description":"The day in the month"},"month":{"type":"integer","title":"month","description":"The month of the year"}},"additionalProperties":true},"DepositAccountInterestRateSettingsaf30":{"type":"object","title":"DepositAccountInterestRateSettingsaf30","description":"Represents information about the interest rate settings for deposit accounts.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key for the set of interest settings, which is auto-generated and unique."},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interest charge frequency, which shows how often interest is charged on loan or deposit accounts.","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestChargeFrequencyCount":{"type":"integer","title":"interestChargeFrequencyCount","description":"The number of times to apply interest in a time period."},"interestRate":{"type":"number","title":"interestRate","description":"The interest rate for the deposit account."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"The number of times to review the interest rate in a time period."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"The time unit to use to determine the frequency of interest rate reviews.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"The interest calculation method used.","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestRateTerms":{"title":"interestRateTerms","description":"The terms for how interest rate is determined when accruing for an account.","enum":["FIXED","TIERED","TIERED_PERIOD","TIERED_BAND"]},"interestRateTiers":{"type":"array","title":"interestRateTiers","description":"The list of interest rate tiers, which hold the values to define how interest is calculated.","items":{"$ref":"#/$defs/DepositAccountInterestRateTieraf30"}},"interestSpread":{"type":"number","title":"interestSpread","description":"The index interest rate that is used to calculate the interest rate that is applied to accounts."}},"additionalProperties":true},"DepositAccountInterestRateTieraf30":{"type":"object","title":"DepositAccountInterestRateTieraf30","description":"Represents information about how interest rate is calculated.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"endingBalance":{"type":"number","title":"endingBalance","description":"The top-limit value for the account balance in order to determine if this tier is used or not"},"endingDay":{"type":"integer","title":"endingDay","description":"The end date for the account period. Used to determine if this interest rate tier is used or not."},"interestRate":{"type":"number","title":"interestRate","description":"The rate used for computing the interest for an account which has the balance less than the ending balance"}},"required":["interestRate"],"additionalProperties":true},"DepositAccountInternalControlsaf30":{"type":"object","title":"DepositAccountInternalControlsaf30","description":"Represents information about internal controls.","properties":{"maxDepositBalance":{"type":"number","title":"maxDepositBalance","description":"The maximum deposit balance of the account."},"maxWithdrawalAmount":{"type":"number","title":"maxWithdrawalAmount","description":"The maximum amount allowed for a withdrawal."},"recommendedDepositAmount":{"type":"number","title":"recommendedDepositAmount","description":"The recommended amount for a deposit."},"targetAmount":{"type":"number","title":"targetAmount","description":"The target amount for a deposit made towards a savings goal."}},"additionalProperties":true},"DepositAccountOverdraftInterestSettingsaf30":{"type":"object","title":"DepositAccountOverdraftInterestSettingsaf30","description":"Represents information about a deposit account's overdraft interest settings.","properties":{"interestRateSettings":{"title":"interestRateSettings","$ref":"#/$defs/DepositAccountOverdraftInterestRateSettingsaf30"}},"additionalProperties":true},"DepositAccountOverdraftInterestRateSettingsaf30":{"type":"object","title":"DepositAccountOverdraftInterestRateSettingsaf30","description":"Represents information about overdraft interest rate settings for deposit accounts.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key for the set of interest settings, which is auto-generated and unique."},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interest charge frequency, which shows how often interest is charged on loan or deposit accounts.","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestChargeFrequencyCount":{"type":"integer","title":"interestChargeFrequencyCount","description":"The number of times to apply interest in a time period."},"interestRate":{"type":"number","title":"interestRate","description":"The interest rate for the deposit account."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"The number of times to review the interest rate in a time period."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"The time unit to use to determine the frequency of interest rate reviews.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"The interest calculation method used.","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestRateTerms":{"title":"interestRateTerms","description":"The terms for how interest rate is determined when accruing for an account.","enum":["FIXED","TIERED","TIERED_PERIOD","TIERED_BAND"]},"interestRateTiers":{"type":"array","title":"interestRateTiers","description":"The list of interest rate tiers, which hold the values to define how interest is calculated.","items":{"$ref":"#/$defs/DepositAccountInterestRateTieraf30"}},"interestSpread":{"type":"number","title":"interestSpread","description":"The index interest rate that is used to calculate the interest rate that is applied to accounts."}},"additionalProperties":true},"DepositAccountOverdraftSettingsaf30":{"type":"object","title":"DepositAccountOverdraftSettingsaf30","description":"Represents information about a deposit account's overdraft settings.","properties":{"allowOverdraft":{"type":"boolean","title":"allowOverdraft","description":"`TRUE` if this account supports overdraft, `FALSE` otherwise."},"overdraftExpiryDate":{"type":"string","title":"overdraftExpiryDate","description":"The expiration date of an overdraft.","format":"date-time"},"overdraftLimit":{"type":"number","title":"overdraftLimit","description":"The limit amount that may be taken out as overdraft, where null means 0."}},"additionalProperties":true},"LoanAccountaf30":{"type":"object","title":"LoanAccountaf30","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true},"AccountArrearsSettingsaf30":{"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true},"Assetaf30":{"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true},"Currencyaf30":{"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true},"Balancesaf30":{"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true},"DisbursementDetailsaf30":{"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true},"CustomPredefinedFeeaf30":{"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true},"LoanTransactionDetailsaf30":{"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true},"InvestorFundaf30":{"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true},"Guarantoraf30":{"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true},"InterestSettingsaf30":{"type":"object","title":"InterestSettingsaf30","description":"The interest settings, holds all the properties regarding interests for the loan account.","properties":{"accountInterestRateSettings":{"type":"array","title":"accountInterestRateSettings","description":"Adjustable interest rates settings for loan account","items":{"$ref":"#/$defs/AccountInterestRateSettingsaf30"}},"accrueInterestAfterMaturity":{"type":"boolean","title":"accrueInterestAfterMaturity","description":"The accrue interest after maturity. If the product support this option, specify if the interest should be accrued after the account maturity date."},"accrueLateInterest":{"type":"boolean","title":"accrueLateInterest","description":"Indicates whether late interest is accrued for this loan account"},"interestApplicationMethod":{"title":"interestApplicationMethod","description":"The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment.","enum":["AFTER_DISBURSEMENT","REPAYMENT_DUE_DATE"]},"interestBalanceCalculationMethod":{"title":"interestBalanceCalculationMethod","description":"The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed.","enum":["ONLY_PRINCIPAL","PRINCIPAL_AND_INTEREST"]},"interestCalculationMethod":{"title":"interestCalculationMethod","description":"The interest calculation method. Holds the type of interest calculation method.","enum":["FLAT","DECLINING_BALANCE","DECLINING_BALANCE_DISCOUNTED"]},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interest change frequency. Holds the possible values for how often is interest charged on loan or deposit accounts","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestRate":{"type":"number","title":"interestRate","description":"The interest rate. Represents the interest rate for the loan account. The interest on loans is accrued on a daily basis, which allows charging the clients only for the days they actually used the loan amount."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate update frequency unit count."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"The interest rate review unit. Defines the interest rate update frequency measurement unit.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"The interest rate source. Represents the interest calculation method: fixed or (interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestSpread":{"type":"number","title":"interestSpread","description":"Interest to be added to active organization index interest rate in order to find out actual interest rate"},"interestType":{"title":"interestType","description":"The possible values for how we compute and apply the interest","enum":["SIMPLE_INTEREST","CAPITALIZED_INTEREST","COMPOUNDING_INTEREST"]}},"additionalProperties":true},"AccountInterestRateSettingsaf30":{"type":"object","title":"AccountInterestRateSettingsaf30","description":"Adjustable interest rates settings for loan account","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate settings, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestRate":{"type":"number","title":"interestRate","description":"Interest rate value."},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Maximum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Minimum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count. Valid only for index interest rate."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit. Valid only for index interest rate.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or indexed(interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestSpread":{"type":"number","title":"interestSpread","description":"Interest spread value."},"validFrom":{"type":"string","title":"validFrom","description":"Date since an interest rate is valid","format":"date-time"}},"required":["interestRateSource","validFrom"],"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"DepositAccountaf30","description":"Represents information about a deposit account.","properties":{"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder, which is an individual client or group."},"accountHolderType":{"title":"accountHolderType","description":"The account holder type.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the deposit account.","enum":["PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","MATURED","LOCKED","DORMANT","CLOSED","CLOSED_WRITTEN_OFF","WITHDRAWN","CLOSED_REJECTED"]},"accountType":{"title":"accountType","description":"The deposit account type and the product that it belongs to.","enum":["CURRENT_ACCOUNT","REGULAR_SAVINGS","FIXED_DEPOSIT","SAVINGS_PLAN","INVESTOR_ACCOUNT"]},"accruedAmounts":{"title":"accruedAmounts","$ref":"#/$defs/DepositAccountAccruedAmountsaf30"},"activationDate":{"type":"string","title":"activationDate","description":"The date when the deposit account was activated, in the organization's timezone and time format.","format":"date-time"},"approvedDate":{"type":"string","title":"approvedDate","description":"The date when the deposit account was approved, in the organization's timezone and time format.","format":"date-time"},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch that this deposit account is assigned to."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre that this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user that this deposit is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/DepositAccountBalancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date when the deposit account was closed, in UTC.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date this deposit account was created, in UTC.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the credit arrangement where this account is registered."},"currencyCode":{"type":"string","title":"currencyCode","description":"The currency code."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the deposit account, which is auto-generated and unique."},"id":{"type":"string","title":"id","description":"The ID of the deposit account, which can be generated and customized - but must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/DepositAccountInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/DepositAccountInternalControlsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date when the account was last evaluated for interest calculations and maturity, in the organization's timezone and time format.","format":"date-time"},"lastInterestCalculationDate":{"type":"string","title":"lastInterestCalculationDate","description":"The date when interest was last calculated for the account, in the organization's timezone and time format.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date when regular interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastInterestStoredDate":{"type":"string","title":"lastInterestStoredDate","description":"The date when interest was last applied on the account, in the organization's timezone and time format.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last update date for the deposit account, in UTC.","format":"date-time"},"lastOverdraftInterestReviewDate":{"type":"string","title":"lastOverdraftInterestReviewDate","description":"The date when the overdraft interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the deposit account was set to In Arrears, or null if the account is not In Arrears. The date is in the organization's timezone and time format.","format":"date-time"},"linkedSettlementAccountKeys":{"type":"array","title":"linkedSettlementAccountKeys","description":"Lists all loan account keys on which the deposit account is used as the settlement account.","items":{"type":"string"}},"lockedDate":{"type":"string","title":"lockedDate","description":"The date when the deposit account was locked, in the organization's timezone and time format.","format":"date-time"},"maturityDate":{"type":"string","title":"maturityDate","description":"The date when the account matures, for fixed or compulsory savings plans, in the organization's timezone and time format.","format":"date-time"},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this deposit account. If this account was imported, you can track which migration event it came from."},"name":{"type":"string","title":"name","description":"The deposit account name."},"notes":{"type":"string","title":"notes","description":"The notes or description attached to this object."},"overdraftInterestSettings":{"title":"overdraftInterestSettings","$ref":"#/$defs/DepositAccountOverdraftInterestSettingsaf30"},"overdraftSettings":{"title":"overdraftSettings","$ref":"#/$defs/DepositAccountOverdraftSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key to the product type that this account is based on."},"withholdingTaxSourceKey":{"type":"string","title":"withholdingTaxSourceKey","description":"The tax source where the account withholding taxes will be updated."}},"required":["accountHolderKey","accountHolderType","name","productTypeKey"],"additionalProperties":true};const schema13 = {"type":"object","title":"DepositAccountAccruedAmountsaf30","description":"Represents information about the accrued amounts of deposit accounts.","properties":{"interestAccrued":{"type":"number","title":"interestAccrued","description":"The amount of positive interest that has been accrued in the account."},"negativeInterestAccrued":{"type":"number","title":"negativeInterestAccrued","description":"The amount of negative interest that has been accrued in the account."},"overdraftInterestAccrued":{"type":"number","title":"overdraftInterestAccrued","description":"The amount of overdraft interest that has been accrued in the account."},"technicalOverdraftInterestAccrued":{"type":"number","title":"technicalOverdraftInterestAccrued","description":"The amount of technical overdraft interest that has been accrued in the account."}},"additionalProperties":true};const schema14 = {"type":"object","title":"DepositAccountBalancesaf30","description":"Represents information about the balances of a deposit account.","properties":{"availableBalance":{"type":"number","title":"availableBalance","description":"The current available balance for deposit transactions."},"blockedBalance":{"type":"number","title":"blockedBalance","description":"The sum of all the blocked amounts on an account."},"feesDue":{"type":"number","title":"feesDue","description":"The amount of fees due to be paid on this account."},"forwardAvailableBalance":{"type":"number","title":"forwardAvailableBalance","description":"The sum of all the authorization hold amounts that have `CRDT` as the `creditDebitIndicator` for an account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts that have `DBIT` as the `creditDebitIndicator` for an account."},"lockedBalance":{"type":"number","title":"lockedBalance","description":"The locked amount that is not available for withdrawal in the account. For more information, see [Deposit Account Overview Details](https://support.mambu.com/docs/deposit-account-overview-details)."},"overdraftAmount":{"type":"number","title":"overdraftAmount","description":"The overdraft amount that has been taken out in the account. For more information, see [Overdraft Products](https://support.mambu.com/docs/en/overdraft-products)."},"overdraftInterestDue":{"type":"number","title":"overdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of an authorized overdraft."},"technicalOverdraftAmount":{"type":"number","title":"technicalOverdraftAmount","description":"The technical overdraft amount that has been taken out in the account. For more information, see [Technical Overdraft](https://support.mambu.com/docs/en/overdraft-products#technical-overdraft)."},"technicalOverdraftInterestDue":{"type":"number","title":"technicalOverdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of a technical overdraft."},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of the account."}},"additionalProperties":true};const schema20 = {"type":"object","title":"DepositAccountInternalControlsaf30","description":"Represents information about internal controls.","properties":{"maxDepositBalance":{"type":"number","title":"maxDepositBalance","description":"The maximum deposit balance of the account."},"maxWithdrawalAmount":{"type":"number","title":"maxWithdrawalAmount","description":"The maximum amount allowed for a withdrawal."},"recommendedDepositAmount":{"type":"number","title":"recommendedDepositAmount","description":"The recommended amount for a deposit."},"targetAmount":{"type":"number","title":"targetAmount","description":"The target amount for a deposit made towards a savings goal."}},"additionalProperties":true};const schema24 = {"type":"object","title":"DepositAccountOverdraftSettingsaf30","description":"Represents information about a deposit account's overdraft settings.","properties":{"allowOverdraft":{"type":"boolean","title":"allowOverdraft","description":"`TRUE` if this account supports overdraft, `FALSE` otherwise."},"overdraftExpiryDate":{"type":"string","title":"overdraftExpiryDate","description":"The expiration date of an overdraft.","format":"date-time"},"overdraftLimit":{"type":"number","title":"overdraftLimit","description":"The limit amount that may be taken out as overdraft, where null means 0."}},"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema15 = {"type":"object","title":"DepositAccountInterestSettingsaf30","description":"Represents information about the deposit account's interest settings.","properties":{"interestPaymentSettings":{"title":"interestPaymentSettings","$ref":"#/$defs/DepositAccountInterestPaymentSettingsaf30"},"interestRateSettings":{"title":"interestRateSettings","$ref":"#/$defs/DepositAccountInterestRateSettingsaf30"}},"additionalProperties":true};const schema16 = {"type":"object","title":"DepositAccountInterestPaymentSettingsaf30","description":"Represents information about the interest payment settings.","properties":{"interestPaymentDates":{"type":"array","title":"interestPaymentDates","description":"The list of all dates when the interest is paid into the deposit account.","items":{"$ref":"#/$defs/MonthAndDayaf30"}},"interestPaymentPoint":{"title":"interestPaymentPoint","description":"The interest payment point, which specifies when the interest should be paid to the account.","enum":["FIRST_DAY_OF_MONTH","EVERY_WEEK","EVERY_OTHER_WEEK","EVERY_MONTH","EVERY_3_MONTHS","ON_FIXED_DATES","DAILY","ANNUALLY","BI_ANNUALLY","ON_ACCOUNT_MATURITY"]}},"additionalProperties":true};const schema17 = {"type":"object","title":"MonthAndDayaf30","description":"Wrapper for month and day for instances where the year isn't needed","properties":{"day":{"type":"integer","title":"day","description":"The day in the month"},"month":{"type":"integer","title":"month","description":"The month of the year"}},"additionalProperties":true};function validate13(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.interestPaymentDates !== undefined){let data0 = data.interestPaymentDates;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema44 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema45 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema46 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate30(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate30.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate30.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate30.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate30.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate30.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"DepositAccountaf30","description":"Represents information about a deposit account.","properties":{"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder, which is an individual client or group."},"accountHolderType":{"title":"accountHolderType","description":"The account holder type.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the deposit account.","enum":["PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","MATURED","LOCKED","DORMANT","CLOSED","CLOSED_WRITTEN_OFF","WITHDRAWN","CLOSED_REJECTED"]},"accountType":{"title":"accountType","description":"The deposit account type and the product that it belongs to.","enum":["CURRENT_ACCOUNT","REGULAR_SAVINGS","FIXED_DEPOSIT","SAVINGS_PLAN","INVESTOR_ACCOUNT"]},"accruedAmounts":{"title":"accruedAmounts","$ref":"#/$defs/DepositAccountAccruedAmountsaf30"},"activationDate":{"type":"string","title":"activationDate","description":"The date when the deposit account was activated, in the organization's timezone and time format.","format":"date-time"},"approvedDate":{"type":"string","title":"approvedDate","description":"The date when the deposit account was approved, in the organization's timezone and time format.","format":"date-time"},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch that this deposit account is assigned to."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre that this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user that this deposit is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/DepositAccountBalancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date when the deposit account was closed, in UTC.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date this deposit account was created, in UTC.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the credit arrangement where this account is registered."},"currencyCode":{"type":"string","title":"currencyCode","description":"The currency code."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the deposit account, which is auto-generated and unique."},"id":{"type":"string","title":"id","description":"The ID of the deposit account, which can be generated and customized - but must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/DepositAccountInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/DepositAccountInternalControlsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date when the account was last evaluated for interest calculations and maturity, in the organization's timezone and time format.","format":"date-time"},"lastInterestCalculationDate":{"type":"string","title":"lastInterestCalculationDate","description":"The date when interest was last calculated for the account, in the organization's timezone and time format.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date when regular interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastInterestStoredDate":{"type":"string","title":"lastInterestStoredDate","description":"The date when interest was last applied on the account, in the organization's timezone and time format.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last update date for the deposit account, in UTC.","format":"date-time"},"lastOverdraftInterestReviewDate":{"type":"string","title":"lastOverdraftInterestReviewDate","description":"The date when the overdraft interest was last reviewed, in the organization's timezone and time format.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the deposit account was set to In Arrears, or null if the account is not In Arrears. The date is in the organization's timezone and time format.","format":"date-time"},"linkedSettlementAccountKeys":{"type":"array","title":"linkedSettlementAccountKeys","description":"Lists all loan account keys on which the deposit account is used as the settlement account.","items":{"type":"string"}},"lockedDate":{"type":"string","title":"lockedDate","description":"The date when the deposit account was locked, in the organization's timezone and time format.","format":"date-time"},"maturityDate":{"type":"string","title":"maturityDate","description":"The date when the account matures, for fixed or compulsory savings plans, in the organization's timezone and time format.","format":"date-time"},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this deposit account. If this account was imported, you can track which migration event it came from."},"name":{"type":"string","title":"name","description":"The deposit account name."},"notes":{"type":"string","title":"notes","description":"The notes or description attached to this object."},"overdraftInterestSettings":{"title":"overdraftInterestSettings","$ref":"#/$defs/DepositAccountOverdraftInterestSettingsaf30"},"overdraftSettings":{"title":"overdraftSettings","$ref":"#/$defs/DepositAccountOverdraftSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key to the product type that this account is based on."},"withholdingTaxSourceKey":{"type":"string","title":"withholdingTaxSourceKey","description":"The tax source where the account withholding taxes will be updated."}},"required":["accountHolderKey","accountHolderType","name","productTypeKey"],"additionalProperties":true};const schema13 = {"type":"object","title":"DepositAccountAccruedAmountsaf30","description":"Represents information about the accrued amounts of deposit accounts.","properties":{"interestAccrued":{"type":"number","title":"interestAccrued","description":"The amount of positive interest that has been accrued in the account."},"negativeInterestAccrued":{"type":"number","title":"negativeInterestAccrued","description":"The amount of negative interest that has been accrued in the account."},"overdraftInterestAccrued":{"type":"number","title":"overdraftInterestAccrued","description":"The amount of overdraft interest that has been accrued in the account."},"technicalOverdraftInterestAccrued":{"type":"number","title":"technicalOverdraftInterestAccrued","description":"The amount of technical overdraft interest that has been accrued in the account."}},"additionalProperties":true};const schema14 = {"type":"object","title":"DepositAccountBalancesaf30","description":"Represents information about the balances of a deposit account.","properties":{"availableBalance":{"type":"number","title":"availableBalance","description":"The current available balance for deposit transactions."},"blockedBalance":{"type":"number","title":"blockedBalance","description":"The sum of all the blocked amounts on an account."},"feesDue":{"type":"number","title":"feesDue","description":"The amount of fees due to be paid on this account."},"forwardAvailableBalance":{"type":"number","title":"forwardAvailableBalance","description":"The sum of all the authorization hold amounts that have `CRDT` as the `creditDebitIndicator` for an account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts that have `DBIT` as the `creditDebitIndicator` for an account."},"lockedBalance":{"type":"number","title":"lockedBalance","description":"The locked amount that is not available for withdrawal in the account. For more information, see [Deposit Account Overview Details](https://support.mambu.com/docs/deposit-account-overview-details)."},"overdraftAmount":{"type":"number","title":"overdraftAmount","description":"The overdraft amount that has been taken out in the account. For more information, see [Overdraft Products](https://support.mambu.com/docs/en/overdraft-products)."},"overdraftInterestDue":{"type":"number","title":"overdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of an authorized overdraft."},"technicalOverdraftAmount":{"type":"number","title":"technicalOverdraftAmount","description":"The technical overdraft amount that has been taken out in the account. For more information, see [Technical Overdraft](https://support.mambu.com/docs/en/overdraft-products#technical-overdraft)."},"technicalOverdraftInterestDue":{"type":"number","title":"technicalOverdraftInterestDue","description":"The amount of interest due to be paid on an account as a result of a technical overdraft."},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of the account."}},"additionalProperties":true};const schema20 = {"type":"object","title":"DepositAccountInternalControlsaf30","description":"Represents information about internal controls.","properties":{"maxDepositBalance":{"type":"number","title":"maxDepositBalance","description":"The maximum deposit balance of the account."},"maxWithdrawalAmount":{"type":"number","title":"maxWithdrawalAmount","description":"The maximum amount allowed for a withdrawal."},"recommendedDepositAmount":{"type":"number","title":"recommendedDepositAmount","description":"The recommended amount for a deposit."},"targetAmount":{"type":"number","title":"targetAmount","description":"The target amount for a deposit made towards a savings goal."}},"additionalProperties":true};const schema24 = {"type":"object","title":"DepositAccountOverdraftSettingsaf30","description":"Represents information about a deposit account's overdraft settings.","properties":{"allowOverdraft":{"type":"boolean","title":"allowOverdraft","description":"`TRUE` if this account supports overdraft, `FALSE` otherwise."},"overdraftExpiryDate":{"type":"string","title":"overdraftExpiryDate","description":"The expiration date of an overdraft.","format":"date-time"},"overdraftLimit":{"type":"number","title":"overdraftLimit","description":"The limit amount that may be taken out as overdraft, where null means 0."}},"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema15 = {"type":"object","title":"DepositAccountInterestSettingsaf30","description":"Represents information about the deposit account's interest settings.","properties":{"interestPaymentSettings":{"title":"interestPaymentSettings","$ref":"#/$defs/DepositAccountInterestPaymentSettingsaf30"},"interestRateSettings":{"title":"interestRateSettings","$ref":"#/$defs/DepositAccountInterestRateSettingsaf30"}},"additionalProperties":true};const schema16 = {"type":"object","title":"DepositAccountInterestPaymentSettingsaf30","description":"Represents information about the interest payment settings.","properties":{"interestPaymentDates":{"type":"array","title":"interestPaymentDates","description":"The list of all dates when the interest is paid into the deposit account.","items":{"$ref":"#/$defs/MonthAndDayaf30"}},"interestPaymentPoint":{"title":"interestPaymentPoint","description":"The interest payment point, which specifies when the interest should be paid to the account.","enum":["FIRST_DAY_OF_MONTH","EVERY_WEEK","EVERY_OTHER_WEEK","EVERY_MONTH","EVERY_3_MONTHS","ON_FIXED_DATES","DAILY","ANNUALLY","BI_ANNUALLY","ON_ACCOUNT_MATURITY"]}},"additionalProperties":true};const schema17 = {"type":"object","title":"MonthAndDayaf30","description":"Wrapper for month and day for instances where the year isn't needed","properties":{"day":{"type":"integer","title":"day","description":"The day in the month"},"month":{"type":"integer","title":"month","description":"The month of the year"}},"additionalProperties":true};function validate13(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.interestPaymentDates !== undefined){let data0 = data.interestPaymentDates;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema39 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate28(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema46 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema47 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema48 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate30(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate30.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate30.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate30.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate30.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate30.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate30.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH. + */ + shortMonthHandlingMethod?: 'LAST_DAY_IN_MONTH' | 'FIRST_DAY_OF_NEXT_MONTH' +} + /** * Represents information about a deposit account. */ @@ -1744,6 +1758,10 @@ export interface GetAuthorizationHold { * The original currency in which the hold was created. */ originalCurrency?: string + /** + * Indicates whether the authorization is partial or not + */ + partial?: boolean /** * The date to consider as start date when calculating the number of days passed until expiration */ @@ -1846,12 +1864,20 @@ export interface Installment { * The encoded key of the installment, which is auto generated, and unique. */ encodedKey?: string + /** + * The expected closing balance is the remaining amount per installment only applicable for interest only equal installment products. + */ + expectedClosingBalance?: number fee?: InstallmentFee /** * The breakdown of the fee amounts that have been applied to the loan account. */ feeDetails?: InstallmentFeeDetails[] interest?: InstallmentAllocationElementTaxableAmount + /** + * The interest accrued calculated on previous repayment closing balance only applicable interest only equal installment products. + */ + interestAccrued?: number /** * `TRUE` if a payment holiday is offered for the installment, `FALSE` otherwise. */ @@ -1942,6 +1968,20 @@ export interface InterestAccountSettingsAvailability { type: 'INTEREST' | 'OVERDRAFT' | 'TECHNICAL_OVERDRAFT' } +/** + * Represents interest rate change threshold settings for loan accounts and loan products. + */ +export interface InterestRateChangePMTAdjustmentThreshold { + /** + * The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS + */ + method?: 'WORKING_DAYS' | 'CALENDAR_DAYS' + /** + * The number of days that trigger an interest rate change. + */ + numberOfDays?: number +} + /** * The interest settings, holds all the properties regarding interests for the loan account. */ @@ -1958,10 +1998,11 @@ export interface InterestSettings { * Indicates whether late interest is accrued for this loan account */ accrueLateInterest?: boolean + interestApplicationDays?: DaysInMonth /** * The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment. */ - interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' + interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' | 'FIXED_DAYS_OF_MONTH' /** * The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed. */ @@ -1969,7 +2010,7 @@ export interface InterestSettings { /** * The interest calculation method. Holds the type of interest calculation method. */ - interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' + interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' | 'EQUAL_INSTALLMENTS' /** * The interest change frequency. Holds the possible values for how often is interest charged on loan or deposit accounts */ @@ -1978,6 +2019,7 @@ export interface InterestSettings { * The interest rate. Represents the interest rate for the loan account. The interest on loans is accrued on a daily basis, which allows charging the clients only for the days they actually used the loan amount. */ interestRate?: number + interestRateChangePMTAdjustmentThreshold?: InterestRateChangePMTAdjustmentThreshold /** * Interest rate update frequency unit count. */ @@ -2505,6 +2547,11 @@ export interface PrepaymentSettings { * The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated. */ elementsRecalculationMethod?: 'PRINCIPAL_EXPECTED_FIXED' | 'TOTAL_EXPECTED_FIXED' + ercFreeAllowanceAmount?: number + /** + * Early repayment charge fee free allowance in percentage per year + */ + ercFreeAllowancePercentage?: number /** * Prepayment recalculation method copied from the loan product on which this account is based. */ @@ -2627,6 +2674,10 @@ export interface RevolvingAccountSettings { * The schedule settings, holds all schedule properties. */ export interface ScheduleSettings { + /** + * The PMT is calculated as the loan would have [amortizationPeriod] installments. + */ + amortizationPeriod?: number billingCycle?: BillingCycleDays /** * The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset) diff --git a/src/deposit-accounts/schemas/get-all-authorization-holds-response.schema.js b/src/deposit-accounts/schemas/get-all-authorization-holds-response.schema.js index b902e51..2c4d581 100644 --- a/src/deposit-accounts/schemas/get-all-authorization-holds-response.schema.js +++ b/src/deposit-accounts/schemas/get-all-authorization-holds-response.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"getAllAuthorizationHoldsResponse","type":"array","items":{"$ref":"#/$defs/GetAuthorizationHoldaf30"},"$defs":{"GetAuthorizationHoldaf30":{"type":"object","title":"GetAuthorizationHoldaf30","description":"Details for retrieving a authorization hold. Deprecated due to encodedKey field.","properties":{"accountKey":{"type":"string","title":"accountKey","description":"The key of the account linked with the authorization hold."},"advice":{"type":"boolean","title":"advice","description":"Whether the given request should be accepted without balance validations."},"amount":{"type":"number","title":"amount","description":"The amount of money to be held as a result of the authorization hold request."},"balances":{"title":"balances","$ref":"#/$defs/AccountBalancesaf30"},"cardAcceptor":{"title":"cardAcceptor","$ref":"#/$defs/CardAcceptoraf30"},"cardToken":{"type":"string","title":"cardToken","description":"The reference token of the card."},"creationDate":{"type":"string","title":"creationDate","description":"The organization time when the authorization hold was created","format":"date-time"},"creditDebitIndicator":{"title":"creditDebitIndicator","description":"Indicates whether the authorization hold amount is credited or debited.If not provided, the default values is DBIT.","enum":["DBIT","CRDT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"The ISO currency code in which the hold was created. The amounts are stored in the base currency, but the user could have enter it in a foreign currency."},"customExpirationPeriod":{"type":"integer","title":"customExpirationPeriod","description":"The custom expiration period for the hold which overwrites mcc and default expiration periods"},"encodedKey":{"type":"string","title":"encodedKey","description":"The internal ID of the authorization hold, auto generated, unique."},"exchangeRate":{"type":"number","title":"exchangeRate","description":"The exchange rate for the original currency."},"externalReferenceId":{"type":"string","title":"externalReferenceId","description":"The external reference ID to be used to reference the account hold in subsequent requests."},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount of money to be held as a result of the authorization hold request."},"originalCurrency":{"type":"string","title":"originalCurrency","description":"The original currency in which the hold was created."},"referenceDateForExpiration":{"type":"string","title":"referenceDateForExpiration","description":"The date to consider as start date when calculating the number of days passed until expiration","format":"date-time"},"source":{"title":"source","description":"Indicates the source of the authorization hold, the default values is CARD.","enum":["CARD","ACCOUNT"]},"status":{"title":"status","description":"The authorization hold status.","enum":["PENDING","REVERSED","SETTLED","EXPIRED"]},"userTransactionTime":{"type":"string","title":"userTransactionTime","description":"The formatted time at which the user made this authorization hold."}},"required":["advice","amount","externalReferenceId"],"additionalProperties":true},"AccountBalancesaf30":{"type":"object","title":"AccountBalancesaf30","description":"Account balances presented to inquirer such as card processor","properties":{"accountId":{"type":"string","title":"accountId","description":"The unique account identifier"},"availableBalance":{"type":"number","title":"availableBalance","description":"The available balance of a deposit or credit account"},"cardType":{"title":"cardType","description":"The card type either DEBIT or CREDIT","enum":["DEBIT","CREDIT"]},"creditLimit":{"type":"number","title":"creditLimit","description":"The overdraft limit of a deposit account or the loan amount in case of a credit account"},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code used for the account"},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of a deposit account or principal balance of a revolving credit"}},"additionalProperties":true},"CardAcceptoraf30":{"type":"object","title":"CardAcceptoraf30","description":"The details of the card acceptor (merchant) in a transaction hold.","properties":{"city":{"type":"string","title":"city","description":"The city in which the card acceptor has the business."},"country":{"type":"string","title":"country","description":"The country in which the card acceptor has the business."},"mcc":{"type":"integer","title":"mcc","description":"The Merchant Category Code of the card acceptor."},"name":{"type":"string","title":"name","description":"The name of the card acceptor."},"state":{"type":"string","title":"state","description":"The state in which the card acceptor has the business."},"street":{"type":"string","title":"street","description":"The street in which the card acceptor has the business."},"zip":{"type":"string","title":"zip","description":"The ZIP code of the location in which the card acceptor has the business."}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"GetAuthorizationHoldaf30","description":"Details for retrieving a authorization hold. Deprecated due to encodedKey field.","properties":{"accountKey":{"type":"string","title":"accountKey","description":"The key of the account linked with the authorization hold."},"advice":{"type":"boolean","title":"advice","description":"Whether the given request should be accepted without balance validations."},"amount":{"type":"number","title":"amount","description":"The amount of money to be held as a result of the authorization hold request."},"balances":{"title":"balances","$ref":"#/$defs/AccountBalancesaf30"},"cardAcceptor":{"title":"cardAcceptor","$ref":"#/$defs/CardAcceptoraf30"},"cardToken":{"type":"string","title":"cardToken","description":"The reference token of the card."},"creationDate":{"type":"string","title":"creationDate","description":"The organization time when the authorization hold was created","format":"date-time"},"creditDebitIndicator":{"title":"creditDebitIndicator","description":"Indicates whether the authorization hold amount is credited or debited.If not provided, the default values is DBIT.","enum":["DBIT","CRDT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"The ISO currency code in which the hold was created. The amounts are stored in the base currency, but the user could have enter it in a foreign currency."},"customExpirationPeriod":{"type":"integer","title":"customExpirationPeriod","description":"The custom expiration period for the hold which overwrites mcc and default expiration periods"},"encodedKey":{"type":"string","title":"encodedKey","description":"The internal ID of the authorization hold, auto generated, unique."},"exchangeRate":{"type":"number","title":"exchangeRate","description":"The exchange rate for the original currency."},"externalReferenceId":{"type":"string","title":"externalReferenceId","description":"The external reference ID to be used to reference the account hold in subsequent requests."},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount of money to be held as a result of the authorization hold request."},"originalCurrency":{"type":"string","title":"originalCurrency","description":"The original currency in which the hold was created."},"referenceDateForExpiration":{"type":"string","title":"referenceDateForExpiration","description":"The date to consider as start date when calculating the number of days passed until expiration","format":"date-time"},"source":{"title":"source","description":"Indicates the source of the authorization hold, the default values is CARD.","enum":["CARD","ACCOUNT"]},"status":{"title":"status","description":"The authorization hold status.","enum":["PENDING","REVERSED","SETTLED","EXPIRED"]},"userTransactionTime":{"type":"string","title":"userTransactionTime","description":"The formatted time at which the user made this authorization hold."}},"required":["advice","amount","externalReferenceId"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountBalancesaf30","description":"Account balances presented to inquirer such as card processor","properties":{"accountId":{"type":"string","title":"accountId","description":"The unique account identifier"},"availableBalance":{"type":"number","title":"availableBalance","description":"The available balance of a deposit or credit account"},"cardType":{"title":"cardType","description":"The card type either DEBIT or CREDIT","enum":["DEBIT","CREDIT"]},"creditLimit":{"type":"number","title":"creditLimit","description":"The overdraft limit of a deposit account or the loan amount in case of a credit account"},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code used for the account"},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of a deposit account or principal balance of a revolving credit"}},"additionalProperties":true};const schema14 = {"type":"object","title":"CardAcceptoraf30","description":"The details of the card acceptor (merchant) in a transaction hold.","properties":{"city":{"type":"string","title":"city","description":"The city in which the card acceptor has the business."},"country":{"type":"string","title":"country","description":"The country in which the card acceptor has the business."},"mcc":{"type":"integer","title":"mcc","description":"The Merchant Category Code of the card acceptor."},"name":{"type":"string","title":"name","description":"The name of the card acceptor."},"state":{"type":"string","title":"state","description":"The state in which the card acceptor has the business."},"street":{"type":"string","title":"street","description":"The street in which the card acceptor has the business."},"zip":{"type":"string","title":"zip","description":"The ZIP code of the location in which the card acceptor has the business."}},"additionalProperties":true};function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.advice === undefined) && (missing0 = "advice")) || ((data.amount === undefined) && (missing0 = "amount"))) || ((data.externalReferenceId === undefined) && (missing0 = "externalReferenceId"))){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountKey !== undefined){const _errs2 = errors;if(typeof data.accountKey !== "string"){validate11.errors = [{instancePath:instancePath+"/accountKey",schemaPath:"#/properties/accountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.advice !== undefined){const _errs4 = errors;if(typeof data.advice !== "boolean"){validate11.errors = [{instancePath:instancePath+"/advice",schemaPath:"#/properties/advice/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.amount !== undefined){let data2 = data.amount;const _errs6 = errors;if(!((typeof data2 == "number") && (isFinite(data2)))){validate11.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.balances !== undefined){let data3 = data.balances;const _errs8 = errors;const _errs9 = errors;if(errors === _errs9){if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.accountId !== undefined){const _errs12 = errors;if(typeof data3.accountId !== "string"){validate11.errors = [{instancePath:instancePath+"/balances/accountId",schemaPath:"#/$defs/AccountBalancesaf30/properties/accountId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs12 === errors;}else {var valid2 = true;}if(valid2){if(data3.availableBalance !== undefined){let data5 = data3.availableBalance;const _errs14 = errors;if(!((typeof data5 == "number") && (isFinite(data5)))){validate11.errors = [{instancePath:instancePath+"/balances/availableBalance",schemaPath:"#/$defs/AccountBalancesaf30/properties/availableBalance/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}if(valid2){if(data3.cardType !== undefined){let data6 = data3.cardType;const _errs16 = errors;if(!((data6 === "DEBIT") || (data6 === "CREDIT"))){validate11.errors = [{instancePath:instancePath+"/balances/cardType",schemaPath:"#/$defs/AccountBalancesaf30/properties/cardType/enum",keyword:"enum",params:{allowedValues: schema13.properties.cardType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs16 === errors;}else {var valid2 = true;}if(valid2){if(data3.creditLimit !== undefined){let data7 = data3.creditLimit;const _errs17 = errors;if(!((typeof data7 == "number") && (isFinite(data7)))){validate11.errors = [{instancePath:instancePath+"/balances/creditLimit",schemaPath:"#/$defs/AccountBalancesaf30/properties/creditLimit/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs17 === errors;}else {var valid2 = true;}if(valid2){if(data3.currencyCode !== undefined){const _errs19 = errors;if(typeof data3.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/balances/currencyCode",schemaPath:"#/$defs/AccountBalancesaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data3.totalBalance !== undefined){let data9 = data3.totalBalance;const _errs21 = errors;if(!((typeof data9 == "number") && (isFinite(data9)))){validate11.errors = [{instancePath:instancePath+"/balances/totalBalance",schemaPath:"#/$defs/AccountBalancesaf30/properties/totalBalance/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs21 === errors;}else {var valid2 = true;}}}}}}}else {validate11.errors = [{instancePath:instancePath+"/balances",schemaPath:"#/$defs/AccountBalancesaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.cardAcceptor !== undefined){let data10 = data.cardAcceptor;const _errs23 = errors;const _errs24 = errors;if(errors === _errs24){if(data10 && typeof data10 == "object" && !Array.isArray(data10)){if(data10.city !== undefined){const _errs27 = errors;if(typeof data10.city !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/city",schemaPath:"#/$defs/CardAcceptoraf30/properties/city/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs27 === errors;}else {var valid4 = true;}if(valid4){if(data10.country !== undefined){const _errs29 = errors;if(typeof data10.country !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/country",schemaPath:"#/$defs/CardAcceptoraf30/properties/country/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs29 === errors;}else {var valid4 = true;}if(valid4){if(data10.mcc !== undefined){let data13 = data10.mcc;const _errs31 = errors;if(!(((typeof data13 == "number") && (!(data13 % 1) && !isNaN(data13))) && (isFinite(data13)))){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/mcc",schemaPath:"#/$defs/CardAcceptoraf30/properties/mcc/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid4 = _errs31 === errors;}else {var valid4 = true;}if(valid4){if(data10.name !== undefined){const _errs33 = errors;if(typeof data10.name !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/name",schemaPath:"#/$defs/CardAcceptoraf30/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs33 === errors;}else {var valid4 = true;}if(valid4){if(data10.state !== undefined){const _errs35 = errors;if(typeof data10.state !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/state",schemaPath:"#/$defs/CardAcceptoraf30/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs35 === errors;}else {var valid4 = true;}if(valid4){if(data10.street !== undefined){const _errs37 = errors;if(typeof data10.street !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/street",schemaPath:"#/$defs/CardAcceptoraf30/properties/street/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs37 === errors;}else {var valid4 = true;}if(valid4){if(data10.zip !== undefined){const _errs39 = errors;if(typeof data10.zip !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/zip",schemaPath:"#/$defs/CardAcceptoraf30/properties/zip/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs39 === errors;}else {var valid4 = true;}}}}}}}}else {validate11.errors = [{instancePath:instancePath+"/cardAcceptor",schemaPath:"#/$defs/CardAcceptoraf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs23 === errors;}else {var valid0 = true;}if(valid0){if(data.cardToken !== undefined){const _errs41 = errors;if(typeof data.cardToken !== "string"){validate11.errors = [{instancePath:instancePath+"/cardToken",schemaPath:"#/properties/cardToken/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs43 = errors;if(errors === _errs43){if(errors === _errs43){if(!(typeof data.creationDate === "string")){validate11.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.creditDebitIndicator !== undefined){let data20 = data.creditDebitIndicator;const _errs45 = errors;if(!((data20 === "DBIT") || (data20 === "CRDT"))){validate11.errors = [{instancePath:instancePath+"/creditDebitIndicator",schemaPath:"#/properties/creditDebitIndicator/enum",keyword:"enum",params:{allowedValues: schema12.properties.creditDebitIndicator.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.currencyCode !== undefined){const _errs46 = errors;if(typeof data.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/currencyCode",schemaPath:"#/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs46 === errors;}else {var valid0 = true;}if(valid0){if(data.customExpirationPeriod !== undefined){let data22 = data.customExpirationPeriod;const _errs48 = errors;if(!(((typeof data22 == "number") && (!(data22 % 1) && !isNaN(data22))) && (isFinite(data22)))){validate11.errors = [{instancePath:instancePath+"/customExpirationPeriod",schemaPath:"#/properties/customExpirationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs50 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.exchangeRate !== undefined){let data24 = data.exchangeRate;const _errs52 = errors;if(!((typeof data24 == "number") && (isFinite(data24)))){validate11.errors = [{instancePath:instancePath+"/exchangeRate",schemaPath:"#/properties/exchangeRate/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs52 === errors;}else {var valid0 = true;}if(valid0){if(data.externalReferenceId !== undefined){const _errs54 = errors;if(typeof data.externalReferenceId !== "string"){validate11.errors = [{instancePath:instancePath+"/externalReferenceId",schemaPath:"#/properties/externalReferenceId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs54 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data26 = data.originalAmount;const _errs56 = errors;if(!((typeof data26 == "number") && (isFinite(data26)))){validate11.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs56 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){const _errs58 = errors;if(typeof data.originalCurrency !== "string"){validate11.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/properties/originalCurrency/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.referenceDateForExpiration !== undefined){const _errs60 = errors;if(errors === _errs60){if(errors === _errs60){if(!(typeof data.referenceDateForExpiration === "string")){validate11.errors = [{instancePath:instancePath+"/referenceDateForExpiration",schemaPath:"#/properties/referenceDateForExpiration/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.source !== undefined){let data29 = data.source;const _errs62 = errors;if(!((data29 === "CARD") || (data29 === "ACCOUNT"))){validate11.errors = [{instancePath:instancePath+"/source",schemaPath:"#/properties/source/enum",keyword:"enum",params:{allowedValues: schema12.properties.source.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs62 === errors;}else {var valid0 = true;}if(valid0){if(data.status !== undefined){let data30 = data.status;const _errs63 = errors;if(!((((data30 === "PENDING") || (data30 === "REVERSED")) || (data30 === "SETTLED")) || (data30 === "EXPIRED"))){validate11.errors = [{instancePath:instancePath+"/status",schemaPath:"#/properties/status/enum",keyword:"enum",params:{allowedValues: schema12.properties.status.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs63 === errors;}else {var valid0 = true;}if(valid0){if(data.userTransactionTime !== undefined){const _errs64 = errors;if(typeof data.userTransactionTime !== "string"){validate11.errors = [{instancePath:instancePath+"/userTransactionTime",schemaPath:"#/properties/userTransactionTime/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs64 === errors;}else {var valid0 = true;}}}}}}}}}}}}}}}}}}}}}else {validate11.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate11.errors = vErrors;return errors === 0;}function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(Array.isArray(data)){var valid0 = true;const len0 = data.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccountaf30","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema25 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema26 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema27 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema28 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema29 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema31 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema32 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema33 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccountaf30","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema27 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema28 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema29 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema30 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema31 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema26 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate16(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema33 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema34 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema35 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate18.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 1){outer0:for(;i2--;){for(j0 = i2; j0--;){if(func0(data7[i2], data7[j0])){validate10.errors = [{instancePath:instancePath+"/dashboardConfigurations",schemaPath:"#/properties/dashboardConfigurations/uniqueItems",keyword:"uniqueItems",params:{i: i2, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i2+" are identical)"}];return false;break outer0;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/dashboardConfigurations",schemaPath:"#/properties/dashboardConfigurations/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.dateFormats !== undefined){let data12 = data.dateFormats;const _errs26 = errors;if(errors === _errs26){if(data12 && typeof data12 == "object" && !Array.isArray(data12)){for(const key0 in data12){const _errs29 = errors;if(typeof data12[key0] !== "string"){validate10.errors = [{instancePath:instancePath+"/dateFormats/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/dateFormats/additionalProperties/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid7 = _errs29 === errors;if(!valid7){break;}}}else {validate10.errors = [{instancePath:instancePath+"/dateFormats",schemaPath:"#/properties/dateFormats/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs26 === errors;}else {var valid0 = true;}if(valid0){if(data.decimalSeparator !== undefined){let data14 = data.decimalSeparator;const _errs31 = errors;if(!((data14 === "COMMA") || (data14 === "POINT"))){validate10.errors = [{instancePath:instancePath+"/decimalSeparator",schemaPath:"#/properties/decimalSeparator/enum",keyword:"enum",params:{allowedValues: schema11.properties.decimalSeparator.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs31 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultClientRoleKey !== undefined){const _errs32 = errors;if(typeof data.defaultClientRoleKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultClientRoleKey",schemaPath:"#/properties/defaultClientRoleKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs32 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultClientState !== undefined){const _errs34 = errors;let valid8;valid8 = false;for(const v1 of schema11.properties.defaultClientState.enum){if(func0(data.defaultClientState, v1)){valid8 = true;break;}}if(!valid8){validate10.errors = [{instancePath:instancePath+"/defaultClientState",schemaPath:"#/properties/defaultClientState/enum",keyword:"enum",params:{allowedValues: schema11.properties.defaultClientState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs34 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultGroupRoleKey !== undefined){const _errs35 = errors;if(typeof data.defaultGroupRoleKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultGroupRoleKey",schemaPath:"#/properties/defaultGroupRoleKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs35 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultLineOfCreditState !== undefined){const _errs37 = errors;let valid9;valid9 = false;for(const v2 of schema11.properties.defaultLineOfCreditState.enum){if(func0(data.defaultLineOfCreditState, v2)){valid9 = true;break;}}if(!valid9){validate10.errors = [{instancePath:instancePath+"/defaultLineOfCreditState",schemaPath:"#/properties/defaultLineOfCreditState/enum",keyword:"enum",params:{allowedValues: schema11.properties.defaultLineOfCreditState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs37 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultTransactionChannelKey !== undefined){const _errs38 = errors;if(typeof data.defaultTransactionChannelKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultTransactionChannelKey",schemaPath:"#/properties/defaultTransactionChannelKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.duplicateClientChecks !== undefined){let data20 = data.duplicateClientChecks;const _errs40 = errors;if(errors === _errs40){if(Array.isArray(data20)){var valid10 = true;const len2 = data20.length;for(let i3=0; i3 1){outer0:for(;i2--;){for(j0 = i2; j0--;){if(func0(data7[i2], data7[j0])){validate10.errors = [{instancePath:instancePath+"/dashboardConfigurations",schemaPath:"#/properties/dashboardConfigurations/uniqueItems",keyword:"uniqueItems",params:{i: i2, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i2+" are identical)"}];return false;break outer0;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/dashboardConfigurations",schemaPath:"#/properties/dashboardConfigurations/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.dateFormats !== undefined){let data12 = data.dateFormats;const _errs26 = errors;if(errors === _errs26){if(data12 && typeof data12 == "object" && !Array.isArray(data12)){for(const key0 in data12){const _errs29 = errors;if(typeof data12[key0] !== "string"){validate10.errors = [{instancePath:instancePath+"/dateFormats/" + key0.replace(/~/g, "~0").replace(/\//g, "~1"),schemaPath:"#/properties/dateFormats/additionalProperties/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid7 = _errs29 === errors;if(!valid7){break;}}}else {validate10.errors = [{instancePath:instancePath+"/dateFormats",schemaPath:"#/properties/dateFormats/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs26 === errors;}else {var valid0 = true;}if(valid0){if(data.decimalSeparator !== undefined){let data14 = data.decimalSeparator;const _errs31 = errors;if(!((data14 === "COMMA") || (data14 === "POINT"))){validate10.errors = [{instancePath:instancePath+"/decimalSeparator",schemaPath:"#/properties/decimalSeparator/enum",keyword:"enum",params:{allowedValues: schema11.properties.decimalSeparator.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs31 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultClientRoleKey !== undefined){const _errs32 = errors;if(typeof data.defaultClientRoleKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultClientRoleKey",schemaPath:"#/properties/defaultClientRoleKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs32 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultClientState !== undefined){const _errs34 = errors;let valid8;valid8 = false;for(const v1 of schema11.properties.defaultClientState.enum){if(func0(data.defaultClientState, v1)){valid8 = true;break;}}if(!valid8){validate10.errors = [{instancePath:instancePath+"/defaultClientState",schemaPath:"#/properties/defaultClientState/enum",keyword:"enum",params:{allowedValues: schema11.properties.defaultClientState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs34 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultGroupRoleKey !== undefined){const _errs35 = errors;if(typeof data.defaultGroupRoleKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultGroupRoleKey",schemaPath:"#/properties/defaultGroupRoleKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs35 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultLineOfCreditState !== undefined){const _errs37 = errors;let valid9;valid9 = false;for(const v2 of schema11.properties.defaultLineOfCreditState.enum){if(func0(data.defaultLineOfCreditState, v2)){valid9 = true;break;}}if(!valid9){validate10.errors = [{instancePath:instancePath+"/defaultLineOfCreditState",schemaPath:"#/properties/defaultLineOfCreditState/enum",keyword:"enum",params:{allowedValues: schema11.properties.defaultLineOfCreditState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs37 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultTransactionChannelKey !== undefined){const _errs38 = errors;if(typeof data.defaultTransactionChannelKey !== "string"){validate10.errors = [{instancePath:instancePath+"/defaultTransactionChannelKey",schemaPath:"#/properties/defaultTransactionChannelKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.duplicateClientChecks !== undefined){let data20 = data.duplicateClientChecks;const _errs40 = errors;if(errors === _errs40){if(Array.isArray(data20)){var valid10 = true;const len2 = data20.length;for(let i3=0; i3 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH. + */ + shortMonthHandlingMethod?: 'LAST_DAY_IN_MONTH' | 'FIRST_DAY_OF_NEXT_MONTH' +} + /** * The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees. */ @@ -1247,6 +1261,10 @@ export interface GetAuthorizationHold { * The original currency in which the hold was created. */ originalCurrency?: string + /** + * Indicates whether the authorization is partial or not + */ + partial?: boolean /** * The date to consider as start date when calculating the number of days passed until expiration */ @@ -1335,12 +1353,20 @@ export interface Installment { * The encoded key of the installment, which is auto generated, and unique. */ encodedKey?: string + /** + * The expected closing balance is the remaining amount per installment only applicable for interest only equal installment products. + */ + expectedClosingBalance?: number fee?: InstallmentFee /** * The breakdown of the fee amounts that have been applied to the loan account. */ feeDetails?: InstallmentFeeDetails[] interest?: InstallmentAllocationElementTaxableAmount + /** + * The interest accrued calculated on previous repayment closing balance only applicable interest only equal installment products. + */ + interestAccrued?: number /** * `TRUE` if a payment holiday is offered for the installment, `FALSE` otherwise. */ @@ -1412,6 +1438,20 @@ export interface InstallmentFeeDetails { tax?: AmountWithReduced } +/** + * Represents interest rate change threshold settings for loan accounts and loan products. + */ +export interface InterestRateChangePMTAdjustmentThreshold { + /** + * The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS + */ + method?: 'WORKING_DAYS' | 'CALENDAR_DAYS' + /** + * The number of days that trigger an interest rate change. + */ + numberOfDays?: number +} + /** * The interest settings, holds all the properties regarding interests for the loan account. */ @@ -1428,10 +1468,11 @@ export interface InterestSettings { * Indicates whether late interest is accrued for this loan account */ accrueLateInterest?: boolean + interestApplicationDays?: DaysInMonth /** * The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment. */ - interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' + interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' | 'FIXED_DAYS_OF_MONTH' /** * The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed. */ @@ -1439,7 +1480,7 @@ export interface InterestSettings { /** * The interest calculation method. Holds the type of interest calculation method. */ - interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' + interestCalculationMethod?: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' | 'EQUAL_INSTALLMENTS' /** * The interest change frequency. Holds the possible values for how often is interest charged on loan or deposit accounts */ @@ -1448,6 +1489,7 @@ export interface InterestSettings { * The interest rate. Represents the interest rate for the loan account. The interest on loans is accrued on a daily basis, which allows charging the clients only for the days they actually used the loan amount. */ interestRate?: number + interestRateChangePMTAdjustmentThreshold?: InterestRateChangePMTAdjustmentThreshold /** * Interest rate update frequency unit count. */ @@ -2620,6 +2662,11 @@ export interface PrepaymentSettings { * The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated. */ elementsRecalculationMethod?: 'PRINCIPAL_EXPECTED_FIXED' | 'TOTAL_EXPECTED_FIXED' + ercFreeAllowanceAmount?: number + /** + * Early repayment charge fee free allowance in percentage per year + */ + ercFreeAllowancePercentage?: number /** * Prepayment recalculation method copied from the loan product on which this account is based. */ @@ -3098,6 +3145,10 @@ export interface RestructureScheduleSettings { * The grace period */ gracePeriod?: number + /** + * A list of periodic payments for the current loan account. + */ + paymentPlan?: PeriodicPayment[] /** * The periodic payment */ @@ -3131,6 +3182,10 @@ export interface RevolvingAccountSettings { * The schedule settings, holds all schedule properties. */ export interface ScheduleSettings { + /** + * The PMT is calculated as the loan would have [amortizationPeriod] installments. + */ + amortizationPeriod?: number billingCycle?: BillingCycleDays /** * The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset) diff --git a/src/loan-accounts/schemas/get-all-authorization-holds-response.schema.js b/src/loan-accounts/schemas/get-all-authorization-holds-response.schema.js index b902e51..2c4d581 100644 --- a/src/loan-accounts/schemas/get-all-authorization-holds-response.schema.js +++ b/src/loan-accounts/schemas/get-all-authorization-holds-response.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"getAllAuthorizationHoldsResponse","type":"array","items":{"$ref":"#/$defs/GetAuthorizationHoldaf30"},"$defs":{"GetAuthorizationHoldaf30":{"type":"object","title":"GetAuthorizationHoldaf30","description":"Details for retrieving a authorization hold. Deprecated due to encodedKey field.","properties":{"accountKey":{"type":"string","title":"accountKey","description":"The key of the account linked with the authorization hold."},"advice":{"type":"boolean","title":"advice","description":"Whether the given request should be accepted without balance validations."},"amount":{"type":"number","title":"amount","description":"The amount of money to be held as a result of the authorization hold request."},"balances":{"title":"balances","$ref":"#/$defs/AccountBalancesaf30"},"cardAcceptor":{"title":"cardAcceptor","$ref":"#/$defs/CardAcceptoraf30"},"cardToken":{"type":"string","title":"cardToken","description":"The reference token of the card."},"creationDate":{"type":"string","title":"creationDate","description":"The organization time when the authorization hold was created","format":"date-time"},"creditDebitIndicator":{"title":"creditDebitIndicator","description":"Indicates whether the authorization hold amount is credited or debited.If not provided, the default values is DBIT.","enum":["DBIT","CRDT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"The ISO currency code in which the hold was created. The amounts are stored in the base currency, but the user could have enter it in a foreign currency."},"customExpirationPeriod":{"type":"integer","title":"customExpirationPeriod","description":"The custom expiration period for the hold which overwrites mcc and default expiration periods"},"encodedKey":{"type":"string","title":"encodedKey","description":"The internal ID of the authorization hold, auto generated, unique."},"exchangeRate":{"type":"number","title":"exchangeRate","description":"The exchange rate for the original currency."},"externalReferenceId":{"type":"string","title":"externalReferenceId","description":"The external reference ID to be used to reference the account hold in subsequent requests."},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount of money to be held as a result of the authorization hold request."},"originalCurrency":{"type":"string","title":"originalCurrency","description":"The original currency in which the hold was created."},"referenceDateForExpiration":{"type":"string","title":"referenceDateForExpiration","description":"The date to consider as start date when calculating the number of days passed until expiration","format":"date-time"},"source":{"title":"source","description":"Indicates the source of the authorization hold, the default values is CARD.","enum":["CARD","ACCOUNT"]},"status":{"title":"status","description":"The authorization hold status.","enum":["PENDING","REVERSED","SETTLED","EXPIRED"]},"userTransactionTime":{"type":"string","title":"userTransactionTime","description":"The formatted time at which the user made this authorization hold."}},"required":["advice","amount","externalReferenceId"],"additionalProperties":true},"AccountBalancesaf30":{"type":"object","title":"AccountBalancesaf30","description":"Account balances presented to inquirer such as card processor","properties":{"accountId":{"type":"string","title":"accountId","description":"The unique account identifier"},"availableBalance":{"type":"number","title":"availableBalance","description":"The available balance of a deposit or credit account"},"cardType":{"title":"cardType","description":"The card type either DEBIT or CREDIT","enum":["DEBIT","CREDIT"]},"creditLimit":{"type":"number","title":"creditLimit","description":"The overdraft limit of a deposit account or the loan amount in case of a credit account"},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code used for the account"},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of a deposit account or principal balance of a revolving credit"}},"additionalProperties":true},"CardAcceptoraf30":{"type":"object","title":"CardAcceptoraf30","description":"The details of the card acceptor (merchant) in a transaction hold.","properties":{"city":{"type":"string","title":"city","description":"The city in which the card acceptor has the business."},"country":{"type":"string","title":"country","description":"The country in which the card acceptor has the business."},"mcc":{"type":"integer","title":"mcc","description":"The Merchant Category Code of the card acceptor."},"name":{"type":"string","title":"name","description":"The name of the card acceptor."},"state":{"type":"string","title":"state","description":"The state in which the card acceptor has the business."},"street":{"type":"string","title":"street","description":"The street in which the card acceptor has the business."},"zip":{"type":"string","title":"zip","description":"The ZIP code of the location in which the card acceptor has the business."}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"GetAuthorizationHoldaf30","description":"Details for retrieving a authorization hold. Deprecated due to encodedKey field.","properties":{"accountKey":{"type":"string","title":"accountKey","description":"The key of the account linked with the authorization hold."},"advice":{"type":"boolean","title":"advice","description":"Whether the given request should be accepted without balance validations."},"amount":{"type":"number","title":"amount","description":"The amount of money to be held as a result of the authorization hold request."},"balances":{"title":"balances","$ref":"#/$defs/AccountBalancesaf30"},"cardAcceptor":{"title":"cardAcceptor","$ref":"#/$defs/CardAcceptoraf30"},"cardToken":{"type":"string","title":"cardToken","description":"The reference token of the card."},"creationDate":{"type":"string","title":"creationDate","description":"The organization time when the authorization hold was created","format":"date-time"},"creditDebitIndicator":{"title":"creditDebitIndicator","description":"Indicates whether the authorization hold amount is credited or debited.If not provided, the default values is DBIT.","enum":["DBIT","CRDT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"The ISO currency code in which the hold was created. The amounts are stored in the base currency, but the user could have enter it in a foreign currency."},"customExpirationPeriod":{"type":"integer","title":"customExpirationPeriod","description":"The custom expiration period for the hold which overwrites mcc and default expiration periods"},"encodedKey":{"type":"string","title":"encodedKey","description":"The internal ID of the authorization hold, auto generated, unique."},"exchangeRate":{"type":"number","title":"exchangeRate","description":"The exchange rate for the original currency."},"externalReferenceId":{"type":"string","title":"externalReferenceId","description":"The external reference ID to be used to reference the account hold in subsequent requests."},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount of money to be held as a result of the authorization hold request."},"originalCurrency":{"type":"string","title":"originalCurrency","description":"The original currency in which the hold was created."},"referenceDateForExpiration":{"type":"string","title":"referenceDateForExpiration","description":"The date to consider as start date when calculating the number of days passed until expiration","format":"date-time"},"source":{"title":"source","description":"Indicates the source of the authorization hold, the default values is CARD.","enum":["CARD","ACCOUNT"]},"status":{"title":"status","description":"The authorization hold status.","enum":["PENDING","REVERSED","SETTLED","EXPIRED"]},"userTransactionTime":{"type":"string","title":"userTransactionTime","description":"The formatted time at which the user made this authorization hold."}},"required":["advice","amount","externalReferenceId"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountBalancesaf30","description":"Account balances presented to inquirer such as card processor","properties":{"accountId":{"type":"string","title":"accountId","description":"The unique account identifier"},"availableBalance":{"type":"number","title":"availableBalance","description":"The available balance of a deposit or credit account"},"cardType":{"title":"cardType","description":"The card type either DEBIT or CREDIT","enum":["DEBIT","CREDIT"]},"creditLimit":{"type":"number","title":"creditLimit","description":"The overdraft limit of a deposit account or the loan amount in case of a credit account"},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code used for the account"},"totalBalance":{"type":"number","title":"totalBalance","description":"The current balance of a deposit account or principal balance of a revolving credit"}},"additionalProperties":true};const schema14 = {"type":"object","title":"CardAcceptoraf30","description":"The details of the card acceptor (merchant) in a transaction hold.","properties":{"city":{"type":"string","title":"city","description":"The city in which the card acceptor has the business."},"country":{"type":"string","title":"country","description":"The country in which the card acceptor has the business."},"mcc":{"type":"integer","title":"mcc","description":"The Merchant Category Code of the card acceptor."},"name":{"type":"string","title":"name","description":"The name of the card acceptor."},"state":{"type":"string","title":"state","description":"The state in which the card acceptor has the business."},"street":{"type":"string","title":"street","description":"The street in which the card acceptor has the business."},"zip":{"type":"string","title":"zip","description":"The ZIP code of the location in which the card acceptor has the business."}},"additionalProperties":true};function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.advice === undefined) && (missing0 = "advice")) || ((data.amount === undefined) && (missing0 = "amount"))) || ((data.externalReferenceId === undefined) && (missing0 = "externalReferenceId"))){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountKey !== undefined){const _errs2 = errors;if(typeof data.accountKey !== "string"){validate11.errors = [{instancePath:instancePath+"/accountKey",schemaPath:"#/properties/accountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.advice !== undefined){const _errs4 = errors;if(typeof data.advice !== "boolean"){validate11.errors = [{instancePath:instancePath+"/advice",schemaPath:"#/properties/advice/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.amount !== undefined){let data2 = data.amount;const _errs6 = errors;if(!((typeof data2 == "number") && (isFinite(data2)))){validate11.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.balances !== undefined){let data3 = data.balances;const _errs8 = errors;const _errs9 = errors;if(errors === _errs9){if(data3 && typeof data3 == "object" && !Array.isArray(data3)){if(data3.accountId !== undefined){const _errs12 = errors;if(typeof data3.accountId !== "string"){validate11.errors = [{instancePath:instancePath+"/balances/accountId",schemaPath:"#/$defs/AccountBalancesaf30/properties/accountId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs12 === errors;}else {var valid2 = true;}if(valid2){if(data3.availableBalance !== undefined){let data5 = data3.availableBalance;const _errs14 = errors;if(!((typeof data5 == "number") && (isFinite(data5)))){validate11.errors = [{instancePath:instancePath+"/balances/availableBalance",schemaPath:"#/$defs/AccountBalancesaf30/properties/availableBalance/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}if(valid2){if(data3.cardType !== undefined){let data6 = data3.cardType;const _errs16 = errors;if(!((data6 === "DEBIT") || (data6 === "CREDIT"))){validate11.errors = [{instancePath:instancePath+"/balances/cardType",schemaPath:"#/$defs/AccountBalancesaf30/properties/cardType/enum",keyword:"enum",params:{allowedValues: schema13.properties.cardType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs16 === errors;}else {var valid2 = true;}if(valid2){if(data3.creditLimit !== undefined){let data7 = data3.creditLimit;const _errs17 = errors;if(!((typeof data7 == "number") && (isFinite(data7)))){validate11.errors = [{instancePath:instancePath+"/balances/creditLimit",schemaPath:"#/$defs/AccountBalancesaf30/properties/creditLimit/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs17 === errors;}else {var valid2 = true;}if(valid2){if(data3.currencyCode !== undefined){const _errs19 = errors;if(typeof data3.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/balances/currencyCode",schemaPath:"#/$defs/AccountBalancesaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data3.totalBalance !== undefined){let data9 = data3.totalBalance;const _errs21 = errors;if(!((typeof data9 == "number") && (isFinite(data9)))){validate11.errors = [{instancePath:instancePath+"/balances/totalBalance",schemaPath:"#/$defs/AccountBalancesaf30/properties/totalBalance/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid2 = _errs21 === errors;}else {var valid2 = true;}}}}}}}else {validate11.errors = [{instancePath:instancePath+"/balances",schemaPath:"#/$defs/AccountBalancesaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.cardAcceptor !== undefined){let data10 = data.cardAcceptor;const _errs23 = errors;const _errs24 = errors;if(errors === _errs24){if(data10 && typeof data10 == "object" && !Array.isArray(data10)){if(data10.city !== undefined){const _errs27 = errors;if(typeof data10.city !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/city",schemaPath:"#/$defs/CardAcceptoraf30/properties/city/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs27 === errors;}else {var valid4 = true;}if(valid4){if(data10.country !== undefined){const _errs29 = errors;if(typeof data10.country !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/country",schemaPath:"#/$defs/CardAcceptoraf30/properties/country/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs29 === errors;}else {var valid4 = true;}if(valid4){if(data10.mcc !== undefined){let data13 = data10.mcc;const _errs31 = errors;if(!(((typeof data13 == "number") && (!(data13 % 1) && !isNaN(data13))) && (isFinite(data13)))){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/mcc",schemaPath:"#/$defs/CardAcceptoraf30/properties/mcc/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid4 = _errs31 === errors;}else {var valid4 = true;}if(valid4){if(data10.name !== undefined){const _errs33 = errors;if(typeof data10.name !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/name",schemaPath:"#/$defs/CardAcceptoraf30/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs33 === errors;}else {var valid4 = true;}if(valid4){if(data10.state !== undefined){const _errs35 = errors;if(typeof data10.state !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/state",schemaPath:"#/$defs/CardAcceptoraf30/properties/state/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs35 === errors;}else {var valid4 = true;}if(valid4){if(data10.street !== undefined){const _errs37 = errors;if(typeof data10.street !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/street",schemaPath:"#/$defs/CardAcceptoraf30/properties/street/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs37 === errors;}else {var valid4 = true;}if(valid4){if(data10.zip !== undefined){const _errs39 = errors;if(typeof data10.zip !== "string"){validate11.errors = [{instancePath:instancePath+"/cardAcceptor/zip",schemaPath:"#/$defs/CardAcceptoraf30/properties/zip/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid4 = _errs39 === errors;}else {var valid4 = true;}}}}}}}}else {validate11.errors = [{instancePath:instancePath+"/cardAcceptor",schemaPath:"#/$defs/CardAcceptoraf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs23 === errors;}else {var valid0 = true;}if(valid0){if(data.cardToken !== undefined){const _errs41 = errors;if(typeof data.cardToken !== "string"){validate11.errors = [{instancePath:instancePath+"/cardToken",schemaPath:"#/properties/cardToken/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs43 = errors;if(errors === _errs43){if(errors === _errs43){if(!(typeof data.creationDate === "string")){validate11.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.creditDebitIndicator !== undefined){let data20 = data.creditDebitIndicator;const _errs45 = errors;if(!((data20 === "DBIT") || (data20 === "CRDT"))){validate11.errors = [{instancePath:instancePath+"/creditDebitIndicator",schemaPath:"#/properties/creditDebitIndicator/enum",keyword:"enum",params:{allowedValues: schema12.properties.creditDebitIndicator.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.currencyCode !== undefined){const _errs46 = errors;if(typeof data.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/currencyCode",schemaPath:"#/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs46 === errors;}else {var valid0 = true;}if(valid0){if(data.customExpirationPeriod !== undefined){let data22 = data.customExpirationPeriod;const _errs48 = errors;if(!(((typeof data22 == "number") && (!(data22 % 1) && !isNaN(data22))) && (isFinite(data22)))){validate11.errors = [{instancePath:instancePath+"/customExpirationPeriod",schemaPath:"#/properties/customExpirationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs50 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.exchangeRate !== undefined){let data24 = data.exchangeRate;const _errs52 = errors;if(!((typeof data24 == "number") && (isFinite(data24)))){validate11.errors = [{instancePath:instancePath+"/exchangeRate",schemaPath:"#/properties/exchangeRate/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs52 === errors;}else {var valid0 = true;}if(valid0){if(data.externalReferenceId !== undefined){const _errs54 = errors;if(typeof data.externalReferenceId !== "string"){validate11.errors = [{instancePath:instancePath+"/externalReferenceId",schemaPath:"#/properties/externalReferenceId/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs54 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data26 = data.originalAmount;const _errs56 = errors;if(!((typeof data26 == "number") && (isFinite(data26)))){validate11.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs56 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){const _errs58 = errors;if(typeof data.originalCurrency !== "string"){validate11.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/properties/originalCurrency/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.referenceDateForExpiration !== undefined){const _errs60 = errors;if(errors === _errs60){if(errors === _errs60){if(!(typeof data.referenceDateForExpiration === "string")){validate11.errors = [{instancePath:instancePath+"/referenceDateForExpiration",schemaPath:"#/properties/referenceDateForExpiration/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.source !== undefined){let data29 = data.source;const _errs62 = errors;if(!((data29 === "CARD") || (data29 === "ACCOUNT"))){validate11.errors = [{instancePath:instancePath+"/source",schemaPath:"#/properties/source/enum",keyword:"enum",params:{allowedValues: schema12.properties.source.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs62 === errors;}else {var valid0 = true;}if(valid0){if(data.status !== undefined){let data30 = data.status;const _errs63 = errors;if(!((((data30 === "PENDING") || (data30 === "REVERSED")) || (data30 === "SETTLED")) || (data30 === "EXPIRED"))){validate11.errors = [{instancePath:instancePath+"/status",schemaPath:"#/properties/status/enum",keyword:"enum",params:{allowedValues: schema12.properties.status.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs63 === errors;}else {var valid0 = true;}if(valid0){if(data.userTransactionTime !== undefined){const _errs64 = errors;if(typeof data.userTransactionTime !== "string"){validate11.errors = [{instancePath:instancePath+"/userTransactionTime",schemaPath:"#/properties/userTransactionTime/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs64 === errors;}else {var valid0 = true;}}}}}}}}}}}}}}}}}}}}}else {validate11.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate11.errors = vErrors;return errors === 0;}function validate10(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(Array.isArray(data)){var valid0 = true;const len0 = data.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema25 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema26 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema27 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema28 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema29 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema31 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema32 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema33 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema27 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema28 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema29 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema30 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema31 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema26 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate16(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema33 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema34 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema35 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate18.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema25 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema26 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema27 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema28 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema29 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema31 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema32 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema33 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema27 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema28 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema29 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema30 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema31 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema26 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate16(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema33 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema34 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema35 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate18.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema14 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema20 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema21 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema24 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema25 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema26 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema27 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema28 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema13 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate11.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate11.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate11.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate11.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate11.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema13.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate11.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema14.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate11.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema14.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate11.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate11.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate11.errors = vErrors;return errors === 0;}const schema17 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema18 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema19 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate13(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate13.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate13.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate13.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema30 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema31 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema32 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate17(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate17.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate17.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate17.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate17.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate17.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema14 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema20 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema21 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema26 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema27 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema28 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema29 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema30 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema13 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate11.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate11.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate11.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate11.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate11.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema13.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate11.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema14.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate11.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema14.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate11.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate11.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate11.errors = vErrors;return errors === 0;}const schema17 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema18 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema19 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate13(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate13.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate13.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate13.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema25 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate15(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema32 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema33 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema34 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate17(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate17.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate17.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate17.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate17.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate17.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate17.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate16.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate16.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate16.errors = [{instancePath:instancePath+"/billingCycleDays",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data3 = data.fixedDaysOfMonth;const _errs10 = errors;if(errors === _errs10){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate16.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate16.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate16.errors = [{instancePath:instancePath+"/billingCycleDays",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data3 = data.fixedDaysOfMonth;const _errs10 = errors;if(errors === _errs10){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate14.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate14.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate14.errors = [{instancePath:instancePath+"/billingCycleDays",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data3 = data.fixedDaysOfMonth;const _errs10 = errors;if(errors === _errs10){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate14.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate14.errors = [{instancePath:instancePath+"/billingCycleDays/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate14.errors = [{instancePath:instancePath+"/billingCycleDays",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data3 = data.fixedDaysOfMonth;const _errs10 = errors;if(errors === _errs10){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema25 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema26 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema27 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema28 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema29 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema31 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema32 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema33 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycle !== undefined){let data0 = data.billingCycle;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.days !== undefined){let data1 = data0.days;const _errs6 = errors;if(errors === _errs6){if(Array.isArray(data1)){var valid3 = true;const len0 = data1.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data1[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data3 = data.defaultFirstRepaymentDueDateOffset;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data4 = data.fixedDaysOfMonth;const _errs12 = errors;if(errors === _errs12){if(Array.isArray(data4)){var valid5 = true;const len1 = data4.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"PenaltySettingsaf30":{"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true},"PlannedInstallmentFeeaf30":{"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true},"PrepaymentSettingsaf30":{"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true},"PrincipalPaymentAccountSettingsaf30":{"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"LoanAccountRedrawSettingsaf30":{"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true},"ScheduleSettingsaf30":{"type":"object","title":"ScheduleSettingsaf30","description":"The schedule settings, holds all schedule properties.","properties":{"amortizationPeriod":{"type":"integer","title":"amortizationPeriod","description":"The PMT is calculated as the loan would have [amortizationPeriod] installments."},"billingCycle":{"title":"billingCycle","$ref":"#/$defs/BillingCycleDaysaf30"},"defaultFirstRepaymentDueDateOffset":{"type":"integer","title":"defaultFirstRepaymentDueDateOffset","description":"The default first repayment due date offset, indicates how many days the first repayment due date should be extended(all other due dates from the schedule are relative to first repayment due date - they will also be affected by the offset)"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":"Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"gracePeriod":{"type":"integer","title":"gracePeriod","description":"The grace period. Represents the grace period for loan repayment - in number of installments."},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]},"hasCustomSchedule":{"type":"boolean","title":"hasCustomSchedule","description":"Flag used when the repayments schedule for the current account was determined by the user, by editing the due dates or the principal due"},"paymentPlan":{"type":"array","title":"paymentPlan","description":"A list of periodic payments for the current loan account.","items":{"$ref":"#/$defs/PeriodicPaymentaf30"}},"periodicPayment":{"type":"number","title":"periodicPayment","description":"The periodic payment amount for the accounts which have balloon payments or Reduce Number of Installments and Optimized Payments"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/RevolvingAccountSettingsaf30"},"principalRepaymentInterval":{"type":"integer","title":"principalRepaymentInterval","description":"The principal repayment interval. Indicates the interval of repayments that the principal has to be paid."},"repaymentInstallments":{"type":"integer","title":"repaymentInstallments","description":"The repayment installments. Represents how many installments are required to pay back the loan."},"repaymentPeriodCount":{"type":"integer","title":"repaymentPeriodCount","description":"The repayment period count. Represents how often the loan is to be repaid: stored based on the type repayment option."},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The repayment period unit. Represents the frequency of loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The schedule due dates method. Represents the methodology used by this account to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"The short handling method. Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true},"BillingCycleDaysaf30":{"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PeriodicPaymentaf30":{"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true},"RevolvingAccountSettingsaf30":{"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true},"LoanTrancheaf30":{"type":"object","title":"LoanTrancheaf30","description":"In some cases organizations may approve loans but not disburse the full amount initially. They would like to spread the disbursement (and risk) over time. Likewise for the client, they may not need the full loan amount up front. They may want to have a loan to buy some equipment for their business but will make one purchase today and another purchase in a few months. In these cases, they don't need the full amount and wouldn't want to pay interest on cash they don't need yet. A solution for this matter is the usage of disbursement in tranches. This class holds the information required for one of this tranche. ","properties":{"amount":{"type":"number","title":"amount","description":"The amount this tranche has available for disburse"},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/TrancheDisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the transaction details , auto generated, unique."},"fees":{"type":"array","title":"fees","description":"Fees that are associated with this tranche","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"trancheNumber":{"type":"integer","title":"trancheNumber","description":"Index indicating the tranche number"}},"required":["amount"],"additionalProperties":true},"TrancheDisbursementDetailsaf30":{"type":"object","title":"TrancheDisbursementDetailsaf30","description":"The disbursement details regarding a loan tranche.","properties":{"disbursementTransactionKey":{"type":"string","title":"disbursementTransactionKey","description":"The key of the disbursement transaction logged when this tranche was disbursed. This field will be null until the tranche disbursement"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date when this tranche is supposed to be disbursed (as Organization Time)","format":"date-time"}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanAccount","description":"Represents a loan account. A loan account defines the amount that your organization lends to a client. The terms and conditions of a loan account are defined by a loan product. In a loan account, Mambu stores all the information related to disbursements, repayments, interest rates, and withdrawals.","properties":{"accountArrearsSettings":{"title":"accountArrearsSettings","$ref":"#/$defs/AccountArrearsSettingsaf30"},"accountHolderKey":{"type":"string","title":"accountHolderKey","description":"The encoded key of the account holder."},"accountHolderType":{"title":"accountHolderType","description":"The type of the account holder.","enum":["CLIENT","GROUP"]},"accountState":{"title":"accountState","description":"The state of the loan account.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"accountSubState":{"title":"accountSubState","description":"A second state for the loan account. Beside the account state, a second substate is sometimes necessary to provide more information about the exact lifecycle state of a loan account.For example, even if the account state of a loan account is `ACTIVE`, it can also have a substate of `LOCKED`.","enum":["PARTIALLY_DISBURSED","LOCKED","LOCKED_CAPPING","REFINANCED","RESCHEDULED","WITHDRAWN","REPAID","REJECTED","WRITTEN_OFF","TERMINATED"]},"accruedInterest":{"type":"number","title":"accruedInterest","description":"The amount of interest that has been accrued in the loan account."},"accruedPenalty":{"type":"number","title":"accruedPenalty","description":"The accrued penalty, represents the amount of penalty that has been accrued in the loan account."},"activationTransactionKey":{"type":"string","title":"activationTransactionKey","description":"The encoded key of the transaction that activated the loan account."},"allowOffset":{"type":"boolean","title":"allowOffset","description":"DEPRECATED - Will always be false."},"approvedDate":{"type":"string","title":"approvedDate","description":"The date the loan account was approved.","format":"date-time"},"arrearsTolerancePeriod":{"type":"integer","title":"arrearsTolerancePeriod","description":"The arrears tolerance (period or day of month) depending on the product settings."},"assets":{"type":"array","title":"assets","description":"The list of assets associated with the current loan account.","items":{"$ref":"#/$defs/Assetaf30"}},"assignedBranchKey":{"type":"string","title":"assignedBranchKey","description":"The key of the branch this loan account is assigned to. The branch is set to unassigned if no branch field is set."},"assignedCentreKey":{"type":"string","title":"assignedCentreKey","description":"The key of the centre this account is assigned to."},"assignedUserKey":{"type":"string","title":"assignedUserKey","description":"The key of the user this loan account is assigned to."},"balances":{"title":"balances","$ref":"#/$defs/Balancesaf30"},"closedDate":{"type":"string","title":"closedDate","description":"The date the loan was closed.","format":"date-time"},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan account was created.","format":"date-time"},"creditArrangementKey":{"type":"string","title":"creditArrangementKey","description":"The key to the line of credit where this account is registered to."},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"daysInArrears":{"type":"integer","title":"daysInArrears","description":"The number of days the loan account is in arrears."},"daysLate":{"type":"integer","title":"daysLate","description":"The number of days a repayment for the loan account is late."},"disbursementDetails":{"title":"disbursementDetails","$ref":"#/$defs/DisbursementDetailsaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan account, it is auto generated, and must be unique."},"fundingSources":{"type":"array","title":"fundingSources","description":"The list of funds associated with the loan account.","items":{"$ref":"#/$defs/InvestorFundaf30"}},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the repayment transactions with entry date set in the future are allowed or not for this loan account.","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"guarantors":{"type":"array","title":"guarantors","description":"The list of guarantees associated with the loan account.","items":{"$ref":"#/$defs/Guarantoraf30"}},"id":{"type":"string","title":"id","description":"The ID of the loan account, it can be generated and customized, and must be unique."},"interestAccruedInBillingCycle":{"type":"number","title":"interestAccruedInBillingCycle","description":"The interest that is accrued in the current billing cycle."},"interestCommission":{"type":"number","title":"interestCommission","description":"The value of the interest booked by the organization from the accounts funded by investors. Null if the funds are not enabled."},"interestFromArrearsAccrued":{"type":"number","title":"interestFromArrearsAccrued","description":"The amount of interest from arrears that has been accrued in the loan account."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/InterestSettingsaf30"},"lastAccountAppraisalDate":{"type":"string","title":"lastAccountAppraisalDate","description":"The date the loan account has last been evaluated for interest, principal, fees, and penalties calculations expressed in the organization time format and time zone.","format":"date-time"},"lastInterestAppliedDate":{"type":"string","title":"lastInterestAppliedDate","description":"The date of the last time the loan account had interest applied (stored to interest balance), expressed in the organization time format and time zone.","format":"date-time"},"lastInterestReviewDate":{"type":"string","title":"lastInterestReviewDate","description":"The date the interest was reviewed last time, stored in the organization time format and time zone.","format":"date-time"},"lastLockedDate":{"type":"string","title":"lastLockedDate","description":"The date when the loan account was set for the last time in the `LOCKED` state expressed in the organization time format and time zone. If null, the account is not locked anymore.","format":"date-time"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan was updated.","format":"date-time"},"lastSetToArrearsDate":{"type":"string","title":"lastSetToArrearsDate","description":"The date when the loan account was set to last standing or null; if never set, it is expressed in your organization time format and time zone.","format":"date-time"},"lastTaxRateReviewDate":{"type":"string","title":"lastTaxRateReviewDate","description":"The date the tax rate on the loan account was last checked, expressed in the organization time format and time zone.","format":"date-time"},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"The overdue payments recalculation method inherited from the loan product on which this loan account is based.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"loanAmount":{"type":"number","title":"loanAmount","description":"The loan amount."},"loanName":{"type":"string","title":"loanName","description":"The name of the loan account."},"lockedAccountTotalDueType":{"title":"lockedAccountTotalDueType","description":"The locked account total due type.","enum":["BALANCE_AMOUNT","DUE_AMOUNT_ON_LATE_INSTALLMENTS"]},"lockedOperations":{"type":"array","title":"lockedOperations","description":"A list with operations which are locked when the account is in the AccountState.LOCKED substate.","items":{"enum":["APPLY_INTEREST","APPLY_FEES","APPLY_PENALTIES"]}},"migrationEventKey":{"type":"string","title":"migrationEventKey","description":"The migration event encoded key associated with this loan account. If this account was imported, track which 'migration event' they came from."},"modifyInterestForFirstInstallment":{"type":"boolean","title":"modifyInterestForFirstInstallment","description":"Adjust the interest for the first repayment when the first repayment period is different than the repayment frequency"},"notes":{"type":"string","title":"notes","description":"The notes about this loan account."},"originalAccountKey":{"type":"string","title":"originalAccountKey","description":"The key of the original rescheduled or refinanced loan account."},"paymentHolidaysAccruedInterest":{"type":"number","title":"paymentHolidaysAccruedInterest","description":"The amount of interest that has been accrued during payment holidays in the loan account."},"paymentMethod":{"title":"paymentMethod","description":"The interest payment method that determines whether the payments are made horizontally (on the repayments) or vertically (on the loan account).","enum":["HORIZONTAL","VERTICAL"]},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/PenaltySettingsaf30"},"plannedInstallmentFees":{"type":"array","title":"plannedInstallmentFees","description":"The list with manual fees planned on the installments of the loan account.","items":{"$ref":"#/$defs/PlannedInstallmentFeeaf30"}},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/PrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentAccountSettingsaf30"},"productTypeKey":{"type":"string","title":"productTypeKey","description":"The key for the type of loan product that this loan account is based on."},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/LoanAccountRedrawSettingsaf30"},"rescheduledAccountKey":{"type":"string","title":"rescheduledAccountKey","description":"The key pointing to where this loan account was rescheduled or refinanced to. This value is only not null if rescheduled."},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/ScheduleSettingsaf30"},"settlementAccountKey":{"type":"string","title":"settlementAccountKey","description":"The encoded key of the settlement account."},"taxRate":{"type":"number","title":"taxRate","description":"The tax rate."},"terminationDate":{"type":"string","title":"terminationDate","description":"The date this loan account was terminated.","format":"date-time"},"tranches":{"type":"array","title":"tranches","description":"The list of disbursement tranches available for the loan account.","items":{"$ref":"#/$defs/LoanTrancheaf30"}}},"required":["accountHolderKey","accountHolderType","loanAmount","productTypeKey","scheduleSettings"],"additionalProperties":true};const schema13 = {"type":"object","title":"AccountArrearsSettingsaf30","description":"The account arrears settings, holds the required information for the arrears settings of an account.","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines monthly arrears tolerance day value."},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"type":"number","title":"tolerancePercentageOfOutstandingPrincipal","description":"Defines the arrears tolerance amount."},"tolerancePeriod":{"type":"integer","title":"tolerancePeriod","description":"Defines the arrears tolerance period value."}},"additionalProperties":true};const schema16 = {"type":"object","title":"Balancesaf30","description":"The loan account balance details.","properties":{"feesBalance":{"type":"number","title":"feesBalance","description":"The fees balance. Represents the total fees expected to be paid on this account at a given moment."},"feesDue":{"type":"number","title":"feesDue","description":"The fees due. Representing the total fees due for the account."},"feesPaid":{"type":"number","title":"feesPaid","description":"The fees paid. Represents the total fees paid for the account."},"holdBalance":{"type":"number","title":"holdBalance","description":"The sum of all the authorization hold amounts on this account."},"interestBalance":{"type":"number","title":"interestBalance","description":"Represents the total interest owed by the client (total interest applied for account minus interest paid)."},"interestDue":{"type":"number","title":"interestDue","description":"The interest due. Indicates how much interest it's due for the account at this moment."},"interestFromArrearsBalance":{"type":"number","title":"interestFromArrearsBalance","description":"The interest from arrears balance. Indicates interest from arrears owned by the client, from now on. (total interest from arrears accrued for account - interest from arrears paid)."},"interestFromArrearsDue":{"type":"number","title":"interestFromArrearsDue","description":"The interest from arrears due. Indicates how much interest from arrears it's due for the account at this moment."},"interestFromArrearsPaid":{"type":"number","title":"interestFromArrearsPaid","description":"The interest from arrears paid, indicates total interest from arrears paid into the account."},"interestPaid":{"type":"number","title":"interestPaid","description":"The interest paid, indicates total interest paid into the account."},"penaltyBalance":{"type":"number","title":"penaltyBalance","description":"The penalty balance. Represents the total penalty expected to be paid on this account at a given moment."},"penaltyDue":{"type":"number","title":"penaltyDue","description":"The penalty due. Represents the total penalty amount due for the account."},"penaltyPaid":{"type":"number","title":"penaltyPaid","description":"The Penalty paid. Represents the total penalty amount paid for the account."},"principalBalance":{"type":"number","title":"principalBalance","description":"The total principal owned by the client, from now on (principal disbursed - principal paid)."},"principalDue":{"type":"number","title":"principalDue","description":"The principal due, indicates how much principal it's due at this moment."},"principalPaid":{"type":"number","title":"principalPaid","description":"The principal paid, holds the value of the total paid into the account."},"redrawBalance":{"type":"number","title":"redrawBalance","description":"The total redraw amount owned by the client, from now on."}},"additionalProperties":true};const schema15 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema21 = {"type":"object","title":"InvestorFundaf30","description":"Contains the details about an investor fund including fields like encoded key, guarantor type, amount and guarantor key","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"id":{"type":"string","title":"id","description":"Investor fund unique identifier. All versions of an investor fund will have same id."},"interestCommission":{"type":"number","title":"interestCommission","description":"The constraint minimum value"},"sharePercentage":{"type":"number","title":"sharePercentage","description":"Percentage of loan shares this investor owns"}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema22 = {"type":"object","title":"Guarantoraf30","description":"Guarantor, holds information about a client guaranty entry. It can be defined based on another client which guarantees (including or not a savings account whether it is a client of the organization using Mambu or not) or based on a value the client holds (an asset)","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]}},"required":["amount","guarantorKey","guarantorType"],"additionalProperties":true};const schema27 = {"type":"object","title":"PenaltySettingsaf30","description":"The penalty settings, holds all the fields regarding penalties","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The last penalty calculation method, represents on what amount are the penalties calculated.","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"penaltyRate":{"type":"number","title":"penaltyRate","description":"The penalty rate, represents the rate (in percent) which is charged as a penalty."}},"additionalProperties":true};const schema28 = {"type":"object","title":"PlannedInstallmentFeeaf30","description":"The planned fee details holds the information related to the installment key, predefined fee key and amount","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the planned fee."},"applyOnDate":{"type":"string","title":"applyOnDate","description":"The date when a planned fee should be applied, overriding installment's due date. It should match the interval of the installment. If it belong to first installment, it should be between disbursement date and installment due date.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the planned installment fee, auto generated, unique."},"installmentKey":{"type":"string","title":"installmentKey","description":"The encoded key of the installment on which the predefined fee is planned."},"installmentNumber":{"type":"integer","title":"installmentNumber","description":"The number of the installment on which the predefined fee is planned. It is used only in the case when fees are created at the same time with the loan account creation or during preview schedule, before account creation, otherwise this should be empty and installmentKey will be used to identify an installment."},"predefinedFeeKey":{"type":"string","title":"predefinedFeeKey","description":"The encoded key of the predefined fee which is planned."}},"required":["predefinedFeeKey"],"additionalProperties":true};const schema29 = {"type":"object","title":"PrepaymentSettingsaf30","description":"The prepayment settings, holds all prepayment properties.","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Apply interest on prepayment method copied from loan product on which this account is based.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated.","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowanceAmount":{"type":"number","title":"ercFreeAllowanceAmount"},"ercFreeAllowancePercentage":{"type":"number","title":"ercFreeAllowancePercentage","description":"Early repayment charge fee free allowance in percentage per year"},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based.","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product).","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"additionalProperties":true};const schema30 = {"type":"object","title":"PrincipalPaymentAccountSettingsaf30","description":"The principal payment account settings, holds the required information for the principal payment process of an account.","properties":{"amount":{"type":"number","title":"amount","description":"Fixed amount for being used for the repayments principal due."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the principal payment base settings, auto generated, unique."},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"Boolean flag, if true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"Boolean flag, if true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"type":"number","title":"percentage","description":"Percentage of principal amount used for the repayments principal due."},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit.","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true};const schema31 = {"type":"object","title":"LoanAccountRedrawSettingsaf30","description":"Represents the redraw settings for a loan account.","properties":{"restrictNextDueWithdrawal":{"type":"boolean","title":"restrictNextDueWithdrawal","description":"`TRUE` if withdrawing amounts that reduce the next due instalment repayment is restricted, `FALSE` otherwise."}},"required":["restrictNextDueWithdrawal"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;const schema14 = {"type":"object","title":"Assetaf30","description":"Asset, holds information about a client asset entry.","properties":{"amount":{"type":"number","title":"amount","description":"The amount used by the client for the guaranty"},"assetName":{"type":"string","title":"assetName","description":"The name of a value the client guarantees with (populated when the guaranty type is ASSET)"},"depositAccountKey":{"type":"string","title":"depositAccountKey","description":"The key of the deposit account used by the guarantor (populated when the guaranty type is GUARANTOR). It can be null."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the security, auto generated, unique."},"guarantorKey":{"type":"string","title":"guarantorKey","description":"The key of the client/group used as the guarantor."},"guarantorType":{"title":"guarantorType","description":"The type of the guarantor (client/group)","enum":["CLIENT","GROUP"]},"originalAmount":{"type":"number","title":"originalAmount","description":"The original amount used by the client for a collateral asset"},"originalCurrency":{"title":"originalCurrency","$ref":"#/$defs/Currencyaf30"}},"required":["amount","assetName"],"additionalProperties":true};function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if(((data.amount === undefined) && (missing0 = "amount")) || ((data.assetName === undefined) && (missing0 = "assetName"))){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amount !== undefined){let data0 = data.amount;const _errs2 = errors;if(!((typeof data0 == "number") && (isFinite(data0)))){validate12.errors = [{instancePath:instancePath+"/amount",schemaPath:"#/properties/amount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.assetName !== undefined){const _errs4 = errors;if(typeof data.assetName !== "string"){validate12.errors = [{instancePath:instancePath+"/assetName",schemaPath:"#/properties/assetName/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.depositAccountKey !== undefined){const _errs6 = errors;if(typeof data.depositAccountKey !== "string"){validate12.errors = [{instancePath:instancePath+"/depositAccountKey",schemaPath:"#/properties/depositAccountKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs8 = errors;if(typeof data.encodedKey !== "string"){validate12.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorKey !== undefined){const _errs10 = errors;if(typeof data.guarantorKey !== "string"){validate12.errors = [{instancePath:instancePath+"/guarantorKey",schemaPath:"#/properties/guarantorKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.guarantorType !== undefined){let data5 = data.guarantorType;const _errs12 = errors;if(!((data5 === "CLIENT") || (data5 === "GROUP"))){validate12.errors = [{instancePath:instancePath+"/guarantorType",schemaPath:"#/properties/guarantorType/enum",keyword:"enum",params:{allowedValues: schema14.properties.guarantorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.originalAmount !== undefined){let data6 = data.originalAmount;const _errs13 = errors;if(!((typeof data6 == "number") && (isFinite(data6)))){validate12.errors = [{instancePath:instancePath+"/originalAmount",schemaPath:"#/properties/originalAmount/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.originalCurrency !== undefined){let data7 = data.originalCurrency;const _errs15 = errors;const _errs16 = errors;if(errors === _errs16){if(data7 && typeof data7 == "object" && !Array.isArray(data7)){if(data7.code !== undefined){const _errs19 = errors;let valid3;valid3 = false;for(const v0 of schema15.properties.code.enum){if(func0(data7.code, v0)){valid3 = true;break;}}if(!valid3){validate12.errors = [{instancePath:instancePath+"/originalCurrency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema15.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs19 === errors;}else {var valid2 = true;}if(valid2){if(data7.currencyCode !== undefined){const _errs20 = errors;if(typeof data7.currencyCode !== "string"){validate12.errors = [{instancePath:instancePath+"/originalCurrency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid2 = _errs20 === errors;}else {var valid2 = true;}}}else {validate12.errors = [{instancePath:instancePath+"/originalCurrency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs15 === errors;}else {var valid0 = true;}}}}}}}}}}else {validate12.errors = [{instancePath,schemaPath:"#/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}validate12.errors = vErrors;return errors === 0;}const schema18 = {"type":"object","title":"DisbursementDetailsaf30","description":"The the disbursement details it holds the information related to the disbursement details as disbursement date, first repayment date, disbursement fees.","properties":{"disbursementDate":{"type":"string","title":"disbursementDate","description":"The activation date, the date when the disbursement actually took place.","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the disbursement details, auto generated, unique"},"expectedDisbursementDate":{"type":"string","title":"expectedDisbursementDate","description":"The date of the expected disbursement.Stored as Organization Time.","format":"date-time"},"fees":{"type":"array","title":"fees","description":"List of fees that should be applied at the disbursement time.","items":{"$ref":"#/$defs/CustomPredefinedFeeaf30"}},"firstRepaymentDate":{"type":"string","title":"firstRepaymentDate","description":"The date of the expected first repayment. Stored as Organization Time.","format":"date-time"},"transactionDetails":{"title":"transactionDetails","$ref":"#/$defs/LoanTransactionDetailsaf30"}},"additionalProperties":true};const schema19 = {"type":"object","title":"CustomPredefinedFeeaf30","description":"The custom predefined fees, they may be used as the expected predefined fees that will be applied on the disbursement.","properties":{"amount":{"type":"number","title":"amount","description":"The amount of the custom fee."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the custom predefined fee, auto generated, unique."},"percentage":{"type":"number","title":"percentage","description":"The percentage of the custom fee."},"predefinedFeeEncodedKey":{"type":"string","title":"predefinedFeeEncodedKey","description":"The encoded key of the predefined fee"}},"additionalProperties":true};const schema20 = {"type":"object","title":"LoanTransactionDetailsaf30","description":"Represents the loan transaction details.","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the entity, generated, globally unique"},"internalTransfer":{"type":"boolean","title":"internalTransfer","description":"Whether the transaction was transferred between loans or deposit accounts"},"targetDepositAccountKey":{"type":"string","title":"targetDepositAccountKey","description":"In case of a transaction to a deposit account this represent the deposit account key to which the transaction was made."},"transactionChannelId":{"type":"string","title":"transactionChannelId","description":"The ID of the transaction channel associated with the transaction details."},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The encoded key of the transaction channel associated with the transaction details."}},"additionalProperties":true};function validate14(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.disbursementDate !== undefined){const _errs2 = errors;if(errors === _errs2){if(errors === _errs2){if(!(typeof data.disbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/disbursementDate",schemaPath:"#/properties/disbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs4 = errors;if(typeof data.encodedKey !== "string"){validate14.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.expectedDisbursementDate !== undefined){const _errs6 = errors;if(errors === _errs6){if(errors === _errs6){if(!(typeof data.expectedDisbursementDate === "string")){validate14.errors = [{instancePath:instancePath+"/expectedDisbursementDate",schemaPath:"#/properties/expectedDisbursementDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.fees !== undefined){let data3 = data.fees;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data3)){var valid1 = true;const len0 = data3.length;for(let i0=0; i0 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema26 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};function validate16(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accountInterestRateSettings !== undefined){let data0 = data.accountInterestRateSettings;const _errs2 = errors;if(errors === _errs2){if(Array.isArray(data0)){var valid1 = true;const len0 = data0.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Repayment Methodology is FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["gracePeriod"],"additionalProperties":true};const schema33 = {"type":"object","title":"BillingCycleDaysaf30","description":"Defines the billing cycles settings for a loan account","properties":{"days":{"type":"array","title":"days","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema34 = {"type":"object","title":"PeriodicPaymentaf30","description":"For fixed term loans there is the possibility to define a payment plan. A payment plan consists of multiple periodic payments. This class holds information about a periodic payment.","properties":{"amount":{"type":"number","title":"amount","description":"The PMT value used in periodic payment"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the periodic payment, auto generated, unique."},"toInstallment":{"type":"integer","title":"toInstallment","description":"The installment's position up to which the PMT will be used"}},"required":["amount","toInstallment"],"additionalProperties":true};const schema35 = {"type":"object","title":"RevolvingAccountSettingsaf30","description":"The number of previewed instalments for an account","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"The number of previewed instalments"}},"additionalProperties":true};function validate18(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.gracePeriod === undefined) && (missing0 = "gracePeriod")){validate18.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;if(!(((typeof data0 == "number") && (!(data0 % 1) && !isNaN(data0))) && (isFinite(data0)))){validate18.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/properties/amortizationPeriod/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycle !== undefined){let data1 = data.billingCycle;const _errs4 = errors;const _errs5 = errors;if(errors === _errs5){if(data1 && typeof data1 == "object" && !Array.isArray(data1)){if(data1.days !== undefined){let data2 = data1.days;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle/days",schemaPath:"#/$defs/BillingCycleDaysaf30/properties/days/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}}}else {validate18.errors = [{instancePath:instancePath+"/billingCycle",schemaPath:"#/$defs/BillingCycleDaysaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultFirstRepaymentDueDateOffset !== undefined){let data4 = data.defaultFirstRepaymentDueDateOffset;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate18.errors = [{instancePath:instancePath+"/defaultFirstRepaymentDueDateOffset",schemaPath:"#/properties/defaultFirstRepaymentDueDateOffset/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data5 = data.fixedDaysOfMonth;const _errs14 = errors;if(errors === _errs14){if(Array.isArray(data5)){var valid5 = true;const len1 = data5.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH. + */ + shortMonthHandlingMethod?: 'LAST_DAY_IN_MONTH' | 'FIRST_DAY_OF_NEXT_MONTH' +} + /** * Decimal constraints, like min/max/default. */ @@ -610,6 +624,20 @@ export interface InterestProductSettings { interestRateTiers?: InterestRateTier[] } +/** + * Represents interest rate change threshold settings for loan accounts and loan products. + */ +export interface InterestRateChangePMTAdjustmentThreshold { + /** + * The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS + */ + method?: 'WORKING_DAYS' | 'CALENDAR_DAYS' + /** + * The number of days that trigger an interest rate change. + */ + numberOfDays?: number +} + /** * Used or TIERED interest rates, holds the values to define how the interest is computed */ @@ -719,7 +747,13 @@ export interface LoanProduct { /** * The type of the loan product. */ - type: 'FIXED_TERM_LOAN' | 'DYNAMIC_TERM_LOAN' | 'INTEREST_FREE_LOAN' | 'TRANCHED_LOAN' | 'REVOLVING_CREDIT' + type: + | 'FIXED_TERM_LOAN' + | 'DYNAMIC_TERM_LOAN' + | 'INTEREST_FREE_LOAN' + | 'TRANCHED_LOAN' + | 'REVOLVING_CREDIT' + | 'INTEREST_ONLY_EQUAL_INSTALLMENTS' } export const LoanProduct = { @@ -742,6 +776,7 @@ export const LoanProduct = { * Defines the settings and constraints for schedule for the loans that are created based on this product. */ export interface LoanProductScheduleSettings { + amortizationPeriod?: ProductAmortizationPeriod billingCycles?: BillingCyclesProductSettings /** * Interval Repayment Methodology Settings. @@ -1110,6 +1145,24 @@ export interface PrincipalPaymentProductSettings { | 'TOTAL_PRINCIPAL_PERCENTAGE' } +/** + * It holds information about the loan product amortization period. The PMT is calculated as the loan would have [amortisationPeriod] instalments + */ +export interface ProductAmortizationPeriod { + /** + * default value + */ + defaultValue?: number + /** + * max value + */ + maxValue?: number + /** + * min value + */ + minValue?: number +} + /** * The product arrears settings, shows whether the non working days are taken in consideration or not when applying penalties/late fees or when setting an account into arrears */ @@ -1208,10 +1261,11 @@ export interface ProductInterestSettings { */ daysInYear: 'ACTUAL_365_FIXED' | 'ACTUAL_364' | 'ACTUAL_360' | 'ACTUAL_ACTUAL_ISDA' | 'E30_360' | 'BUS_252' | 'E30_42_365' indexRateSettings?: InterestProductSettings + interestApplicationDays?: DaysInMonth /** * The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment. */ - interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' + interestApplicationMethod?: 'AFTER_DISBURSEMENT' | 'REPAYMENT_DUE_DATE' | 'FIXED_DAYS_OF_MONTH' /** * The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed. */ @@ -1219,7 +1273,8 @@ export interface ProductInterestSettings { /** * The interest calculation method. Holds the type of interest calculation method. */ - interestCalculationMethod: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' + interestCalculationMethod: 'FLAT' | 'DECLINING_BALANCE' | 'DECLINING_BALANCE_DISCOUNTED' | 'EQUAL_INSTALLMENTS' + interestRateChangePMTAdjustmentThreshold?: InterestRateChangePMTAdjustmentThreshold /** * Adjustable interest rates settings */ @@ -1261,6 +1316,10 @@ export interface ProductPrepaymentSettings { * The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated */ elementsRecalculationMethod?: 'PRINCIPAL_EXPECTED_FIXED' | 'TOTAL_EXPECTED_FIXED' + /** + * ERC free allowance in percentage + */ + ercFreeAllowance?: number /** * Shows whether the future payments are allowed or not for this product (repayment transactions with entry date set in the future) */ diff --git a/src/loan-products/schemas/get-all-response.schema.js b/src/loan-products/schemas/get-all-response.schema.js index 2a31409..95665ca 100644 --- a/src/loan-products/schemas/get-all-response.schema.js +++ b/src/loan-products/schemas/get-all-response.schema.js @@ -2,4 +2,4 @@ * Generated by Ajv https://ajv.js.org/guide/managing-schemas.html#standalone-validation-code * eslint-disable */ -import {createRequire} from 'module';const require = createRequire(import.meta.url);"use strict";export const validate = validate10;export default validate10;const schema11 = {"$schema":"http://json-schema.org/draft-07/schema#","title":"getAllResponse","type":"array","items":{"$ref":"#/$defs/LoanProduct"},"$defs":{"LoanProduct":{"type":"object","title":"LoanProduct","description":"Represents a loan product.","properties":{"accountingSettings":{"title":"accountingSettings","$ref":"#/$defs/AccountingSettingsaf30"},"accountLinkSettings":{"title":"accountLinkSettings","$ref":"#/$defs/AccountLinkSettingsaf30"},"adjustInterestForFirstInstallment":{"type":"boolean","title":"adjustInterestForFirstInstallment","description":"`TRUE` if it is possible to adjust the interest for the first repayment when the first repayment period is different than the repayment frequency, `FALSE` otherwise."},"allowCustomRepaymentAllocation":{"type":"boolean","title":"allowCustomRepaymentAllocation","description":"`TRUE` if an additional payment may be allocated on the account, ignoring the default repayment allocation order, `FALSE` otherwise."},"arrearsSettings":{"title":"arrearsSettings","$ref":"#/$defs/ProductArrearsSettingsaf30"},"availabilitySettings":{"title":"availabilitySettings","$ref":"#/$defs/ProductAvailabilitySettingsaf30"},"category":{"title":"category","description":"The category of the loan product.","enum":["PERSONAL_LENDING","PURCHASE_FINANCING","RETAIL_MORTGAGES","SME_LENDING","COMMERCIAL","UNCATEGORIZED"]},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan product was created.","format":"date-time"},"creditArrangementSettings":{"title":"creditArrangementSettings","$ref":"#/$defs/CreditArrangementSettingsaf30"},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan product, it is auto generated, and unique."},"feesSettings":{"title":"feesSettings","$ref":"#/$defs/FeesSettingsaf30"},"fundingSettings":{"title":"fundingSettings","$ref":"#/$defs/FundingSettingsaf30"},"gracePeriodSettings":{"title":"gracePeriodSettings","$ref":"#/$defs/GracePeriodSettingsaf30"},"id":{"type":"string","title":"id","description":"The ID of the loan product, can be generated and customized, and must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/ProductInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/InternalControlsaf30"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan product was updated.","format":"date-time"},"loanAmountSettings":{"title":"loanAmountSettings","$ref":"#/$defs/LoanAmountSettingsaf30"},"name":{"type":"string","title":"name","description":"The name of the loan product."},"newAccountSettings":{"title":"newAccountSettings","$ref":"#/$defs/NewAccountSettingsaf30"},"notes":{"type":"string","title":"notes","description":"The notes or description of the loan product."},"offsetSettings":{"title":"offsetSettings","$ref":"#/$defs/OffsetSettingsaf30"},"paymentSettings":{"title":"paymentSettings","$ref":"#/$defs/PaymentSettingsaf30"},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/ProductPenaltySettingsaf30"},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/ProductRedrawSettingsaf30"},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/LoanProductScheduleSettingsaf30"},"securitySettings":{"title":"securitySettings","$ref":"#/$defs/SecuritySettingsaf30"},"state":{"title":"state","description":"The current state of the loan product.","enum":["ACTIVE","INACTIVE"]},"taxSettings":{"title":"taxSettings","$ref":"#/$defs/TaxSettingsaf30"},"templates":{"type":"array","title":"templates","description":"The template documents of the loan product.","items":{"$ref":"#/$defs/DocumentTemplateaf30"}},"type":{"title":"type","description":"The type of the loan product.","enum":["FIXED_TERM_LOAN","DYNAMIC_TERM_LOAN","INTEREST_FREE_LOAN","TRANCHED_LOAN","REVOLVING_CREDIT"]}},"required":["creditArrangementSettings","id","name","type"],"additionalProperties":true},"AccountingSettingsaf30":{"type":"object","title":"AccountingSettingsaf30","description":"Accounting settings, defines the accounting settings for the product.","properties":{"accountingMethod":{"title":"accountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","CASH","ACCRUAL"]},"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules for the product.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"interestAccrualCalculation":{"title":"interestAccrualCalculation","description":"The accounting interest calculation option selected for the product.","enum":["NONE","AGGREGATED_AMOUNT","BREAKDOWN_PER_ACCOUNT"]},"interestAccruedAccountingMethod":{"title":"interestAccruedAccountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","DAILY","END_OF_MONTH"]}},"required":["accountingMethod"],"additionalProperties":true},"GLAccountingRuleaf30":{"type":"object","title":"GLAccountingRuleaf30","description":"The GL accounting rule, it maps a financial resource with a GL account for a specific product (i.e loan or saving).","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the accounting rule, auto generated, unique."},"financialResource":{"title":"financialResource","description":"General Ledger Financial Resources used to setup the product accounting rules and determine the credit and debit accounts when logging journal entries","enum":["PORTFOLIO_CONTROL","FUND_SOURCE","WRITE_OFF_EXPENSE","INTEREST_INCOME","TAXES_PAYABLE","FEE_INCOME","PENALTY_INCOME","NEGATIVE_INTEREST_PAYABLE_RECEIVABLE","NEGATIVE_INTEREST_PAYABLE","INTEREST_RECEIVABLE","FEE_RECEIVABLE","PENALTY_RECEIVABLE","TAXES_RECEIVABLE","DEFERRED_INTERESTS_INCOME","DEFERRED_FEE_INCOME","DEFERRED_TAXES","DEPOSIT_REFERENCE","SAVINGS_CONTROL","INTEREST_EXPENSE","INTEREST_PAYABLE","NEGATIVE_INTEREST_INCOME","NEGATIVE_INTEREST_RECEIVABLE","OVERDRAFT_PORTFOLIO_CONTROL","OVERDRAFT_INTEREST_INCOME","OVERDRAFT_WRITE_OFF_EXPENSE","OVERDRAFT_INTEREST_RECEIVABLE","INTER_BRANCH_TRANSFER"]},"glAccountKey":{"type":"string","title":"glAccountKey","description":"The encoded key of the account that is mapped to the financialResource"},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The key of the transaction rule that uses this rule"}},"required":["financialResource","glAccountKey"],"additionalProperties":true},"AccountLinkSettingsaf30":{"type":"object","title":"AccountLinkSettingsaf30","description":"Defines the settings for account linking.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Shows whether the loan accounts created using this product can be linked to a savings account."},"linkableDepositProductKey":{"type":"string","title":"linkableDepositProductKey","description":"Loan accounts created for this product can only be linked the the savings accounts that use the savings product with this key. If null, the loan accounts for this product can be linked to any savings account."},"linkedAccountOptions":{"type":"array","title":"linkedAccountOptions","description":"A set of linked account options.","items":{"enum":["AUTO_LINK_ACCOUNTS","AUTO_CREATE_LINKED_ACCOUNTS"]},"uniqueItems":true},"settlementMethod":{"title":"settlementMethod","description":"Set the option of automated transfer that should be made from linked deposit accounts into loan accounts create from this product.","enum":["FULL_DUE_AMOUNTS","PARTIAL_DUE_AMOUNTS","NO_AUTOMATED_TRANSFERS"]}},"required":["enabled"],"additionalProperties":true},"ProductArrearsSettingsaf30":{"type":"object","title":"ProductArrearsSettingsaf30","description":"The product arrears settings, shows whether the non working days are taken in consideration or not when applying penalties/late fees or when setting an account into arrears","properties":{"dateCalculationMethod":{"title":"dateCalculationMethod","description":"The arrears date calculation method.","enum":["ACCOUNT_FIRST_WENT_TO_ARREARS","LAST_LATE_REPAYMENT","ACCOUNT_FIRST_BREACHED_MATERIALITY_THRESHOLD"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the arrears base settings, auto generated, unique."},"monthlyToleranceDay":{"type":"integer","title":"monthlyToleranceDay","description":"Defines the tolerance monthly date"},"nonWorkingDaysMethod":{"title":"nonWorkingDaysMethod","description":"Shows whether the non working days are taken in consideration or not when applying penaltees/late fees or when setting an account into arrears","enum":["INCLUDED","EXCLUDED"]},"toleranceCalculationMethod":{"title":"toleranceCalculationMethod","description":"Defines the tolerance calculation method","enum":["ARREARS_TOLERANCE_PERIOD","MONTHLY_ARREARS_TOLERANCE_DAY"]},"toleranceFloorAmount":{"type":"number","title":"toleranceFloorAmount","description":"The tolerance floor amount."},"tolerancePercentageOfOutstandingPrincipal":{"title":"tolerancePercentageOfOutstandingPrincipal","$ref":"#/$defs/DecimalIntervalaf30"},"tolerancePeriod":{"title":"tolerancePeriod","$ref":"#/$defs/IntegerIntervalConstraintsaf30"}},"additionalProperties":true},"DecimalIntervalaf30":{"type":"object","title":"DecimalIntervalaf30","description":"Decimal constraints, like min/max/default.","properties":{"defaultValue":{"type":"number","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"maxValue":{"type":"number","title":"maxValue","description":"The maximum value."},"minValue":{"type":"number","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"IntegerIntervalConstraintsaf30":{"type":"object","title":"IntegerIntervalConstraintsaf30","description":"Decimal integer, like min/max/default.","properties":{"defaultValue":{"type":"integer","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the integer constraint, auto generated, unique"},"maxValue":{"type":"integer","title":"maxValue","description":"The maximum value."},"minValue":{"type":"integer","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"ProductAvailabilitySettingsaf30":{"type":"object","title":"ProductAvailabilitySettingsaf30","description":"Holds information about product availability.","properties":{"availableFor":{"type":"array","title":"availableFor","description":"Holds the entities this product is available for. i.e Individuals","items":{"enum":["INDIVIDUALS","PURE_GROUPS","SOLIDARITY_GROUPS"]},"uniqueItems":true},"branchSettings":{"title":"branchSettings","$ref":"#/$defs/BranchSettingsaf30"}},"additionalProperties":true},"BranchSettingsaf30":{"type":"object","title":"BranchSettingsaf30","description":"Holds information about branch availability for the product.","properties":{"availableProductBranches":{"type":"array","title":"availableProductBranches","description":"Holds the encoded keys of the branches this product should be available for.","items":{"type":"string"}},"forAllBranches":{"type":"boolean","title":"forAllBranches","description":"Indicates if this product should be available for all branches"}},"additionalProperties":true},"CreditArrangementSettingsaf30":{"type":"object","title":"CreditArrangementSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"creditArrangementRequirement":{"title":"creditArrangementRequirement","description":"Shows whether accounts created after this product can/should be part of a line of credit.","enum":["OPTIONAL","REQUIRED","NOT_REQUIRED"]}},"additionalProperties":true},"Currencyaf30":{"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true},"FeesSettingsaf30":{"type":"object","title":"FeesSettingsaf30","description":"Defines fees settings for the product.","properties":{"allowArbitraryFees":{"type":"boolean","title":"allowArbitraryFees","description":"Only if true users will be able to apply fees, for current object, of type 'Other'; these fees can have any amount."},"fees":{"type":"array","title":"fees","description":"List of all fees that can be applied for accounts of this loan product.","items":{"$ref":"#/$defs/PredefinedFeeaf30"}}},"additionalProperties":true},"PredefinedFeeaf30":{"type":"object","title":"PredefinedFeeaf30","description":"The response representation of the PredefinedFee. Represents a fee with a defined name and a fixed value.","properties":{"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules defined for this fee. If null, product default rules are selected.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"amortizationSettings":{"title":"amortizationSettings","$ref":"#/$defs/PeriodIntervalSettingsaf30"},"amount":{"type":"number","title":"amount","description":"The amount of the fee"},"amountCalculationFunctionName":{"type":"string","title":"amountCalculationFunctionName","description":"Mambu Function name used for the fee calculation"},"amountCalculationMethod":{"title":"amountCalculationMethod","description":"The amount from which the fee is calculated using percentageAmount","enum":["FLAT","LOAN_AMOUNT_PERCENTAGE","REPAYMENT_PRINCIPAL_AMOUNT_PERCENTAGE","LOAN_AMOUNT_PERCENTAGE_NUMBER_OF_INSTALLMENTS","FLAT_NUMBER_OF_INSTALLMENTS","IOF_PERCENTAGE_OF_DISBURSED_AMOUNT","IOF_PERCENTAGE_OF_INSTALLMENT_PRINCIPAL","IOF_PERCENTAGE_OF_LATE_INSTALLMENT_PRINCIPAL","MAMBU_FUNCTION"]},"applyDateMethod":{"title":"applyDateMethod","description":"Shows when a fee should be applied; to be used with monthly deposit fees","enum":["MONTHLY_FROM_ACTIVATION","FIRST_OF_EVERY_MONTH"]},"creationDate":{"type":"string","title":"creationDate","description":"Shows the creation date of the fee","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the predefined fee, auto generated, unique"},"feeApplication":{"title":"feeApplication","description":"The type of fee application when disbursement is applied","enum":["REQUIRED","OPTIONAL"]},"id":{"type":"string","title":"id","description":"The id of the fee"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"Shows the last modified date of the fee","format":"date-time"},"name":{"type":"string","title":"name","description":"The name of the fee"},"percentageAmount":{"type":"number","title":"percentageAmount","description":"The amount of the fee in percents applied to percentSource"},"state":{"title":"state","description":"Indicates the state of the fee","enum":["ACTIVE","INACTIVE"]},"taxSettings":{"title":"taxSettings","$ref":"#/$defs/FeeTaxSettingsaf30"},"trigger":{"title":"trigger","description":"Shows the event that will trigger a fee","enum":["MANUAL","MANUAL_PLANNED","DISBURSEMENT","CAPITALIZED_DISBURSEMENT","UPFRONT_DISBURSEMENT","LATE_REPAYMENT","PAYMENT_DUE","PAYMENT_DUE_APPLIED_ON_DUE_DATES","ARBITRARY","IOF","EARLY_REPAYMENT_CHARGE"]}},"required":["feeApplication","state","trigger"],"additionalProperties":true},"PeriodIntervalSettingsaf30":{"type":"object","title":"PeriodIntervalSettingsaf30","description":"The settings for defining period intervals.","properties":{"amortizationProfile":{"title":"amortizationProfile","description":"Type of amortization profile used for fee","enum":["NONE","SUM_OF_YEARS_DIGITS","STRAIGHT_LINE","EFFECTIVE_INTEREST_RATE"]},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the period interval settings, auto generated, unique."},"feeAmortizationUponRescheduleRefinanceOption":{"title":"feeAmortizationUponRescheduleRefinanceOption","description":"Flag for signaling if fee amortization should be continued or finished at account reschedule/refinance","enum":["END_AMORTIZATION_ON_THE_ORIGINAL_ACCOUNT","CONTINUE_AMORTIZATION_ON_THE_RESCHEDULED_REFINANCED_ACCOUNT"]},"frequency":{"title":"frequency","description":"Frequency settings of the fee amortization","enum":["ACCOUNT_INSTALLMENTS_DUE_DATES","ACCOUNT_INSTALLMENTS_DUE_DATES_DAILY_BOOKING","CUSTOM_INTERVAL"]},"intervalCount":{"type":"integer","title":"intervalCount","description":"Total number of intervals"},"intervalType":{"title":"intervalType","description":"Defines the options for an interval","enum":["PREDEFINED_INTERVALS","FULL_TERM"]},"periodCount":{"type":"integer","title":"periodCount","description":"Period count used in conjunction with periodUnit to determine the next date of the interval"},"periodUnit":{"title":"periodUnit","description":"Amortization unit to determine the interval between amortizations","enum":["DAYS","WEEKS","MONTHS","YEARS"]}},"additionalProperties":true},"FeeTaxSettingsaf30":{"type":"object","title":"FeeTaxSettingsaf30","description":"Tax settings for a specific Predefined fee that overrides the tax settings of Loan Product","properties":{"taxableCalculationMethod":{"title":"taxableCalculationMethod","description":"Marks a specific fee as non-taxable (taxes are not calculated for it).Feature is in the Early Stage. To be enabled by request.","enum":["DEFAULT","NON_TAXABLE","CUSTOM_TAX"]}},"additionalProperties":true},"FundingSettingsaf30":{"type":"object","title":"FundingSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Indicates whether the product has the investor funds enabled or not."},"funderInterestCommission":{"title":"funderInterestCommission","$ref":"#/$defs/DecimalConstraintsaf30"},"funderInterestCommissionAllocationType":{"title":"funderInterestCommissionAllocationType","description":"Define how the Interest is allocated to the investors(if the investors can define their own percentages for their own contribution to the loan, or if all of them are using the same percentage).","enum":["PERCENTAGE_OF_LOAN_FUNDING","FIXED_INTEREST_COMMISSIONS"]},"lockFundsAtApproval":{"type":"boolean","title":"lockFundsAtApproval","description":"Shows whether investor funds are locked or not at the loan account's approval."},"organizationInterestCommission":{"title":"organizationInterestCommission","$ref":"#/$defs/DecimalConstraintsaf30"},"requiredFunds":{"type":"number","title":"requiredFunds","description":"The required investor funds percentage, for opening an account with external funding. If null, the investor funds are not enabled."}},"additionalProperties":true},"DecimalConstraintsaf30":{"type":"object","title":"DecimalConstraintsaf30","description":"Decimal constraints, like min/max/default.","properties":{"defaultValue":{"type":"number","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the decimal constraint, auto generated, unique"},"maxValue":{"type":"number","title":"maxValue","description":"The maximum value."},"minValue":{"type":"number","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"GracePeriodSettingsaf30":{"type":"object","title":"GracePeriodSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"gracePeriod":{"title":"gracePeriod","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"gracePeriodType":{"title":"gracePeriodType","description":"The grace period type. Representing the type of grace period which is possible for a loan account.","enum":["NONE","PAY_INTEREST_ONLY","INTEREST_FORGIVENESS"]}},"additionalProperties":true},"ProductInterestSettingsaf30":{"type":"object","title":"ProductInterestSettingsaf30","description":"The interest settings, defines constraints regarding interest that will be used on the loan account crated based on this product.","properties":{"accrueLateInterest":{"type":"boolean","title":"accrueLateInterest","description":"Whether late interest should be accrued, applied and paid"},"compoundingFrequency":{"title":"compoundingFrequency","description":"The frequency on which the accrued interest will be added to the principal for interest calculation. It is used only for InterestType.COMPOUNDING_INTEREST","const":"DAILY"},"daysInYear":{"title":"daysInYear","description":"The days in year that should be used for loan calculations.","enum":["ACTUAL_365_FIXED","ACTUAL_364","ACTUAL_360","ACTUAL_ACTUAL_ISDA","E30_360","BUS_252","E30_42_365"]},"indexRateSettings":{"title":"indexRateSettings","$ref":"#/$defs/InterestProductSettingsaf30"},"interestApplicationMethod":{"title":"interestApplicationMethod","description":"The interest application method. Represents the interest application method that determines whether the interest gets applied on the account's disbursement or on each repayment.","enum":["AFTER_DISBURSEMENT","REPAYMENT_DUE_DATE"]},"interestBalanceCalculationMethod":{"title":"interestBalanceCalculationMethod","description":"The interest balance calculation method. Represents the option which determines the way the balance for the account's interest is computed.","enum":["ONLY_PRINCIPAL","PRINCIPAL_AND_INTEREST"]},"interestCalculationMethod":{"title":"interestCalculationMethod","description":"The interest calculation method. Holds the type of interest calculation method.","enum":["FLAT","DECLINING_BALANCE","DECLINING_BALANCE_DISCOUNTED"]},"interestRateSettings":{"type":"array","title":"interestRateSettings","description":"Adjustable interest rates settings","items":{"$ref":"#/$defs/ProductInterestRateSettingsaf30"}},"interestType":{"title":"interestType","description":"The possible values for how we compute and apply the interest","enum":["SIMPLE_INTEREST","CAPITALIZED_INTEREST","COMPOUNDING_INTEREST"]},"scheduleInterestDaysCountMethod":{"title":"scheduleInterestDaysCountMethod","description":"Shows whether all the installments should compute the interest based on the actual number of days or based on the defined repayment periodicity.","enum":["REPAYMENT_PERIODICITY","ACTUAL_DAYS_COUNT"]}},"required":["daysInYear","interestCalculationMethod","scheduleInterestDaysCountMethod"],"additionalProperties":true},"InterestProductSettingsaf30":{"type":"object","title":"InterestProductSettingsaf30","description":"The interest settings, defines constraints regarding interest that will be used on the loan account created based on this product.","properties":{"accrueInterestAfterMaturity":{"type":"boolean","title":"accrueInterestAfterMaturity","description":"If the product supports this option, specify if the interest should be accrued after the account maturity date"},"allowNegativeInterestRate":{"type":"boolean","title":"allowNegativeInterestRate","description":"Indicator whether the loan product allows negative values for interest rate or interest spread"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interval used for determining how often is interest charged","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestChargeFrequencyCount":{"type":"integer","title":"interestChargeFrequencyCount","description":"the count of units to apply over the interval"},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Interest spread + index interest rate can't be more than this amount (valid only for index interest rate products)."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Interest spread + index interest rate can't be less than this amount (valid only for index interest rate products)."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count"},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or (interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestRateTerms":{"title":"interestRateTerms","description":"The option for how is the interest rate determined when being accrued for an account","enum":["FIXED","TIERED","TIERED_PERIOD","TIERED_BAND"]},"interestRateTiers":{"type":"array","title":"interestRateTiers","description":"The list of interest rate tiers available for the current settings instance","items":{"$ref":"#/$defs/InterestRateTieraf30"}}},"additionalProperties":true},"InterestRateTieraf30":{"type":"object","title":"InterestRateTieraf30","description":"Used or TIERED interest rates, holds the values to define how the interest is computed","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"endingBalance":{"type":"number","title":"endingBalance","description":"The top-limit value for the account balance in order to determine if this tier is used or not"},"interestRate":{"type":"number","title":"interestRate","description":"The rate used for computing the interest for an account which has the balance less than the ending balance"}},"required":["interestRate"],"additionalProperties":true},"ProductInterestRateSettingsaf30":{"type":"object","title":"ProductInterestRateSettingsaf30","description":"Adjustable interest rates settings","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate settings, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Maximum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Minimum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count. Valid only for index interest rate."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit. Valid only for index interest rate.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or indexed(interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]}},"required":["interestRateSource"],"additionalProperties":true},"InternalControlsaf30":{"type":"object","title":"InternalControlsaf30","description":"Constraints and automated actions and that will be applied on the accounts.","properties":{"dormancyPeriodDays":{"type":"integer","title":"dormancyPeriodDays","description":"Specifies the number of days for an account to be fully paid in order to auto close it."},"fourEyesPrinciple":{"title":"fourEyesPrinciple","$ref":"#/$defs/FourEyesPrincipleaf30"},"lockSettings":{"title":"lockSettings","$ref":"#/$defs/LockSettingsaf30"}},"additionalProperties":true},"FourEyesPrincipleaf30":{"type":"object","title":"FourEyesPrincipleaf30","description":"Settings for Four Eyes Principle","properties":{"activeForLoanApproval":{"type":"boolean","title":"activeForLoanApproval","description":"Requires separate users to create and approve loan accounts"}},"additionalProperties":true},"LockSettingsaf30":{"type":"object","title":"LockSettingsaf30","description":"Settings applied when transitioning accounts to Locked state","properties":{"cappingConstraintType":{"title":"cappingConstraintType","description":"Specifies constraint types for capping charges.","enum":["SOFT_CAP","HARD_CAP"]},"cappingMethod":{"title":"cappingMethod","description":"Specifies how principal will be used when calculating capping charges.","enum":["OUTSTANDING_PRINCIPAL_PERCENTAGE","ORIGINAL_PRINCIPAL_PERCENTAGE"]},"cappingPercentage":{"type":"number","title":"cappingPercentage","description":"Specifies the percentage of principal that cannot be exceeded by the sum of interest, fees and penalty balances."},"lockPeriodDays":{"type":"integer","title":"lockPeriodDays","description":"Specifies the number of days for in which the account will be locked if it stays in arrears."}},"additionalProperties":true},"LoanAmountSettingsaf30":{"type":"object","title":"LoanAmountSettingsaf30","description":"The amount settings, holds all amount properties.","properties":{"loanAmount":{"title":"loanAmount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"trancheSettings":{"title":"trancheSettings","$ref":"#/$defs/TrancheSettingsaf30"}},"additionalProperties":true},"AmountDecimalConstraintsaf30":{"type":"object","title":"AmountDecimalConstraintsaf30","description":"Decimal constraints, like min/max/default.","properties":{"defaultValue":{"type":"number","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the decimal constraint, auto generated, unique"},"maxValue":{"type":"number","title":"maxValue","description":"The maximum value."},"minValue":{"type":"number","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"TrancheSettingsaf30":{"type":"object","title":"TrancheSettingsaf30","description":"The tranche settings, indicates the settings regarding tranches in case the product is configured to support tranches.","properties":{"maxNumberOfTranches":{"type":"integer","title":"maxNumberOfTranches","description":"The number of tranches supported by the loan product"}},"additionalProperties":true},"NewAccountSettingsaf30":{"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true},"OffsetSettingsaf30":{"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true},"PaymentSettingsaf30":{"type":"object","title":"PaymentSettingsaf30","description":"Defines the payment settings for the loan product and for loans crated based on this product.","properties":{"amortizationMethod":{"title":"amortizationMethod","description":"Payments Method used by loan accounts for repayments schedule generation.","enum":["STANDARD_PAYMENTS","BALLOON_PAYMENTS","OPTIMIZED_PAYMENTS","PAYMENT_PLAN"]},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"Recalculate the schedule when late payments are posted on dynamic Equal Installments loans.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"paymentMethod":{"title":"paymentMethod","description":"The payment method. Represents the interest payment method that determines whether the payments are made Horizontally (on the Repayments) or Vertically (on the Loan Account)","enum":["HORIZONTAL","VERTICAL"]},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/ProductPrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentProductSettingsaf30"},"repaymentAllocationOrder":{"type":"array","title":"repaymentAllocationOrder","description":"A list of basic repayment allocation elements such as the principal, interest & fees.","items":{"enum":["PRINCIPAL","INTEREST","FEE","PENALTY"]}}},"required":["latePaymentsRecalculationMethod","paymentMethod","repaymentAllocationOrder"],"additionalProperties":true},"ProductPrepaymentSettingsaf30":{"type":"object","title":"ProductPrepaymentSettingsaf30","description":"Defines the prepayment settings for the product","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Whether the interest on prepayment is applied manual or automatic.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the future payments are allowed or not for this product (repayment transactions with entry date set in the future)","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"prepaymentAcceptance":{"title":"prepaymentAcceptance","description":"Shows whether the pre-payments are allowed or not for this product.","enum":["ACCEPT_PREPAYMENTS","NO_PREPAYMENTS"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product)","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"required":["futurePaymentsAcceptance"],"additionalProperties":true},"PrincipalPaymentProductSettingsaf30":{"type":"object","title":"PrincipalPaymentProductSettingsaf30","description":"Defines the principal payment settings constraints for the loans that will be created based on this product.","properties":{"amount":{"title":"amount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"defaultPrincipalRepaymentInterval":{"type":"integer","title":"defaultPrincipalRepaymentInterval","description":"How many repayments the principal has to be paid"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the settings, auto generated, unique"},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"If true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"If true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"title":"percentage","$ref":"#/$defs/DecimalConstraintsaf30"},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"ProductPenaltySettingsaf30":{"type":"object","title":"ProductPenaltySettingsaf30","description":"Defines the penalty settings for the product that will be used by the loan accounts based on this product","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The penalty calculation method","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"loanPenaltyGracePeriod":{"type":"integer","title":"loanPenaltyGracePeriod","description":"Number of days to wait before applying the loan penalty amounts"},"penaltyRate":{"title":"penaltyRate","$ref":"#/$defs/DecimalConstraintsaf30"}},"required":["loanPenaltyCalculationMethod"],"additionalProperties":true},"ProductRedrawSettingsaf30":{"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true},"LoanProductScheduleSettingsaf30":{"type":"object","title":"LoanProductScheduleSettingsaf30","description":"Defines the settings and constraints for schedule for the loans that are created based on this product.","properties":{"billingCycles":{"title":"billingCycles","$ref":"#/$defs/BillingCyclesProductSettingsaf30"},"defaultRepaymentPeriodCount":{"type":"integer","title":"defaultRepaymentPeriodCount","description":"Interval Repayment Methodology Settings."},"firstRepaymentDueDateOffset":{"title":"firstRepaymentDueDateOffset","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":" Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"interestAccrualSince":{"title":"interestAccrualSince","description":"Represents the moment the interest will start getting accrued.","enum":["DISBURSEMENT","DUE_DATE"]},"numInstallments":{"title":"numInstallments","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/PreviewScheduleSettingsaf30"},"repaymentMethod":{"title":"repaymentMethod","description":"The repayment method value","enum":["AMOUNT","INSTALLMENTS"]},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The frequency of the loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentReschedulingMethod":{"title":"repaymentReschedulingMethod","description":"The repayment rescheduling method used in calculations.","enum":["NONE","NEXT_WORKING_DAY","PREVIOUS_WORKING_DAY","EXTEND_SCHEDULE"]},"repaymentScheduleEditOptions":{"type":"array","title":"repaymentScheduleEditOptions","description":"Shows the properties from the repayment schedule can be edited.","items":{"enum":["ADJUST_PAYMENT_DATES","ADJUST_PRINCIPAL_PAYMENT_SCHEDULE","ADJUST_INTEREST_PAYMENT_SCHEDULE","ADJUST_FEE_PAYMENT_SCHEDULE","ADJUST_PENALTY_PAYMENT_SCHEDULE","ADJUST_NUMBER_OF_INSTALLMENTS","ADJUST_PAYMENT_HOLIDAYS"]}},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"roundingSettings":{"title":"roundingSettings","$ref":"#/$defs/RoundingSettingsaf30"},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The methodology used by this product to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true},"BillingCyclesProductSettingsaf30":{"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PreviewScheduleSettingsaf30":{"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true},"RoundingSettingsaf30":{"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true},"SecuritySettingsaf30":{"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true},"TaxSettingsaf30":{"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true},"DocumentTemplateaf30":{"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanProduct","description":"Represents a loan product.","properties":{"accountingSettings":{"title":"accountingSettings","$ref":"#/$defs/AccountingSettingsaf30"},"accountLinkSettings":{"title":"accountLinkSettings","$ref":"#/$defs/AccountLinkSettingsaf30"},"adjustInterestForFirstInstallment":{"type":"boolean","title":"adjustInterestForFirstInstallment","description":"`TRUE` if it is possible to adjust the interest for the first repayment when the first repayment period is different than the repayment frequency, `FALSE` otherwise."},"allowCustomRepaymentAllocation":{"type":"boolean","title":"allowCustomRepaymentAllocation","description":"`TRUE` if an additional payment may be allocated on the account, ignoring the default repayment allocation order, `FALSE` otherwise."},"arrearsSettings":{"title":"arrearsSettings","$ref":"#/$defs/ProductArrearsSettingsaf30"},"availabilitySettings":{"title":"availabilitySettings","$ref":"#/$defs/ProductAvailabilitySettingsaf30"},"category":{"title":"category","description":"The category of the loan product.","enum":["PERSONAL_LENDING","PURCHASE_FINANCING","RETAIL_MORTGAGES","SME_LENDING","COMMERCIAL","UNCATEGORIZED"]},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan product was created.","format":"date-time"},"creditArrangementSettings":{"title":"creditArrangementSettings","$ref":"#/$defs/CreditArrangementSettingsaf30"},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan product, it is auto generated, and unique."},"feesSettings":{"title":"feesSettings","$ref":"#/$defs/FeesSettingsaf30"},"fundingSettings":{"title":"fundingSettings","$ref":"#/$defs/FundingSettingsaf30"},"gracePeriodSettings":{"title":"gracePeriodSettings","$ref":"#/$defs/GracePeriodSettingsaf30"},"id":{"type":"string","title":"id","description":"The ID of the loan product, can be generated and customized, and must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/ProductInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/InternalControlsaf30"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan product was updated.","format":"date-time"},"loanAmountSettings":{"title":"loanAmountSettings","$ref":"#/$defs/LoanAmountSettingsaf30"},"name":{"type":"string","title":"name","description":"The name of the loan product."},"newAccountSettings":{"title":"newAccountSettings","$ref":"#/$defs/NewAccountSettingsaf30"},"notes":{"type":"string","title":"notes","description":"The notes or description of the loan product."},"offsetSettings":{"title":"offsetSettings","$ref":"#/$defs/OffsetSettingsaf30"},"paymentSettings":{"title":"paymentSettings","$ref":"#/$defs/PaymentSettingsaf30"},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/ProductPenaltySettingsaf30"},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/ProductRedrawSettingsaf30"},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/LoanProductScheduleSettingsaf30"},"securitySettings":{"title":"securitySettings","$ref":"#/$defs/SecuritySettingsaf30"},"state":{"title":"state","description":"The current state of the loan product.","enum":["ACTIVE","INACTIVE"]},"taxSettings":{"title":"taxSettings","$ref":"#/$defs/TaxSettingsaf30"},"templates":{"type":"array","title":"templates","description":"The template documents of the loan product.","items":{"$ref":"#/$defs/DocumentTemplateaf30"}},"type":{"title":"type","description":"The type of the loan product.","enum":["FIXED_TERM_LOAN","DYNAMIC_TERM_LOAN","INTEREST_FREE_LOAN","TRANCHED_LOAN","REVOLVING_CREDIT"]}},"required":["creditArrangementSettings","id","name","type"],"additionalProperties":true};const schema15 = {"type":"object","title":"AccountLinkSettingsaf30","description":"Defines the settings for account linking.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Shows whether the loan accounts created using this product can be linked to a savings account."},"linkableDepositProductKey":{"type":"string","title":"linkableDepositProductKey","description":"Loan accounts created for this product can only be linked the the savings accounts that use the savings product with this key. If null, the loan accounts for this product can be linked to any savings account."},"linkedAccountOptions":{"type":"array","title":"linkedAccountOptions","description":"A set of linked account options.","items":{"enum":["AUTO_LINK_ACCOUNTS","AUTO_CREATE_LINKED_ACCOUNTS"]},"uniqueItems":true},"settlementMethod":{"title":"settlementMethod","description":"Set the option of automated transfer that should be made from linked deposit accounts into loan accounts create from this product.","enum":["FULL_DUE_AMOUNTS","PARTIAL_DUE_AMOUNTS","NO_AUTOMATED_TRANSFERS"]}},"required":["enabled"],"additionalProperties":true};const schema21 = {"type":"object","title":"CreditArrangementSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"creditArrangementRequirement":{"title":"creditArrangementRequirement","description":"Shows whether accounts created after this product can/should be part of a line of credit.","enum":["OPTIONAL","REQUIRED","NOT_REQUIRED"]}},"additionalProperties":true};const schema22 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema45 = {"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true};const schema46 = {"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true};const schema54 = {"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true};const schema61 = {"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true};const schema62 = {"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true};const schema63 = {"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true};const schema13 = {"type":"object","title":"AccountingSettingsaf30","description":"Accounting settings, defines the accounting settings for the product.","properties":{"accountingMethod":{"title":"accountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","CASH","ACCRUAL"]},"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules for the product.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"interestAccrualCalculation":{"title":"interestAccrualCalculation","description":"The accounting interest calculation option selected for the product.","enum":["NONE","AGGREGATED_AMOUNT","BREAKDOWN_PER_ACCOUNT"]},"interestAccruedAccountingMethod":{"title":"interestAccruedAccountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","DAILY","END_OF_MONTH"]}},"required":["accountingMethod"],"additionalProperties":true};const schema14 = {"type":"object","title":"GLAccountingRuleaf30","description":"The GL accounting rule, it maps a financial resource with a GL account for a specific product (i.e loan or saving).","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the accounting rule, auto generated, unique."},"financialResource":{"title":"financialResource","description":"General Ledger Financial Resources used to setup the product accounting rules and determine the credit and debit accounts when logging journal entries","enum":["PORTFOLIO_CONTROL","FUND_SOURCE","WRITE_OFF_EXPENSE","INTEREST_INCOME","TAXES_PAYABLE","FEE_INCOME","PENALTY_INCOME","NEGATIVE_INTEREST_PAYABLE_RECEIVABLE","NEGATIVE_INTEREST_PAYABLE","INTEREST_RECEIVABLE","FEE_RECEIVABLE","PENALTY_RECEIVABLE","TAXES_RECEIVABLE","DEFERRED_INTERESTS_INCOME","DEFERRED_FEE_INCOME","DEFERRED_TAXES","DEPOSIT_REFERENCE","SAVINGS_CONTROL","INTEREST_EXPENSE","INTEREST_PAYABLE","NEGATIVE_INTEREST_INCOME","NEGATIVE_INTEREST_RECEIVABLE","OVERDRAFT_PORTFOLIO_CONTROL","OVERDRAFT_INTEREST_INCOME","OVERDRAFT_WRITE_OFF_EXPENSE","OVERDRAFT_INTEREST_RECEIVABLE","INTER_BRANCH_TRANSFER"]},"glAccountKey":{"type":"string","title":"glAccountKey","description":"The encoded key of the account that is mapped to the financialResource"},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The key of the transaction rule that uses this rule"}},"required":["financialResource","glAccountKey"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.accountingMethod === undefined) && (missing0 = "accountingMethod")){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountingMethod !== undefined){let data0 = data.accountingMethod;const _errs2 = errors;if(!(((data0 === "NONE") || (data0 === "CASH")) || (data0 === "ACCRUAL"))){validate12.errors = [{instancePath:instancePath+"/accountingMethod",schemaPath:"#/properties/accountingMethod/enum",keyword:"enum",params:{allowedValues: schema13.properties.accountingMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.accountingRules !== undefined){let data1 = data.accountingRules;const _errs3 = errors;if(errors === _errs3){if(Array.isArray(data1)){var valid1 = true;const len0 = data1.length;for(let i0=0; i0 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data0[i1], data0[j0])){validate16.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate16.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.branchSettings !== undefined){let data2 = data.branchSettings;const _errs5 = errors;const _errs6 = errors;if(errors === _errs6){if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.availableProductBranches !== undefined){let data3 = data2.availableProductBranches;const _errs9 = errors;if(errors === _errs9){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true};const schema56 = {"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema59 = {"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true};const schema60 = {"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true};function validate42(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.repaymentReschedulingMethod === undefined) && (missing0 = "repaymentReschedulingMethod")) || ((data.repaymentScheduleMethod === undefined) && (missing0 = "repaymentScheduleMethod"))) || ((data.scheduleDueDatesMethod === undefined) && (missing0 = "scheduleDueDatesMethod"))){validate42.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycles !== undefined){let data0 = data.billingCycles;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.enabled !== undefined){const _errs6 = errors;if(typeof data0.enabled !== "boolean"){validate42.errors = [{instancePath:instancePath+"/billingCycles/enabled",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid2 = _errs6 === errors;}else {var valid2 = true;}if(valid2){if(data0.startDays !== undefined){let data2 = data0.startDays;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate42.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate42.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs8 === errors;}else {var valid2 = true;}}}else {validate42.errors = [{instancePath:instancePath+"/billingCycles",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultRepaymentPeriodCount !== undefined){let data4 = data.defaultRepaymentPeriodCount;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate42.errors = [{instancePath:instancePath+"/defaultRepaymentPeriodCount",schemaPath:"#/properties/defaultRepaymentPeriodCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.firstRepaymentDueDateOffset !== undefined){let data5 = data.firstRepaymentDueDateOffset;const _errs14 = errors;const _errs15 = errors;if(errors === _errs15){if(data5 && typeof data5 == "object" && !Array.isArray(data5)){if(data5.defaultValue !== undefined){let data6 = data5.defaultValue;const _errs18 = errors;if(!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/defaultValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs18 === errors;}else {var valid6 = true;}if(valid6){if(data5.encodedKey !== undefined){const _errs20 = errors;if(typeof data5.encodedKey !== "string"){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/encodedKey",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid6 = _errs20 === errors;}else {var valid6 = true;}if(valid6){if(data5.maxValue !== undefined){let data8 = data5.maxValue;const _errs22 = errors;if(!(((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/maxValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs22 === errors;}else {var valid6 = true;}if(valid6){if(data5.minValue !== undefined){let data9 = data5.minValue;const _errs24 = errors;if(!(((typeof data9 == "number") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/minValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs24 === errors;}else {var valid6 = true;}}}}}else {validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs14 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data10 = data.fixedDaysOfMonth;const _errs26 = errors;if(errors === _errs26){if(Array.isArray(data10)){var valid7 = true;const len1 = data10.length;for(let i2=0; i2 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data4[i1], data4[j0])){validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs11 === errors;}else {var valid2 = true;}if(valid2){if(data1.settlementMethod !== undefined){let data6 = data1.settlementMethod;const _errs14 = errors;if(!(((data6 === "FULL_DUE_AMOUNTS") || (data6 === "PARTIAL_DUE_AMOUNTS")) || (data6 === "NO_AUTOMATED_TRANSFERS"))){validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/settlementMethod",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/settlementMethod/enum",keyword:"enum",params:{allowedValues: schema15.properties.settlementMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/accountLinkSettings",schemaPath:"#/$defs/AccountLinkSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs3 === errors;}else {var valid0 = true;}if(valid0){if(data.adjustInterestForFirstInstallment !== undefined){const _errs15 = errors;if(typeof data.adjustInterestForFirstInstallment !== "boolean"){validate11.errors = [{instancePath:instancePath+"/adjustInterestForFirstInstallment",schemaPath:"#/properties/adjustInterestForFirstInstallment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.allowCustomRepaymentAllocation !== undefined){const _errs17 = errors;if(typeof data.allowCustomRepaymentAllocation !== "boolean"){validate11.errors = [{instancePath:instancePath+"/allowCustomRepaymentAllocation",schemaPath:"#/properties/allowCustomRepaymentAllocation/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.arrearsSettings !== undefined){const _errs19 = errors;if(!(validate14(data.arrearsSettings, {instancePath:instancePath+"/arrearsSettings",parentData:data,parentDataProperty:"arrearsSettings",rootData}))){vErrors = vErrors === null ? validate14.errors : vErrors.concat(validate14.errors);errors = vErrors.length;}var valid0 = _errs19 === errors;}else {var valid0 = true;}if(valid0){if(data.availabilitySettings !== undefined){const _errs20 = errors;if(!(validate16(data.availabilitySettings, {instancePath:instancePath+"/availabilitySettings",parentData:data,parentDataProperty:"availabilitySettings",rootData}))){vErrors = vErrors === null ? validate16.errors : vErrors.concat(validate16.errors);errors = vErrors.length;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.category !== undefined){const _errs21 = errors;let valid5;valid5 = false;for(const v0 of schema12.properties.category.enum){if(func0(data.category, v0)){valid5 = true;break;}}if(!valid5){validate11.errors = [{instancePath:instancePath+"/category",schemaPath:"#/properties/category/enum",keyword:"enum",params:{allowedValues: schema12.properties.category.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs21 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs22 = errors;if(errors === _errs22){if(errors === _errs22){if(!(typeof data.creationDate === "string")){validate11.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.creditArrangementSettings !== undefined){let data13 = data.creditArrangementSettings;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data13 && typeof data13 == "object" && !Array.isArray(data13)){if(data13.creditArrangementRequirement !== undefined){let data14 = data13.creditArrangementRequirement;if(!(((data14 === "OPTIONAL") || (data14 === "REQUIRED")) || (data14 === "NOT_REQUIRED"))){validate11.errors = [{instancePath:instancePath+"/creditArrangementSettings/creditArrangementRequirement",schemaPath:"#/$defs/CreditArrangementSettingsaf30/properties/creditArrangementRequirement/enum",keyword:"enum",params:{allowedValues: schema21.properties.creditArrangementRequirement.enum},message:"must be equal to one of the allowed values"}];return false;}}}else {validate11.errors = [{instancePath:instancePath+"/creditArrangementSettings",schemaPath:"#/$defs/CreditArrangementSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.currency !== undefined){let data15 = data.currency;const _errs29 = errors;const _errs30 = errors;if(errors === _errs30){if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.code !== undefined){const _errs33 = errors;let valid10;valid10 = false;for(const v1 of schema22.properties.code.enum){if(func0(data15.code, v1)){valid10 = true;break;}}if(!valid10){validate11.errors = [{instancePath:instancePath+"/currency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema22.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid9 = _errs33 === errors;}else {var valid9 = true;}if(valid9){if(data15.currencyCode !== undefined){const _errs34 = errors;if(typeof data15.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/currency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid9 = _errs34 === errors;}else {var valid9 = true;}}}else {validate11.errors = [{instancePath:instancePath+"/currency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs36 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs36 === errors;}else {var valid0 = true;}if(valid0){if(data.feesSettings !== undefined){const _errs38 = errors;if(!(validate18(data.feesSettings, {instancePath:instancePath+"/feesSettings",parentData:data,parentDataProperty:"feesSettings",rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.fundingSettings !== undefined){const _errs39 = errors;if(!(validate22(data.fundingSettings, {instancePath:instancePath+"/fundingSettings",parentData:data,parentDataProperty:"fundingSettings",rootData}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}var valid0 = _errs39 === errors;}else {var valid0 = true;}if(valid0){if(data.gracePeriodSettings !== undefined){const _errs40 = errors;if(!(validate24(data.gracePeriodSettings, {instancePath:instancePath+"/gracePeriodSettings",parentData:data,parentDataProperty:"gracePeriodSettings",rootData}))){vErrors = vErrors === null ? validate24.errors : vErrors.concat(validate24.errors);errors = vErrors.length;}var valid0 = _errs40 === errors;}else {var valid0 = true;}if(valid0){if(data.id !== undefined){const _errs41 = errors;if(typeof data.id !== "string"){validate11.errors = [{instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.interestSettings !== undefined){const _errs43 = errors;if(!(validate26(data.interestSettings, {instancePath:instancePath+"/interestSettings",parentData:data,parentDataProperty:"interestSettings",rootData}))){vErrors = vErrors === null ? validate26.errors : vErrors.concat(validate26.errors);errors = vErrors.length;}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.internalControls !== undefined){const _errs44 = errors;if(!(validate32(data.internalControls, {instancePath:instancePath+"/internalControls",parentData:data,parentDataProperty:"internalControls",rootData}))){vErrors = vErrors === null ? validate32.errors : vErrors.concat(validate32.errors);errors = vErrors.length;}var valid0 = _errs44 === errors;}else {var valid0 = true;}if(valid0){if(data.lastModifiedDate !== undefined){const _errs45 = errors;if(errors === _errs45){if(errors === _errs45){if(!(typeof data.lastModifiedDate === "string")){validate11.errors = [{instancePath:instancePath+"/lastModifiedDate",schemaPath:"#/properties/lastModifiedDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAmountSettings !== undefined){const _errs47 = errors;if(!(validate34(data.loanAmountSettings, {instancePath:instancePath+"/loanAmountSettings",parentData:data,parentDataProperty:"loanAmountSettings",rootData}))){vErrors = vErrors === null ? validate34.errors : vErrors.concat(validate34.errors);errors = vErrors.length;}var valid0 = _errs47 === errors;}else {var valid0 = true;}if(valid0){if(data.name !== undefined){const _errs48 = errors;if(typeof data.name !== "string"){validate11.errors = [{instancePath:instancePath+"/name",schemaPath:"#/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.newAccountSettings !== undefined){let data28 = data.newAccountSettings;const _errs50 = errors;const _errs51 = errors;if(errors === _errs51){if(data28 && typeof data28 == "object" && !Array.isArray(data28)){let missing2;if((((data28.accountInitialState === undefined) && (missing2 = "accountInitialState")) || ((data28.idGeneratorType === undefined) && (missing2 = "idGeneratorType"))) || ((data28.idPattern === undefined) && (missing2 = "idPattern"))){validate11.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/required",keyword:"required",params:{missingProperty: missing2},message:"must have required property '"+missing2+"'"}];return false;}else {if(data28.accountInitialState !== undefined){const _errs54 = errors;let valid13;valid13 = false;for(const v2 of schema45.properties.accountInitialState.enum){if(func0(data28.accountInitialState, v2)){valid13 = true;break;}}if(!valid13){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/accountInitialState",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/accountInitialState/enum",keyword:"enum",params:{allowedValues: schema45.properties.accountInitialState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs54 === errors;}else {var valid12 = true;}if(valid12){if(data28.idGeneratorType !== undefined){let data30 = data28.idGeneratorType;const _errs55 = errors;if(!((data30 === "INCREMENTAL_NUMBER") || (data30 === "RANDOM_PATTERN"))){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/idGeneratorType",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idGeneratorType/enum",keyword:"enum",params:{allowedValues: schema45.properties.idGeneratorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs55 === errors;}else {var valid12 = true;}if(valid12){if(data28.idPattern !== undefined){const _errs56 = errors;if(typeof data28.idPattern !== "string"){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/idPattern",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idPattern/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid12 = _errs56 === errors;}else {var valid12 = true;}}}}}else {validate11.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.notes !== undefined){const _errs58 = errors;if(typeof data.notes !== "string"){validate11.errors = [{instancePath:instancePath+"/notes",schemaPath:"#/properties/notes/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.offsetSettings !== undefined){let data33 = data.offsetSettings;const _errs60 = errors;const _errs61 = errors;if(errors === _errs61){if(data33 && typeof data33 == "object" && !Array.isArray(data33)){if(data33.allowOffset !== undefined){if(typeof data33.allowOffset !== "boolean"){validate11.errors = [{instancePath:instancePath+"/offsetSettings/allowOffset",schemaPath:"#/$defs/OffsetSettingsaf30/properties/allowOffset/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}else {validate11.errors = [{instancePath:instancePath+"/offsetSettings",schemaPath:"#/$defs/OffsetSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.paymentSettings !== undefined){const _errs66 = errors;if(!(validate36(data.paymentSettings, {instancePath:instancePath+"/paymentSettings",parentData:data,parentDataProperty:"paymentSettings",rootData}))){vErrors = vErrors === null ? validate36.errors : vErrors.concat(validate36.errors);errors = vErrors.length;}var valid0 = _errs66 === errors;}else {var valid0 = true;}if(valid0){if(data.penaltySettings !== undefined){const _errs67 = errors;if(!(validate40(data.penaltySettings, {instancePath:instancePath+"/penaltySettings",parentData:data,parentDataProperty:"penaltySettings",rootData}))){vErrors = vErrors === null ? validate40.errors : vErrors.concat(validate40.errors);errors = vErrors.length;}var valid0 = _errs67 === errors;}else {var valid0 = true;}if(valid0){if(data.redrawSettings !== undefined){let data37 = data.redrawSettings;const _errs68 = errors;const _errs69 = errors;if(errors === _errs69){if(data37 && typeof data37 == "object" && !Array.isArray(data37)){let missing3;if((data37.allowRedraw === undefined) && (missing3 = "allowRedraw")){validate11.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/required",keyword:"required",params:{missingProperty: missing3},message:"must have required property '"+missing3+"'"}];return false;}else {if(data37.allowRedraw !== undefined){if(typeof data37.allowRedraw !== "boolean"){validate11.errors = [{instancePath:instancePath+"/redrawSettings/allowRedraw",schemaPath:"#/$defs/ProductRedrawSettingsaf30/properties/allowRedraw/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}}else {validate11.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs68 === errors;}else {var valid0 = true;}if(valid0){if(data.scheduleSettings !== undefined){const _errs74 = errors;if(!(validate42(data.scheduleSettings, {instancePath:instancePath+"/scheduleSettings",parentData:data,parentDataProperty:"scheduleSettings",rootData}))){vErrors = vErrors === null ? validate42.errors : vErrors.concat(validate42.errors);errors = vErrors.length;}var valid0 = _errs74 === errors;}else {var valid0 = true;}if(valid0){if(data.securitySettings !== undefined){let data40 = data.securitySettings;const _errs75 = errors;const _errs76 = errors;if(errors === _errs76){if(data40 && typeof data40 == "object" && !Array.isArray(data40)){if(data40.isCollateralEnabled !== undefined){const _errs79 = errors;if(typeof data40.isCollateralEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/securitySettings/isCollateralEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isCollateralEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs79 === errors;}else {var valid19 = true;}if(valid19){if(data40.isGuarantorsEnabled !== undefined){const _errs81 = errors;if(typeof data40.isGuarantorsEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/securitySettings/isGuarantorsEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isGuarantorsEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs81 === errors;}else {var valid19 = true;}if(valid19){if(data40.requiredGuaranties !== undefined){let data43 = data40.requiredGuaranties;const _errs83 = errors;if(!((typeof data43 == "number") && (isFinite(data43)))){validate11.errors = [{instancePath:instancePath+"/securitySettings/requiredGuaranties",schemaPath:"#/$defs/SecuritySettingsaf30/properties/requiredGuaranties/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid19 = _errs83 === errors;}else {var valid19 = true;}}}}else {validate11.errors = [{instancePath:instancePath+"/securitySettings",schemaPath:"#/$defs/SecuritySettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs75 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){let data44 = data.state;const _errs85 = errors;if(!((data44 === "ACTIVE") || (data44 === "INACTIVE"))){validate11.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema12.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs85 === errors;}else {var valid0 = true;}if(valid0){if(data.taxSettings !== undefined){let data45 = data.taxSettings;const _errs86 = errors;const _errs87 = errors;if(errors === _errs87){if(data45 && typeof data45 == "object" && !Array.isArray(data45)){if(data45.taxCalculationMethod !== undefined){let data46 = data45.taxCalculationMethod;const _errs90 = errors;if(!((data46 === "INCLUSIVE") || (data46 === "EXCLUSIVE"))){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxCalculationMethod",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxCalculationMethod/enum",keyword:"enum",params:{allowedValues: schema62.properties.taxCalculationMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid21 = _errs90 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnFeesEnabled !== undefined){const _errs91 = errors;if(typeof data45.taxesOnFeesEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnFeesEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnFeesEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs91 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnInterestEnabled !== undefined){const _errs93 = errors;if(typeof data45.taxesOnInterestEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnInterestEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnInterestEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs93 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnPenaltyEnabled !== undefined){const _errs95 = errors;if(typeof data45.taxesOnPenaltyEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnPenaltyEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnPenaltyEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs95 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxSourceKey !== undefined){const _errs97 = errors;if(typeof data45.taxSourceKey !== "string"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxSourceKey",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid21 = _errs97 === errors;}else {var valid21 = true;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/taxSettings",schemaPath:"#/$defs/TaxSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs86 === errors;}else {var valid0 = true;}if(valid0){if(data.templates !== undefined){let data51 = data.templates;const _errs99 = errors;if(errors === _errs99){if(Array.isArray(data51)){var valid22 = true;const len1 = data51.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"ProductInterestRateSettingsaf30":{"type":"object","title":"ProductInterestRateSettingsaf30","description":"Adjustable interest rates settings","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate settings, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Maximum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Minimum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count. Valid only for index interest rate."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit. Valid only for index interest rate.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or indexed(interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]}},"required":["interestRateSource"],"additionalProperties":true},"InternalControlsaf30":{"type":"object","title":"InternalControlsaf30","description":"Constraints and automated actions and that will be applied on the accounts.","properties":{"dormancyPeriodDays":{"type":"integer","title":"dormancyPeriodDays","description":"Specifies the number of days for an account to be fully paid in order to auto close it."},"fourEyesPrinciple":{"title":"fourEyesPrinciple","$ref":"#/$defs/FourEyesPrincipleaf30"},"lockSettings":{"title":"lockSettings","$ref":"#/$defs/LockSettingsaf30"}},"additionalProperties":true},"FourEyesPrincipleaf30":{"type":"object","title":"FourEyesPrincipleaf30","description":"Settings for Four Eyes Principle","properties":{"activeForLoanApproval":{"type":"boolean","title":"activeForLoanApproval","description":"Requires separate users to create and approve loan accounts"}},"additionalProperties":true},"LockSettingsaf30":{"type":"object","title":"LockSettingsaf30","description":"Settings applied when transitioning accounts to Locked state","properties":{"cappingConstraintType":{"title":"cappingConstraintType","description":"Specifies constraint types for capping charges.","enum":["SOFT_CAP","HARD_CAP"]},"cappingMethod":{"title":"cappingMethod","description":"Specifies how principal will be used when calculating capping charges.","enum":["OUTSTANDING_PRINCIPAL_PERCENTAGE","ORIGINAL_PRINCIPAL_PERCENTAGE"]},"cappingPercentage":{"type":"number","title":"cappingPercentage","description":"Specifies the percentage of principal that cannot be exceeded by the sum of interest, fees and penalty balances."},"lockPeriodDays":{"type":"integer","title":"lockPeriodDays","description":"Specifies the number of days for in which the account will be locked if it stays in arrears."}},"additionalProperties":true},"LoanAmountSettingsaf30":{"type":"object","title":"LoanAmountSettingsaf30","description":"The amount settings, holds all amount properties.","properties":{"loanAmount":{"title":"loanAmount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"trancheSettings":{"title":"trancheSettings","$ref":"#/$defs/TrancheSettingsaf30"}},"additionalProperties":true},"AmountDecimalConstraintsaf30":{"type":"object","title":"AmountDecimalConstraintsaf30","description":"Decimal constraints, like min/max/default.","properties":{"defaultValue":{"type":"number","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the decimal constraint, auto generated, unique"},"maxValue":{"type":"number","title":"maxValue","description":"The maximum value."},"minValue":{"type":"number","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"TrancheSettingsaf30":{"type":"object","title":"TrancheSettingsaf30","description":"The tranche settings, indicates the settings regarding tranches in case the product is configured to support tranches.","properties":{"maxNumberOfTranches":{"type":"integer","title":"maxNumberOfTranches","description":"The number of tranches supported by the loan product"}},"additionalProperties":true},"NewAccountSettingsaf30":{"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true},"OffsetSettingsaf30":{"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true},"PaymentSettingsaf30":{"type":"object","title":"PaymentSettingsaf30","description":"Defines the payment settings for the loan product and for loans crated based on this product.","properties":{"amortizationMethod":{"title":"amortizationMethod","description":"Payments Method used by loan accounts for repayments schedule generation.","enum":["STANDARD_PAYMENTS","BALLOON_PAYMENTS","OPTIMIZED_PAYMENTS","PAYMENT_PLAN"]},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"Recalculate the schedule when late payments are posted on dynamic Equal Installments loans.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"paymentMethod":{"title":"paymentMethod","description":"The payment method. Represents the interest payment method that determines whether the payments are made Horizontally (on the Repayments) or Vertically (on the Loan Account)","enum":["HORIZONTAL","VERTICAL"]},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/ProductPrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentProductSettingsaf30"},"repaymentAllocationOrder":{"type":"array","title":"repaymentAllocationOrder","description":"A list of basic repayment allocation elements such as the principal, interest & fees.","items":{"enum":["PRINCIPAL","INTEREST","FEE","PENALTY"]}}},"required":["latePaymentsRecalculationMethod","paymentMethod","repaymentAllocationOrder"],"additionalProperties":true},"ProductPrepaymentSettingsaf30":{"type":"object","title":"ProductPrepaymentSettingsaf30","description":"Defines the prepayment settings for the product","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Whether the interest on prepayment is applied manual or automatic.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowance":{"type":"number","title":"ercFreeAllowance","description":"ERC free allowance in percentage"},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the future payments are allowed or not for this product (repayment transactions with entry date set in the future)","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"prepaymentAcceptance":{"title":"prepaymentAcceptance","description":"Shows whether the pre-payments are allowed or not for this product.","enum":["ACCEPT_PREPAYMENTS","NO_PREPAYMENTS"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product)","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"required":["futurePaymentsAcceptance"],"additionalProperties":true},"PrincipalPaymentProductSettingsaf30":{"type":"object","title":"PrincipalPaymentProductSettingsaf30","description":"Defines the principal payment settings constraints for the loans that will be created based on this product.","properties":{"amount":{"title":"amount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"defaultPrincipalRepaymentInterval":{"type":"integer","title":"defaultPrincipalRepaymentInterval","description":"How many repayments the principal has to be paid"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the settings, auto generated, unique"},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"If true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"If true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"title":"percentage","$ref":"#/$defs/DecimalConstraintsaf30"},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"ProductPenaltySettingsaf30":{"type":"object","title":"ProductPenaltySettingsaf30","description":"Defines the penalty settings for the product that will be used by the loan accounts based on this product","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The penalty calculation method","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"loanPenaltyGracePeriod":{"type":"integer","title":"loanPenaltyGracePeriod","description":"Number of days to wait before applying the loan penalty amounts"},"penaltyRate":{"title":"penaltyRate","$ref":"#/$defs/DecimalConstraintsaf30"}},"required":["loanPenaltyCalculationMethod"],"additionalProperties":true},"ProductRedrawSettingsaf30":{"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true},"LoanProductScheduleSettingsaf30":{"type":"object","title":"LoanProductScheduleSettingsaf30","description":"Defines the settings and constraints for schedule for the loans that are created based on this product.","properties":{"amortizationPeriod":{"title":"amortizationPeriod","$ref":"#/$defs/ProductAmortizationPeriodaf30"},"billingCycles":{"title":"billingCycles","$ref":"#/$defs/BillingCyclesProductSettingsaf30"},"defaultRepaymentPeriodCount":{"type":"integer","title":"defaultRepaymentPeriodCount","description":"Interval Repayment Methodology Settings."},"firstRepaymentDueDateOffset":{"title":"firstRepaymentDueDateOffset","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":" Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"interestAccrualSince":{"title":"interestAccrualSince","description":"Represents the moment the interest will start getting accrued.","enum":["DISBURSEMENT","DUE_DATE"]},"numInstallments":{"title":"numInstallments","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/PreviewScheduleSettingsaf30"},"repaymentMethod":{"title":"repaymentMethod","description":"The repayment method value","enum":["AMOUNT","INSTALLMENTS"]},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The frequency of the loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentReschedulingMethod":{"title":"repaymentReschedulingMethod","description":"The repayment rescheduling method used in calculations.","enum":["NONE","NEXT_WORKING_DAY","PREVIOUS_WORKING_DAY","EXTEND_SCHEDULE"]},"repaymentScheduleEditOptions":{"type":"array","title":"repaymentScheduleEditOptions","description":"Shows the properties from the repayment schedule can be edited.","items":{"enum":["ADJUST_PAYMENT_DATES","ADJUST_PRINCIPAL_PAYMENT_SCHEDULE","ADJUST_INTEREST_PAYMENT_SCHEDULE","ADJUST_FEE_PAYMENT_SCHEDULE","ADJUST_PENALTY_PAYMENT_SCHEDULE","ADJUST_NUMBER_OF_INSTALLMENTS","ADJUST_PAYMENT_HOLIDAYS"]}},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"roundingSettings":{"title":"roundingSettings","$ref":"#/$defs/RoundingSettingsaf30"},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The methodology used by this product to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true},"ProductAmortizationPeriodaf30":{"type":"object","title":"ProductAmortizationPeriodaf30","description":"It holds information about the loan product amortization period. The PMT is calculated as the loan would have [amortisationPeriod] instalments","properties":{"defaultValue":{"type":"integer","title":"defaultValue","description":"default value"},"maxValue":{"type":"integer","title":"maxValue","description":"max value"},"minValue":{"type":"integer","title":"minValue","description":"min value"}},"additionalProperties":true},"BillingCyclesProductSettingsaf30":{"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PreviewScheduleSettingsaf30":{"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true},"RoundingSettingsaf30":{"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true},"SecuritySettingsaf30":{"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true},"TaxSettingsaf30":{"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true},"DocumentTemplateaf30":{"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true}}};const schema12 = {"type":"object","title":"LoanProduct","description":"Represents a loan product.","properties":{"accountingSettings":{"title":"accountingSettings","$ref":"#/$defs/AccountingSettingsaf30"},"accountLinkSettings":{"title":"accountLinkSettings","$ref":"#/$defs/AccountLinkSettingsaf30"},"adjustInterestForFirstInstallment":{"type":"boolean","title":"adjustInterestForFirstInstallment","description":"`TRUE` if it is possible to adjust the interest for the first repayment when the first repayment period is different than the repayment frequency, `FALSE` otherwise."},"allowCustomRepaymentAllocation":{"type":"boolean","title":"allowCustomRepaymentAllocation","description":"`TRUE` if an additional payment may be allocated on the account, ignoring the default repayment allocation order, `FALSE` otherwise."},"arrearsSettings":{"title":"arrearsSettings","$ref":"#/$defs/ProductArrearsSettingsaf30"},"availabilitySettings":{"title":"availabilitySettings","$ref":"#/$defs/ProductAvailabilitySettingsaf30"},"category":{"title":"category","description":"The category of the loan product.","enum":["PERSONAL_LENDING","PURCHASE_FINANCING","RETAIL_MORTGAGES","SME_LENDING","COMMERCIAL","UNCATEGORIZED"]},"creationDate":{"type":"string","title":"creationDate","description":"The date the loan product was created.","format":"date-time"},"creditArrangementSettings":{"title":"creditArrangementSettings","$ref":"#/$defs/CreditArrangementSettingsaf30"},"currency":{"title":"currency","$ref":"#/$defs/Currencyaf30"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the loan product, it is auto generated, and unique."},"feesSettings":{"title":"feesSettings","$ref":"#/$defs/FeesSettingsaf30"},"fundingSettings":{"title":"fundingSettings","$ref":"#/$defs/FundingSettingsaf30"},"gracePeriodSettings":{"title":"gracePeriodSettings","$ref":"#/$defs/GracePeriodSettingsaf30"},"id":{"type":"string","title":"id","description":"The ID of the loan product, can be generated and customized, and must be unique."},"interestSettings":{"title":"interestSettings","$ref":"#/$defs/ProductInterestSettingsaf30"},"internalControls":{"title":"internalControls","$ref":"#/$defs/InternalControlsaf30"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last date the loan product was updated.","format":"date-time"},"loanAmountSettings":{"title":"loanAmountSettings","$ref":"#/$defs/LoanAmountSettingsaf30"},"name":{"type":"string","title":"name","description":"The name of the loan product."},"newAccountSettings":{"title":"newAccountSettings","$ref":"#/$defs/NewAccountSettingsaf30"},"notes":{"type":"string","title":"notes","description":"The notes or description of the loan product."},"offsetSettings":{"title":"offsetSettings","$ref":"#/$defs/OffsetSettingsaf30"},"paymentSettings":{"title":"paymentSettings","$ref":"#/$defs/PaymentSettingsaf30"},"penaltySettings":{"title":"penaltySettings","$ref":"#/$defs/ProductPenaltySettingsaf30"},"redrawSettings":{"title":"redrawSettings","$ref":"#/$defs/ProductRedrawSettingsaf30"},"scheduleSettings":{"title":"scheduleSettings","$ref":"#/$defs/LoanProductScheduleSettingsaf30"},"securitySettings":{"title":"securitySettings","$ref":"#/$defs/SecuritySettingsaf30"},"state":{"title":"state","description":"The current state of the loan product.","enum":["ACTIVE","INACTIVE"]},"taxSettings":{"title":"taxSettings","$ref":"#/$defs/TaxSettingsaf30"},"templates":{"type":"array","title":"templates","description":"The template documents of the loan product.","items":{"$ref":"#/$defs/DocumentTemplateaf30"}},"type":{"title":"type","description":"The type of the loan product.","enum":["FIXED_TERM_LOAN","DYNAMIC_TERM_LOAN","INTEREST_FREE_LOAN","TRANCHED_LOAN","REVOLVING_CREDIT","INTEREST_ONLY_EQUAL_INSTALLMENTS"]}},"required":["creditArrangementSettings","id","name","type"],"additionalProperties":true};const schema15 = {"type":"object","title":"AccountLinkSettingsaf30","description":"Defines the settings for account linking.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Shows whether the loan accounts created using this product can be linked to a savings account."},"linkableDepositProductKey":{"type":"string","title":"linkableDepositProductKey","description":"Loan accounts created for this product can only be linked the the savings accounts that use the savings product with this key. If null, the loan accounts for this product can be linked to any savings account."},"linkedAccountOptions":{"type":"array","title":"linkedAccountOptions","description":"A set of linked account options.","items":{"enum":["AUTO_LINK_ACCOUNTS","AUTO_CREATE_LINKED_ACCOUNTS"]},"uniqueItems":true},"settlementMethod":{"title":"settlementMethod","description":"Set the option of automated transfer that should be made from linked deposit accounts into loan accounts create from this product.","enum":["FULL_DUE_AMOUNTS","PARTIAL_DUE_AMOUNTS","NO_AUTOMATED_TRANSFERS"]}},"required":["enabled"],"additionalProperties":true};const schema21 = {"type":"object","title":"CreditArrangementSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"creditArrangementRequirement":{"title":"creditArrangementRequirement","description":"Shows whether accounts created after this product can/should be part of a line of credit.","enum":["OPTIONAL","REQUIRED","NOT_REQUIRED"]}},"additionalProperties":true};const schema22 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema47 = {"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true};const schema48 = {"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true};const schema56 = {"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true};const schema64 = {"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true};const schema65 = {"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true};const schema66 = {"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true};const schema13 = {"type":"object","title":"AccountingSettingsaf30","description":"Accounting settings, defines the accounting settings for the product.","properties":{"accountingMethod":{"title":"accountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","CASH","ACCRUAL"]},"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules for the product.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"interestAccrualCalculation":{"title":"interestAccrualCalculation","description":"The accounting interest calculation option selected for the product.","enum":["NONE","AGGREGATED_AMOUNT","BREAKDOWN_PER_ACCOUNT"]},"interestAccruedAccountingMethod":{"title":"interestAccruedAccountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","DAILY","END_OF_MONTH"]}},"required":["accountingMethod"],"additionalProperties":true};const schema14 = {"type":"object","title":"GLAccountingRuleaf30","description":"The GL accounting rule, it maps a financial resource with a GL account for a specific product (i.e loan or saving).","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the accounting rule, auto generated, unique."},"financialResource":{"title":"financialResource","description":"General Ledger Financial Resources used to setup the product accounting rules and determine the credit and debit accounts when logging journal entries","enum":["PORTFOLIO_CONTROL","FUND_SOURCE","WRITE_OFF_EXPENSE","INTEREST_INCOME","TAXES_PAYABLE","FEE_INCOME","PENALTY_INCOME","NEGATIVE_INTEREST_PAYABLE_RECEIVABLE","NEGATIVE_INTEREST_PAYABLE","INTEREST_RECEIVABLE","FEE_RECEIVABLE","PENALTY_RECEIVABLE","TAXES_RECEIVABLE","DEFERRED_INTERESTS_INCOME","DEFERRED_FEE_INCOME","DEFERRED_TAXES","DEPOSIT_REFERENCE","SAVINGS_CONTROL","INTEREST_EXPENSE","INTEREST_PAYABLE","NEGATIVE_INTEREST_INCOME","NEGATIVE_INTEREST_RECEIVABLE","OVERDRAFT_PORTFOLIO_CONTROL","OVERDRAFT_INTEREST_INCOME","OVERDRAFT_WRITE_OFF_EXPENSE","OVERDRAFT_INTEREST_RECEIVABLE","INTER_BRANCH_TRANSFER"]},"glAccountKey":{"type":"string","title":"glAccountKey","description":"The encoded key of the account that is mapped to the financialResource"},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The key of the transaction rule that uses this rule"}},"required":["financialResource","glAccountKey"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate12(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.accountingMethod === undefined) && (missing0 = "accountingMethod")){validate12.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountingMethod !== undefined){let data0 = data.accountingMethod;const _errs2 = errors;if(!(((data0 === "NONE") || (data0 === "CASH")) || (data0 === "ACCRUAL"))){validate12.errors = [{instancePath:instancePath+"/accountingMethod",schemaPath:"#/properties/accountingMethod/enum",keyword:"enum",params:{allowedValues: schema13.properties.accountingMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.accountingRules !== undefined){let data1 = data.accountingRules;const _errs3 = errors;if(errors === _errs3){if(Array.isArray(data1)){var valid1 = true;const len0 = data1.length;for(let i0=0; i0 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data0[i1], data0[j0])){validate16.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate16.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.branchSettings !== undefined){let data2 = data.branchSettings;const _errs5 = errors;const _errs6 = errors;if(errors === _errs6){if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.availableProductBranches !== undefined){let data3 = data2.availableProductBranches;const _errs9 = errors;if(errors === _errs9){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema38 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};const schema34 = {"type":"object","title":"InterestProductSettingsaf30","description":"The interest settings, defines constraints regarding interest that will be used on the loan account created based on this product.","properties":{"accrueInterestAfterMaturity":{"type":"boolean","title":"accrueInterestAfterMaturity","description":"If the product supports this option, specify if the interest should be accrued after the account maturity date"},"allowNegativeInterestRate":{"type":"boolean","title":"allowNegativeInterestRate","description":"Indicator whether the loan product allows negative values for interest rate or interest spread"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interval used for determining how often is interest charged","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestChargeFrequencyCount":{"type":"integer","title":"interestChargeFrequencyCount","description":"the count of units to apply over the interval"},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Interest spread + index interest rate can't be more than this amount (valid only for index interest rate products)."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Interest spread + index interest rate can't be less than this amount (valid only for index interest rate products)."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count"},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or (interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestRateTerms":{"title":"interestRateTerms","description":"The option for how is the interest rate determined when being accrued for an account","enum":["FIXED","TIERED","TIERED_PERIOD","TIERED_BAND"]},"interestRateTiers":{"type":"array","title":"interestRateTiers","description":"The list of interest rate tiers available for the current settings instance","items":{"$ref":"#/$defs/InterestRateTieraf30"}}},"additionalProperties":true};const schema36 = {"type":"object","title":"InterestRateTieraf30","description":"Used or TIERED interest rates, holds the values to define how the interest is computed","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"endingBalance":{"type":"number","title":"endingBalance","description":"The top-limit value for the account balance in order to determine if this tier is used or not"},"interestRate":{"type":"number","title":"interestRate","description":"The rate used for computing the interest for an account which has the balance less than the ending balance"}},"required":["interestRate"],"additionalProperties":true};function validate27(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accrueInterestAfterMaturity !== undefined){const _errs2 = errors;if(typeof data.accrueInterestAfterMaturity !== "boolean"){validate27.errors = [{instancePath:instancePath+"/accrueInterestAfterMaturity",schemaPath:"#/properties/accrueInterestAfterMaturity/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.allowNegativeInterestRate !== undefined){const _errs4 = errors;if(typeof data.allowNegativeInterestRate !== "boolean"){validate27.errors = [{instancePath:instancePath+"/allowNegativeInterestRate",schemaPath:"#/properties/allowNegativeInterestRate/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs6 = errors;if(typeof data.encodedKey !== "string"){validate27.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.indexSourceKey !== undefined){const _errs8 = errors;if(typeof data.indexSourceKey !== "string"){validate27.errors = [{instancePath:instancePath+"/indexSourceKey",schemaPath:"#/properties/indexSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.interestChargeFrequency !== undefined){const _errs10 = errors;let valid1;valid1 = false;for(const v0 of schema34.properties.interestChargeFrequency.enum){if(func0(data.interestChargeFrequency, v0)){valid1 = true;break;}}if(!valid1){validate27.errors = [{instancePath:instancePath+"/interestChargeFrequency",schemaPath:"#/properties/interestChargeFrequency/enum",keyword:"enum",params:{allowedValues: schema34.properties.interestChargeFrequency.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.interestChargeFrequencyCount !== undefined){let data5 = data.interestChargeFrequencyCount;const _errs11 = errors;if(!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){validate27.errors = [{instancePath:instancePath+"/interestChargeFrequencyCount",schemaPath:"#/properties/interestChargeFrequencyCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs11 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRate !== undefined){let data6 = data.interestRate;const _errs13 = errors;const _errs14 = errors;if(errors === _errs14){if(data6 && typeof data6 == "object" && !Array.isArray(data6)){if(data6.defaultValue !== undefined){let data7 = data6.defaultValue;const _errs17 = errors;if(!((typeof data7 == "number") && (isFinite(data7)))){validate27.errors = [{instancePath:instancePath+"/interestRate/defaultValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/defaultValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs17 === errors;}else {var valid3 = true;}if(valid3){if(data6.maxValue !== undefined){let data8 = data6.maxValue;const _errs19 = errors;if(!((typeof data8 == "number") && (isFinite(data8)))){validate27.errors = [{instancePath:instancePath+"/interestRate/maxValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/maxValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs19 === errors;}else {var valid3 = true;}if(valid3){if(data6.minValue !== undefined){let data9 = data6.minValue;const _errs21 = errors;if(!((typeof data9 == "number") && (isFinite(data9)))){validate27.errors = [{instancePath:instancePath+"/interestRate/minValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/minValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs21 === errors;}else {var valid3 = true;}}}}else {validate27.errors = [{instancePath:instancePath+"/interestRate",schemaPath:"#/$defs/DecimalIntervalaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateCeilingValue !== undefined){let data10 = data.interestRateCeilingValue;const _errs23 = errors;if(!((typeof data10 == "number") && (isFinite(data10)))){validate27.errors = [{instancePath:instancePath+"/interestRateCeilingValue",schemaPath:"#/properties/interestRateCeilingValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs23 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateFloorValue !== undefined){let data11 = data.interestRateFloorValue;const _errs25 = errors;if(!((typeof data11 == "number") && (isFinite(data11)))){validate27.errors = [{instancePath:instancePath+"/interestRateFloorValue",schemaPath:"#/properties/interestRateFloorValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs25 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateReviewCount !== undefined){let data12 = data.interestRateReviewCount;const _errs27 = errors;if(!(((typeof data12 == "number") && (!(data12 % 1) && !isNaN(data12))) && (isFinite(data12)))){validate27.errors = [{instancePath:instancePath+"/interestRateReviewCount",schemaPath:"#/properties/interestRateReviewCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs27 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateReviewUnit !== undefined){let data13 = data.interestRateReviewUnit;const _errs29 = errors;if(!(((data13 === "DAYS") || (data13 === "WEEKS")) || (data13 === "MONTHS"))){validate27.errors = [{instancePath:instancePath+"/interestRateReviewUnit",schemaPath:"#/properties/interestRateReviewUnit/enum",keyword:"enum",params:{allowedValues: schema34.properties.interestRateReviewUnit.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateSource !== undefined){let data14 = data.interestRateSource;const _errs30 = errors;if(!((data14 === "FIXED_INTEREST_RATE") || (data14 === "INDEX_INTEREST_RATE"))){validate27.errors = [{instancePath:instancePath+"/interestRateSource",schemaPath:"#/properties/interestRateSource/enum",keyword:"enum",params:{allowedValues: schema34.properties.interestRateSource.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs30 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateTerms !== undefined){let data15 = data.interestRateTerms;const _errs31 = errors;if(!((((data15 === "FIXED") || (data15 === "TIERED")) || (data15 === "TIERED_PERIOD")) || (data15 === "TIERED_BAND"))){validate27.errors = [{instancePath:instancePath+"/interestRateTerms",schemaPath:"#/properties/interestRateTerms/enum",keyword:"enum",params:{allowedValues: schema34.properties.interestRateTerms.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs31 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateTiers !== undefined){let data16 = data.interestRateTiers;const _errs32 = errors;if(errors === _errs32){if(Array.isArray(data16)){var valid4 = true;const len0 = data16.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true};const schema58 = {"type":"object","title":"ProductAmortizationPeriodaf30","description":"It holds information about the loan product amortization period. The PMT is calculated as the loan would have [amortisationPeriod] instalments","properties":{"defaultValue":{"type":"integer","title":"defaultValue","description":"default value"},"maxValue":{"type":"integer","title":"maxValue","description":"max value"},"minValue":{"type":"integer","title":"minValue","description":"min value"}},"additionalProperties":true};const schema59 = {"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema62 = {"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true};const schema63 = {"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true};function validate42(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.repaymentReschedulingMethod === undefined) && (missing0 = "repaymentReschedulingMethod")) || ((data.repaymentScheduleMethod === undefined) && (missing0 = "repaymentScheduleMethod"))) || ((data.scheduleDueDatesMethod === undefined) && (missing0 = "scheduleDueDatesMethod"))){validate42.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.defaultValue !== undefined){let data1 = data0.defaultValue;const _errs6 = errors;if(!(((typeof data1 == "number") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){validate42.errors = [{instancePath:instancePath+"/amortizationPeriod/defaultValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs6 === errors;}else {var valid2 = true;}if(valid2){if(data0.maxValue !== undefined){let data2 = data0.maxValue;const _errs8 = errors;if(!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){validate42.errors = [{instancePath:instancePath+"/amortizationPeriod/maxValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs8 === errors;}else {var valid2 = true;}if(valid2){if(data0.minValue !== undefined){let data3 = data0.minValue;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate42.errors = [{instancePath:instancePath+"/amortizationPeriod/minValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs10 === errors;}else {var valid2 = true;}}}}else {validate42.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycles !== undefined){let data4 = data.billingCycles;const _errs12 = errors;const _errs13 = errors;if(errors === _errs13){if(data4 && typeof data4 == "object" && !Array.isArray(data4)){if(data4.enabled !== undefined){const _errs16 = errors;if(typeof data4.enabled !== "boolean"){validate42.errors = [{instancePath:instancePath+"/billingCycles/enabled",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid4 = _errs16 === errors;}else {var valid4 = true;}if(valid4){if(data4.startDays !== undefined){let data6 = data4.startDays;const _errs18 = errors;if(errors === _errs18){if(Array.isArray(data6)){var valid5 = true;const len0 = data6.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data6[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate42.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate42.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid4 = _errs18 === errors;}else {var valid4 = true;}}}else {validate42.errors = [{instancePath:instancePath+"/billingCycles",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultRepaymentPeriodCount !== undefined){let data8 = data.defaultRepaymentPeriodCount;const _errs22 = errors;if(!(((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){validate42.errors = [{instancePath:instancePath+"/defaultRepaymentPeriodCount",schemaPath:"#/properties/defaultRepaymentPeriodCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.firstRepaymentDueDateOffset !== undefined){let data9 = data.firstRepaymentDueDateOffset;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data9 && typeof data9 == "object" && !Array.isArray(data9)){if(data9.defaultValue !== undefined){let data10 = data9.defaultValue;const _errs28 = errors;if(!(((typeof data10 == "number") && (!(data10 % 1) && !isNaN(data10))) && (isFinite(data10)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/defaultValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs28 === errors;}else {var valid8 = true;}if(valid8){if(data9.encodedKey !== undefined){const _errs30 = errors;if(typeof data9.encodedKey !== "string"){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/encodedKey",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid8 = _errs30 === errors;}else {var valid8 = true;}if(valid8){if(data9.maxValue !== undefined){let data12 = data9.maxValue;const _errs32 = errors;if(!(((typeof data12 == "number") && (!(data12 % 1) && !isNaN(data12))) && (isFinite(data12)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/maxValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs32 === errors;}else {var valid8 = true;}if(valid8){if(data9.minValue !== undefined){let data13 = data9.minValue;const _errs34 = errors;if(!(((typeof data13 == "number") && (!(data13 % 1) && !isNaN(data13))) && (isFinite(data13)))){validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/minValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs34 === errors;}else {var valid8 = true;}}}}}else {validate42.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data14 = data.fixedDaysOfMonth;const _errs36 = errors;if(errors === _errs36){if(Array.isArray(data14)){var valid9 = true;const len1 = data14.length;for(let i2=0; i2 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data4[i1], data4[j0])){validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs11 === errors;}else {var valid2 = true;}if(valid2){if(data1.settlementMethod !== undefined){let data6 = data1.settlementMethod;const _errs14 = errors;if(!(((data6 === "FULL_DUE_AMOUNTS") || (data6 === "PARTIAL_DUE_AMOUNTS")) || (data6 === "NO_AUTOMATED_TRANSFERS"))){validate11.errors = [{instancePath:instancePath+"/accountLinkSettings/settlementMethod",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/settlementMethod/enum",keyword:"enum",params:{allowedValues: schema15.properties.settlementMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/accountLinkSettings",schemaPath:"#/$defs/AccountLinkSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs3 === errors;}else {var valid0 = true;}if(valid0){if(data.adjustInterestForFirstInstallment !== undefined){const _errs15 = errors;if(typeof data.adjustInterestForFirstInstallment !== "boolean"){validate11.errors = [{instancePath:instancePath+"/adjustInterestForFirstInstallment",schemaPath:"#/properties/adjustInterestForFirstInstallment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.allowCustomRepaymentAllocation !== undefined){const _errs17 = errors;if(typeof data.allowCustomRepaymentAllocation !== "boolean"){validate11.errors = [{instancePath:instancePath+"/allowCustomRepaymentAllocation",schemaPath:"#/properties/allowCustomRepaymentAllocation/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.arrearsSettings !== undefined){const _errs19 = errors;if(!(validate14(data.arrearsSettings, {instancePath:instancePath+"/arrearsSettings",parentData:data,parentDataProperty:"arrearsSettings",rootData}))){vErrors = vErrors === null ? validate14.errors : vErrors.concat(validate14.errors);errors = vErrors.length;}var valid0 = _errs19 === errors;}else {var valid0 = true;}if(valid0){if(data.availabilitySettings !== undefined){const _errs20 = errors;if(!(validate16(data.availabilitySettings, {instancePath:instancePath+"/availabilitySettings",parentData:data,parentDataProperty:"availabilitySettings",rootData}))){vErrors = vErrors === null ? validate16.errors : vErrors.concat(validate16.errors);errors = vErrors.length;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.category !== undefined){const _errs21 = errors;let valid5;valid5 = false;for(const v0 of schema12.properties.category.enum){if(func0(data.category, v0)){valid5 = true;break;}}if(!valid5){validate11.errors = [{instancePath:instancePath+"/category",schemaPath:"#/properties/category/enum",keyword:"enum",params:{allowedValues: schema12.properties.category.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs21 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs22 = errors;if(errors === _errs22){if(errors === _errs22){if(!(typeof data.creationDate === "string")){validate11.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.creditArrangementSettings !== undefined){let data13 = data.creditArrangementSettings;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data13 && typeof data13 == "object" && !Array.isArray(data13)){if(data13.creditArrangementRequirement !== undefined){let data14 = data13.creditArrangementRequirement;if(!(((data14 === "OPTIONAL") || (data14 === "REQUIRED")) || (data14 === "NOT_REQUIRED"))){validate11.errors = [{instancePath:instancePath+"/creditArrangementSettings/creditArrangementRequirement",schemaPath:"#/$defs/CreditArrangementSettingsaf30/properties/creditArrangementRequirement/enum",keyword:"enum",params:{allowedValues: schema21.properties.creditArrangementRequirement.enum},message:"must be equal to one of the allowed values"}];return false;}}}else {validate11.errors = [{instancePath:instancePath+"/creditArrangementSettings",schemaPath:"#/$defs/CreditArrangementSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.currency !== undefined){let data15 = data.currency;const _errs29 = errors;const _errs30 = errors;if(errors === _errs30){if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.code !== undefined){const _errs33 = errors;let valid10;valid10 = false;for(const v1 of schema22.properties.code.enum){if(func0(data15.code, v1)){valid10 = true;break;}}if(!valid10){validate11.errors = [{instancePath:instancePath+"/currency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema22.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid9 = _errs33 === errors;}else {var valid9 = true;}if(valid9){if(data15.currencyCode !== undefined){const _errs34 = errors;if(typeof data15.currencyCode !== "string"){validate11.errors = [{instancePath:instancePath+"/currency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid9 = _errs34 === errors;}else {var valid9 = true;}}}else {validate11.errors = [{instancePath:instancePath+"/currency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs36 = errors;if(typeof data.encodedKey !== "string"){validate11.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs36 === errors;}else {var valid0 = true;}if(valid0){if(data.feesSettings !== undefined){const _errs38 = errors;if(!(validate18(data.feesSettings, {instancePath:instancePath+"/feesSettings",parentData:data,parentDataProperty:"feesSettings",rootData}))){vErrors = vErrors === null ? validate18.errors : vErrors.concat(validate18.errors);errors = vErrors.length;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.fundingSettings !== undefined){const _errs39 = errors;if(!(validate22(data.fundingSettings, {instancePath:instancePath+"/fundingSettings",parentData:data,parentDataProperty:"fundingSettings",rootData}))){vErrors = vErrors === null ? validate22.errors : vErrors.concat(validate22.errors);errors = vErrors.length;}var valid0 = _errs39 === errors;}else {var valid0 = true;}if(valid0){if(data.gracePeriodSettings !== undefined){const _errs40 = errors;if(!(validate24(data.gracePeriodSettings, {instancePath:instancePath+"/gracePeriodSettings",parentData:data,parentDataProperty:"gracePeriodSettings",rootData}))){vErrors = vErrors === null ? validate24.errors : vErrors.concat(validate24.errors);errors = vErrors.length;}var valid0 = _errs40 === errors;}else {var valid0 = true;}if(valid0){if(data.id !== undefined){const _errs41 = errors;if(typeof data.id !== "string"){validate11.errors = [{instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.interestSettings !== undefined){const _errs43 = errors;if(!(validate26(data.interestSettings, {instancePath:instancePath+"/interestSettings",parentData:data,parentDataProperty:"interestSettings",rootData}))){vErrors = vErrors === null ? validate26.errors : vErrors.concat(validate26.errors);errors = vErrors.length;}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.internalControls !== undefined){const _errs44 = errors;if(!(validate32(data.internalControls, {instancePath:instancePath+"/internalControls",parentData:data,parentDataProperty:"internalControls",rootData}))){vErrors = vErrors === null ? validate32.errors : vErrors.concat(validate32.errors);errors = vErrors.length;}var valid0 = _errs44 === errors;}else {var valid0 = true;}if(valid0){if(data.lastModifiedDate !== undefined){const _errs45 = errors;if(errors === _errs45){if(errors === _errs45){if(!(typeof data.lastModifiedDate === "string")){validate11.errors = [{instancePath:instancePath+"/lastModifiedDate",schemaPath:"#/properties/lastModifiedDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAmountSettings !== undefined){const _errs47 = errors;if(!(validate34(data.loanAmountSettings, {instancePath:instancePath+"/loanAmountSettings",parentData:data,parentDataProperty:"loanAmountSettings",rootData}))){vErrors = vErrors === null ? validate34.errors : vErrors.concat(validate34.errors);errors = vErrors.length;}var valid0 = _errs47 === errors;}else {var valid0 = true;}if(valid0){if(data.name !== undefined){const _errs48 = errors;if(typeof data.name !== "string"){validate11.errors = [{instancePath:instancePath+"/name",schemaPath:"#/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.newAccountSettings !== undefined){let data28 = data.newAccountSettings;const _errs50 = errors;const _errs51 = errors;if(errors === _errs51){if(data28 && typeof data28 == "object" && !Array.isArray(data28)){let missing2;if((((data28.accountInitialState === undefined) && (missing2 = "accountInitialState")) || ((data28.idGeneratorType === undefined) && (missing2 = "idGeneratorType"))) || ((data28.idPattern === undefined) && (missing2 = "idPattern"))){validate11.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/required",keyword:"required",params:{missingProperty: missing2},message:"must have required property '"+missing2+"'"}];return false;}else {if(data28.accountInitialState !== undefined){const _errs54 = errors;let valid13;valid13 = false;for(const v2 of schema47.properties.accountInitialState.enum){if(func0(data28.accountInitialState, v2)){valid13 = true;break;}}if(!valid13){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/accountInitialState",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/accountInitialState/enum",keyword:"enum",params:{allowedValues: schema47.properties.accountInitialState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs54 === errors;}else {var valid12 = true;}if(valid12){if(data28.idGeneratorType !== undefined){let data30 = data28.idGeneratorType;const _errs55 = errors;if(!((data30 === "INCREMENTAL_NUMBER") || (data30 === "RANDOM_PATTERN"))){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/idGeneratorType",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idGeneratorType/enum",keyword:"enum",params:{allowedValues: schema47.properties.idGeneratorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs55 === errors;}else {var valid12 = true;}if(valid12){if(data28.idPattern !== undefined){const _errs56 = errors;if(typeof data28.idPattern !== "string"){validate11.errors = [{instancePath:instancePath+"/newAccountSettings/idPattern",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idPattern/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid12 = _errs56 === errors;}else {var valid12 = true;}}}}}else {validate11.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.notes !== undefined){const _errs58 = errors;if(typeof data.notes !== "string"){validate11.errors = [{instancePath:instancePath+"/notes",schemaPath:"#/properties/notes/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.offsetSettings !== undefined){let data33 = data.offsetSettings;const _errs60 = errors;const _errs61 = errors;if(errors === _errs61){if(data33 && typeof data33 == "object" && !Array.isArray(data33)){if(data33.allowOffset !== undefined){if(typeof data33.allowOffset !== "boolean"){validate11.errors = [{instancePath:instancePath+"/offsetSettings/allowOffset",schemaPath:"#/$defs/OffsetSettingsaf30/properties/allowOffset/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}else {validate11.errors = [{instancePath:instancePath+"/offsetSettings",schemaPath:"#/$defs/OffsetSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.paymentSettings !== undefined){const _errs66 = errors;if(!(validate36(data.paymentSettings, {instancePath:instancePath+"/paymentSettings",parentData:data,parentDataProperty:"paymentSettings",rootData}))){vErrors = vErrors === null ? validate36.errors : vErrors.concat(validate36.errors);errors = vErrors.length;}var valid0 = _errs66 === errors;}else {var valid0 = true;}if(valid0){if(data.penaltySettings !== undefined){const _errs67 = errors;if(!(validate40(data.penaltySettings, {instancePath:instancePath+"/penaltySettings",parentData:data,parentDataProperty:"penaltySettings",rootData}))){vErrors = vErrors === null ? validate40.errors : vErrors.concat(validate40.errors);errors = vErrors.length;}var valid0 = _errs67 === errors;}else {var valid0 = true;}if(valid0){if(data.redrawSettings !== undefined){let data37 = data.redrawSettings;const _errs68 = errors;const _errs69 = errors;if(errors === _errs69){if(data37 && typeof data37 == "object" && !Array.isArray(data37)){let missing3;if((data37.allowRedraw === undefined) && (missing3 = "allowRedraw")){validate11.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/required",keyword:"required",params:{missingProperty: missing3},message:"must have required property '"+missing3+"'"}];return false;}else {if(data37.allowRedraw !== undefined){if(typeof data37.allowRedraw !== "boolean"){validate11.errors = [{instancePath:instancePath+"/redrawSettings/allowRedraw",schemaPath:"#/$defs/ProductRedrawSettingsaf30/properties/allowRedraw/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}}else {validate11.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs68 === errors;}else {var valid0 = true;}if(valid0){if(data.scheduleSettings !== undefined){const _errs74 = errors;if(!(validate42(data.scheduleSettings, {instancePath:instancePath+"/scheduleSettings",parentData:data,parentDataProperty:"scheduleSettings",rootData}))){vErrors = vErrors === null ? validate42.errors : vErrors.concat(validate42.errors);errors = vErrors.length;}var valid0 = _errs74 === errors;}else {var valid0 = true;}if(valid0){if(data.securitySettings !== undefined){let data40 = data.securitySettings;const _errs75 = errors;const _errs76 = errors;if(errors === _errs76){if(data40 && typeof data40 == "object" && !Array.isArray(data40)){if(data40.isCollateralEnabled !== undefined){const _errs79 = errors;if(typeof data40.isCollateralEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/securitySettings/isCollateralEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isCollateralEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs79 === errors;}else {var valid19 = true;}if(valid19){if(data40.isGuarantorsEnabled !== undefined){const _errs81 = errors;if(typeof data40.isGuarantorsEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/securitySettings/isGuarantorsEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isGuarantorsEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs81 === errors;}else {var valid19 = true;}if(valid19){if(data40.requiredGuaranties !== undefined){let data43 = data40.requiredGuaranties;const _errs83 = errors;if(!((typeof data43 == "number") && (isFinite(data43)))){validate11.errors = [{instancePath:instancePath+"/securitySettings/requiredGuaranties",schemaPath:"#/$defs/SecuritySettingsaf30/properties/requiredGuaranties/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid19 = _errs83 === errors;}else {var valid19 = true;}}}}else {validate11.errors = [{instancePath:instancePath+"/securitySettings",schemaPath:"#/$defs/SecuritySettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs75 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){let data44 = data.state;const _errs85 = errors;if(!((data44 === "ACTIVE") || (data44 === "INACTIVE"))){validate11.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema12.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs85 === errors;}else {var valid0 = true;}if(valid0){if(data.taxSettings !== undefined){let data45 = data.taxSettings;const _errs86 = errors;const _errs87 = errors;if(errors === _errs87){if(data45 && typeof data45 == "object" && !Array.isArray(data45)){if(data45.taxCalculationMethod !== undefined){let data46 = data45.taxCalculationMethod;const _errs90 = errors;if(!((data46 === "INCLUSIVE") || (data46 === "EXCLUSIVE"))){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxCalculationMethod",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxCalculationMethod/enum",keyword:"enum",params:{allowedValues: schema65.properties.taxCalculationMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid21 = _errs90 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnFeesEnabled !== undefined){const _errs91 = errors;if(typeof data45.taxesOnFeesEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnFeesEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnFeesEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs91 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnInterestEnabled !== undefined){const _errs93 = errors;if(typeof data45.taxesOnInterestEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnInterestEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnInterestEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs93 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnPenaltyEnabled !== undefined){const _errs95 = errors;if(typeof data45.taxesOnPenaltyEnabled !== "boolean"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxesOnPenaltyEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnPenaltyEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs95 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxSourceKey !== undefined){const _errs97 = errors;if(typeof data45.taxSourceKey !== "string"){validate11.errors = [{instancePath:instancePath+"/taxSettings/taxSourceKey",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid21 = _errs97 === errors;}else {var valid21 = true;}}}}}}else {validate11.errors = [{instancePath:instancePath+"/taxSettings",schemaPath:"#/$defs/TaxSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs86 === errors;}else {var valid0 = true;}if(valid0){if(data.templates !== undefined){let data51 = data.templates;const _errs99 = errors;if(errors === _errs99){if(Array.isArray(data51)){var valid22 = true;const len1 = data51.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true},"BillingCyclesProductSettingsaf30":{"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PreviewScheduleSettingsaf30":{"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true},"RoundingSettingsaf30":{"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true},"SecuritySettingsaf30":{"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true},"TaxSettingsaf30":{"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true},"DocumentTemplateaf30":{"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true}}};const schema14 = {"type":"object","title":"AccountLinkSettingsaf30","description":"Defines the settings for account linking.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Shows whether the loan accounts created using this product can be linked to a savings account."},"linkableDepositProductKey":{"type":"string","title":"linkableDepositProductKey","description":"Loan accounts created for this product can only be linked the the savings accounts that use the savings product with this key. If null, the loan accounts for this product can be linked to any savings account."},"linkedAccountOptions":{"type":"array","title":"linkedAccountOptions","description":"A set of linked account options.","items":{"enum":["AUTO_LINK_ACCOUNTS","AUTO_CREATE_LINKED_ACCOUNTS"]},"uniqueItems":true},"settlementMethod":{"title":"settlementMethod","description":"Set the option of automated transfer that should be made from linked deposit accounts into loan accounts create from this product.","enum":["FULL_DUE_AMOUNTS","PARTIAL_DUE_AMOUNTS","NO_AUTOMATED_TRANSFERS"]}},"required":["enabled"],"additionalProperties":true};const schema20 = {"type":"object","title":"CreditArrangementSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"creditArrangementRequirement":{"title":"creditArrangementRequirement","description":"Shows whether accounts created after this product can/should be part of a line of credit.","enum":["OPTIONAL","REQUIRED","NOT_REQUIRED"]}},"additionalProperties":true};const schema21 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema44 = {"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true};const schema45 = {"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true};const schema53 = {"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true};const schema60 = {"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true};const schema61 = {"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true};const schema62 = {"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true};const schema12 = {"type":"object","title":"AccountingSettingsaf30","description":"Accounting settings, defines the accounting settings for the product.","properties":{"accountingMethod":{"title":"accountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","CASH","ACCRUAL"]},"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules for the product.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"interestAccrualCalculation":{"title":"interestAccrualCalculation","description":"The accounting interest calculation option selected for the product.","enum":["NONE","AGGREGATED_AMOUNT","BREAKDOWN_PER_ACCOUNT"]},"interestAccruedAccountingMethod":{"title":"interestAccruedAccountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","DAILY","END_OF_MONTH"]}},"required":["accountingMethod"],"additionalProperties":true};const schema13 = {"type":"object","title":"GLAccountingRuleaf30","description":"The GL accounting rule, it maps a financial resource with a GL account for a specific product (i.e loan or saving).","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the accounting rule, auto generated, unique."},"financialResource":{"title":"financialResource","description":"General Ledger Financial Resources used to setup the product accounting rules and determine the credit and debit accounts when logging journal entries","enum":["PORTFOLIO_CONTROL","FUND_SOURCE","WRITE_OFF_EXPENSE","INTEREST_INCOME","TAXES_PAYABLE","FEE_INCOME","PENALTY_INCOME","NEGATIVE_INTEREST_PAYABLE_RECEIVABLE","NEGATIVE_INTEREST_PAYABLE","INTEREST_RECEIVABLE","FEE_RECEIVABLE","PENALTY_RECEIVABLE","TAXES_RECEIVABLE","DEFERRED_INTERESTS_INCOME","DEFERRED_FEE_INCOME","DEFERRED_TAXES","DEPOSIT_REFERENCE","SAVINGS_CONTROL","INTEREST_EXPENSE","INTEREST_PAYABLE","NEGATIVE_INTEREST_INCOME","NEGATIVE_INTEREST_RECEIVABLE","OVERDRAFT_PORTFOLIO_CONTROL","OVERDRAFT_INTEREST_INCOME","OVERDRAFT_WRITE_OFF_EXPENSE","OVERDRAFT_INTEREST_RECEIVABLE","INTER_BRANCH_TRANSFER"]},"glAccountKey":{"type":"string","title":"glAccountKey","description":"The encoded key of the account that is mapped to the financialResource"},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The key of the transaction rule that uses this rule"}},"required":["financialResource","glAccountKey"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.accountingMethod === undefined) && (missing0 = "accountingMethod")){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountingMethod !== undefined){let data0 = data.accountingMethod;const _errs2 = errors;if(!(((data0 === "NONE") || (data0 === "CASH")) || (data0 === "ACCRUAL"))){validate11.errors = [{instancePath:instancePath+"/accountingMethod",schemaPath:"#/properties/accountingMethod/enum",keyword:"enum",params:{allowedValues: schema12.properties.accountingMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.accountingRules !== undefined){let data1 = data.accountingRules;const _errs3 = errors;if(errors === _errs3){if(Array.isArray(data1)){var valid1 = true;const len0 = data1.length;for(let i0=0; i0 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data0[i1], data0[j0])){validate15.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate15.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.branchSettings !== undefined){let data2 = data.branchSettings;const _errs5 = errors;const _errs6 = errors;if(errors === _errs6){if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.availableProductBranches !== undefined){let data3 = data2.availableProductBranches;const _errs9 = errors;if(errors === _errs9){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true};const schema55 = {"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema58 = {"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true};const schema59 = {"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true};function validate41(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.repaymentReschedulingMethod === undefined) && (missing0 = "repaymentReschedulingMethod")) || ((data.repaymentScheduleMethod === undefined) && (missing0 = "repaymentScheduleMethod"))) || ((data.scheduleDueDatesMethod === undefined) && (missing0 = "scheduleDueDatesMethod"))){validate41.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.billingCycles !== undefined){let data0 = data.billingCycles;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.enabled !== undefined){const _errs6 = errors;if(typeof data0.enabled !== "boolean"){validate41.errors = [{instancePath:instancePath+"/billingCycles/enabled",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid2 = _errs6 === errors;}else {var valid2 = true;}if(valid2){if(data0.startDays !== undefined){let data2 = data0.startDays;const _errs8 = errors;if(errors === _errs8){if(Array.isArray(data2)){var valid3 = true;const len0 = data2.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data2[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate41.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate41.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs8 === errors;}else {var valid2 = true;}}}else {validate41.errors = [{instancePath:instancePath+"/billingCycles",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultRepaymentPeriodCount !== undefined){let data4 = data.defaultRepaymentPeriodCount;const _errs12 = errors;if(!(((typeof data4 == "number") && (!(data4 % 1) && !isNaN(data4))) && (isFinite(data4)))){validate41.errors = [{instancePath:instancePath+"/defaultRepaymentPeriodCount",schemaPath:"#/properties/defaultRepaymentPeriodCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.firstRepaymentDueDateOffset !== undefined){let data5 = data.firstRepaymentDueDateOffset;const _errs14 = errors;const _errs15 = errors;if(errors === _errs15){if(data5 && typeof data5 == "object" && !Array.isArray(data5)){if(data5.defaultValue !== undefined){let data6 = data5.defaultValue;const _errs18 = errors;if(!(((typeof data6 == "number") && (!(data6 % 1) && !isNaN(data6))) && (isFinite(data6)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/defaultValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs18 === errors;}else {var valid6 = true;}if(valid6){if(data5.encodedKey !== undefined){const _errs20 = errors;if(typeof data5.encodedKey !== "string"){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/encodedKey",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid6 = _errs20 === errors;}else {var valid6 = true;}if(valid6){if(data5.maxValue !== undefined){let data8 = data5.maxValue;const _errs22 = errors;if(!(((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/maxValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs22 === errors;}else {var valid6 = true;}if(valid6){if(data5.minValue !== undefined){let data9 = data5.minValue;const _errs24 = errors;if(!(((typeof data9 == "number") && (!(data9 % 1) && !isNaN(data9))) && (isFinite(data9)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/minValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid6 = _errs24 === errors;}else {var valid6 = true;}}}}}else {validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs14 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data10 = data.fixedDaysOfMonth;const _errs26 = errors;if(errors === _errs26){if(Array.isArray(data10)){var valid7 = true;const len1 = data10.length;for(let i2=0; i2 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data4[i1], data4[j0])){validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs11 === errors;}else {var valid2 = true;}if(valid2){if(data1.settlementMethod !== undefined){let data6 = data1.settlementMethod;const _errs14 = errors;if(!(((data6 === "FULL_DUE_AMOUNTS") || (data6 === "PARTIAL_DUE_AMOUNTS")) || (data6 === "NO_AUTOMATED_TRANSFERS"))){validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/settlementMethod",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/settlementMethod/enum",keyword:"enum",params:{allowedValues: schema14.properties.settlementMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/accountLinkSettings",schemaPath:"#/$defs/AccountLinkSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs3 === errors;}else {var valid0 = true;}if(valid0){if(data.adjustInterestForFirstInstallment !== undefined){const _errs15 = errors;if(typeof data.adjustInterestForFirstInstallment !== "boolean"){validate10.errors = [{instancePath:instancePath+"/adjustInterestForFirstInstallment",schemaPath:"#/properties/adjustInterestForFirstInstallment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.allowCustomRepaymentAllocation !== undefined){const _errs17 = errors;if(typeof data.allowCustomRepaymentAllocation !== "boolean"){validate10.errors = [{instancePath:instancePath+"/allowCustomRepaymentAllocation",schemaPath:"#/properties/allowCustomRepaymentAllocation/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.arrearsSettings !== undefined){const _errs19 = errors;if(!(validate13(data.arrearsSettings, {instancePath:instancePath+"/arrearsSettings",parentData:data,parentDataProperty:"arrearsSettings",rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}var valid0 = _errs19 === errors;}else {var valid0 = true;}if(valid0){if(data.availabilitySettings !== undefined){const _errs20 = errors;if(!(validate15(data.availabilitySettings, {instancePath:instancePath+"/availabilitySettings",parentData:data,parentDataProperty:"availabilitySettings",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.category !== undefined){const _errs21 = errors;let valid5;valid5 = false;for(const v0 of schema11.properties.category.enum){if(func0(data.category, v0)){valid5 = true;break;}}if(!valid5){validate10.errors = [{instancePath:instancePath+"/category",schemaPath:"#/properties/category/enum",keyword:"enum",params:{allowedValues: schema11.properties.category.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs21 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs22 = errors;if(errors === _errs22){if(errors === _errs22){if(!(typeof data.creationDate === "string")){validate10.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.creditArrangementSettings !== undefined){let data13 = data.creditArrangementSettings;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data13 && typeof data13 == "object" && !Array.isArray(data13)){if(data13.creditArrangementRequirement !== undefined){let data14 = data13.creditArrangementRequirement;if(!(((data14 === "OPTIONAL") || (data14 === "REQUIRED")) || (data14 === "NOT_REQUIRED"))){validate10.errors = [{instancePath:instancePath+"/creditArrangementSettings/creditArrangementRequirement",schemaPath:"#/$defs/CreditArrangementSettingsaf30/properties/creditArrangementRequirement/enum",keyword:"enum",params:{allowedValues: schema20.properties.creditArrangementRequirement.enum},message:"must be equal to one of the allowed values"}];return false;}}}else {validate10.errors = [{instancePath:instancePath+"/creditArrangementSettings",schemaPath:"#/$defs/CreditArrangementSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.currency !== undefined){let data15 = data.currency;const _errs29 = errors;const _errs30 = errors;if(errors === _errs30){if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.code !== undefined){const _errs33 = errors;let valid10;valid10 = false;for(const v1 of schema21.properties.code.enum){if(func0(data15.code, v1)){valid10 = true;break;}}if(!valid10){validate10.errors = [{instancePath:instancePath+"/currency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema21.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid9 = _errs33 === errors;}else {var valid9 = true;}if(valid9){if(data15.currencyCode !== undefined){const _errs34 = errors;if(typeof data15.currencyCode !== "string"){validate10.errors = [{instancePath:instancePath+"/currency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid9 = _errs34 === errors;}else {var valid9 = true;}}}else {validate10.errors = [{instancePath:instancePath+"/currency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs36 = errors;if(typeof data.encodedKey !== "string"){validate10.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs36 === errors;}else {var valid0 = true;}if(valid0){if(data.feesSettings !== undefined){const _errs38 = errors;if(!(validate17(data.feesSettings, {instancePath:instancePath+"/feesSettings",parentData:data,parentDataProperty:"feesSettings",rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.fundingSettings !== undefined){const _errs39 = errors;if(!(validate21(data.fundingSettings, {instancePath:instancePath+"/fundingSettings",parentData:data,parentDataProperty:"fundingSettings",rootData}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}var valid0 = _errs39 === errors;}else {var valid0 = true;}if(valid0){if(data.gracePeriodSettings !== undefined){const _errs40 = errors;if(!(validate23(data.gracePeriodSettings, {instancePath:instancePath+"/gracePeriodSettings",parentData:data,parentDataProperty:"gracePeriodSettings",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}var valid0 = _errs40 === errors;}else {var valid0 = true;}if(valid0){if(data.id !== undefined){const _errs41 = errors;if(typeof data.id !== "string"){validate10.errors = [{instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.interestSettings !== undefined){const _errs43 = errors;if(!(validate25(data.interestSettings, {instancePath:instancePath+"/interestSettings",parentData:data,parentDataProperty:"interestSettings",rootData}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.internalControls !== undefined){const _errs44 = errors;if(!(validate31(data.internalControls, {instancePath:instancePath+"/internalControls",parentData:data,parentDataProperty:"internalControls",rootData}))){vErrors = vErrors === null ? validate31.errors : vErrors.concat(validate31.errors);errors = vErrors.length;}var valid0 = _errs44 === errors;}else {var valid0 = true;}if(valid0){if(data.lastModifiedDate !== undefined){const _errs45 = errors;if(errors === _errs45){if(errors === _errs45){if(!(typeof data.lastModifiedDate === "string")){validate10.errors = [{instancePath:instancePath+"/lastModifiedDate",schemaPath:"#/properties/lastModifiedDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAmountSettings !== undefined){const _errs47 = errors;if(!(validate33(data.loanAmountSettings, {instancePath:instancePath+"/loanAmountSettings",parentData:data,parentDataProperty:"loanAmountSettings",rootData}))){vErrors = vErrors === null ? validate33.errors : vErrors.concat(validate33.errors);errors = vErrors.length;}var valid0 = _errs47 === errors;}else {var valid0 = true;}if(valid0){if(data.name !== undefined){const _errs48 = errors;if(typeof data.name !== "string"){validate10.errors = [{instancePath:instancePath+"/name",schemaPath:"#/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.newAccountSettings !== undefined){let data28 = data.newAccountSettings;const _errs50 = errors;const _errs51 = errors;if(errors === _errs51){if(data28 && typeof data28 == "object" && !Array.isArray(data28)){let missing2;if((((data28.accountInitialState === undefined) && (missing2 = "accountInitialState")) || ((data28.idGeneratorType === undefined) && (missing2 = "idGeneratorType"))) || ((data28.idPattern === undefined) && (missing2 = "idPattern"))){validate10.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/required",keyword:"required",params:{missingProperty: missing2},message:"must have required property '"+missing2+"'"}];return false;}else {if(data28.accountInitialState !== undefined){const _errs54 = errors;let valid13;valid13 = false;for(const v2 of schema44.properties.accountInitialState.enum){if(func0(data28.accountInitialState, v2)){valid13 = true;break;}}if(!valid13){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/accountInitialState",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/accountInitialState/enum",keyword:"enum",params:{allowedValues: schema44.properties.accountInitialState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs54 === errors;}else {var valid12 = true;}if(valid12){if(data28.idGeneratorType !== undefined){let data30 = data28.idGeneratorType;const _errs55 = errors;if(!((data30 === "INCREMENTAL_NUMBER") || (data30 === "RANDOM_PATTERN"))){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/idGeneratorType",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idGeneratorType/enum",keyword:"enum",params:{allowedValues: schema44.properties.idGeneratorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs55 === errors;}else {var valid12 = true;}if(valid12){if(data28.idPattern !== undefined){const _errs56 = errors;if(typeof data28.idPattern !== "string"){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/idPattern",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idPattern/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid12 = _errs56 === errors;}else {var valid12 = true;}}}}}else {validate10.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.notes !== undefined){const _errs58 = errors;if(typeof data.notes !== "string"){validate10.errors = [{instancePath:instancePath+"/notes",schemaPath:"#/properties/notes/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.offsetSettings !== undefined){let data33 = data.offsetSettings;const _errs60 = errors;const _errs61 = errors;if(errors === _errs61){if(data33 && typeof data33 == "object" && !Array.isArray(data33)){if(data33.allowOffset !== undefined){if(typeof data33.allowOffset !== "boolean"){validate10.errors = [{instancePath:instancePath+"/offsetSettings/allowOffset",schemaPath:"#/$defs/OffsetSettingsaf30/properties/allowOffset/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}else {validate10.errors = [{instancePath:instancePath+"/offsetSettings",schemaPath:"#/$defs/OffsetSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.paymentSettings !== undefined){const _errs66 = errors;if(!(validate35(data.paymentSettings, {instancePath:instancePath+"/paymentSettings",parentData:data,parentDataProperty:"paymentSettings",rootData}))){vErrors = vErrors === null ? validate35.errors : vErrors.concat(validate35.errors);errors = vErrors.length;}var valid0 = _errs66 === errors;}else {var valid0 = true;}if(valid0){if(data.penaltySettings !== undefined){const _errs67 = errors;if(!(validate39(data.penaltySettings, {instancePath:instancePath+"/penaltySettings",parentData:data,parentDataProperty:"penaltySettings",rootData}))){vErrors = vErrors === null ? validate39.errors : vErrors.concat(validate39.errors);errors = vErrors.length;}var valid0 = _errs67 === errors;}else {var valid0 = true;}if(valid0){if(data.redrawSettings !== undefined){let data37 = data.redrawSettings;const _errs68 = errors;const _errs69 = errors;if(errors === _errs69){if(data37 && typeof data37 == "object" && !Array.isArray(data37)){let missing3;if((data37.allowRedraw === undefined) && (missing3 = "allowRedraw")){validate10.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/required",keyword:"required",params:{missingProperty: missing3},message:"must have required property '"+missing3+"'"}];return false;}else {if(data37.allowRedraw !== undefined){if(typeof data37.allowRedraw !== "boolean"){validate10.errors = [{instancePath:instancePath+"/redrawSettings/allowRedraw",schemaPath:"#/$defs/ProductRedrawSettingsaf30/properties/allowRedraw/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}}else {validate10.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs68 === errors;}else {var valid0 = true;}if(valid0){if(data.scheduleSettings !== undefined){const _errs74 = errors;if(!(validate41(data.scheduleSettings, {instancePath:instancePath+"/scheduleSettings",parentData:data,parentDataProperty:"scheduleSettings",rootData}))){vErrors = vErrors === null ? validate41.errors : vErrors.concat(validate41.errors);errors = vErrors.length;}var valid0 = _errs74 === errors;}else {var valid0 = true;}if(valid0){if(data.securitySettings !== undefined){let data40 = data.securitySettings;const _errs75 = errors;const _errs76 = errors;if(errors === _errs76){if(data40 && typeof data40 == "object" && !Array.isArray(data40)){if(data40.isCollateralEnabled !== undefined){const _errs79 = errors;if(typeof data40.isCollateralEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/securitySettings/isCollateralEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isCollateralEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs79 === errors;}else {var valid19 = true;}if(valid19){if(data40.isGuarantorsEnabled !== undefined){const _errs81 = errors;if(typeof data40.isGuarantorsEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/securitySettings/isGuarantorsEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isGuarantorsEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs81 === errors;}else {var valid19 = true;}if(valid19){if(data40.requiredGuaranties !== undefined){let data43 = data40.requiredGuaranties;const _errs83 = errors;if(!((typeof data43 == "number") && (isFinite(data43)))){validate10.errors = [{instancePath:instancePath+"/securitySettings/requiredGuaranties",schemaPath:"#/$defs/SecuritySettingsaf30/properties/requiredGuaranties/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid19 = _errs83 === errors;}else {var valid19 = true;}}}}else {validate10.errors = [{instancePath:instancePath+"/securitySettings",schemaPath:"#/$defs/SecuritySettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs75 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){let data44 = data.state;const _errs85 = errors;if(!((data44 === "ACTIVE") || (data44 === "INACTIVE"))){validate10.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema11.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs85 === errors;}else {var valid0 = true;}if(valid0){if(data.taxSettings !== undefined){let data45 = data.taxSettings;const _errs86 = errors;const _errs87 = errors;if(errors === _errs87){if(data45 && typeof data45 == "object" && !Array.isArray(data45)){if(data45.taxCalculationMethod !== undefined){let data46 = data45.taxCalculationMethod;const _errs90 = errors;if(!((data46 === "INCLUSIVE") || (data46 === "EXCLUSIVE"))){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxCalculationMethod",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxCalculationMethod/enum",keyword:"enum",params:{allowedValues: schema61.properties.taxCalculationMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid21 = _errs90 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnFeesEnabled !== undefined){const _errs91 = errors;if(typeof data45.taxesOnFeesEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnFeesEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnFeesEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs91 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnInterestEnabled !== undefined){const _errs93 = errors;if(typeof data45.taxesOnInterestEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnInterestEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnInterestEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs93 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnPenaltyEnabled !== undefined){const _errs95 = errors;if(typeof data45.taxesOnPenaltyEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnPenaltyEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnPenaltyEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs95 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxSourceKey !== undefined){const _errs97 = errors;if(typeof data45.taxSourceKey !== "string"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxSourceKey",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid21 = _errs97 === errors;}else {var valid21 = true;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/taxSettings",schemaPath:"#/$defs/TaxSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs86 === errors;}else {var valid0 = true;}if(valid0){if(data.templates !== undefined){let data51 = data.templates;const _errs99 = errors;if(errors === _errs99){if(Array.isArray(data51)){var valid22 = true;const len1 = data51.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true},"InterestRateChangePMTAdjustmentThresholdaf30":{"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true},"ProductInterestRateSettingsaf30":{"type":"object","title":"ProductInterestRateSettingsaf30","description":"Adjustable interest rates settings","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate settings, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Maximum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Minimum value allowed for index based interest rate. Valid only for index interest rate."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count. Valid only for index interest rate."},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit. Valid only for index interest rate.","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or indexed(interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]}},"required":["interestRateSource"],"additionalProperties":true},"InternalControlsaf30":{"type":"object","title":"InternalControlsaf30","description":"Constraints and automated actions and that will be applied on the accounts.","properties":{"dormancyPeriodDays":{"type":"integer","title":"dormancyPeriodDays","description":"Specifies the number of days for an account to be fully paid in order to auto close it."},"fourEyesPrinciple":{"title":"fourEyesPrinciple","$ref":"#/$defs/FourEyesPrincipleaf30"},"lockSettings":{"title":"lockSettings","$ref":"#/$defs/LockSettingsaf30"}},"additionalProperties":true},"FourEyesPrincipleaf30":{"type":"object","title":"FourEyesPrincipleaf30","description":"Settings for Four Eyes Principle","properties":{"activeForLoanApproval":{"type":"boolean","title":"activeForLoanApproval","description":"Requires separate users to create and approve loan accounts"}},"additionalProperties":true},"LockSettingsaf30":{"type":"object","title":"LockSettingsaf30","description":"Settings applied when transitioning accounts to Locked state","properties":{"cappingConstraintType":{"title":"cappingConstraintType","description":"Specifies constraint types for capping charges.","enum":["SOFT_CAP","HARD_CAP"]},"cappingMethod":{"title":"cappingMethod","description":"Specifies how principal will be used when calculating capping charges.","enum":["OUTSTANDING_PRINCIPAL_PERCENTAGE","ORIGINAL_PRINCIPAL_PERCENTAGE"]},"cappingPercentage":{"type":"number","title":"cappingPercentage","description":"Specifies the percentage of principal that cannot be exceeded by the sum of interest, fees and penalty balances."},"lockPeriodDays":{"type":"integer","title":"lockPeriodDays","description":"Specifies the number of days for in which the account will be locked if it stays in arrears."}},"additionalProperties":true},"LoanAmountSettingsaf30":{"type":"object","title":"LoanAmountSettingsaf30","description":"The amount settings, holds all amount properties.","properties":{"loanAmount":{"title":"loanAmount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"trancheSettings":{"title":"trancheSettings","$ref":"#/$defs/TrancheSettingsaf30"}},"additionalProperties":true},"AmountDecimalConstraintsaf30":{"type":"object","title":"AmountDecimalConstraintsaf30","description":"Decimal constraints, like min/max/default.","properties":{"defaultValue":{"type":"number","title":"defaultValue","description":"The default value, will be used in case no other value was filled in by the user."},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the decimal constraint, auto generated, unique"},"maxValue":{"type":"number","title":"maxValue","description":"The maximum value."},"minValue":{"type":"number","title":"minValue","description":"The minimum value."}},"additionalProperties":true},"TrancheSettingsaf30":{"type":"object","title":"TrancheSettingsaf30","description":"The tranche settings, indicates the settings regarding tranches in case the product is configured to support tranches.","properties":{"maxNumberOfTranches":{"type":"integer","title":"maxNumberOfTranches","description":"The number of tranches supported by the loan product"}},"additionalProperties":true},"NewAccountSettingsaf30":{"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true},"OffsetSettingsaf30":{"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true},"PaymentSettingsaf30":{"type":"object","title":"PaymentSettingsaf30","description":"Defines the payment settings for the loan product and for loans crated based on this product.","properties":{"amortizationMethod":{"title":"amortizationMethod","description":"Payments Method used by loan accounts for repayments schedule generation.","enum":["STANDARD_PAYMENTS","BALLOON_PAYMENTS","OPTIMIZED_PAYMENTS","PAYMENT_PLAN"]},"latePaymentsRecalculationMethod":{"title":"latePaymentsRecalculationMethod","description":"Recalculate the schedule when late payments are posted on dynamic Equal Installments loans.","enum":["OVERDUE_INSTALLMENTS_INCREASE","LAST_INSTALLMENT_INCREASE"]},"paymentMethod":{"title":"paymentMethod","description":"The payment method. Represents the interest payment method that determines whether the payments are made Horizontally (on the Repayments) or Vertically (on the Loan Account)","enum":["HORIZONTAL","VERTICAL"]},"prepaymentSettings":{"title":"prepaymentSettings","$ref":"#/$defs/ProductPrepaymentSettingsaf30"},"principalPaymentSettings":{"title":"principalPaymentSettings","$ref":"#/$defs/PrincipalPaymentProductSettingsaf30"},"repaymentAllocationOrder":{"type":"array","title":"repaymentAllocationOrder","description":"A list of basic repayment allocation elements such as the principal, interest & fees.","items":{"enum":["PRINCIPAL","INTEREST","FEE","PENALTY"]}}},"required":["latePaymentsRecalculationMethod","paymentMethod","repaymentAllocationOrder"],"additionalProperties":true},"ProductPrepaymentSettingsaf30":{"type":"object","title":"ProductPrepaymentSettingsaf30","description":"Defines the prepayment settings for the product","properties":{"applyInterestOnPrepaymentMethod":{"title":"applyInterestOnPrepaymentMethod","description":"Whether the interest on prepayment is applied manual or automatic.","enum":["AUTOMATIC","MANUAL"]},"elementsRecalculationMethod":{"title":"elementsRecalculationMethod","description":"The elements recalculation method, indicates how the declining balance with equal installments repayments are recalculated","enum":["PRINCIPAL_EXPECTED_FIXED","TOTAL_EXPECTED_FIXED"]},"ercFreeAllowance":{"type":"number","title":"ercFreeAllowance","description":"ERC free allowance in percentage"},"futurePaymentsAcceptance":{"title":"futurePaymentsAcceptance","description":"Shows whether the future payments are allowed or not for this product (repayment transactions with entry date set in the future)","enum":["NO_FUTURE_PAYMENTS","ACCEPT_FUTURE_PAYMENTS","ACCEPT_OVERPAYMENTS"]},"prepaymentAcceptance":{"title":"prepaymentAcceptance","description":"Shows whether the pre-payments are allowed or not for this product.","enum":["ACCEPT_PREPAYMENTS","NO_PREPAYMENTS"]},"prepaymentRecalculationMethod":{"title":"prepaymentRecalculationMethod","description":"Prepayment recalculation method copied from the loan product on which this account is based","enum":["NO_RECALCULATION","RESCHEDULE_REMAINING_REPAYMENTS","RECALCULATE_SCHEDULE_KEEP_SAME_NUMBER_OF_TERMS","RECALCULATE_SCHEDULE_KEEP_SAME_PRINCIPAL_AMOUNT","RECALCULATE_SCHEDULE_KEEP_SAME_TOTAL_REPAYMENT_AMOUNT","REDUCE_AMOUNT_PER_INSTALLMENT","REDUCE_NUMBER_OF_INSTALLMENTS","REDUCE_NUMBER_OF_INSTALLMENTS_NEW"]},"principalPaidInstallmentStatus":{"title":"principalPaidInstallmentStatus","description":"Installment status for the case when principal is paid off (copied from loan product)","enum":["PARTIALLY_PAID","PAID","ORIGINAL_TOTAL_EXPECTED_PAID"]}},"required":["futurePaymentsAcceptance"],"additionalProperties":true},"PrincipalPaymentProductSettingsaf30":{"type":"object","title":"PrincipalPaymentProductSettingsaf30","description":"Defines the principal payment settings constraints for the loans that will be created based on this product.","properties":{"amount":{"title":"amount","$ref":"#/$defs/AmountDecimalConstraintsaf30"},"defaultPrincipalRepaymentInterval":{"type":"integer","title":"defaultPrincipalRepaymentInterval","description":"How many repayments the principal has to be paid"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the settings, auto generated, unique"},"includeFeesInFloorAmount":{"type":"boolean","title":"includeFeesInFloorAmount","description":"If true, the fees will be included along with the principal in the repayment floor amount, for a revolving credit account"},"includeInterestInFloorAmount":{"type":"boolean","title":"includeInterestInFloorAmount","description":"If true, the interest will be included along with the principal in the repayment floor amount, for a revolving credit account"},"percentage":{"title":"percentage","$ref":"#/$defs/DecimalConstraintsaf30"},"principalCeilingValue":{"type":"number","title":"principalCeilingValue","description":"The maximum principal due amount a repayment made with this settings can have"},"principalFloorValue":{"type":"number","title":"principalFloorValue","description":"The minimum principal due amount a repayment made with this settings can have"},"principalPaymentMethod":{"title":"principalPaymentMethod","description":"The method of principal payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]},"totalDueAmountFloor":{"type":"number","title":"totalDueAmountFloor","description":"The minimum total due amount a repayment made with this settings can have"},"totalDuePayment":{"title":"totalDuePayment","description":"The method of total due payment for revolving credit","enum":["FLAT","OUTSTANDING_PRINCIPAL_PERCENTAGE","PRINCIPAL_PERCENTAGE_LAST_DISB","TOTAL_BALANCE_PERCENTAGE","TOTAL_BALANCE_FLAT","TOTAL_PRINCIPAL_PERCENTAGE"]}},"additionalProperties":true},"ProductPenaltySettingsaf30":{"type":"object","title":"ProductPenaltySettingsaf30","description":"Defines the penalty settings for the product that will be used by the loan accounts based on this product","properties":{"loanPenaltyCalculationMethod":{"title":"loanPenaltyCalculationMethod","description":"The penalty calculation method","enum":["NONE","OVERDUE_BALANCE","OVERDUE_BALANCE_AND_INTEREST","OUTSTANDING_PRINCIPAL"]},"loanPenaltyGracePeriod":{"type":"integer","title":"loanPenaltyGracePeriod","description":"Number of days to wait before applying the loan penalty amounts"},"penaltyRate":{"title":"penaltyRate","$ref":"#/$defs/DecimalConstraintsaf30"}},"required":["loanPenaltyCalculationMethod"],"additionalProperties":true},"ProductRedrawSettingsaf30":{"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true},"LoanProductScheduleSettingsaf30":{"type":"object","title":"LoanProductScheduleSettingsaf30","description":"Defines the settings and constraints for schedule for the loans that are created based on this product.","properties":{"amortizationPeriod":{"title":"amortizationPeriod","$ref":"#/$defs/ProductAmortizationPeriodaf30"},"billingCycles":{"title":"billingCycles","$ref":"#/$defs/BillingCyclesProductSettingsaf30"},"defaultRepaymentPeriodCount":{"type":"integer","title":"defaultRepaymentPeriodCount","description":"Interval Repayment Methodology Settings."},"firstRepaymentDueDateOffset":{"title":"firstRepaymentDueDateOffset","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"fixedDaysOfMonth":{"type":"array","title":"fixedDaysOfMonth","description":" Specifies the days of the month when the repayment due dates should be. Only available if the Repayment Methodology is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTH.","items":{"type":"integer"}},"interestAccrualSince":{"title":"interestAccrualSince","description":"Represents the moment the interest will start getting accrued.","enum":["DISBURSEMENT","DUE_DATE"]},"numInstallments":{"title":"numInstallments","$ref":"#/$defs/IntegerIntervalConstraintsaf30"},"previewSchedule":{"title":"previewSchedule","$ref":"#/$defs/PreviewScheduleSettingsaf30"},"repaymentMethod":{"title":"repaymentMethod","description":"The repayment method value","enum":["AMOUNT","INSTALLMENTS"]},"repaymentPeriodUnit":{"title":"repaymentPeriodUnit","description":"The frequency of the loan repayment.","enum":["DAYS","WEEKS","MONTHS","YEARS"]},"repaymentReschedulingMethod":{"title":"repaymentReschedulingMethod","description":"The repayment rescheduling method used in calculations.","enum":["NONE","NEXT_WORKING_DAY","PREVIOUS_WORKING_DAY","EXTEND_SCHEDULE"]},"repaymentScheduleEditOptions":{"type":"array","title":"repaymentScheduleEditOptions","description":"Shows the properties from the repayment schedule can be edited.","items":{"enum":["ADJUST_PAYMENT_DATES","ADJUST_PRINCIPAL_PAYMENT_SCHEDULE","ADJUST_INTEREST_PAYMENT_SCHEDULE","ADJUST_FEE_PAYMENT_SCHEDULE","ADJUST_PENALTY_PAYMENT_SCHEDULE","ADJUST_NUMBER_OF_INSTALLMENTS","ADJUST_PAYMENT_HOLIDAYS"]}},"repaymentScheduleMethod":{"title":"repaymentScheduleMethod","description":"The repayment schedule method. Represents the method that determines whether the schedule will be fixed all over the loan account's life cycle or will be dynamically recomputed when required.","enum":["NONE","FIXED","DYNAMIC"]},"roundingSettings":{"title":"roundingSettings","$ref":"#/$defs/RoundingSettingsaf30"},"scheduleDueDatesMethod":{"title":"scheduleDueDatesMethod","description":"The methodology used by this product to compute the due dates of the repayments.","enum":["INTERVAL","FIXED_DAYS_OF_MONTH"]},"shortMonthHandlingMethod":{"title":"shortMonthHandlingMethod","description":"Determines how to handle the short months, if they select a fixed day of month > 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true},"ProductAmortizationPeriodaf30":{"type":"object","title":"ProductAmortizationPeriodaf30","description":"It holds information about the loan product amortization period. The PMT is calculated as the loan would have [amortisationPeriod] instalments","properties":{"defaultValue":{"type":"integer","title":"defaultValue","description":"default value"},"maxValue":{"type":"integer","title":"maxValue","description":"max value"},"minValue":{"type":"integer","title":"minValue","description":"min value"}},"additionalProperties":true},"BillingCyclesProductSettingsaf30":{"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true},"PreviewScheduleSettingsaf30":{"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true},"RoundingSettingsaf30":{"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true},"SecuritySettingsaf30":{"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true},"TaxSettingsaf30":{"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true},"DocumentTemplateaf30":{"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true}}};const schema14 = {"type":"object","title":"AccountLinkSettingsaf30","description":"Defines the settings for account linking.","properties":{"enabled":{"type":"boolean","title":"enabled","description":"Shows whether the loan accounts created using this product can be linked to a savings account."},"linkableDepositProductKey":{"type":"string","title":"linkableDepositProductKey","description":"Loan accounts created for this product can only be linked the the savings accounts that use the savings product with this key. If null, the loan accounts for this product can be linked to any savings account."},"linkedAccountOptions":{"type":"array","title":"linkedAccountOptions","description":"A set of linked account options.","items":{"enum":["AUTO_LINK_ACCOUNTS","AUTO_CREATE_LINKED_ACCOUNTS"]},"uniqueItems":true},"settlementMethod":{"title":"settlementMethod","description":"Set the option of automated transfer that should be made from linked deposit accounts into loan accounts create from this product.","enum":["FULL_DUE_AMOUNTS","PARTIAL_DUE_AMOUNTS","NO_AUTOMATED_TRANSFERS"]}},"required":["enabled"],"additionalProperties":true};const schema20 = {"type":"object","title":"CreditArrangementSettingsaf30","description":"The funding settings, holds the settings regarding the funding for the loan product.","properties":{"creditArrangementRequirement":{"title":"creditArrangementRequirement","description":"Shows whether accounts created after this product can/should be part of a line of credit.","enum":["OPTIONAL","REQUIRED","NOT_REQUIRED"]}},"additionalProperties":true};const schema21 = {"type":"object","title":"Currencyaf30","description":"Represents a currency eg. USD, EUR.","properties":{"code":{"title":"code","description":"Fiat(ISO-4217) currency code or NON_FIAT for non fiat currencies.","enum":["AED","AFN","ALL","AMD","ANG","AOA","ARS","AUD","AWG","AZN","BAM","BBD","BDT","BGN","BHD","BIF","BMD","BND","BOB","BOV","BRL","BSD","BTN","BWP","BYR","BYN","BZD","CAD","CDF","CHE","CHF","CHW","CLF","CLP","CNY","COP","COU","CRC","CUC","CUP","CVE","CZK","DJF","DKK","DOP","DZD","EGP","ERN","ETB","EUR","FJD","FKP","GBP","GEL","GHS","GIP","GMD","GNF","GTQ","GYD","HKD","HNL","HRK","HTG","HUF","IDR","ILS","INR","IQD","IRR","ISK","JMD","JOD","JPY","KES","KGS","KHR","KMF","KPW","KRW","KWD","KYD","KZT","LAK","LBP","LKR","LRD","LSL","LTL","LVL","LYD","MAD","MDL","MGA","MKD","MMK","MNT","MOP","MRO","MRU","MUR","MVR","MWK","MXN","MXV","MYR","MZN","NAD","NGN","NIO","NOK","NPR","NZD","OMR","PAB","PEN","PGK","PHP","PKR","PLN","PYG","QAR","RON","RSD","RUB","RWF","SAR","SBD","SCR","SDG","SEK","SGD","SHP","SLL","SOS","SRD","STD","STN","SVC","SYP","SZL","THB","TJS","TMT","TND","TOP","TRY","TTD","TWD","TZS","UAH","UGX","USD","USN","UYI","UYU","UYW","UZS","VED","VEF","VES","VND","VUV","WST","XAG","XAU","XAF","XBA","XBB","XBC","XBD","XCD","XDR","XOF","XPD","XPF","XPT","XSU","XTS","XUA","XXX","YER","ZAR","ZMK","ZWL","ZMW","SSP","NON_FIAT"]},"currencyCode":{"type":"string","title":"currencyCode","description":"Currency code for NON_FIAT currency."}},"additionalProperties":true};const schema46 = {"type":"object","title":"NewAccountSettingsaf30","description":"The new account settings, defines the settings and constraints used by new loan account created based on this product.","properties":{"accountInitialState":{"title":"accountInitialState","description":"The initial state of the account when is created.","enum":["PARTIAL_APPLICATION","PENDING_APPROVAL","APPROVED","ACTIVE","ACTIVE_IN_ARREARS","CLOSED"]},"idGeneratorType":{"title":"idGeneratorType","description":"The type of generator used for IDs creation.","enum":["INCREMENTAL_NUMBER","RANDOM_PATTERN"]},"idPattern":{"type":"string","title":"idPattern","description":"The pattern that will be used for ID validation (as referred to as an input mask)."}},"required":["accountInitialState","idGeneratorType","idPattern"],"additionalProperties":true};const schema47 = {"type":"object","title":"OffsetSettingsaf30","description":"The offset settings, holds information about offset.","properties":{"allowOffset":{"type":"boolean","title":"allowOffset","description":"Indicates whether the product supports offset"}},"additionalProperties":true};const schema55 = {"type":"object","title":"ProductRedrawSettingsaf30","description":"The redraw settings for the product.","properties":{"allowRedraw":{"type":"boolean","title":"allowRedraw","description":"Indicates whether the product support redraw (prepayments which are stored at loan account level as a Redrawable balance)"}},"required":["allowRedraw"],"additionalProperties":true};const schema63 = {"type":"object","title":"SecuritySettingsaf30","description":"The settings and constraints for securities.","properties":{"isCollateralEnabled":{"type":"boolean","title":"isCollateralEnabled","description":"Shows whether collateral (assets or other goods) are accepted in order to reach required securities percentage from loan amount, as defined in this product."},"isGuarantorsEnabled":{"type":"boolean","title":"isGuarantorsEnabled","description":"Shows whether guarantors (other clients) are accepted in order to reach the required securities percentage from loan amount, as defined in this product."},"requiredGuaranties":{"type":"number","title":"requiredGuaranties","description":"The securities percentage from loan amount that is needed in order for this account to be approved. Null if the securities are not required."}},"additionalProperties":true};const schema64 = {"type":"object","title":"TaxSettingsaf30","description":"Tax settings, defines some settings for taxes on the loan product","properties":{"taxCalculationMethod":{"title":"taxCalculationMethod","description":"Shows whether the tax is added on top of the target amount or not.","enum":["INCLUSIVE","EXCLUSIVE"]},"taxesOnFeesEnabled":{"type":"boolean","title":"taxesOnFeesEnabled","description":"Shows whether taxes on fees are enabled for this product or not."},"taxesOnInterestEnabled":{"type":"boolean","title":"taxesOnInterestEnabled","description":"Shows whether taxes on interest are enabled for this product or not."},"taxesOnPenaltyEnabled":{"type":"boolean","title":"taxesOnPenaltyEnabled","description":"Shows whether taxes on penalties are enabled for this product or not."},"taxSourceKey":{"type":"string","title":"taxSourceKey","description":"The tax source from where the loan account taxes will be updated."}},"additionalProperties":true};const schema65 = {"type":"object","title":"DocumentTemplateaf30","description":"Template documents of the product.","properties":{"creationDate":{"type":"string","title":"creationDate","description":"The creation date of the document","format":"date-time"},"encodedKey":{"type":"string","title":"encodedKey","description":"The document encodedKey"},"lastModifiedDate":{"type":"string","title":"lastModifiedDate","description":"The last modified date of the document","format":"date-time"},"name":{"type":"string","title":"name","description":"The name the document"},"type":{"title":"type","description":"The type of the template","enum":["ACCOUNT","TRANSACTION","ACCOUNT_WITH_TRANSACTIONS"]}},"additionalProperties":true};const schema12 = {"type":"object","title":"AccountingSettingsaf30","description":"Accounting settings, defines the accounting settings for the product.","properties":{"accountingMethod":{"title":"accountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","CASH","ACCRUAL"]},"accountingRules":{"type":"array","title":"accountingRules","description":"A list of accounting rules for the product.","items":{"$ref":"#/$defs/GLAccountingRuleaf30"}},"interestAccrualCalculation":{"title":"interestAccrualCalculation","description":"The accounting interest calculation option selected for the product.","enum":["NONE","AGGREGATED_AMOUNT","BREAKDOWN_PER_ACCOUNT"]},"interestAccruedAccountingMethod":{"title":"interestAccruedAccountingMethod","description":"A list of accounting rules for a product.","enum":["NONE","DAILY","END_OF_MONTH"]}},"required":["accountingMethod"],"additionalProperties":true};const schema13 = {"type":"object","title":"GLAccountingRuleaf30","description":"The GL accounting rule, it maps a financial resource with a GL account for a specific product (i.e loan or saving).","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the accounting rule, auto generated, unique."},"financialResource":{"title":"financialResource","description":"General Ledger Financial Resources used to setup the product accounting rules and determine the credit and debit accounts when logging journal entries","enum":["PORTFOLIO_CONTROL","FUND_SOURCE","WRITE_OFF_EXPENSE","INTEREST_INCOME","TAXES_PAYABLE","FEE_INCOME","PENALTY_INCOME","NEGATIVE_INTEREST_PAYABLE_RECEIVABLE","NEGATIVE_INTEREST_PAYABLE","INTEREST_RECEIVABLE","FEE_RECEIVABLE","PENALTY_RECEIVABLE","TAXES_RECEIVABLE","DEFERRED_INTERESTS_INCOME","DEFERRED_FEE_INCOME","DEFERRED_TAXES","DEPOSIT_REFERENCE","SAVINGS_CONTROL","INTEREST_EXPENSE","INTEREST_PAYABLE","NEGATIVE_INTEREST_INCOME","NEGATIVE_INTEREST_RECEIVABLE","OVERDRAFT_PORTFOLIO_CONTROL","OVERDRAFT_INTEREST_INCOME","OVERDRAFT_WRITE_OFF_EXPENSE","OVERDRAFT_INTEREST_RECEIVABLE","INTER_BRANCH_TRANSFER"]},"glAccountKey":{"type":"string","title":"glAccountKey","description":"The encoded key of the account that is mapped to the financialResource"},"transactionChannelKey":{"type":"string","title":"transactionChannelKey","description":"The key of the transaction rule that uses this rule"}},"required":["financialResource","glAccountKey"],"additionalProperties":true};const func0 = require("ajv/dist/runtime/equal").default;function validate11(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((data.accountingMethod === undefined) && (missing0 = "accountingMethod")){validate11.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.accountingMethod !== undefined){let data0 = data.accountingMethod;const _errs2 = errors;if(!(((data0 === "NONE") || (data0 === "CASH")) || (data0 === "ACCRUAL"))){validate11.errors = [{instancePath:instancePath+"/accountingMethod",schemaPath:"#/properties/accountingMethod/enum",keyword:"enum",params:{allowedValues: schema12.properties.accountingMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.accountingRules !== undefined){let data1 = data.accountingRules;const _errs3 = errors;if(errors === _errs3){if(Array.isArray(data1)){var valid1 = true;const len0 = data1.length;for(let i0=0; i0 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data0[i1], data0[j0])){validate15.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate15.errors = [{instancePath:instancePath+"/availableFor",schemaPath:"#/properties/availableFor/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.branchSettings !== undefined){let data2 = data.branchSettings;const _errs5 = errors;const _errs6 = errors;if(errors === _errs6){if(data2 && typeof data2 == "object" && !Array.isArray(data2)){if(data2.availableProductBranches !== undefined){let data3 = data2.availableProductBranches;const _errs9 = errors;if(errors === _errs9){if(Array.isArray(data3)){var valid5 = true;const len1 = data3.length;for(let i2=0; i2 28. Will be null if no such date is selected. Only available if the Interest Application Method is InterestApplicationMethodDTO#FIXED_DAYS_OF_MONTH.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"additionalProperties":true};const schema37 = {"type":"object","title":"InterestRateChangePMTAdjustmentThresholdaf30","description":"Represents interest rate change threshold settings for loan accounts and loan products.","properties":{"method":{"title":"method","description":"The method used to calculate the interest rate change threshold. Supported value is CALENDAR_DAYS","enum":["WORKING_DAYS","CALENDAR_DAYS"]},"numberOfDays":{"type":"integer","title":"numberOfDays","description":"The number of days that trigger an interest rate change."}},"additionalProperties":true};const schema33 = {"type":"object","title":"InterestProductSettingsaf30","description":"The interest settings, defines constraints regarding interest that will be used on the loan account created based on this product.","properties":{"accrueInterestAfterMaturity":{"type":"boolean","title":"accrueInterestAfterMaturity","description":"If the product supports this option, specify if the interest should be accrued after the account maturity date"},"allowNegativeInterestRate":{"type":"boolean","title":"allowNegativeInterestRate","description":"Indicator whether the loan product allows negative values for interest rate or interest spread"},"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"indexSourceKey":{"type":"string","title":"indexSourceKey","description":"Index rate source key."},"interestChargeFrequency":{"title":"interestChargeFrequency","description":"The interval used for determining how often is interest charged","enum":["ANNUALIZED","EVERY_MONTH","EVERY_FOUR_WEEKS","EVERY_WEEK","EVERY_DAY","EVERY_X_DAYS"]},"interestChargeFrequencyCount":{"type":"integer","title":"interestChargeFrequencyCount","description":"the count of units to apply over the interval"},"interestRate":{"title":"interestRate","$ref":"#/$defs/DecimalIntervalaf30"},"interestRateCeilingValue":{"type":"number","title":"interestRateCeilingValue","description":"Interest spread + index interest rate can't be more than this amount (valid only for index interest rate products)."},"interestRateFloorValue":{"type":"number","title":"interestRateFloorValue","description":"Interest spread + index interest rate can't be less than this amount (valid only for index interest rate products)."},"interestRateReviewCount":{"type":"integer","title":"interestRateReviewCount","description":"Interest rate review frequency unit count"},"interestRateReviewUnit":{"title":"interestRateReviewUnit","description":"Interest rate review frequency measurement unit","enum":["DAYS","WEEKS","MONTHS"]},"interestRateSource":{"title":"interestRateSource","description":"Interest calculation method: fixed or (interest spread + active organization index interest rate)","enum":["FIXED_INTEREST_RATE","INDEX_INTEREST_RATE"]},"interestRateTerms":{"title":"interestRateTerms","description":"The option for how is the interest rate determined when being accrued for an account","enum":["FIXED","TIERED","TIERED_PERIOD","TIERED_BAND"]},"interestRateTiers":{"type":"array","title":"interestRateTiers","description":"The list of interest rate tiers available for the current settings instance","items":{"$ref":"#/$defs/InterestRateTieraf30"}}},"additionalProperties":true};const schema35 = {"type":"object","title":"InterestRateTieraf30","description":"Used or TIERED interest rates, holds the values to define how the interest is computed","properties":{"encodedKey":{"type":"string","title":"encodedKey","description":"The encoded key of the interest rate tier, auto generated, unique"},"endingBalance":{"type":"number","title":"endingBalance","description":"The top-limit value for the account balance in order to determine if this tier is used or not"},"interestRate":{"type":"number","title":"interestRate","description":"The rate used for computing the interest for an account which has the balance less than the ending balance"}},"required":["interestRate"],"additionalProperties":true};function validate26(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){if(data.accrueInterestAfterMaturity !== undefined){const _errs2 = errors;if(typeof data.accrueInterestAfterMaturity !== "boolean"){validate26.errors = [{instancePath:instancePath+"/accrueInterestAfterMaturity",schemaPath:"#/properties/accrueInterestAfterMaturity/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.allowNegativeInterestRate !== undefined){const _errs4 = errors;if(typeof data.allowNegativeInterestRate !== "boolean"){validate26.errors = [{instancePath:instancePath+"/allowNegativeInterestRate",schemaPath:"#/properties/allowNegativeInterestRate/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs4 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs6 = errors;if(typeof data.encodedKey !== "string"){validate26.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs6 === errors;}else {var valid0 = true;}if(valid0){if(data.indexSourceKey !== undefined){const _errs8 = errors;if(typeof data.indexSourceKey !== "string"){validate26.errors = [{instancePath:instancePath+"/indexSourceKey",schemaPath:"#/properties/indexSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs8 === errors;}else {var valid0 = true;}if(valid0){if(data.interestChargeFrequency !== undefined){const _errs10 = errors;let valid1;valid1 = false;for(const v0 of schema33.properties.interestChargeFrequency.enum){if(func0(data.interestChargeFrequency, v0)){valid1 = true;break;}}if(!valid1){validate26.errors = [{instancePath:instancePath+"/interestChargeFrequency",schemaPath:"#/properties/interestChargeFrequency/enum",keyword:"enum",params:{allowedValues: schema33.properties.interestChargeFrequency.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs10 === errors;}else {var valid0 = true;}if(valid0){if(data.interestChargeFrequencyCount !== undefined){let data5 = data.interestChargeFrequencyCount;const _errs11 = errors;if(!(((typeof data5 == "number") && (!(data5 % 1) && !isNaN(data5))) && (isFinite(data5)))){validate26.errors = [{instancePath:instancePath+"/interestChargeFrequencyCount",schemaPath:"#/properties/interestChargeFrequencyCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs11 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRate !== undefined){let data6 = data.interestRate;const _errs13 = errors;const _errs14 = errors;if(errors === _errs14){if(data6 && typeof data6 == "object" && !Array.isArray(data6)){if(data6.defaultValue !== undefined){let data7 = data6.defaultValue;const _errs17 = errors;if(!((typeof data7 == "number") && (isFinite(data7)))){validate26.errors = [{instancePath:instancePath+"/interestRate/defaultValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/defaultValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs17 === errors;}else {var valid3 = true;}if(valid3){if(data6.maxValue !== undefined){let data8 = data6.maxValue;const _errs19 = errors;if(!((typeof data8 == "number") && (isFinite(data8)))){validate26.errors = [{instancePath:instancePath+"/interestRate/maxValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/maxValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs19 === errors;}else {var valid3 = true;}if(valid3){if(data6.minValue !== undefined){let data9 = data6.minValue;const _errs21 = errors;if(!((typeof data9 == "number") && (isFinite(data9)))){validate26.errors = [{instancePath:instancePath+"/interestRate/minValue",schemaPath:"#/$defs/DecimalIntervalaf30/properties/minValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid3 = _errs21 === errors;}else {var valid3 = true;}}}}else {validate26.errors = [{instancePath:instancePath+"/interestRate",schemaPath:"#/$defs/DecimalIntervalaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs13 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateCeilingValue !== undefined){let data10 = data.interestRateCeilingValue;const _errs23 = errors;if(!((typeof data10 == "number") && (isFinite(data10)))){validate26.errors = [{instancePath:instancePath+"/interestRateCeilingValue",schemaPath:"#/properties/interestRateCeilingValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs23 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateFloorValue !== undefined){let data11 = data.interestRateFloorValue;const _errs25 = errors;if(!((typeof data11 == "number") && (isFinite(data11)))){validate26.errors = [{instancePath:instancePath+"/interestRateFloorValue",schemaPath:"#/properties/interestRateFloorValue/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid0 = _errs25 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateReviewCount !== undefined){let data12 = data.interestRateReviewCount;const _errs27 = errors;if(!(((typeof data12 == "number") && (!(data12 % 1) && !isNaN(data12))) && (isFinite(data12)))){validate26.errors = [{instancePath:instancePath+"/interestRateReviewCount",schemaPath:"#/properties/interestRateReviewCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs27 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateReviewUnit !== undefined){let data13 = data.interestRateReviewUnit;const _errs29 = errors;if(!(((data13 === "DAYS") || (data13 === "WEEKS")) || (data13 === "MONTHS"))){validate26.errors = [{instancePath:instancePath+"/interestRateReviewUnit",schemaPath:"#/properties/interestRateReviewUnit/enum",keyword:"enum",params:{allowedValues: schema33.properties.interestRateReviewUnit.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateSource !== undefined){let data14 = data.interestRateSource;const _errs30 = errors;if(!((data14 === "FIXED_INTEREST_RATE") || (data14 === "INDEX_INTEREST_RATE"))){validate26.errors = [{instancePath:instancePath+"/interestRateSource",schemaPath:"#/properties/interestRateSource/enum",keyword:"enum",params:{allowedValues: schema33.properties.interestRateSource.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs30 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateTerms !== undefined){let data15 = data.interestRateTerms;const _errs31 = errors;if(!((((data15 === "FIXED") || (data15 === "TIERED")) || (data15 === "TIERED_PERIOD")) || (data15 === "TIERED_BAND"))){validate26.errors = [{instancePath:instancePath+"/interestRateTerms",schemaPath:"#/properties/interestRateTerms/enum",keyword:"enum",params:{allowedValues: schema33.properties.interestRateTerms.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs31 === errors;}else {var valid0 = true;}if(valid0){if(data.interestRateTiers !== undefined){let data16 = data.interestRateTiers;const _errs32 = errors;if(errors === _errs32){if(Array.isArray(data16)){var valid4 = true;const len0 = data16.length;for(let i0=0; i0 28. Will be null if no such date is selected and also for the Interval methodology. Only available if the Schedule Due Dates Method is ScheduleDueDatesMethodDTO#FIXED_DAYS_OF_MONTHs.","enum":["LAST_DAY_IN_MONTH","FIRST_DAY_OF_NEXT_MONTH"]}},"required":["repaymentReschedulingMethod","repaymentScheduleMethod","scheduleDueDatesMethod"],"additionalProperties":true};const schema57 = {"type":"object","title":"ProductAmortizationPeriodaf30","description":"It holds information about the loan product amortization period. The PMT is calculated as the loan would have [amortisationPeriod] instalments","properties":{"defaultValue":{"type":"integer","title":"defaultValue","description":"default value"},"maxValue":{"type":"integer","title":"maxValue","description":"max value"},"minValue":{"type":"integer","title":"minValue","description":"min value"}},"additionalProperties":true};const schema58 = {"type":"object","title":"BillingCyclesProductSettingsaf30","description":"Defines the billing cycles settings for revolving credit products","properties":{"enabled":{"type":"boolean","title":"enabled","description":"The billing cycle status if it is enabled or disabled"},"startDays":{"type":"array","title":"startDays","description":"The billing cycle start days in case it is enabled","items":{"type":"integer"},"uniqueItems":true}},"additionalProperties":true};const schema61 = {"type":"object","title":"PreviewScheduleSettingsaf30","description":"Defines the Preview Schedule settings for revolving products","properties":{"numberOfPreviewedInstalments":{"type":"integer","title":"numberOfPreviewedInstalments","description":"Number of Previewed Instalments."},"previewScheduleEnabled":{"type":"boolean","title":"previewScheduleEnabled","description":"Preview Schedule status."}},"additionalProperties":true};const schema62 = {"type":"object","title":"RoundingSettingsaf30","description":"Defines the rounding settings used in the loan computation.","properties":{"repaymentCurrencyRounding":{"title":"repaymentCurrencyRounding","description":"Specifies the repayment currency rounding method.","enum":["NO_ROUNDING","ROUND_TO_NEAREST_WHOLE_UNIT","ROUND_UP_TO_NEAREST_WHOLE_UNIT"]},"repaymentElementsRoundingMethod":{"title":"repaymentElementsRoundingMethod","description":"Determines how the repayment currency rounding is handled on each element from the schedule.","enum":["NO_ROUNDING","ROUND_ALL","PAYMENT_DUE"]},"roundingRepaymentScheduleMethod":{"title":"roundingRepaymentScheduleMethod","description":"Specifies the rounding repayment schedule method.","enum":["NO_ROUNDING","ROUND_REMAINDER_INTO_LAST_REPAYMENT","ROUND_PRINCIPAL_AND_INTEREST_REMAINDER_INTO_LAST_REPAYMENT"]}},"required":["repaymentCurrencyRounding","repaymentElementsRoundingMethod","roundingRepaymentScheduleMethod"],"additionalProperties":true};function validate41(data, {instancePath="", parentData, parentDataProperty, rootData=data}={}){let vErrors = null;let errors = 0;if(errors === 0){if(data && typeof data == "object" && !Array.isArray(data)){let missing0;if((((data.repaymentReschedulingMethod === undefined) && (missing0 = "repaymentReschedulingMethod")) || ((data.repaymentScheduleMethod === undefined) && (missing0 = "repaymentScheduleMethod"))) || ((data.scheduleDueDatesMethod === undefined) && (missing0 = "scheduleDueDatesMethod"))){validate41.errors = [{instancePath,schemaPath:"#/required",keyword:"required",params:{missingProperty: missing0},message:"must have required property '"+missing0+"'"}];return false;}else {if(data.amortizationPeriod !== undefined){let data0 = data.amortizationPeriod;const _errs2 = errors;const _errs3 = errors;if(errors === _errs3){if(data0 && typeof data0 == "object" && !Array.isArray(data0)){if(data0.defaultValue !== undefined){let data1 = data0.defaultValue;const _errs6 = errors;if(!(((typeof data1 == "number") && (!(data1 % 1) && !isNaN(data1))) && (isFinite(data1)))){validate41.errors = [{instancePath:instancePath+"/amortizationPeriod/defaultValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs6 === errors;}else {var valid2 = true;}if(valid2){if(data0.maxValue !== undefined){let data2 = data0.maxValue;const _errs8 = errors;if(!(((typeof data2 == "number") && (!(data2 % 1) && !isNaN(data2))) && (isFinite(data2)))){validate41.errors = [{instancePath:instancePath+"/amortizationPeriod/maxValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs8 === errors;}else {var valid2 = true;}if(valid2){if(data0.minValue !== undefined){let data3 = data0.minValue;const _errs10 = errors;if(!(((typeof data3 == "number") && (!(data3 % 1) && !isNaN(data3))) && (isFinite(data3)))){validate41.errors = [{instancePath:instancePath+"/amortizationPeriod/minValue",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid2 = _errs10 === errors;}else {var valid2 = true;}}}}else {validate41.errors = [{instancePath:instancePath+"/amortizationPeriod",schemaPath:"#/$defs/ProductAmortizationPeriodaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs2 === errors;}else {var valid0 = true;}if(valid0){if(data.billingCycles !== undefined){let data4 = data.billingCycles;const _errs12 = errors;const _errs13 = errors;if(errors === _errs13){if(data4 && typeof data4 == "object" && !Array.isArray(data4)){if(data4.enabled !== undefined){const _errs16 = errors;if(typeof data4.enabled !== "boolean"){validate41.errors = [{instancePath:instancePath+"/billingCycles/enabled",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/enabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid4 = _errs16 === errors;}else {var valid4 = true;}if(valid4){if(data4.startDays !== undefined){let data6 = data4.startDays;const _errs18 = errors;if(errors === _errs18){if(Array.isArray(data6)){var valid5 = true;const len0 = data6.length;for(let i0=0; i0 1){const indices0 = {};for(;i1--;){let item0 = data6[i1];if(!(((typeof item0 == "number") && (!(item0 % 1) && !isNaN(item0))) && (isFinite(item0)))){continue;}if(typeof indices0[item0] == "number"){j0 = indices0[item0];validate41.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break;}indices0[item0] = i1;}}}}else {validate41.errors = [{instancePath:instancePath+"/billingCycles/startDays",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/properties/startDays/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid4 = _errs18 === errors;}else {var valid4 = true;}}}else {validate41.errors = [{instancePath:instancePath+"/billingCycles",schemaPath:"#/$defs/BillingCyclesProductSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs12 === errors;}else {var valid0 = true;}if(valid0){if(data.defaultRepaymentPeriodCount !== undefined){let data8 = data.defaultRepaymentPeriodCount;const _errs22 = errors;if(!(((typeof data8 == "number") && (!(data8 % 1) && !isNaN(data8))) && (isFinite(data8)))){validate41.errors = [{instancePath:instancePath+"/defaultRepaymentPeriodCount",schemaPath:"#/properties/defaultRepaymentPeriodCount/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.firstRepaymentDueDateOffset !== undefined){let data9 = data.firstRepaymentDueDateOffset;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data9 && typeof data9 == "object" && !Array.isArray(data9)){if(data9.defaultValue !== undefined){let data10 = data9.defaultValue;const _errs28 = errors;if(!(((typeof data10 == "number") && (!(data10 % 1) && !isNaN(data10))) && (isFinite(data10)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/defaultValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/defaultValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs28 === errors;}else {var valid8 = true;}if(valid8){if(data9.encodedKey !== undefined){const _errs30 = errors;if(typeof data9.encodedKey !== "string"){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/encodedKey",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid8 = _errs30 === errors;}else {var valid8 = true;}if(valid8){if(data9.maxValue !== undefined){let data12 = data9.maxValue;const _errs32 = errors;if(!(((typeof data12 == "number") && (!(data12 % 1) && !isNaN(data12))) && (isFinite(data12)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/maxValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/maxValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs32 === errors;}else {var valid8 = true;}if(valid8){if(data9.minValue !== undefined){let data13 = data9.minValue;const _errs34 = errors;if(!(((typeof data13 == "number") && (!(data13 % 1) && !isNaN(data13))) && (isFinite(data13)))){validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset/minValue",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/properties/minValue/type",keyword:"type",params:{type: "integer"},message:"must be integer"}];return false;}var valid8 = _errs34 === errors;}else {var valid8 = true;}}}}}else {validate41.errors = [{instancePath:instancePath+"/firstRepaymentDueDateOffset",schemaPath:"#/$defs/IntegerIntervalConstraintsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.fixedDaysOfMonth !== undefined){let data14 = data.fixedDaysOfMonth;const _errs36 = errors;if(errors === _errs36){if(Array.isArray(data14)){var valid9 = true;const len1 = data14.length;for(let i2=0; i2 1){outer0:for(;i1--;){for(j0 = i1; j0--;){if(func0(data4[i1], data4[j0])){validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/uniqueItems",keyword:"uniqueItems",params:{i: i1, j: j0},message:"must NOT have duplicate items (items ## "+j0+" and "+i1+" are identical)"}];return false;break outer0;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/linkedAccountOptions",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/linkedAccountOptions/type",keyword:"type",params:{type: "array"},message:"must be array"}];return false;}}var valid2 = _errs11 === errors;}else {var valid2 = true;}if(valid2){if(data1.settlementMethod !== undefined){let data6 = data1.settlementMethod;const _errs14 = errors;if(!(((data6 === "FULL_DUE_AMOUNTS") || (data6 === "PARTIAL_DUE_AMOUNTS")) || (data6 === "NO_AUTOMATED_TRANSFERS"))){validate10.errors = [{instancePath:instancePath+"/accountLinkSettings/settlementMethod",schemaPath:"#/$defs/AccountLinkSettingsaf30/properties/settlementMethod/enum",keyword:"enum",params:{allowedValues: schema14.properties.settlementMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid2 = _errs14 === errors;}else {var valid2 = true;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/accountLinkSettings",schemaPath:"#/$defs/AccountLinkSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs3 === errors;}else {var valid0 = true;}if(valid0){if(data.adjustInterestForFirstInstallment !== undefined){const _errs15 = errors;if(typeof data.adjustInterestForFirstInstallment !== "boolean"){validate10.errors = [{instancePath:instancePath+"/adjustInterestForFirstInstallment",schemaPath:"#/properties/adjustInterestForFirstInstallment/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs15 === errors;}else {var valid0 = true;}if(valid0){if(data.allowCustomRepaymentAllocation !== undefined){const _errs17 = errors;if(typeof data.allowCustomRepaymentAllocation !== "boolean"){validate10.errors = [{instancePath:instancePath+"/allowCustomRepaymentAllocation",schemaPath:"#/properties/allowCustomRepaymentAllocation/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid0 = _errs17 === errors;}else {var valid0 = true;}if(valid0){if(data.arrearsSettings !== undefined){const _errs19 = errors;if(!(validate13(data.arrearsSettings, {instancePath:instancePath+"/arrearsSettings",parentData:data,parentDataProperty:"arrearsSettings",rootData}))){vErrors = vErrors === null ? validate13.errors : vErrors.concat(validate13.errors);errors = vErrors.length;}var valid0 = _errs19 === errors;}else {var valid0 = true;}if(valid0){if(data.availabilitySettings !== undefined){const _errs20 = errors;if(!(validate15(data.availabilitySettings, {instancePath:instancePath+"/availabilitySettings",parentData:data,parentDataProperty:"availabilitySettings",rootData}))){vErrors = vErrors === null ? validate15.errors : vErrors.concat(validate15.errors);errors = vErrors.length;}var valid0 = _errs20 === errors;}else {var valid0 = true;}if(valid0){if(data.category !== undefined){const _errs21 = errors;let valid5;valid5 = false;for(const v0 of schema11.properties.category.enum){if(func0(data.category, v0)){valid5 = true;break;}}if(!valid5){validate10.errors = [{instancePath:instancePath+"/category",schemaPath:"#/properties/category/enum",keyword:"enum",params:{allowedValues: schema11.properties.category.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs21 === errors;}else {var valid0 = true;}if(valid0){if(data.creationDate !== undefined){const _errs22 = errors;if(errors === _errs22){if(errors === _errs22){if(!(typeof data.creationDate === "string")){validate10.errors = [{instancePath:instancePath+"/creationDate",schemaPath:"#/properties/creationDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs22 === errors;}else {var valid0 = true;}if(valid0){if(data.creditArrangementSettings !== undefined){let data13 = data.creditArrangementSettings;const _errs24 = errors;const _errs25 = errors;if(errors === _errs25){if(data13 && typeof data13 == "object" && !Array.isArray(data13)){if(data13.creditArrangementRequirement !== undefined){let data14 = data13.creditArrangementRequirement;if(!(((data14 === "OPTIONAL") || (data14 === "REQUIRED")) || (data14 === "NOT_REQUIRED"))){validate10.errors = [{instancePath:instancePath+"/creditArrangementSettings/creditArrangementRequirement",schemaPath:"#/$defs/CreditArrangementSettingsaf30/properties/creditArrangementRequirement/enum",keyword:"enum",params:{allowedValues: schema20.properties.creditArrangementRequirement.enum},message:"must be equal to one of the allowed values"}];return false;}}}else {validate10.errors = [{instancePath:instancePath+"/creditArrangementSettings",schemaPath:"#/$defs/CreditArrangementSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs24 === errors;}else {var valid0 = true;}if(valid0){if(data.currency !== undefined){let data15 = data.currency;const _errs29 = errors;const _errs30 = errors;if(errors === _errs30){if(data15 && typeof data15 == "object" && !Array.isArray(data15)){if(data15.code !== undefined){const _errs33 = errors;let valid10;valid10 = false;for(const v1 of schema21.properties.code.enum){if(func0(data15.code, v1)){valid10 = true;break;}}if(!valid10){validate10.errors = [{instancePath:instancePath+"/currency/code",schemaPath:"#/$defs/Currencyaf30/properties/code/enum",keyword:"enum",params:{allowedValues: schema21.properties.code.enum},message:"must be equal to one of the allowed values"}];return false;}var valid9 = _errs33 === errors;}else {var valid9 = true;}if(valid9){if(data15.currencyCode !== undefined){const _errs34 = errors;if(typeof data15.currencyCode !== "string"){validate10.errors = [{instancePath:instancePath+"/currency/currencyCode",schemaPath:"#/$defs/Currencyaf30/properties/currencyCode/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid9 = _errs34 === errors;}else {var valid9 = true;}}}else {validate10.errors = [{instancePath:instancePath+"/currency",schemaPath:"#/$defs/Currencyaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs29 === errors;}else {var valid0 = true;}if(valid0){if(data.encodedKey !== undefined){const _errs36 = errors;if(typeof data.encodedKey !== "string"){validate10.errors = [{instancePath:instancePath+"/encodedKey",schemaPath:"#/properties/encodedKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs36 === errors;}else {var valid0 = true;}if(valid0){if(data.feesSettings !== undefined){const _errs38 = errors;if(!(validate17(data.feesSettings, {instancePath:instancePath+"/feesSettings",parentData:data,parentDataProperty:"feesSettings",rootData}))){vErrors = vErrors === null ? validate17.errors : vErrors.concat(validate17.errors);errors = vErrors.length;}var valid0 = _errs38 === errors;}else {var valid0 = true;}if(valid0){if(data.fundingSettings !== undefined){const _errs39 = errors;if(!(validate21(data.fundingSettings, {instancePath:instancePath+"/fundingSettings",parentData:data,parentDataProperty:"fundingSettings",rootData}))){vErrors = vErrors === null ? validate21.errors : vErrors.concat(validate21.errors);errors = vErrors.length;}var valid0 = _errs39 === errors;}else {var valid0 = true;}if(valid0){if(data.gracePeriodSettings !== undefined){const _errs40 = errors;if(!(validate23(data.gracePeriodSettings, {instancePath:instancePath+"/gracePeriodSettings",parentData:data,parentDataProperty:"gracePeriodSettings",rootData}))){vErrors = vErrors === null ? validate23.errors : vErrors.concat(validate23.errors);errors = vErrors.length;}var valid0 = _errs40 === errors;}else {var valid0 = true;}if(valid0){if(data.id !== undefined){const _errs41 = errors;if(typeof data.id !== "string"){validate10.errors = [{instancePath:instancePath+"/id",schemaPath:"#/properties/id/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs41 === errors;}else {var valid0 = true;}if(valid0){if(data.interestSettings !== undefined){const _errs43 = errors;if(!(validate25(data.interestSettings, {instancePath:instancePath+"/interestSettings",parentData:data,parentDataProperty:"interestSettings",rootData}))){vErrors = vErrors === null ? validate25.errors : vErrors.concat(validate25.errors);errors = vErrors.length;}var valid0 = _errs43 === errors;}else {var valid0 = true;}if(valid0){if(data.internalControls !== undefined){const _errs44 = errors;if(!(validate31(data.internalControls, {instancePath:instancePath+"/internalControls",parentData:data,parentDataProperty:"internalControls",rootData}))){vErrors = vErrors === null ? validate31.errors : vErrors.concat(validate31.errors);errors = vErrors.length;}var valid0 = _errs44 === errors;}else {var valid0 = true;}if(valid0){if(data.lastModifiedDate !== undefined){const _errs45 = errors;if(errors === _errs45){if(errors === _errs45){if(!(typeof data.lastModifiedDate === "string")){validate10.errors = [{instancePath:instancePath+"/lastModifiedDate",schemaPath:"#/properties/lastModifiedDate/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}}}var valid0 = _errs45 === errors;}else {var valid0 = true;}if(valid0){if(data.loanAmountSettings !== undefined){const _errs47 = errors;if(!(validate33(data.loanAmountSettings, {instancePath:instancePath+"/loanAmountSettings",parentData:data,parentDataProperty:"loanAmountSettings",rootData}))){vErrors = vErrors === null ? validate33.errors : vErrors.concat(validate33.errors);errors = vErrors.length;}var valid0 = _errs47 === errors;}else {var valid0 = true;}if(valid0){if(data.name !== undefined){const _errs48 = errors;if(typeof data.name !== "string"){validate10.errors = [{instancePath:instancePath+"/name",schemaPath:"#/properties/name/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs48 === errors;}else {var valid0 = true;}if(valid0){if(data.newAccountSettings !== undefined){let data28 = data.newAccountSettings;const _errs50 = errors;const _errs51 = errors;if(errors === _errs51){if(data28 && typeof data28 == "object" && !Array.isArray(data28)){let missing2;if((((data28.accountInitialState === undefined) && (missing2 = "accountInitialState")) || ((data28.idGeneratorType === undefined) && (missing2 = "idGeneratorType"))) || ((data28.idPattern === undefined) && (missing2 = "idPattern"))){validate10.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/required",keyword:"required",params:{missingProperty: missing2},message:"must have required property '"+missing2+"'"}];return false;}else {if(data28.accountInitialState !== undefined){const _errs54 = errors;let valid13;valid13 = false;for(const v2 of schema46.properties.accountInitialState.enum){if(func0(data28.accountInitialState, v2)){valid13 = true;break;}}if(!valid13){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/accountInitialState",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/accountInitialState/enum",keyword:"enum",params:{allowedValues: schema46.properties.accountInitialState.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs54 === errors;}else {var valid12 = true;}if(valid12){if(data28.idGeneratorType !== undefined){let data30 = data28.idGeneratorType;const _errs55 = errors;if(!((data30 === "INCREMENTAL_NUMBER") || (data30 === "RANDOM_PATTERN"))){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/idGeneratorType",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idGeneratorType/enum",keyword:"enum",params:{allowedValues: schema46.properties.idGeneratorType.enum},message:"must be equal to one of the allowed values"}];return false;}var valid12 = _errs55 === errors;}else {var valid12 = true;}if(valid12){if(data28.idPattern !== undefined){const _errs56 = errors;if(typeof data28.idPattern !== "string"){validate10.errors = [{instancePath:instancePath+"/newAccountSettings/idPattern",schemaPath:"#/$defs/NewAccountSettingsaf30/properties/idPattern/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid12 = _errs56 === errors;}else {var valid12 = true;}}}}}else {validate10.errors = [{instancePath:instancePath+"/newAccountSettings",schemaPath:"#/$defs/NewAccountSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs50 === errors;}else {var valid0 = true;}if(valid0){if(data.notes !== undefined){const _errs58 = errors;if(typeof data.notes !== "string"){validate10.errors = [{instancePath:instancePath+"/notes",schemaPath:"#/properties/notes/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid0 = _errs58 === errors;}else {var valid0 = true;}if(valid0){if(data.offsetSettings !== undefined){let data33 = data.offsetSettings;const _errs60 = errors;const _errs61 = errors;if(errors === _errs61){if(data33 && typeof data33 == "object" && !Array.isArray(data33)){if(data33.allowOffset !== undefined){if(typeof data33.allowOffset !== "boolean"){validate10.errors = [{instancePath:instancePath+"/offsetSettings/allowOffset",schemaPath:"#/$defs/OffsetSettingsaf30/properties/allowOffset/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}else {validate10.errors = [{instancePath:instancePath+"/offsetSettings",schemaPath:"#/$defs/OffsetSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs60 === errors;}else {var valid0 = true;}if(valid0){if(data.paymentSettings !== undefined){const _errs66 = errors;if(!(validate35(data.paymentSettings, {instancePath:instancePath+"/paymentSettings",parentData:data,parentDataProperty:"paymentSettings",rootData}))){vErrors = vErrors === null ? validate35.errors : vErrors.concat(validate35.errors);errors = vErrors.length;}var valid0 = _errs66 === errors;}else {var valid0 = true;}if(valid0){if(data.penaltySettings !== undefined){const _errs67 = errors;if(!(validate39(data.penaltySettings, {instancePath:instancePath+"/penaltySettings",parentData:data,parentDataProperty:"penaltySettings",rootData}))){vErrors = vErrors === null ? validate39.errors : vErrors.concat(validate39.errors);errors = vErrors.length;}var valid0 = _errs67 === errors;}else {var valid0 = true;}if(valid0){if(data.redrawSettings !== undefined){let data37 = data.redrawSettings;const _errs68 = errors;const _errs69 = errors;if(errors === _errs69){if(data37 && typeof data37 == "object" && !Array.isArray(data37)){let missing3;if((data37.allowRedraw === undefined) && (missing3 = "allowRedraw")){validate10.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/required",keyword:"required",params:{missingProperty: missing3},message:"must have required property '"+missing3+"'"}];return false;}else {if(data37.allowRedraw !== undefined){if(typeof data37.allowRedraw !== "boolean"){validate10.errors = [{instancePath:instancePath+"/redrawSettings/allowRedraw",schemaPath:"#/$defs/ProductRedrawSettingsaf30/properties/allowRedraw/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}}}}else {validate10.errors = [{instancePath:instancePath+"/redrawSettings",schemaPath:"#/$defs/ProductRedrawSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs68 === errors;}else {var valid0 = true;}if(valid0){if(data.scheduleSettings !== undefined){const _errs74 = errors;if(!(validate41(data.scheduleSettings, {instancePath:instancePath+"/scheduleSettings",parentData:data,parentDataProperty:"scheduleSettings",rootData}))){vErrors = vErrors === null ? validate41.errors : vErrors.concat(validate41.errors);errors = vErrors.length;}var valid0 = _errs74 === errors;}else {var valid0 = true;}if(valid0){if(data.securitySettings !== undefined){let data40 = data.securitySettings;const _errs75 = errors;const _errs76 = errors;if(errors === _errs76){if(data40 && typeof data40 == "object" && !Array.isArray(data40)){if(data40.isCollateralEnabled !== undefined){const _errs79 = errors;if(typeof data40.isCollateralEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/securitySettings/isCollateralEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isCollateralEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs79 === errors;}else {var valid19 = true;}if(valid19){if(data40.isGuarantorsEnabled !== undefined){const _errs81 = errors;if(typeof data40.isGuarantorsEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/securitySettings/isGuarantorsEnabled",schemaPath:"#/$defs/SecuritySettingsaf30/properties/isGuarantorsEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid19 = _errs81 === errors;}else {var valid19 = true;}if(valid19){if(data40.requiredGuaranties !== undefined){let data43 = data40.requiredGuaranties;const _errs83 = errors;if(!((typeof data43 == "number") && (isFinite(data43)))){validate10.errors = [{instancePath:instancePath+"/securitySettings/requiredGuaranties",schemaPath:"#/$defs/SecuritySettingsaf30/properties/requiredGuaranties/type",keyword:"type",params:{type: "number"},message:"must be number"}];return false;}var valid19 = _errs83 === errors;}else {var valid19 = true;}}}}else {validate10.errors = [{instancePath:instancePath+"/securitySettings",schemaPath:"#/$defs/SecuritySettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs75 === errors;}else {var valid0 = true;}if(valid0){if(data.state !== undefined){let data44 = data.state;const _errs85 = errors;if(!((data44 === "ACTIVE") || (data44 === "INACTIVE"))){validate10.errors = [{instancePath:instancePath+"/state",schemaPath:"#/properties/state/enum",keyword:"enum",params:{allowedValues: schema11.properties.state.enum},message:"must be equal to one of the allowed values"}];return false;}var valid0 = _errs85 === errors;}else {var valid0 = true;}if(valid0){if(data.taxSettings !== undefined){let data45 = data.taxSettings;const _errs86 = errors;const _errs87 = errors;if(errors === _errs87){if(data45 && typeof data45 == "object" && !Array.isArray(data45)){if(data45.taxCalculationMethod !== undefined){let data46 = data45.taxCalculationMethod;const _errs90 = errors;if(!((data46 === "INCLUSIVE") || (data46 === "EXCLUSIVE"))){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxCalculationMethod",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxCalculationMethod/enum",keyword:"enum",params:{allowedValues: schema64.properties.taxCalculationMethod.enum},message:"must be equal to one of the allowed values"}];return false;}var valid21 = _errs90 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnFeesEnabled !== undefined){const _errs91 = errors;if(typeof data45.taxesOnFeesEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnFeesEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnFeesEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs91 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnInterestEnabled !== undefined){const _errs93 = errors;if(typeof data45.taxesOnInterestEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnInterestEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnInterestEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs93 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxesOnPenaltyEnabled !== undefined){const _errs95 = errors;if(typeof data45.taxesOnPenaltyEnabled !== "boolean"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxesOnPenaltyEnabled",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxesOnPenaltyEnabled/type",keyword:"type",params:{type: "boolean"},message:"must be boolean"}];return false;}var valid21 = _errs95 === errors;}else {var valid21 = true;}if(valid21){if(data45.taxSourceKey !== undefined){const _errs97 = errors;if(typeof data45.taxSourceKey !== "string"){validate10.errors = [{instancePath:instancePath+"/taxSettings/taxSourceKey",schemaPath:"#/$defs/TaxSettingsaf30/properties/taxSourceKey/type",keyword:"type",params:{type: "string"},message:"must be string"}];return false;}var valid21 = _errs97 === errors;}else {var valid21 = true;}}}}}}else {validate10.errors = [{instancePath:instancePath+"/taxSettings",schemaPath:"#/$defs/TaxSettingsaf30/type",keyword:"type",params:{type: "object"},message:"must be object"}];return false;}}var valid0 = _errs86 === errors;}else {var valid0 = true;}if(valid0){if(data.templates !== undefined){let data51 = data.templates;const _errs99 = errors;if(errors === _errs99){if(Array.isArray(data51)){var valid22 = true;const len1 = data51.length;for(let i2=0; i2