/
blocker.js
66 lines (53 loc) · 1.7 KB
/
blocker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
"use strict";
var DoubleMetaphone = require('doublemetaphone');
var encoder = new DoubleMetaphone();
/* Data schema (example)
data: {
"name": {
"first": "John",
"middle": "X",
"last": "Doe"
},
"gender": "Male",
"address": {
"zip": "10001",
"street": "123 Main St",
"city": "Madison",
"state": "WI",
"country": "US"
},
"email": "john@doe.net",
"phone": "5556667777",
"dob": "1975-05-01"
}
*/
//takes patient data (demographics section) and
//calculates and returns blocking traits for the matching module
function calculate(data) {
var traits = {};
/*
The following is a list of blocking traits computed on entities for this matching module:
LNMPDOB (last name metaphone plus DOB)
LNMPFNPC (last name metaphone plus first name plus zip code)
LNFN (last name metaphone plus first name)
SMDLASTNAME13 (sex, month of birth, day of birth, first 3 letters of last name)
*/
var lnmp = encoder.doubleMetaphone(data.name.last).primary; // last name metaphone
var fn = data.name.first.toUpperCase(); // first name
var ln13 = data.name.last.substring(0, 3).toUpperCase(); // first 3 letters of last name
var zip = data.address.zip;
var dob = data.dob.substring(0, 10);
var mdb = data.dob.substring(5, 10);
var gender = "";
if (data.gender) {
gender = data.gender.toUpperCase();
} else {
gender = 'UNKNOWN';
}
traits.lnmpdob = lnmp + dob;
traits.lnmpfnpc = lnmp + fn + zip;
traits.lnfn = lnmp + fn;
traits.smdlastname13 = gender + mdb + ln13;
return traits;
}
module.exports.calculate = calculate;