UNPKG

@osqo-npm/osqo-businesrules-package

Version:
68 lines (67 loc) 2.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.isValidABN = exports.hasThreeYearsOccupancy = exports.hasCompleteIdentityDocumentCombination = exports.hasOnePrimaryIdentityDoc = exports.calculateDocPoints = void 0; var constants_npm_package_1 = require("@osqo-npm/constants-npm-package"); var luxon_1 = require("luxon"); /** * Purpose: Common function to calculate borrowerParty identity points according to documents. * @param identityArray * @returns */ var calculateDocPoints = function (identityArray) { return identityArray.reduce(function (points, currentDoc) { return points + constants_npm_package_1.enum_document_points[currentDoc.type]; }, 0); }; exports.calculateDocPoints = calculateDocPoints; /** * Purpose: Common function to determine if one document comes from the primary category * @param identityArray * @returns */ var hasOnePrimaryIdentityDoc = function (identityArray) { return identityArray.some(function (doc) { return constants_npm_package_1.enum_identity_type_category[doc.type] === 'Primary'; }); }; exports.hasOnePrimaryIdentityDoc = hasOnePrimaryIdentityDoc; /** * Purpose: Common document validates the identity documents combination. * @param identityArray * @returns */ var hasCompleteIdentityDocumentCombination = function (identityArray) { return (0, exports.hasOnePrimaryIdentityDoc)(identityArray) && (0, exports.calculateDocPoints)(identityArray) >= 100; }; exports.hasCompleteIdentityDocumentCombination = hasCompleteIdentityDocumentCombination; /** * Purpose: Calculates the length of occupancy in years and compares with required * @returns boolean * @param occupantDates */ var hasThreeYearsOccupancy = function (occupantDates) { var lengthOfOccupancy = 0; occupantDates.forEach(function (occupantDate) { var diff = luxon_1.DateTime.fromFormat(occupantDate.dateMovedOut, constants_npm_package_1.defaultDateFormatForLuxon).diff(luxon_1.DateTime.fromFormat(occupantDate.dateMovedIn, constants_npm_package_1.defaultDateFormatForLuxon)); lengthOfOccupancy += diff.as('years'); }); return lengthOfOccupancy >= constants_npm_package_1.minimumOccupancyPeriodInYears; }; exports.hasThreeYearsOccupancy = hasThreeYearsOccupancy; var weights = [10, 1, 3, 5, 7, 9, 11, 13, 15, 17, 19]; function isValidABN(rawAbn) { if (!rawAbn) { return false; } // strip non-alphanumeric characters var abn = rawAbn.toString().replace(/[^a-z\d]/gi, ''); // check if length is 11 digits if (abn.length !== 11) { return false; } // apply ato check method var sum = 0; weights.forEach(function (weight, position) { var digit = Number(abn[position]) - (position ? 0 : 1); sum += weight * digit; }); var checksum = sum % 89; return checksum === 0; } exports.isValidABN = isValidABN;