@@ -2,6 +2,8 @@ import request from "request";
2
2
import IOutcomesService from './IOutcomesService' ;
3
3
import _ from 'lodash' ;
4
4
5
+ import find_race_code from './race_codes' ;
6
+
5
7
export default class CLQOutcomesService extends IOutcomesService {
6
8
constructor ( params ) {
7
9
super ( ) ;
@@ -11,20 +13,60 @@ export default class CLQOutcomesService extends IOutcomesService {
11
13
this . filters = params . filters ;
12
14
}
13
15
16
+ _genderMapping ( gender ) {
17
+ const lowered = gender ? _ . toLower ( gender ) : null ;
18
+ let code = 'UNK' ;
19
+ let display = 'UNKNOWN' ;
20
+ if ( lowered === "female" || lowered === 'f' ) {
21
+ code = '703118005' ;
22
+ display = 'Female' ;
23
+ } else if ( lowered === 'male' || lowered === 'm' ) {
24
+ code = '703117000' ;
25
+ display = 'Male' ;
26
+ }
27
+ return {
28
+ code : code ,
29
+ displayName : display ,
30
+ codeSystem : 'SNOMEDCT'
31
+ } ;
32
+ }
33
+
34
+ __raceCodeMapping ( race ) {
35
+ let code = find_race_code ( race ) ;
36
+ if ( code ) {
37
+ // if the value is one of the codes from the code system make sure it is one that clq supports
38
+ if ( ! [ '2028-9' , '2106-3' , '2054-5' , '2131-1' ] . includes ( code . code ) ) {
39
+ code = {
40
+ code : '2131-1' ,
41
+ text : 'Other Race'
42
+ } ;
43
+ }
44
+ return {
45
+ "codeSystemName" : "HL7 v3 Code System Race" ,
46
+ "codeSystem" : "2.16.840.1.113883.5.104" ,
47
+ "code" : code . code ,
48
+ "displayName" : code . text
49
+ } ;
50
+ }
51
+
52
+ return {
53
+ "codeSystemName" : "HL7 v3 Code System Race" ,
54
+ "codeSystem" : "2.16.840.1.113883.5.104" ,
55
+ "code" : 'UNK'
56
+ } ;
57
+
58
+ }
14
59
/* Build the CLQ demograpchics filter section based off of the Compass filter criteria
15
60
*/
16
61
buildDemographicsFilter ( activeFilterValues ) {
17
62
const filter = { } ;
18
63
const gender = activeFilterValues [ "shr.core.BirthSex" ] ;
19
64
const race = activeFilterValues [ "shr.core.Race" ] ;
65
+ const ethnicity = activeFilterValues [ "shr.core.Ethnicity" ] ;
20
66
const age = activeFilterValues [ "shr.core.DateOfBirth" ] ;
21
67
const age_at_diagnosis = activeFilterValues [ "shr.core.DateOfDiagnosis" ] ;
22
68
if ( gender ) {
23
- filter . gender = {
24
- codeSystemName : "AdministrativeGender" ,
25
- codeSystem : "2.16.840.1.113883.4.642.2.1" ,
26
- code : gender . value
27
- } ;
69
+ filter . gender = this . _genderMapping ( gender . value ) ;
28
70
}
29
71
if ( age ) {
30
72
filter . age = {
@@ -39,10 +81,15 @@ export default class CLQOutcomesService extends IOutcomesService {
39
81
} ;
40
82
}
41
83
if ( race ) {
42
- filter . race = {
43
- "codeSystemName" : "HL7 v3 Code System Race" ,
44
- "codeSystem" : "2.16.840.1.113883.5.104" ,
45
- "code" : race . value
84
+ filter . race = this . __raceCodeMapping ( race . value ) ;
85
+ }
86
+
87
+ if ( ethnicity ) {
88
+ const ethCode = ethnicity . value ;
89
+ filter . ethnicity = {
90
+ "codeSystemName" : "HL7 v3 Code System Ethnicity" ,
91
+ "codeSystem" : "2.16.840.1.113883.5.50" ,
92
+ "code" : ethCode
46
93
} ;
47
94
}
48
95
return filter ;
@@ -91,9 +138,9 @@ export default class CLQOutcomesService extends IOutcomesService {
91
138
const code = option . reference . receptorTypeCodeableConcept ;
92
139
const value = option . value ;
93
140
filter . push ( {
94
- code : code . codeValue . code ,
95
- codeSystem : code . codeSystem . uri ,
96
- displayName : code . displayText . string ,
141
+ code : code . codeValue . value ,
142
+ codeSystem : code . codeSystem . value ,
143
+ displayName : code . displayText . value ,
97
144
value : _ . startCase ( _ . toLower ( value ) )
98
145
} ) ;
99
146
}
@@ -116,7 +163,9 @@ export default class CLQOutcomesService extends IOutcomesService {
116
163
request ( {
117
164
url : this . serviceUrl ,
118
165
method : "POST" ,
119
- headers : { 'Authorization' : this . apiKey } ,
166
+ headers : {
167
+ 'Authorization' : this . apiKey
168
+ } ,
120
169
json : filter
121
170
} , ( err , _response , data ) => {
122
171
if ( err ) {
0 commit comments