@osqo-npm/osqo-businesrules-package
Version:
Contains Shared BusinessRules
68 lines (67 loc) • 2.94 kB
JavaScript
;
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;