@@ -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