add sanctions_logs table

This commit is contained in:
Josh Harvey 2018-05-07 12:20:22 +03:00
parent d3b7e7c2ad
commit 5ba164e566
3 changed files with 85 additions and 41 deletions

View file

@ -1,9 +1,10 @@
const compliance = require('../lib/compliance') const compliance = require('../lib/compliance')
const ofac = require('../lib/ofac/index') const ofac = require('../lib/ofac/index')
const [firstName, lastName, dateOfBirth] = process.argv.slice(2) const [customerId, firstName, lastName, dateOfBirth] = process.argv.slice(2)
const customer = { const customer = {
id: customerId,
idCardData: {firstName, lastName, dateOfBirth} idCardData: {firstName, lastName, dateOfBirth}
} }
@ -11,7 +12,9 @@ const config = {
sanctionsVerificationActive: true sanctionsVerificationActive: true
} }
const deviceId = 'test-device'
ofac.load() ofac.load()
.then(() => compliance.validateCustomer(config, customer)) .then(() => compliance.validationPatch(deviceId, config, customer))
.then(() => console.log('SUCCESS!')) .then(console.log)
.catch(err => console.log(err)) .catch(err => console.log(err))

View file

@ -1,9 +1,29 @@
const _ = require('lodash/fp') const _ = require('lodash/fp')
const uuid = require('uuid')
const logger = require('./logger') const logger = require('./logger')
const db = require('./db')
const ofac = require('./ofac/index') const ofac = require('./ofac/index')
function matchOfac (customer) { function logSanctionsMatch (deviceId, customer, sanctionsId, alias) {
const sql = `insert into sanctions_logs
(id, device_id, sanctioned_id, sanctioned_alias_id, sanctioned_alias_full_name, customer_id)
values
($1, $2, $3, $4, $5, $6)`
return db.none(sql, [uuid.v4(), deviceId, sanctionsId, alias.id, alias.fullName, customer.id])
}
function logSanctionsMatches (deviceId, customer, results) {
const logAlias = resultId => alias => logSanctionsMatch(deviceId, customer, resultId, alias)
const logResult = result => _.map(logAlias(result.id), result.aliases)
return Promise.all(_.flatMap(logResult, results))
}
function matchOfac (deviceId, customer) {
return Promise.resolve()
.then(() => {
// Probably because we haven't asked for ID yet // Probably because we haven't asked for ID yet
if (!_.isPlainObject(customer.idCardData)) { if (!_.isPlainObject(customer.idCardData)) {
return true return true
@ -34,21 +54,22 @@ function matchOfac (customer) {
const results = ofac.match(nameParts, birthDate, options) const results = ofac.match(nameParts, birthDate, options)
return !_.isEmpty(results) return logSanctionsMatches(deviceId, customer, results)
.then(() => !_.isEmpty(results))
})
} }
function validateOfac (customer) { function validateOfac (deviceId, customer) {
if (customer.sanctionsOverride === 'blocked') return false if (customer.sanctionsOverride === 'blocked') return false
if (customer.sanctionsOverride === 'verified') return true if (customer.sanctionsOverride === 'verified') return true
return !matchOfac(customer) return matchOfac(deviceId, customer)
.then(didMatch => !didMatch)
} }
function validationPatch (config, customer) { function validationPatch (deviceId, config, customer) {
return Promise.resolve() return validateOfac(deviceId, customer)
.then(() => { .then(ofacValidation => {
const ofacValidation = validateOfac(customer)
if (_.isNil(customer.sanctions) || customer.sanctions !== ofacValidation) { if (_.isNil(customer.sanctions) || customer.sanctions !== ofacValidation) {
return {sanctions: ofacValidation} return {sanctions: ofacValidation}
} }

View file

@ -0,0 +1,20 @@
var db = require('./db')
exports.up = function (next) {
const sql =
[`create table sanctions_logs (
id uuid PRIMARY KEY,
device_id text not null,
sanctioned_id text not null,
sanctioned_alias_id text,
sanctioned_alias_full_name text not null,
customer_id uuid not null references customers,
created timestamptz not null default now() )`
]
db.multi(sql, next)
}
exports.down = function (next) {
next()
}