health-data-standards 3.5.2 → 3.5.3
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.
- checksums.yaml +4 -4
- data/README.md +4 -0
- data/lib/health-data-standards/export/qrda/hqmf-qrda-oids.json +0 -6
- data/lib/health-data-standards/export/view_helper.rb +24 -1
- data/lib/health-data-standards/import/cat1/insurance_provider_importer.rb +1 -0
- data/lib/health-data-standards/import/cat1/patient_importer.rb +2 -1
- data/lib/health-data-standards/models/cqm/aggregate_objects.rb +3 -3
- data/lib/health-data-standards/models/cqm/query_cache.rb +1 -1
- data/lib/hqmf-parser.rb +0 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.2.cat1.erb +5 -3
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.23.cat1.erb +1 -14
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.41.cat1.erb +11 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.55.cat1.erb +8 -0
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.64.cat1.erb +1 -0
- data/templates/cat1/_measures.cat1.erb +2 -1
- data/templates/cat1/_medication_details.cat1.erb +1 -1
- data/templates/cat1/_medication_dispense.cat1.erb +22 -0
- data/templates/cat1/_reason.cat1.erb +1 -0
- data/templates/cat1/_reporting_parameters.cat1.erb +1 -0
- data/templates/cat3/_measure_data.cat3.erb +5 -5
- data/templates/cat3/_reporting_parameters.cat3.erb +2 -1
- data/templates/cat3/_supplemental_data.cat3.erb +7 -1
- data/templates/cat3/show.cat3.erb +2 -1
- data/templates/html/_entry.html.erb +2 -3
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f28260b9a20c4a5fa03677dbde72935d0779e1b7
|
4
|
+
data.tar.gz: 758234c177f32a11c9606258a38bf83387fe2fb9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03f1f77b7b63a7ca367c477dda130c115b8df7ecc2128aab02265c405f0db8b96696b3d09a15cb4f1ae59862142e8268d7900abc2e150d4c71ff9932a4f0dc61
|
7
|
+
data.tar.gz: 79d88e0eecd99eddd931977ced5974969a2afee8ae74665721b0740013247183c86bbf75e376891d9427789f56d1a731e3c656631ae1bde4e16ea25095e65500
|
data/README.md
CHANGED
@@ -623,12 +623,6 @@
|
|
623
623
|
"qrda_name": "Risk Category Assessment",
|
624
624
|
"qrda_oid": "2.16.840.1.113883.10.20.24.3.69"
|
625
625
|
},
|
626
|
-
{
|
627
|
-
"hqmf_name": "Diagnostic Study, Result not done",
|
628
|
-
"hqmf_oid": "2.16.840.1.113883.3.560.1.111",
|
629
|
-
"qrda_name": "Diagnostic Study Result",
|
630
|
-
"qrda_oid": "2.16.840.1.113883.10.20.24.3.20"
|
631
|
-
},
|
632
626
|
{
|
633
627
|
"hqmf_name": "Communication: From Provider to Patient not done",
|
634
628
|
"hqmf_oid": "2.16.840.1.113883.3.560.1.131",
|
@@ -40,6 +40,14 @@ module HealthDataStandards
|
|
40
40
|
end
|
41
41
|
end
|
42
42
|
|
43
|
+
def fulfillment_quantity(codes, fulfillmentHistory, dose)
|
44
|
+
if (codes["RxNorm"].present?)
|
45
|
+
doses = (fulfillmentHistory.quantity_dispensed['value'].to_f / dose['value'].to_f ).to_i
|
46
|
+
return "value='#{doses}'"
|
47
|
+
else
|
48
|
+
return "value='#{fulfillmentHistory.quantity_dispensed['value']}' unit='#{fulfillmentHistory.quantity_dispensed['unit']}'"
|
49
|
+
end
|
50
|
+
end
|
43
51
|
|
44
52
|
def value_or_null_flavor(time)
|
45
53
|
if time
|
@@ -49,6 +57,14 @@ module HealthDataStandards
|
|
49
57
|
end
|
50
58
|
end
|
51
59
|
|
60
|
+
def dose_quantity(codes, dose)
|
61
|
+
if (codes["RxNorm"].present?)
|
62
|
+
return "value='1'"
|
63
|
+
else
|
64
|
+
return "value=#{dose['value']} unit=#{dose['unit']}"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
52
68
|
def time_if_not_nil(*args)
|
53
69
|
args.compact.map {|t| Time.at(t).utc}.first
|
54
70
|
end
|
@@ -64,9 +80,16 @@ module HealthDataStandards
|
|
64
80
|
def is_bool?(str)
|
65
81
|
return ["true","false"].include? (str || "").downcase
|
66
82
|
end
|
83
|
+
|
84
|
+
def identifier_for(obj)
|
85
|
+
Digest::MD5.hexdigest(obj.to_s).upcase
|
86
|
+
end
|
67
87
|
|
68
88
|
def convert_field_to_hash(field, codes)
|
69
|
-
|
89
|
+
if codes.is_a? Array
|
90
|
+
return codes.collect{ |code| convert_field_to_hash(field, convert_field_to_hash(field, code))}.join("<br>")
|
91
|
+
end
|
92
|
+
|
70
93
|
if (codes.is_a? Hash)
|
71
94
|
clean_hash = {}
|
72
95
|
|
@@ -42,6 +42,7 @@ module HealthDataStandards
|
|
42
42
|
generate_importer(CDA::ProcedureImporter, "./cda:entry/cda:procedure[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.66']", '2.16.840.1.113883.3.560.1.63'),
|
43
43
|
generate_importer(CDA::ProcedureImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.69']", '2.16.840.1.113883.3.560.1.21'), #risk category assessment
|
44
44
|
generate_importer(CDA::ProcedureImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.18']", '2.16.840.1.113883.3.560.1.103', 'performed'), #diagnostic study performed
|
45
|
+
generate_importer(CDA::ProcedureImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.20']", '2.16.840.1.113883.3.560.1.11'), #diagnostic study result
|
45
46
|
generate_importer(DiagnosticStudyOrderImporter, nil, '2.16.840.1.113883.3.560.1.40', 'ordered')]
|
46
47
|
|
47
48
|
@section_importers[:allergies] = [generate_importer(ProcedureIntoleranceImporter, nil, '2.16.840.1.113883.3.560.1.61'),
|
@@ -56,7 +57,6 @@ module HealthDataStandards
|
|
56
57
|
generate_importer(CDA::ResultImporter, "./cda:entry/cda:act[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.34']", '2.16.840.1.113883.3.560.1.47'), #intervention result
|
57
58
|
generate_importer(CDA::ResultImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.57']", '2.16.840.1.113883.3.560.1.18'), #physical exam finding
|
58
59
|
generate_importer(CDA::ResultImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.28']", '2.16.840.1.113883.3.560.1.88'), #functional status result
|
59
|
-
generate_importer(CDA::ResultImporter, "./cda:entry/cda:observation[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.20']", '2.16.840.1.113883.3.560.1.111'), #diagnostic study result not done
|
60
60
|
generate_importer(LabResultImporter, nil, '2.16.840.1.113883.3.560.1.12')] #lab result
|
61
61
|
|
62
62
|
@section_importers[:encounters] = [generate_importer(EncounterPerformedImporter, "./cda:encounter[cda:templateId/@root = '2.16.840.1.113883.10.20.24.3.23']", '2.16.840.1.113883.3.560.1.79', 'performed'), #encounter performed
|
@@ -85,6 +85,7 @@ module HealthDataStandards
|
|
85
85
|
nrh.build_id_map(doc)
|
86
86
|
@section_importers.each do |section, entry_packages|
|
87
87
|
entry_packages.each do |entry_package|
|
88
|
+
# binding.pry if section == :results
|
88
89
|
record.send(section) << entry_package.package_entries(context, nrh)
|
89
90
|
end
|
90
91
|
end
|
@@ -101,15 +101,15 @@ module HealthDataStandards
|
|
101
101
|
entry_populations = []
|
102
102
|
cache_entry.population_ids.each do |population_type, population_id|
|
103
103
|
population = populations.find{|pop| pop.id == population_id}
|
104
|
-
if population.nil? && population_type != 'stratification'
|
104
|
+
if population.nil? && population_type != 'stratification' && population_type != 'STRAT'
|
105
105
|
population = Population.new
|
106
106
|
population.type = population_type
|
107
107
|
population.id = population_id
|
108
108
|
populations << population
|
109
109
|
end
|
110
|
-
unless population_type == 'stratification'
|
110
|
+
unless population_type == 'stratification' || population_type == 'STRAT'
|
111
111
|
if cache_entry.is_stratification?
|
112
|
-
strat_id = cache_entry.population_ids['
|
112
|
+
strat_id = cache_entry.population_ids['STRAT']
|
113
113
|
population.add_stratification(strat_id,cache_entry[population_type])
|
114
114
|
else
|
115
115
|
population.value = cache_entry[population_type]
|
data/lib/hqmf-parser.rb
CHANGED
@@ -1,16 +1,16 @@
|
|
1
1
|
<entry>
|
2
|
-
<act classCode="ACT" moodCode="EVN"
|
2
|
+
<act classCode="ACT" moodCode="EVN" <%== negation_indicator(entry) %>>
|
3
3
|
<!-- Communication from patient to provider -->
|
4
4
|
<templateId root="2.16.840.1.113883.10.20.24.3.2"/>
|
5
5
|
<id root="1.3.6.1.4.1.115" extension="<%= entry.id %>"/>
|
6
|
-
<%== code_display(entry, 'value_set_map' => value_set_map, 'extra_content' => "sdtc:valueSet=\"#{value_set_oid}\"") %>
|
6
|
+
<%== code_display(entry, 'value_set_map' => value_set_map, 'preferred_code_sets' => ['SNOMED-CT'], 'extra_content' => "sdtc:valueSet=\"#{value_set_oid}\"") %>
|
7
7
|
<text><%= entry.description %></text>
|
8
8
|
<statusCode code="completed"/>
|
9
9
|
<effectiveTime>
|
10
10
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
11
11
|
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
12
12
|
</effectiveTime>
|
13
|
-
|
13
|
+
|
14
14
|
<participant typeCode="AUT">
|
15
15
|
<participantRole classCode="PAT">
|
16
16
|
<code code="116154003" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED CT" displayName="Patient"/>
|
@@ -23,5 +23,7 @@
|
|
23
23
|
</participantRole>
|
24
24
|
</participant>
|
25
25
|
|
26
|
+
<%== render(:partial => 'reason', :locals => {:entry => entry, :reason_oids=>field_oids["REASON"]}) %>
|
27
|
+
|
26
28
|
</act>
|
27
29
|
</entry>
|
@@ -75,20 +75,7 @@
|
|
75
75
|
<% end -%>
|
76
76
|
|
77
77
|
<% if entry.reason.present? -%>
|
78
|
-
|
79
|
-
<observation classCode="OBS" moodCode="EVN">
|
80
|
-
<templateId root="2.16.840.1.113883.10.20.24.3.88"/>
|
81
|
-
<code code="410666004"
|
82
|
-
codeSystem="2.16.840.1.113883.6.96"
|
83
|
-
displayName="reason"
|
84
|
-
codeSystemName="SNOMED CT"/>
|
85
|
-
<statusCode code="completed"/>
|
86
|
-
<effectiveTime <%= value_or_null_flavor(entry.start_time) %>/>
|
87
|
-
<value xsi:type="CD"
|
88
|
-
code="<%= entry.reason['code'] %>"
|
89
|
-
codeSystem="<%= HealthDataStandards::Util::CodeSystemHelper.oid_for_code_system(entry.reason['codeSystem'] || entry.reason['code_system']) %>"/>
|
90
|
-
</observation>
|
91
|
-
</entryRelationship>
|
78
|
+
<%= render partial: "reason", locals: {entry: entry} %>
|
92
79
|
<% end -%>
|
93
80
|
</encounter>
|
94
81
|
</entry>
|
@@ -12,10 +12,16 @@
|
|
12
12
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
13
13
|
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
14
14
|
</effectiveTime>
|
15
|
+
|
16
|
+
<% if entry.administrationTiming.present?
|
17
|
+
period = entry.administrationTiming['period'] %>
|
18
|
+
<effectiveTime xsi:type="PIVL_TS" institutionSpecified="true" operator="A">
|
19
|
+
<period value="<%= period['value']%>" unit="<%= period['unit']%>"/>
|
20
|
+
</effectiveTime>
|
21
|
+
<% end %>
|
15
22
|
|
16
23
|
<%== render(:partial => 'medication_details', :locals => {:entry => entry, :route_oids=>field_oids["ROUTE"]}) %>
|
17
24
|
|
18
|
-
|
19
25
|
<% if entry.product_form.present? -%>
|
20
26
|
<administrationUnitCode code="<%= entry.product_form['code'] %>" codeSystem="<%= entry.product_form['codeSystem'] %>"/>
|
21
27
|
<% end -%>
|
@@ -34,5 +40,9 @@
|
|
34
40
|
</manufacturedProduct>
|
35
41
|
</consumable>
|
36
42
|
<%== render(:partial => 'reason', :locals => {:entry => entry, :reason_oids=>field_oids["REASON"]}) %>
|
43
|
+
|
44
|
+
<%== render(:partial => 'medication_dispense', :collection => entry.fulfillmentHistory, :locals => {:entry => entry, :value_set_map => value_set_map, :value_set_oid => value_set_oid}) %>
|
45
|
+
|
37
46
|
</substanceAdministration>
|
47
|
+
|
38
48
|
</entry>
|
@@ -5,6 +5,14 @@
|
|
5
5
|
<id root="1.3.6.1.4.1.115" extension="<%= entry.id %>"/>
|
6
6
|
<code code="48768-6" codeSystemName="LOINC" codeSystem="2.16.840.1.113883.6.1" displayName="Payment source"/>
|
7
7
|
<statusCode code="completed"/>
|
8
|
+
<effectiveTime>
|
9
|
+
<!-- Attribute: Start Datetime -->
|
10
|
+
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
11
|
+
<% if entry.end_time %>
|
12
|
+
<high value="<%= time_if_not_nil(entry.end_time) %>" />
|
13
|
+
<% end %>
|
14
|
+
</effectiveTime>
|
8
15
|
<%== code_display(entry, 'preferred_code_sets' =>["SOP","Source of Payment Typology"] , 'tag_name' => 'value', 'extra_content' => "xsi:type=\"CD\" sdtc:valueSet=\"2.16.840.1.114222.4.11.3591\"") %>
|
16
|
+
|
9
17
|
</observation>
|
10
18
|
</entry>
|
@@ -18,6 +18,7 @@
|
|
18
18
|
<entryRelationship typeCode="REFR">
|
19
19
|
<procedure classCode="PROC" moodCode="EVN">
|
20
20
|
<templateId root="2.16.840.1.113883.10.20.24.3.89"/>
|
21
|
+
<id extension="<%= identifier_for([entry.id, entry.incision_time]) %>" />
|
21
22
|
<code code="34896006"
|
22
23
|
codeSystem="2.16.840.1.113883.6.96"
|
23
24
|
codeSystemName="SNOMED CT"
|
@@ -43,12 +43,13 @@
|
|
43
43
|
<templateId root="2.16.840.1.113883.10.20.24.3.98"/>
|
44
44
|
<!-- This is the templateId for eMeasure Reference QDM -->
|
45
45
|
<templateId root="2.16.840.1.113883.10.20.24.3.97"/>
|
46
|
+
<id extension="<%= measure['id'] %>"/>
|
46
47
|
<statusCode code="completed"/>
|
47
48
|
<!-- Containing isBranch external references -->
|
48
49
|
<reference typeCode="REFR">
|
49
50
|
<externalDocument classCode="DOC" moodCode="EVN">
|
50
51
|
<!-- SHALL: This is the version specific identifier for eMeasure: QualityMeasureDocument/id it is a GUID-->
|
51
|
-
<id root="<%= measure.hqmf_id %>"/>
|
52
|
+
<id root="2.16.840.1.113883.4.738" extension="<%= measure.hqmf_id %>"/>
|
52
53
|
<!-- SHOULD This is the title of the eMeasure -->
|
53
54
|
<text><%= measure.title %></text>
|
54
55
|
<!-- SHOULD: setId is the eMeasure version neutral id -->
|
@@ -0,0 +1,22 @@
|
|
1
|
+
|
2
|
+
<entryRelationship typeCode="REFR">
|
3
|
+
<supply classCode="SPLY" moodCode="EVN">
|
4
|
+
<!-- Medication Dispense template -->
|
5
|
+
<templateId root="2.16.840.1.113883.10.20.22.4.18"/>
|
6
|
+
<id root="1.3.6.1.4.1.115" extension="<%= UUID.generate %>"/>
|
7
|
+
<statusCode code="completed"/>
|
8
|
+
<effectiveTime <%= value_or_null_flavor(medication_dispense.dispense_date) %>/>
|
9
|
+
<repeatNumber value="1"/>
|
10
|
+
<quantity <%= fulfillment_quantity(entry.codes, medication_dispense, entry.dose) %>/>
|
11
|
+
<product>
|
12
|
+
<manufacturedProduct classCode="MANU">
|
13
|
+
<!-- Medication Information (consolidation) template -->
|
14
|
+
<templateId root="2.16.840.1.113883.10.20.22.4.23"/>
|
15
|
+
<id root="<%= UUID.generate %>"/>
|
16
|
+
<manufacturedMaterial>
|
17
|
+
<%== code_display(entry, 'preferred_code_sets' =>["RxNorm"], 'value_set_map' => value_set_map, 'extra_content' => "sdtc:valueSet=\"#{value_set_oid}\"") %>
|
18
|
+
</manufacturedMaterial>
|
19
|
+
</manufacturedProduct>
|
20
|
+
</product>
|
21
|
+
</supply>
|
22
|
+
</entryRelationship>
|
@@ -4,6 +4,7 @@
|
|
4
4
|
<entryRelationship typeCode="RSON">
|
5
5
|
<observation classCode="OBS" moodCode="EVN">
|
6
6
|
<templateId root="2.16.840.1.113883.10.20.24.3.88"/>
|
7
|
+
<id extension="<%= identifier_for([entry.negation_reason, entry.start_time]) %>" />
|
7
8
|
<code code="410666004"
|
8
9
|
codeSystem="2.16.840.1.113883.6.96"
|
9
10
|
displayName="reason"
|
@@ -13,6 +13,7 @@
|
|
13
13
|
<act classCode="ACT" moodCode="EVN">
|
14
14
|
<!-- This is the templateId for Reporting Parameteres Act -->
|
15
15
|
<templateId root="2.16.840.1.113883.10.20.17.3.8"/>
|
16
|
+
<id extension="<%= identifier_for([start_date, end_date]) %>" />
|
16
17
|
<code code="252116004" codeSystem="2.16.840.1.113883.6.96" displayName="Observation Parameters"/>
|
17
18
|
<effectiveTime>
|
18
19
|
<low value="<%= start_date.to_formatted_s(:number) %>"/>
|
@@ -82,7 +82,7 @@
|
|
82
82
|
<!-- SEX Supplemental Data Reporting for <%= population.type %> <%= population.id %> -->
|
83
83
|
|
84
84
|
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Sex Supplemental Data',
|
85
|
-
:
|
85
|
+
:template_ids => ['2.16.840.1.113883.10.20.27.3.6'], :supplemental_data_code => '184100006',
|
86
86
|
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => sex,
|
87
87
|
:supplemental_data_value_code_system => '2.16.840.1.113883.5.1', :count => count} %>
|
88
88
|
<% end -%>
|
@@ -94,7 +94,7 @@
|
|
94
94
|
<!-- ETHNICITY Supplemental Data Reporting for <%= population.type %> <%= population.id %> -->
|
95
95
|
|
96
96
|
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Ethnicity Supplemental Data',
|
97
|
-
:
|
97
|
+
:template_ids => ['2.16.840.1.113883.10.20.27.3.7'], :supplemental_data_code => '364699009',
|
98
98
|
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => ethnicity,
|
99
99
|
:supplemental_data_value_code_system => '2.16.840.1.113883.6.238', :count => count} %>
|
100
100
|
<% end -%>
|
@@ -106,7 +106,7 @@
|
|
106
106
|
<!-- RACE Supplemental Data Reporting for <%= population.type %> <%= population.id %> -->
|
107
107
|
|
108
108
|
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Race Supplemental Data',
|
109
|
-
:
|
109
|
+
:template_ids => ['2.16.840.1.113883.10.20.27.3.8'], :supplemental_data_code => '103579009',
|
110
110
|
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => race,
|
111
111
|
:supplemental_data_value_code_system => '2.16.840.1.113883.6.238', :count => count} %>
|
112
112
|
<% end -%>
|
@@ -116,8 +116,8 @@
|
|
116
116
|
payer_supplimental_data.each do |payer, count| -%>
|
117
117
|
|
118
118
|
<!-- PAYER Supplemental Data Reporting for<%= population.type %> <%= population.id %> -->
|
119
|
-
|
120
|
-
:
|
119
|
+
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Payer Supplemental Data',
|
120
|
+
:template_ids => ['2.16.840.1.113883.10.20.27.3.9', '2.16.840.1.113883.10.20.24.3.55'], :supplemental_data_code => '48768-6',
|
121
121
|
:supplemental_data_code_system => '2.16.840.1.113883.6.1', :supplemental_data_value_code => payer,
|
122
122
|
:supplemental_data_value_code_system => '2.16.840.1.113883.3.221.5', :count => count} %>
|
123
123
|
<% end -%>
|
@@ -15,8 +15,9 @@
|
|
15
15
|
</text>
|
16
16
|
<entry typeCode="DRIV">
|
17
17
|
<act classCode="ACT" moodCode="EVN">
|
18
|
-
<!-- This is the templateId for Reporting
|
18
|
+
<!-- This is the templateId for Reporting Parameters Act -->
|
19
19
|
<templateId root="2.16.840.1.113883.10.20.17.3.8"/>
|
20
|
+
<id extension="<%= identifier_for([start_date, end_date]) %>" />
|
20
21
|
<code code="252116004" codeSystem="2.16.840.1.113883.6.96" displayName="Observation Parameters"/>
|
21
22
|
<effectiveTime>
|
22
23
|
<low value="<%= start_date.to_formatted_s(:number) %>"/>
|
@@ -3,11 +3,17 @@
|
|
3
3
|
<entryRelationship typeCode="COMP">
|
4
4
|
<observation classCode="OBS" moodCode="EVN">
|
5
5
|
<!-- <%= template_name %> -->
|
6
|
-
|
6
|
+
<% template_ids.each do |tid| %>
|
7
|
+
<templateId root="<%= tid %>"/>
|
8
|
+
<% end %>
|
7
9
|
<id nullFlavor="NA" />
|
8
10
|
<code code="<%= supplemental_data_code %>"
|
9
11
|
codeSystem="<%= supplemental_data_code_system %>"/>
|
10
12
|
<statusCode code="completed"/>
|
13
|
+
<effectiveTime>
|
14
|
+
<low nullFlavor="NA"/>
|
15
|
+
<high nullFlavor="NA"/>
|
16
|
+
</effectiveTime>
|
11
17
|
<% if supplemental_data_value_code == "" || supplemental_data_value_code == "UNK" -%>
|
12
18
|
<value xsi:type="CD"
|
13
19
|
nullFlavor="UNK" />
|
@@ -107,12 +107,13 @@ Measure Section
|
|
107
107
|
<templateId root="2.16.840.1.113883.10.20.24.3.98"/>
|
108
108
|
<!-- SHALL 1..* (one for each referenced measure) Measure Reference and Results template -->
|
109
109
|
<templateId root="2.16.840.1.113883.10.20.27.3.1"/>
|
110
|
+
<id extension="<%= measure['id'] || UUID.generate %>"/>
|
110
111
|
<statusCode code="completed"/>
|
111
112
|
<reference typeCode="REFR">
|
112
113
|
<externalDocument classCode="DOC" moodCode="EVN">
|
113
114
|
<!-- SHALL: required Id but not restricted to the eMeasure Document/Id-->
|
114
115
|
<!-- QualityMeasureDocument/id This is the version specific identifier for eMeasure -->
|
115
|
-
<id root="<%= measure['hqmf_id'] %>"/>
|
116
|
+
<id root="2.16.840.1.113883.4.738" extension="<%= measure['hqmf_id'] %>"/>
|
116
117
|
|
117
118
|
<!-- SHOULD This is the title of the eMeasure -->
|
118
119
|
<text><%= measure['name'] %></text>
|
@@ -44,17 +44,16 @@
|
|
44
44
|
<%
|
45
45
|
(entry.attributes.keys.reject {|key| ['codes', 'time', 'description', 'mood_code', 'values', '_id', '_type', 'start_time', 'end_time', 'status_code', 'negationInd', 'oid'].include? key}).sort.each do |field|
|
46
46
|
field_value = convert_field_to_hash(field, entry.attributes[field])
|
47
|
-
|
48
47
|
%>
|
49
48
|
<% if field_value && !field_value.empty? %>
|
50
49
|
<dl>
|
51
50
|
<% if field_value.is_a? Hash %>
|
52
51
|
<dt><b><%= field.titleize %>:</b></dt>
|
53
52
|
<% field_value.keys.sort.reverse.each do |fieldkey| %>
|
54
|
-
|
53
|
+
<dd><%= fieldkey %>: <i><%== field_value[fieldkey] %></i></dd>
|
55
54
|
<% end %>
|
56
55
|
<% else %>
|
57
|
-
<dt><b><%= field.titleize %></b>:
|
56
|
+
<dt><b><%= field.titleize %></b>: <%== field_value%></dt>
|
58
57
|
<% end %>
|
59
58
|
<dl>
|
60
59
|
<% end %>
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: health-data-standards
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andy Gregorowicz
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2015-01-21 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: rest-client
|
@@ -489,6 +489,7 @@ files:
|
|
489
489
|
- templates/cat1/_id.cat1.erb
|
490
490
|
- templates/cat1/_measures.cat1.erb
|
491
491
|
- templates/cat1/_medication_details.cat1.erb
|
492
|
+
- templates/cat1/_medication_dispense.cat1.erb
|
492
493
|
- templates/cat1/_ordinality.cat1.erb
|
493
494
|
- templates/cat1/_organization.cat1.erb
|
494
495
|
- templates/cat1/_patient_data.cat1.erb
|
@@ -580,7 +581,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
580
581
|
version: '0'
|
581
582
|
requirements: []
|
582
583
|
rubyforge_project:
|
583
|
-
rubygems_version: 2.
|
584
|
+
rubygems_version: 2.4.3
|
584
585
|
signing_key:
|
585
586
|
specification_version: 4
|
586
587
|
summary: A library for generating and consuming various healthcare related formats.
|