hqmf2js 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Gemfile +5 -10
- data/Gemfile.lock +70 -68
- data/app/assets/javascripts/custom_calculations.js.coffee +72 -0
- data/app/assets/javascripts/hqmf_util.js.coffee +97 -46
- data/app/assets/javascripts/logging_utils.js.coffee +0 -11
- data/app/assets/javascripts/specifics.js.coffee +211 -185
- data/app/assets/javascripts/underscore.js +1200 -0
- data/hqmf2js.gemspec +5 -5
- data/lib/generator/characteristic.js.erb +3 -3
- data/lib/generator/converter.rb +5 -5
- data/lib/generator/data_criteria.js.erb +8 -8
- data/lib/generator/js.rb +25 -5
- data/test/fixtures/codes/codes.xml +6 -0
- data/test/fixtures/patients/larry_vanderman.json +11 -1
- data/test/test_helper.rb +2 -3
- data/test/unit/codes_to_json_test.rb +1 -1
- data/test/unit/custom_calculations_test.rb +74 -0
- data/test/unit/hqmf_from_json_javascript_test.rb +9 -9
- data/test/unit/hqmf_javascript_test.rb +36 -14
- data/test/unit/library_function_test.rb +29 -11
- data/test/unit/specifics_test.rb +200 -82
- metadata +13 -9
- data/test/fixtures/patient_api.js +0 -2823
data/test/unit/specifics_test.rb
CHANGED
@@ -7,7 +7,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
7
7
|
@context = get_js_context(HQMF2JS::Generator::JS.library_functions)
|
8
8
|
test_initialize_js =
|
9
9
|
"
|
10
|
-
|
10
|
+
hqmf.SpecificsManager.initialize({},hqmfjs, {'id':'OccurrenceAEncounter', 'type':'Encounter', 'function':'SourceOccurrenceAEncounter'},{'id':'OccurrenceBEncounter', 'type':'Encounter', 'function':'SourceOccurrenceBEncounter'})
|
11
11
|
hqmfjs.SourceOccurrenceAEncounter = function(patient) {
|
12
12
|
return [{'id':1},{'id':2},{'id':3},{'id':4},{'id':5}]
|
13
13
|
}
|
@@ -21,24 +21,24 @@ class SpecificsTest < Test::Unit::TestCase
|
|
21
21
|
|
22
22
|
def test_specifics_initialized_proper
|
23
23
|
|
24
|
-
@context.eval('
|
25
|
-
@context.eval('
|
26
|
-
@context.eval("
|
27
|
-
@context.eval("
|
28
|
-
@context.eval('
|
29
|
-
@context.eval('
|
30
|
-
@context.eval("
|
31
|
-
@context.eval("
|
32
|
-
@context.eval("
|
24
|
+
@context.eval('hqmf.SpecificsManager.keyLookup[0]').must_equal 'OccurrenceAEncounter'
|
25
|
+
@context.eval('hqmf.SpecificsManager.keyLookup[1]').must_equal 'OccurrenceBEncounter'
|
26
|
+
@context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceAEncounter']").must_equal 0
|
27
|
+
@context.eval("hqmf.SpecificsManager.indexLookup['OccurrenceBEncounter']").must_equal 1
|
28
|
+
@context.eval('hqmf.SpecificsManager.functionLookup[0]').must_equal 'SourceOccurrenceAEncounter'
|
29
|
+
@context.eval('hqmf.SpecificsManager.functionLookup[1]').must_equal 'SourceOccurrenceBEncounter'
|
30
|
+
@context.eval("hqmf.SpecificsManager.typeLookup['Encounter'].length").must_equal 2
|
31
|
+
@context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][0]").must_equal 0
|
32
|
+
@context.eval("hqmf.SpecificsManager.typeLookup['Encounter'][1]").must_equal 1
|
33
33
|
end
|
34
34
|
|
35
35
|
def test_specifics_row_union
|
36
36
|
|
37
37
|
union_rows = "
|
38
38
|
var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1}});
|
39
|
-
var specific1 = new
|
39
|
+
var specific1 = new hqmf.SpecificOccurrence([row1]);
|
40
40
|
var row2 = new Row('OccurrenceAEncounter',{'OccurrenceBEncounter':{'id':2}});
|
41
|
-
var specific2 = new
|
41
|
+
var specific2 = new hqmf.SpecificOccurrence([row2]);
|
42
42
|
result = specific1.union(specific2);
|
43
43
|
result.rows.length;
|
44
44
|
"
|
@@ -153,17 +153,17 @@ class SpecificsTest < Test::Unit::TestCase
|
|
153
153
|
var row5 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':3}});
|
154
154
|
var row6 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':3}});
|
155
155
|
|
156
|
-
var specific1 = new
|
157
|
-
var specific2 = new
|
158
|
-
var specific3 = new
|
159
|
-
var specific4 = new
|
160
|
-
var specific5 = new
|
156
|
+
var specific1 = new hqmf.SpecificOccurrence([row1]);
|
157
|
+
var specific2 = new hqmf.SpecificOccurrence([row2]);
|
158
|
+
var specific3 = new hqmf.SpecificOccurrence([row3,row4]);
|
159
|
+
var specific4 = new hqmf.SpecificOccurrence([row3,row6]);
|
160
|
+
var specific5 = new hqmf.SpecificOccurrence([row5,row6]);
|
161
161
|
|
162
|
-
var allSpecific1 = new
|
162
|
+
var allSpecific1 = new hqmf.SpecificOccurrence();
|
163
163
|
allSpecific1.addIdentityRow();
|
164
164
|
allSpecific1.addIdentityRow();
|
165
165
|
allSpecific1.addIdentityRow();
|
166
|
-
var allSpecific2 = new
|
166
|
+
var allSpecific2 = new hqmf.SpecificOccurrence();
|
167
167
|
allSpecific2.addIdentityRow();
|
168
168
|
allSpecific2.addIdentityRow();
|
169
169
|
allSpecific2.addIdentityRow();
|
@@ -202,6 +202,90 @@ class SpecificsTest < Test::Unit::TestCase
|
|
202
202
|
|
203
203
|
end
|
204
204
|
|
205
|
+
def test_specifics_event_counting
|
206
|
+
|
207
|
+
init_rows = "
|
208
|
+
var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':20}});
|
209
|
+
var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':20}});
|
210
|
+
var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':30}});
|
211
|
+
|
212
|
+
var specific = new hqmf.SpecificOccurrence([row1,row2,row3]);
|
213
|
+
specific.addIdentityRow();
|
214
|
+
|
215
|
+
var pop = new Boolean(true);
|
216
|
+
pop.specificContext = specific;
|
217
|
+
"
|
218
|
+
|
219
|
+
@context.eval(init_rows)
|
220
|
+
@context.eval("specific.uniqueEvents([0])").must_equal 3
|
221
|
+
@context.eval("specific.uniqueEvents([1])").must_equal 2
|
222
|
+
@context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceAEncounter"]').must_equal 0
|
223
|
+
@context.eval('hqmf.SpecificsManager.indexLookup["OccurrenceBEncounter"]').must_equal 1
|
224
|
+
@context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceAEncounter")').must_equal 0
|
225
|
+
@context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceBEncounter")').must_equal 1
|
226
|
+
assert_raise V8::JSError do
|
227
|
+
@context.eval('hqmf.SpecificsManager.getColumnIndex("OccurrenceCEncounter")')
|
228
|
+
end
|
229
|
+
@context.eval('hqmf.SpecificsManager.validate(pop)').must_equal true
|
230
|
+
@context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter"], pop)').must_equal 3
|
231
|
+
@context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceBEncounter"], pop)').must_equal 2
|
232
|
+
@context.eval('hqmf.SpecificsManager.countUnique(["OccurrenceAEncounter", "OccurrenceBEncounter"], pop)').must_equal 5
|
233
|
+
@context.eval('hqmf.SpecificsManager.countUnique(null, pop)').must_equal 1
|
234
|
+
end
|
235
|
+
|
236
|
+
def test_specifics_event_exclusion
|
237
|
+
|
238
|
+
init_rows = "
|
239
|
+
var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':20}});
|
240
|
+
var row2 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':20}});
|
241
|
+
var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':30}});
|
242
|
+
|
243
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2,row3]);
|
244
|
+
var specific2 = new hqmf.SpecificOccurrence([row1]);
|
245
|
+
var specific3 = new hqmf.SpecificOccurrence([]);
|
246
|
+
specific3.addIdentityRow();
|
247
|
+
|
248
|
+
var pop1 = new Boolean(true);
|
249
|
+
pop1.specificContext = specific1;
|
250
|
+
var pop2 = new Boolean(true);
|
251
|
+
pop2.specificContext = specific2;
|
252
|
+
var pop3 = new Boolean(true);
|
253
|
+
pop3.specificContext = specific3;
|
254
|
+
var pop4 = new Boolean(false);
|
255
|
+
pop4.specificContext = specific3;
|
256
|
+
"
|
257
|
+
|
258
|
+
@context.eval(init_rows)
|
259
|
+
@context.eval('var resultSpecific = specific1.removeMatchingRows(0, specific2)')
|
260
|
+
@context.eval('resultSpecific.rows.length').must_equal 2
|
261
|
+
@context.eval('resultSpecific.rows[0].values[0].id').must_equal 2
|
262
|
+
@context.eval('resultSpecific.rows[1].values[0].id').must_equal 3
|
263
|
+
@context.eval('resultSpecific = specific1.removeMatchingRows(1, specific2)')
|
264
|
+
@context.eval('resultSpecific.rows.length').must_equal 1
|
265
|
+
@context.eval('resultSpecific.rows[0].values[0].id').must_equal 3
|
266
|
+
@context.eval('var result = hqmf.SpecificsManager.exclude(["OccurrenceAEncounter"], pop1, pop2)')
|
267
|
+
@context.eval('result.isTrue()').must_equal true
|
268
|
+
@context.eval('result.specificContext.rows.length').must_equal 2
|
269
|
+
@context.eval('result.specificContext.rows[0].values[0].id').must_equal 2
|
270
|
+
@context.eval('result.specificContext.rows[1].values[0].id').must_equal 3
|
271
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(["OccurrenceBEncounter"], pop1, pop2)')
|
272
|
+
@context.eval('result.isTrue()').must_equal true
|
273
|
+
@context.eval('result.specificContext.rows.length').must_equal 1
|
274
|
+
@context.eval('result.specificContext.rows[0].values[0].id').must_equal 3
|
275
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(["OccurrenceAEncounter","OccurrenceBEncounter"], pop1, pop2)')
|
276
|
+
@context.eval('result.isTrue()').must_equal true
|
277
|
+
@context.eval('result.specificContext.rows.length').must_equal 1
|
278
|
+
@context.eval('result.specificContext.rows[0].values[0].id').must_equal 3
|
279
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(null, pop3, pop3)')
|
280
|
+
@context.eval('result.isTrue()').must_equal false
|
281
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(null, pop3, pop4)')
|
282
|
+
@context.eval('result.isTrue()').must_equal true
|
283
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(null, pop4, pop3)')
|
284
|
+
@context.eval('result.isTrue()').must_equal false
|
285
|
+
@context.eval('result = hqmf.SpecificsManager.exclude(null, pop4, pop4)')
|
286
|
+
@context.eval('result.isTrue()').must_equal false
|
287
|
+
end
|
288
|
+
|
205
289
|
def test_negation
|
206
290
|
rows = "
|
207
291
|
var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1}});
|
@@ -211,12 +295,12 @@ class SpecificsTest < Test::Unit::TestCase
|
|
211
295
|
var row5 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':4}});
|
212
296
|
var row6 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':3}});
|
213
297
|
|
214
|
-
var specific1 = new
|
215
|
-
var specific2 = new
|
216
|
-
var specific3 = new
|
217
|
-
var specific4 = new
|
218
|
-
var specific5 = new
|
219
|
-
var specific6 = new
|
298
|
+
var specific1 = new hqmf.SpecificOccurrence([row1]);
|
299
|
+
var specific2 = new hqmf.SpecificOccurrence([row2]);
|
300
|
+
var specific3 = new hqmf.SpecificOccurrence([row3,row4]);
|
301
|
+
var specific4 = new hqmf.SpecificOccurrence([row3,row6]);
|
302
|
+
var specific5 = new hqmf.SpecificOccurrence([row5,row6]);
|
303
|
+
var specific6 = new hqmf.SpecificOccurrence([row1,row2])
|
220
304
|
"
|
221
305
|
|
222
306
|
# test negation single specific
|
@@ -232,14 +316,14 @@ class SpecificsTest < Test::Unit::TestCase
|
|
232
316
|
@context.eval('specific1.hasRow(row5)').must_equal false
|
233
317
|
|
234
318
|
# cartesian checks
|
235
|
-
@context.eval('
|
236
|
-
@context.eval('
|
237
|
-
@context.eval('
|
238
|
-
@context.eval('
|
239
|
-
@context.eval('
|
240
|
-
@context.eval('
|
241
|
-
@context.eval('
|
242
|
-
@context.eval('
|
319
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3]]).length').must_equal 3
|
320
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]]).length').must_equal 6
|
321
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][0]').must_equal 1
|
322
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[0][1]').must_equal 5
|
323
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][0]').must_equal 1
|
324
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[1][1]').must_equal 6
|
325
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][0]').must_equal 2
|
326
|
+
@context.eval('hqmf.SpecificsManager._generateCartisian([[1,2,3],[5,6]])[2][1]').must_equal 5
|
243
327
|
|
244
328
|
# specificsWithValue on Row
|
245
329
|
@context.eval('row1.specificsWithValues()[0]').must_equal 0
|
@@ -273,8 +357,8 @@ class SpecificsTest < Test::Unit::TestCase
|
|
273
357
|
var row3 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':2}});
|
274
358
|
var row3 = new Row(undefined, {});
|
275
359
|
|
276
|
-
var specific1 = new
|
277
|
-
var specific2 = new
|
360
|
+
var specific1 = new hqmf.SpecificOccurrence();
|
361
|
+
var specific2 = new hqmf.SpecificOccurrence([row2]);
|
278
362
|
"
|
279
363
|
|
280
364
|
# test negation single specific
|
@@ -303,7 +387,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
303
387
|
@context.eval("x.specificContext = 'specificContext'")
|
304
388
|
@context.eval("x.specific_occurrence = 'specific_occurrence'")
|
305
389
|
@context.eval('var a = new Boolean(true)')
|
306
|
-
@context.eval("a =
|
390
|
+
@context.eval("a = hqmf.SpecificsManager.maintainSpecifics(a,x)")
|
307
391
|
@context.eval("typeof(a.specificContext) != 'undefined'").must_equal true
|
308
392
|
@context.eval("typeof(a.specific_occurrence) != 'undefined'").must_equal true
|
309
393
|
|
@@ -318,7 +402,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
318
402
|
var row5 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':3},'OccurrenceBEncounter':{'id':3}});
|
319
403
|
var row6 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':3}});
|
320
404
|
|
321
|
-
var specific1 = new
|
405
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2,row3,row4,row5,row6]);
|
322
406
|
"
|
323
407
|
|
324
408
|
@context.eval(rows)
|
@@ -327,6 +411,40 @@ class SpecificsTest < Test::Unit::TestCase
|
|
327
411
|
@context.eval('specific1.compactReusedEvents().rows.length').must_equal 4
|
328
412
|
|
329
413
|
end
|
414
|
+
|
415
|
+
def test_compact_reused_events_different_specifics
|
416
|
+
|
417
|
+
@context = get_js_context(HQMF2JS::Generator::JS.library_functions)
|
418
|
+
|
419
|
+
test_initialize_js =
|
420
|
+
"
|
421
|
+
hqmf.SpecificsManager.initialize({},hqmfjs, {'id':'OccurrenceAEncounter1', 'type':'Encounter1', 'function':'SourceOccurrenceAEncounter1'},{'id':'OccurrenceAEncounter2', 'type':'Encounter2', 'function':'SourceOccurrenceAEncounter2'})
|
422
|
+
hqmfjs.SourceOccurrenceAEncounter1 = function(patient) {
|
423
|
+
return [{'id':1},{'id':2},{'id':3},{'id':4},{'id':5}]
|
424
|
+
}
|
425
|
+
hqmfjs.SourceOccurrenceAEncounter2 = function(patient) {
|
426
|
+
return [{'id':1},{'id':2},{'id':3},{'id':4},{'id':5}]
|
427
|
+
}
|
428
|
+
"
|
429
|
+
@context.eval(test_initialize_js)
|
430
|
+
|
431
|
+
rows = "
|
432
|
+
var row1 = new Row('OccurrenceAEncounter1',{'OccurrenceAEncounter1':{'id':1}});
|
433
|
+
var row2 = new Row('OccurrenceAEncounter2',{'OccurrenceAEncounter2':{'id':2}});
|
434
|
+
var row3 = new Row('OccurrenceAEncounter1',{'OccurrenceAEncounter1':{'id':1},'OccurrenceAEncounter2':{'id':2}});
|
435
|
+
var row4 = new Row('OccurrenceAEncounter1',{'OccurrenceAEncounter1':{'id':2},'OccurrenceAEncounter2':{'id':2}});
|
436
|
+
var row5 = new Row('OccurrenceAEncounter1',{'OccurrenceAEncounter1':{'id':3},'OccurrenceAEncounter2':{'id':3}});
|
437
|
+
var row6 = new Row('OccurrenceAEncounter1',{'OccurrenceAEncounter1':{'id':1},'OccurrenceAEncounter2':{'id':3}});
|
438
|
+
|
439
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2,row3,row4,row5,row6]);
|
440
|
+
"
|
441
|
+
|
442
|
+
@context.eval(rows)
|
443
|
+
|
444
|
+
@context.eval('specific1.rows.length').must_equal 6
|
445
|
+
@context.eval('specific1.compactReusedEvents().rows.length').must_equal 6
|
446
|
+
|
447
|
+
end
|
330
448
|
|
331
449
|
def test_row_build_rows_for_matching
|
332
450
|
|
@@ -345,7 +463,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
345
463
|
@context.eval('rows[0].values[1].id').must_equal 1
|
346
464
|
@context.eval('rows[7].values[0].id').must_equal 3
|
347
465
|
@context.eval('rows[7].values[1].id').must_equal 8
|
348
|
-
@context.eval('var specific = new
|
466
|
+
@context.eval('var specific = new hqmf.SpecificOccurrence(rows)')
|
349
467
|
@context.eval('specific.rows.length').must_equal 8
|
350
468
|
@context.eval('specific.compactReusedEvents().rows.length').must_equal 7
|
351
469
|
@context.eval('var rows = Row.buildRowsForMatching(undefined,entry,boundsKey,bounds)')
|
@@ -386,9 +504,9 @@ class SpecificsTest < Test::Unit::TestCase
|
|
386
504
|
var row7 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':5}});
|
387
505
|
var row8 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':4}});
|
388
506
|
|
389
|
-
var specific1 = new
|
390
|
-
var specific2 = new
|
391
|
-
var specific3 = new
|
507
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2]);
|
508
|
+
var specific2 = new hqmf.SpecificOccurrence([row3,row4,row5]);
|
509
|
+
var specific3 = new hqmf.SpecificOccurrence([row6,row7,row8]);
|
392
510
|
"
|
393
511
|
@context.eval(rows)
|
394
512
|
@context.eval('var result = specific1.finalizeEvents(specific2,specific3)')
|
@@ -425,11 +543,11 @@ class SpecificsTest < Test::Unit::TestCase
|
|
425
543
|
|
426
544
|
var row9 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':6}});
|
427
545
|
|
428
|
-
var specific1 = new
|
429
|
-
var specific2 = new
|
430
|
-
var specific3 = new
|
431
|
-
var specific4 = new
|
432
|
-
var specific5 = new
|
546
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2]);
|
547
|
+
var specific2 = new hqmf.SpecificOccurrence([row3,row4,row5]);
|
548
|
+
var specific3 = new hqmf.SpecificOccurrence([row6,row7,row8]);
|
549
|
+
var specific4 = new hqmf.SpecificOccurrence([row9]);
|
550
|
+
var specific5 = new hqmf.SpecificOccurrence();
|
433
551
|
|
434
552
|
var pop1 = new Boolean(true)
|
435
553
|
pop1.specificContext = specific1
|
@@ -452,10 +570,10 @@ class SpecificsTest < Test::Unit::TestCase
|
|
452
570
|
"
|
453
571
|
@context.eval(rows)
|
454
572
|
|
455
|
-
@context.eval('
|
456
|
-
@context.eval('
|
457
|
-
@context.eval('
|
458
|
-
@context.eval('
|
573
|
+
@context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,pop3))').must_equal true
|
574
|
+
@context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,pop4))').must_equal false
|
575
|
+
@context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop1,pop2,pop5))').must_equal false
|
576
|
+
@context.eval('hqmf.SpecificsManager.validate(hqmf.SpecificsManager.intersectSpecifics(pop3f,pop1,pop2))').must_equal false
|
459
577
|
|
460
578
|
end
|
461
579
|
|
@@ -471,9 +589,9 @@ class SpecificsTest < Test::Unit::TestCase
|
|
471
589
|
var row7 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':5}});
|
472
590
|
var row8 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':4}});
|
473
591
|
|
474
|
-
var specific1 = new
|
475
|
-
var specific2 = new
|
476
|
-
var specific3 = new
|
592
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2]);
|
593
|
+
var specific2 = new hqmf.SpecificOccurrence([row3,row4,row5]);
|
594
|
+
var specific3 = new hqmf.SpecificOccurrence([row6,row7,row8]);
|
477
595
|
|
478
596
|
var pop1 = new Boolean(true)
|
479
597
|
pop1.specificContext = specific1
|
@@ -488,7 +606,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
488
606
|
"
|
489
607
|
@context.eval(rows)
|
490
608
|
|
491
|
-
@context.eval('var intersection =
|
609
|
+
@context.eval('var intersection = hqmf.SpecificsManager.intersectAll(new Boolean(true), [pop1,pop2,pop3])')
|
492
610
|
assert @context.eval('intersection.isTrue()')
|
493
611
|
@context.eval('var result = intersection.specificContext')
|
494
612
|
|
@@ -501,7 +619,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
501
619
|
@context.eval('result.rows[2].values[0].id').must_equal 2
|
502
620
|
@context.eval('result.rows[2].values[1].id').must_equal 4
|
503
621
|
|
504
|
-
@context.eval('var intersection =
|
622
|
+
@context.eval('var intersection = hqmf.SpecificsManager.intersectAll(new Boolean(true), [pop1,pop2,pop3], true)')
|
505
623
|
@context.eval('var result = intersection.specificContext')
|
506
624
|
|
507
625
|
# 5*5 = 25 - 5 equal rows - 3 non-negated = 17
|
@@ -521,9 +639,9 @@ class SpecificsTest < Test::Unit::TestCase
|
|
521
639
|
var row7 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1},'OccurrenceBEncounter':{'id':5}});
|
522
640
|
var row8 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':2},'OccurrenceBEncounter':{'id':4}});
|
523
641
|
|
524
|
-
var specific1 = new
|
525
|
-
var specific2 = new
|
526
|
-
var specific3 = new
|
642
|
+
var specific1 = new hqmf.SpecificOccurrence([row1,row2]);
|
643
|
+
var specific2 = new hqmf.SpecificOccurrence([row3,row4,row5]);
|
644
|
+
var specific3 = new hqmf.SpecificOccurrence([row6,row7,row8]);
|
527
645
|
|
528
646
|
var pop1 = new Boolean(true)
|
529
647
|
pop1.specificContext = specific1
|
@@ -538,13 +656,13 @@ class SpecificsTest < Test::Unit::TestCase
|
|
538
656
|
"
|
539
657
|
@context.eval(rows)
|
540
658
|
|
541
|
-
@context.eval('var union =
|
659
|
+
@context.eval('var union = hqmf.SpecificsManager.unionAll(new Boolean(true), [pop1,pop2,pop3])')
|
542
660
|
assert @context.eval('union.isTrue()')
|
543
661
|
@context.eval('var result = union.specificContext')
|
544
662
|
|
545
663
|
@context.eval('result.rows.length').must_equal 8
|
546
664
|
|
547
|
-
@context.eval('var union =
|
665
|
+
@context.eval('var union = hqmf.SpecificsManager.unionAll(new Boolean(true), [pop1,pop2,pop3], true)')
|
548
666
|
assert @context.eval('union.isTrue()')
|
549
667
|
@context.eval('var result = union.specificContext')
|
550
668
|
|
@@ -558,7 +676,7 @@ class SpecificsTest < Test::Unit::TestCase
|
|
558
676
|
def test_row_grouping_key
|
559
677
|
|
560
678
|
rows = "
|
561
|
-
|
679
|
+
hqmf.SpecificsManager.initialize({},hqmfjs, {'id':'OccurrenceAEncounter', 'type':'Encounter', 'function':'SourceOccurrenceAEncounter'},{'id':'OccurrenceBEncounter', 'type':'Encounter', 'function':'SourceOccurrenceBEncounter'},{'id':'OccurrenceAProcedure', 'type':'Procedure', 'function':'SourceOccurrenceAProcedure'})
|
562
680
|
|
563
681
|
var row1 = new Row('OccurrenceAEncounter',{'OccurrenceAEncounter':{'id':1}});
|
564
682
|
var row2 = new Row('OccurrenceBEncounter',{'OccurrenceBEncounter':{'id':2}});
|
@@ -599,8 +717,8 @@ class SpecificsTest < Test::Unit::TestCase
|
|
599
717
|
new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': {id:14}, 'OccurrenceBEncounter':{'id':2}}),
|
600
718
|
new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': {id:15}, 'OccurrenceBEncounter':{'id':3}})]
|
601
719
|
|
602
|
-
var specific1 = new
|
603
|
-
var specific2 = new
|
720
|
+
var specific1 = new hqmf.SpecificOccurrence(non_specific_rows);
|
721
|
+
var specific2 = new hqmf.SpecificOccurrence(specific_rows);
|
604
722
|
|
605
723
|
"
|
606
724
|
@context.eval(rows)
|
@@ -632,21 +750,21 @@ class SpecificsTest < Test::Unit::TestCase
|
|
632
750
|
new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': new hQuery.CodedEntry({_id:15}), 'OccurrenceBEncounter':new hQuery.CodedEntry({'_id':3})})]
|
633
751
|
"
|
634
752
|
@context.eval(rows)
|
635
|
-
@context.eval('
|
636
|
-
@context.eval('
|
637
|
-
@context.eval('
|
638
|
-
@context.eval('
|
639
|
-
@context.eval('
|
640
|
-
@context.eval('
|
641
|
-
@context.eval('
|
642
|
-
|
643
|
-
@context.eval("
|
644
|
-
@context.eval("
|
645
|
-
@context.eval("
|
646
|
-
@context.eval("
|
647
|
-
@context.eval("
|
648
|
-
@context.eval("
|
649
|
-
@context.eval("
|
753
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows).length').must_equal 6
|
754
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[0].id').must_equal 10
|
755
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[1].id').must_equal 11
|
756
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[2].id').must_equal 12
|
757
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[3].id').must_equal 13
|
758
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[4].id').must_equal 14
|
759
|
+
@context.eval('hqmf.SpecificsManager.extractEvents(undefined, non_specific_rows)[5].id').must_equal 15
|
760
|
+
|
761
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows).length").must_equal 6
|
762
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[0].id").must_equal 10
|
763
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[1].id").must_equal 11
|
764
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[2].id").must_equal 12
|
765
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[3].id").must_equal 13
|
766
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[4].id").must_equal 14
|
767
|
+
@context.eval("hqmf.SpecificsManager.extractEvents('OccurrenceAEncounter', specific_rows)[5].id").must_equal 15
|
650
768
|
|
651
769
|
end
|
652
770
|
|
@@ -672,10 +790,10 @@ class SpecificsTest < Test::Unit::TestCase
|
|
672
790
|
new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': new hQuery.CodedEntry({_id:14,time:getTime(2010,0,2)}), 'OccurrenceBEncounter':new hQuery.CodedEntry({'_id':2})}),
|
673
791
|
new Row('OccurrenceAEncounter',{'OccurrenceAEncounter': new hQuery.CodedEntry({_id:15,time:getTime(2010,0,2)}), 'OccurrenceBEncounter':new hQuery.CodedEntry({'_id':3})})]
|
674
792
|
|
675
|
-
var specific1 = new
|
676
|
-
var specific2 = new
|
677
|
-
var specific3 = new
|
678
|
-
var specific4 = new
|
793
|
+
var specific1 = new hqmf.SpecificOccurrence(non_specific_rows);
|
794
|
+
var specific2 = new hqmf.SpecificOccurrence(specific_rows);
|
795
|
+
var specific3 = new hqmf.SpecificOccurrence([new Row(undefined)]);
|
796
|
+
var specific4 = new hqmf.SpecificOccurrence()
|
679
797
|
|
680
798
|
"
|
681
799
|
@context.eval(rows)
|
metadata
CHANGED
@@ -1,15 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hqmf2js
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0
|
4
|
+
version: 1.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Marc Hadley
|
9
|
+
- Andre Quina
|
10
|
+
- Andy Gregorowicz
|
9
11
|
autorequire:
|
10
12
|
bindir: bin
|
11
13
|
cert_chain: []
|
12
|
-
date: 2012-
|
14
|
+
date: 2012-12-19 00:00:00.000000000 Z
|
13
15
|
dependencies:
|
14
16
|
- !ruby/object:Gem::Dependency
|
15
17
|
name: nokogiri
|
@@ -18,7 +20,7 @@ dependencies:
|
|
18
20
|
requirements:
|
19
21
|
- - ~>
|
20
22
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.5.
|
23
|
+
version: 1.5.5
|
22
24
|
type: :runtime
|
23
25
|
prerelease: false
|
24
26
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +28,7 @@ dependencies:
|
|
26
28
|
requirements:
|
27
29
|
- - ~>
|
28
30
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.5.
|
31
|
+
version: 1.5.5
|
30
32
|
- !ruby/object:Gem::Dependency
|
31
33
|
name: tilt
|
32
34
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,7 +68,7 @@ dependencies:
|
|
66
68
|
requirements:
|
67
69
|
- - ~>
|
68
70
|
- !ruby/object:Gem::Version
|
69
|
-
version: 2.
|
71
|
+
version: 2.2.2
|
70
72
|
type: :runtime
|
71
73
|
prerelease: false
|
72
74
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -74,7 +76,7 @@ dependencies:
|
|
74
76
|
requirements:
|
75
77
|
- - ~>
|
76
78
|
- !ruby/object:Gem::Version
|
77
|
-
version: 2.
|
79
|
+
version: 2.2.2
|
78
80
|
- !ruby/object:Gem::Dependency
|
79
81
|
name: awesome_print
|
80
82
|
requirement: !ruby/object:Gem::Requirement
|
@@ -82,7 +84,7 @@ dependencies:
|
|
82
84
|
requirements:
|
83
85
|
- - ~>
|
84
86
|
- !ruby/object:Gem::Version
|
85
|
-
version:
|
87
|
+
version: 1.1.0
|
86
88
|
type: :development
|
87
89
|
prerelease: false
|
88
90
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -90,7 +92,7 @@ dependencies:
|
|
90
92
|
requirements:
|
91
93
|
- - ~>
|
92
94
|
- !ruby/object:Gem::Version
|
93
|
-
version:
|
95
|
+
version: 1.1.0
|
94
96
|
description: A library for converting HQMF files to executable JavaScript suitable
|
95
97
|
for use with the hQuery Gateway
|
96
98
|
email: hquery-talk@googlegroups.com
|
@@ -105,10 +107,12 @@ files:
|
|
105
107
|
- README.md
|
106
108
|
- Rakefile
|
107
109
|
- VERSION
|
110
|
+
- app/assets/javascripts/custom_calculations.js.coffee
|
108
111
|
- app/assets/javascripts/hqmf_util.js.coffee
|
109
112
|
- app/assets/javascripts/logging_utils.js.coffee
|
110
113
|
- app/assets/javascripts/patient_api_extension.js.coffee
|
111
114
|
- app/assets/javascripts/specifics.js.coffee
|
115
|
+
- app/assets/javascripts/underscore.js
|
112
116
|
- bin/hqmf2js.rb
|
113
117
|
- config/warble.rb
|
114
118
|
- hqmf2js.gemspec
|
@@ -145,11 +149,11 @@ files:
|
|
145
149
|
- test/fixtures/json/0043_hqmf1.json
|
146
150
|
- test/fixtures/json/0043_hqmf2.json
|
147
151
|
- test/fixtures/json/59New.json
|
148
|
-
- test/fixtures/patient_api.js
|
149
152
|
- test/fixtures/patients/francis_drake.json
|
150
153
|
- test/fixtures/patients/larry_vanderman.json
|
151
154
|
- test/test_helper.rb
|
152
155
|
- test/unit/codes_to_json_test.rb
|
156
|
+
- test/unit/custom_calculations_test.rb
|
153
157
|
- test/unit/effective_date_test.rb
|
154
158
|
- test/unit/hqmf_from_json_javascript_test.rb
|
155
159
|
- test/unit/hqmf_javascript_test.rb
|