Skip to content

Commit 96a2d09

Browse files
Add support for evidenceSourceId template key
1 parent 6ca5607 commit 96a2d09

1 file changed

Lines changed: 77 additions & 61 deletions

File tree

src/sentenceTemplates.ts

Lines changed: 77 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ const TEMPLATE_KEYS = {
99
conditions: '{conditions}',
1010
subject: '{subject}',
1111
evidence: '{evidence}',
12+
evidenceSourceId: '{evidenceSourceId}',
1213
relevance: '{relevance}',
1314
evidenceLevel: '{evidenceLevel}',
1415
preclinicalWarning: '{preclinicalWarning}',
@@ -35,17 +36,19 @@ const DEFAULT_TEMPLATE = `Given ${
3536
* - evidences
3637
* - evidence levels
3738
*
38-
* @param {string} template string
39-
* @param {object} record statement record
40-
* @param {object} [keys=TEMPLATE_KEYS] template key-value pairs
39+
* @param {boolean} [opt.evidenceSourceId=false] whether evidenceSourceId is used instead of evidence
40+
* @param {object} [opt.keys=TEMPLATE_KEYS] template key-value pairs
41+
* @param {object} opt.ecord statement record
42+
* @param {string} opt.template string
4143
*
4244
* @returns the updated template string
4345
*/
44-
const addEvidence = (
45-
template: string,
46-
record: StatementRecord,
46+
const addEvidence = ({
47+
evidenceSourceId = false,
4748
keys = TEMPLATE_KEYS,
48-
) => {
49+
record,
50+
template,
51+
}) => {
4952
// remove preexisting evidence info, if any, e.g. from default template
5053
let updated = template
5154
.replace(` (${keys.evidenceLevel})`, '')
@@ -69,7 +72,11 @@ const addEvidence = (
6972
}
7073

7174
// evidences
72-
updated += ` (${keys.evidence})`;
75+
if (evidenceSourceId) {
76+
updated += ` (${keys.evidenceSourceId})`;
77+
} else {
78+
updated += ` (${keys.evidence})`;
79+
}
7380

7481
// evidence levels
7582
if (record.evidenceLevel) {
@@ -102,49 +109,49 @@ const chooseDefaultTemplate = (record: StatementRecord, keys = TEMPLATE_KEYS) =>
102109
: '';
103110

104111
if (hasDisease && hasVariant && relevance === 'recurrent') {
105-
return addEvidence(
106-
`${multiVariant}${keys.variant} is ${keys.relevance} in ${keys.disease}`,
112+
return addEvidence({
113+
template: `${multiVariant}${keys.variant} is ${keys.relevance} in ${keys.disease}`,
107114
record,
108-
);
115+
});
109116
}
110117
if (
111118
subjectType === 'disease'
112119
&& hasVariant
113120
) {
114121
if (relevance === 'diagnostic indicator') {
115-
return addEvidence(
116-
`${multiVariant}${keys.variant} is ${vowel || 'a'} ${keys.relevance} of ${keys.subject}`,
122+
return addEvidence({
123+
template: `${multiVariant}${keys.variant} is ${vowel || 'a'} ${keys.relevance} of ${keys.subject}`,
117124
record,
118-
);
125+
});
119126
}
120127
if (relevance.includes('diagnos')) {
121-
return addEvidence(
122-
`${multiVariant}${keys.variant} ${keys.relevance} of ${keys.subject}`,
128+
return addEvidence({
129+
template: `${multiVariant}${keys.variant} ${keys.relevance} of ${keys.subject}`,
123130
record,
124-
);
131+
});
125132
}
126133
if (relevance.includes('predisposing')) {
127-
return addEvidence(
128-
`${multiVariant}${keys.variant} is ${keys.relevance} to ${keys.subject}`,
134+
return addEvidence({
135+
template: `${multiVariant}${keys.variant} is ${keys.relevance} to ${keys.subject}`,
129136
record,
130-
);
137+
});
131138
}
132139
if (relevance === 'mutation hotspot') {
133-
return addEvidence(
134-
`${keys.variant} is ${vowel || 'a'} ${keys.relevance} in ${keys.subject}`,
140+
return addEvidence({
141+
template: `${keys.variant} is ${vowel || 'a'} ${keys.relevance} in ${keys.subject}`,
135142
record,
136-
);
143+
});
137144
}
138145
if (relevance === 'tumourigenesis') {
139-
return addEvidence(
140-
`${multiVariant}${keys.variant} contributes to ${keys.relevance} of ${keys.subject}`,
146+
return addEvidence({
147+
template: `${multiVariant}${keys.variant} contributes to ${keys.relevance} of ${keys.subject}`,
141148
record,
142-
);
149+
});
143150
}
144-
return addEvidence(
145-
`${multiVariant}${keys.variant} is ${keys.relevance} in ${keys.subject}`,
151+
return addEvidence({
152+
template: `${multiVariant}${keys.variant} is ${keys.relevance} in ${keys.subject}`,
146153
record,
147-
);
154+
});
148155
}
149156

150157
if (subjectType === 'feature' || subjectType.endsWith('variant')) {
@@ -153,15 +160,15 @@ const chooseDefaultTemplate = (record: StatementRecord, keys = TEMPLATE_KEYS) =>
153160

154161
if (isFunctional && hasVariant) {
155162
if (!hasDisease) {
156-
return addEvidence(
157-
`${keys.variant} results in ${keys.relevance} of ${keys.subject}`,
163+
return addEvidence({
164+
template: `${keys.variant} results in ${keys.relevance} of ${keys.subject}`,
158165
record,
159-
);
166+
});
160167
}
161-
return addEvidence(
162-
`${keys.variant} results in ${keys.relevance} of ${keys.subject} in ${keys.disease}`,
168+
return addEvidence({
169+
template: `${keys.variant} results in ${keys.relevance} of ${keys.subject} in ${keys.disease}`,
163170
record,
164-
);
171+
});
165172
}
166173
let article = '';
167174

@@ -172,28 +179,28 @@ const chooseDefaultTemplate = (record: StatementRecord, keys = TEMPLATE_KEYS) =>
172179
}
173180

174181
if (!hasDisease) {
175-
return addEvidence(
176-
`${keys.subject} is ${article}${keys.relevance}`,
182+
return addEvidence({
183+
template: `${keys.subject} is ${article}${keys.relevance}`,
177184
record,
178-
);
185+
});
179186
}
180-
return addEvidence(
181-
`${keys.subject} is ${article}${keys.relevance} in ${keys.disease}`,
187+
return addEvidence({
188+
template: `${keys.subject} is ${article}${keys.relevance} in ${keys.disease}`,
182189
record,
183-
);
190+
});
184191
}
185192

186193
if (subjectType === 'therapy' && hasVariant) {
187194
if (hasDisease) {
188-
return addEvidence(
189-
`${multiVariant}${keys.variant} is associated with ${keys.relevance} to ${keys.subject} in ${keys.disease}`,
195+
return addEvidence({
196+
template: `${multiVariant}${keys.variant} is associated with ${keys.relevance} to ${keys.subject} in ${keys.disease}`,
190197
record,
191-
);
198+
});
192199
}
193-
return addEvidence(
194-
`${multiVariant}${keys.variant} is associated with ${keys.relevance} to ${keys.subject}`,
200+
return addEvidence({
201+
template: `${multiVariant}${keys.variant} is associated with ${keys.relevance} to ${keys.subject}`,
195202
record,
196-
);
203+
});
197204
}
198205

199206
// prognostic statements
@@ -209,40 +216,42 @@ const chooseDefaultTemplate = (record: StatementRecord, keys = TEMPLATE_KEYS) =>
209216
if (hasDisease) {
210217
template += ` in ${keys.disease}`;
211218
}
212-
return addEvidence(
219+
return addEvidence({
213220
template,
214221
record,
215-
);
222+
});
216223
}
217224
}
218225

219226
// eligibility to clinical trials statements
220227
if (hasVariant && relevance === 'eligibility' && subjectType === 'clinicaltrial') {
221228
if (hasDisease) {
222-
return addEvidence(
223-
`Patients with ${multiVariant}${keys.variant} in ${keys.disease} are eligible for ${keys.subject}`,
229+
return addEvidence({
230+
template: `Patients with ${multiVariant}${keys.variant} in ${keys.disease} are eligible for ${keys.subject}`,
224231
record,
225-
);
232+
evidenceSourceId: true,
233+
});
226234
}
227-
return addEvidence(
228-
`Patients with ${multiVariant}${keys.variant} are eligible for ${keys.subject}`,
235+
return addEvidence({
236+
template: `Patients with ${multiVariant}${keys.variant} are eligible for ${keys.subject}`,
229237
record,
230-
);
238+
evidenceSourceId: true,
239+
});
231240
}
232241

233242
// default for a single conditions class statement
234243
if (conditionTypes.length === 1) {
235-
return addEvidence(
236-
`${keys.subject} is ${keys.relevance}`,
244+
return addEvidence({
245+
template: `${keys.subject} is ${keys.relevance}`,
237246
record,
238-
);
247+
});
239248
}
240249

241250
// default
242-
return addEvidence(
243-
DEFAULT_TEMPLATE,
251+
return addEvidence({
252+
template: DEFAULT_TEMPLATE,
244253
record,
245-
);
254+
});
246255
};
247256

248257
/**
@@ -349,6 +358,13 @@ const generateStatementSentence = (
349358
substitutions[keys.evidence] = naturalListJoin(words);
350359
}
351360

361+
// add the evidence's sourceId (for clinical trials eligibility; KBDEV-1399)
362+
if (replacementsFound.includes(keys.evidenceSourceId) && record.evidence && record.evidence.length) {
363+
const words = record.evidence.map((e) => previewFunc({ ...e, displayName: e.sourceId }));
364+
highlighted.push(...words);
365+
substitutions[keys.evidenceSourceId] = naturalListJoin(words);
366+
}
367+
352368
// add the evidence level
353369
if (
354370
replacementsFound.includes(keys.evidenceLevel)

0 commit comments

Comments
 (0)