hqmf2js 1.0.1 → 1.1.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|