42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
# File 'lib/generator/execution.rb', line 42
def self.logic(hqmf_document, population_index=0, options)
value_sets=options[:value_sets]
episode_ids=options[:episode_ids]
continuous_variable=options[:continuous_variable]
force_sources=options[:force_sources]
custom_functions=options[:custom_functions]
check_crosswalk=options[:check_crosswalk]
gen = HQMF2JS::Generator::JS.new(hqmf_document)
codes = HQMF2JS::Generator::CodesToJson.from_value_sets(value_sets) if value_sets
force_sources = force_sources
if check_crosswalk
crosswalk_check = "result = hqmf.SpecificsManager.maintainSpecifics(new Boolean(result.isTrue() && patient_api.validateCodeSystems()), result);"
crosswalk_instrument = "instrumentTrueCrosswalk(hqmfjs);"
end
"
var patient_api = new hQuery.Patient(patient);
#{gen.to_js(population_index, codes, force_sources)}
var occurrenceId = #{quoted_string_array_or_null(episode_ids)};
hqmfjs.initializeSpecifics(patient_api, hqmfjs)
var population = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::IPP}, patient_api);
}
var denominator = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::DENOM}, patient_api);
}
var numerator = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::NUMER}, patient_api);
}
var exclusion = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::DENEX}, patient_api);
}
var denexcep = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::DENEXCEP}, patient_api);
}
var msrpopl = function() {
return executeIfAvailable(hqmfjs.#{HQMF::PopulationCriteria::MSRPOPL}, patient_api);
}
var observ = function(specific_context) {
#{observation_function(custom_functions, population_index)}
}
var executeIfAvailable = function(optionalFunction, patient_api) {
if (typeof(optionalFunction)==='function') {
result = optionalFunction(patient_api);
#{crosswalk_check}
return result;
} else {
return false;
}
}
#{crosswalk_instrument}
if (typeof Logger != 'undefined') {
// clear out logger
Logger.logger = [];
Logger.rationale={};
if (typeof short_circuit == 'undefined') short_circuit = true;
// turn on logging if it is enabled
if (enable_logging || enable_rationale) {
injectLogger(hqmfjs, enable_logging, enable_rationale, short_circuit);
}
}
try {
map(patient, population, denominator, numerator, exclusion, denexcep, msrpopl, observ, occurrenceId,#{continuous_variable});
} catch(err) {
print(err.stack);
throw err;
}
"
end
|