health-data-standards 3.0.6 → 3.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/README.md +3 -1
- data/Rakefile +2 -0
- data/lib/health-data-standards.rb +10 -0
- data/lib/health-data-standards/export/cat_3.rb +24 -0
- data/lib/health-data-standards/export/html.rb +2 -1
- data/lib/health-data-standards/import/bundle/importer.rb +178 -146
- data/lib/health-data-standards/import/cat1/diagnosis_active_importer.rb +0 -5
- data/lib/health-data-standards/import/cat1/diagnosis_inactive_importer.rb +1 -6
- data/lib/health-data-standards/import/cat1/diagnostic_study_order_importer.rb +0 -4
- data/lib/health-data-standards/import/cat1/ecog_status_importer.rb +12 -0
- data/lib/health-data-standards/import/cat1/encounter_order_importer.rb +0 -5
- data/lib/health-data-standards/import/cat1/lab_order_importer.rb +1 -5
- data/lib/health-data-standards/import/cat1/lab_result_importer.rb +18 -0
- data/lib/health-data-standards/import/cat1/medication_active_importer.rb +27 -0
- data/lib/health-data-standards/import/cat1/patient_importer.rb +54 -46
- data/lib/health-data-standards/import/cat1/procedure_performed_importer.rb +28 -0
- data/lib/health-data-standards/import/cat1/symptom_active_importer.rb +12 -0
- data/lib/health-data-standards/import/cda/condition_importer.rb +2 -0
- data/lib/health-data-standards/import/cda/encounter_importer.rb +6 -0
- data/lib/health-data-standards/import/cda/procedure_importer.rb +1 -0
- data/lib/health-data-standards/import/cda/section_importer.rb +27 -5
- data/lib/health-data-standards/models/cda_identifier.rb +17 -0
- data/lib/health-data-standards/models/cqm/aggregate_objects.rb +92 -0
- data/lib/health-data-standards/models/cqm/measure.rb +51 -30
- data/lib/health-data-standards/models/cqm/query_cache.rb +64 -0
- data/lib/health-data-standards/models/entry.rb +1 -1
- data/lib/health-data-standards/models/record.rb +28 -3
- data/lib/health-data-standards/models/svs/value_set.rb +20 -0
- data/lib/health-data-standards/tasks/bundle.rake +18 -8
- data/lib/health-data-standards/util/hqmf_template_helper.rb +6 -2
- data/lib/health-data-standards/util/hqmf_template_oid_map.json +4 -0
- data/lib/health-data-standards/util/vs_api.rb +9 -6
- data/lib/hqmf-model/data_criteria.json +10 -10
- data/lib/hqmf-parser.rb +0 -2
- data/lib/hqmf-parser/1.0/range.rb +21 -9
- data/templates/c32/show.c32.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.4.cat1.erb +1 -0
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.40.cat1.erb +2 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.44.cat1.erb +1 -0
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.46.cat1.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.54.cat1.erb +16 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.62.cat1.erb +1 -1
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.69.cat1.erb +7 -2
- data/templates/cat1/_2.16.840.1.113883.10.20.24.3.76.cat1.erb +2 -1
- data/templates/cat1/_medication_details.cat1.erb +4 -4
- data/templates/cat1/_record_target.cat1.erb +2 -2
- data/templates/cat1/_result_value.cat1.erb +1 -1
- data/templates/cat1/show.cat1.erb +2 -2
- data/templates/cat3/_continuous_variable_value.cat3.erb +20 -0
- data/templates/cat3/_measure_data.cat3.erb +126 -0
- data/templates/cat3/_performance_rate.cat3.erb +16 -0
- data/templates/cat3/_supplemental_data.cat3.erb +36 -0
- data/templates/cat3/show.cat3.erb +157 -0
- data/templates/ccda/show.ccda.erb +1 -1
- metadata +25 -45
- data/lib/hqmf-parser/value_sets/value_set_parser.rb +0 -241
data/templates/c32/show.c32.erb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
<templateId root="2.16.840.1.113883.3.88.10.20.3" assigningAuthorityName="HITSP/C32"/>
|
9
9
|
|
10
10
|
<templateId root="2.16.840.1.113883.3.88.11.32.1" assigningAuthorityName="HITSP/C32"/>
|
11
|
-
<id root="2.16.840.1.113883.
|
11
|
+
<id root="2.16.840.1.113883.19.5" extension="<%= patient.id %>" assigningAuthorityName="Cypress Project"/>
|
12
12
|
<code code="34133-9" displayName="Summarization of episode note" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"/>
|
13
13
|
<title>Cypress C32 Patient Test Record: <%= patient.first %> <%= patient.last %></title>
|
14
14
|
<effectiveTime value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
@@ -10,7 +10,8 @@
|
|
10
10
|
<text><%= entry.description %></text>
|
11
11
|
<statusCode code="completed"/>
|
12
12
|
<effectiveTime>
|
13
|
-
<low
|
13
|
+
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
14
|
+
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
14
15
|
</effectiveTime>
|
15
16
|
<%== render(:partial => 'result_value', :locals => {:entry => entry}) %>
|
16
17
|
</observation>
|
@@ -9,6 +9,7 @@
|
|
9
9
|
<statusCode code="completed"/>
|
10
10
|
<effectiveTime>
|
11
11
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
12
|
+
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
12
13
|
</effectiveTime>
|
13
14
|
<value code="416098002" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED CT" displayName="Drug allergy" xsi:type="CD"/>
|
14
15
|
|
@@ -5,12 +5,27 @@
|
|
5
5
|
<templateId root="2.16.840.1.113883.10.20.22.4.79"/>
|
6
6
|
<!-- Patient Characteristic Expired -->
|
7
7
|
<templateId root="2.16.840.1.113883.10.20.24.3.54"/>
|
8
|
-
<id root="<%=
|
8
|
+
<id root="1.3.6.1.4.1.115" extension="<%= entry.id %>"/>
|
9
9
|
<code code="ASSERTION" codeSystem="2.16.840.1.113883.5.4" codeSystemName="HL7ActCode"/>
|
10
10
|
<statusCode code="completed"/>
|
11
11
|
<effectiveTime>
|
12
12
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
13
13
|
</effectiveTime>
|
14
14
|
<value code="419099009" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED CT" displayName="Dead" sdtc:valueSet="2.16.840.1.113883.3.666.5.539" xsi:type="CD"/>
|
15
|
+
<% if entry.respond_to? :code
|
16
|
+
# Currently, Record does not support coded cause of death, but this should allow it to work
|
17
|
+
# when Record supports it.
|
18
|
+
-%>
|
19
|
+
<entryRelationship typeCode="CAUS">
|
20
|
+
<observation classCode="OBS" moodCode="EVN">
|
21
|
+
<id root="<%= UUID.generate %>"/>
|
22
|
+
<code code="ASSERTION"
|
23
|
+
codeSystem="2.16.840.1.113883.5.4"
|
24
|
+
codeSystemName="HL7ActCode"/>
|
25
|
+
<statusCode code="completed"/>
|
26
|
+
<%== code_display(entry, 'tag_name' => 'value', 'preferred_code_sets' => ['SNOMED-CT', 'ICD-9-CM', 'ICD-10-CM'], 'extra_content' => "xsi:type=\"CD\"") %>
|
27
|
+
</observation>
|
28
|
+
</entryRelationship>
|
29
|
+
<% end -%>
|
15
30
|
</observation>
|
16
31
|
</entry>
|
@@ -10,13 +10,18 @@
|
|
10
10
|
|
11
11
|
<effectiveTime>
|
12
12
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
13
|
+
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
13
14
|
</effectiveTime>
|
14
15
|
|
15
16
|
<% ev = entry.values.first
|
16
|
-
if ev.present? && ev.respond_to?(:scalar)
|
17
|
+
if ev.present? && ev.respond_to?(:scalar)
|
18
|
+
if is_num?(ev.scalar) -%>
|
17
19
|
<value xsi:type="INT" value="<%= ev.scalar %>"/>
|
20
|
+
<% else -%>
|
21
|
+
<value xsi:type="ST"><%= ev.scalar%></value>
|
22
|
+
<% end %>
|
18
23
|
<% else -%>
|
19
|
-
<value nullFlavor="UNK"/>
|
24
|
+
<value xsi:type="CD" nullFlavor="UNK"/>
|
20
25
|
<% end -%>
|
21
26
|
<%== render(:partial => 'reason', :locals => {:entry => entry}) %>
|
22
27
|
</observation>
|
@@ -8,13 +8,14 @@
|
|
8
8
|
<code code="418799008" codeSystem="2.16.840.1.113883.6.96" codeSystemName="SNOMED CT" displayName="Symptom"/>
|
9
9
|
<text><%= entry.description %></text>
|
10
10
|
<statusCode code="completed"/>
|
11
|
-
|
11
|
+
|
12
12
|
|
13
13
|
<effectiveTime>
|
14
14
|
<low <%= value_or_null_flavor(entry.start_time) %>/>
|
15
15
|
<high <%= value_or_null_flavor(entry.end_time) %>/>
|
16
16
|
</effectiveTime>
|
17
17
|
|
18
|
+
<%== code_display(entry, 'preferred_code_sets' => ['SNOMED-CT'], 'tag_name' => 'value', 'extra_content' => "xsi:type=\"CD\" sdtc:valueSet=\"#{value_set_oid}\"") %>
|
18
19
|
<!-- Status -->
|
19
20
|
<entryRelationship typeCode="REFR">
|
20
21
|
<observation classCode="OBS" moodCode="EVN">
|
@@ -1,9 +1,9 @@
|
|
1
|
-
<% if entry.route.present?
|
2
|
-
|
3
|
-
|
1
|
+
<% if entry.route.present?
|
2
|
+
# hard coded to NCI Thesaurus for the code system since Cat I mandates that
|
3
|
+
-%>
|
4
|
+
<routeCode code="<%= entry.route['code'] %>" codeSystem="2.16.840.1.113883.3.26.1.1"/>
|
4
5
|
<% end -%>
|
5
6
|
|
6
|
-
<!-- Attribute: dose -->
|
7
7
|
<% if entry.dose.present? -%>
|
8
8
|
<doseQuantity value="<%= entry.dose['value']%>"/>
|
9
9
|
<% end -%>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<recordTarget>
|
2
2
|
<patientRole>
|
3
|
-
|
3
|
+
<!-- id root="Cypress" extension="<%= patient.id %>"/ -->
|
4
4
|
<!-- Fake Medicare HIC number -->
|
5
5
|
<id extension="12345" root="2.16.840.1.113883.4.572"/>
|
6
6
|
<addr use="HP">
|
@@ -26,7 +26,7 @@
|
|
26
26
|
<% end %>
|
27
27
|
<%
|
28
28
|
languages = patient.languages
|
29
|
-
languages = ["
|
29
|
+
languages = ["eng"] if languages.nil? or languages.empty?
|
30
30
|
languages.each do |language|%>
|
31
31
|
<languageCommunication>
|
32
32
|
<templateId root="2.16.840.1.113883.3.88.11.83.2" assigningAuthorityName="HITSP/C83"/>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<%== code_display(ev, 'preferred_code_sets' => ['LOINC', 'SNOMED-CT', 'ICD-9-CM', 'ICD-10-CM'], 'tag_name' => 'value', 'extra_content' => "xsi:type=\"CD\"") %>
|
5
5
|
<% elsif ev.respond_to?(:scalar) -%>
|
6
6
|
<% if is_num?(ev.scalar) -%>
|
7
|
-
<value xsi:type="PQ" value="<%= ev.scalar %>" <% if ev.units -%>unit="<%= ev.units %>"<% end -%>/>
|
7
|
+
<value xsi:type="PQ" value="<%= ev.scalar %>" <% if ev.units && (ev.units != "") -%>unit="<%= ev.units %>"<% end -%>/>
|
8
8
|
<% elsif is_bool?(ev.scalar)%>
|
9
9
|
<value xsi:type="BL" value="<%= ev.scalar %>" />
|
10
10
|
<% else -%>
|
@@ -21,14 +21,14 @@
|
|
21
21
|
<!-- This is the document creation time -->
|
22
22
|
<effectiveTime value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
23
23
|
<confidentialityCode code="N" codeSystem="2.16.840.1.113883.5.25"/>
|
24
|
-
<languageCode code="
|
24
|
+
<languageCode code="eng"/>
|
25
25
|
<!-- reported patient -->
|
26
26
|
<%== render :partial => 'record_target', :locals => {:patient => patient} %>
|
27
27
|
<!-- Example of an author who is a device -->
|
28
28
|
<author>
|
29
29
|
<time value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
30
30
|
<assignedAuthor>
|
31
|
-
|
31
|
+
<!-- id extension="Cypress" root="2.16.840.1.113883.19.5"/ -->
|
32
32
|
<!-- NPI -->
|
33
33
|
<id extension="FakeNPI" root="2.16.840.1.113883.4.6"/>
|
34
34
|
<addr>
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<entryRelationship type="COMP">
|
2
|
+
<observation classCode="OBS" moodCode="EVN">
|
3
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.2"/>
|
4
|
+
<code nullFlavor="OTH">
|
5
|
+
<originalText>Time Difference</originalText>
|
6
|
+
</code>
|
7
|
+
<statusCode code="completed"/>
|
8
|
+
<value xsi:type="PQ" value="<%= population.population_count('OBSERV') %>" unit="min"/>
|
9
|
+
<methodCode code="MEDIAN"
|
10
|
+
displayName="Median"
|
11
|
+
codeSystem="2.16.840.1.113883.5.84"
|
12
|
+
codeSystemName="ObservationMethod"/>
|
13
|
+
<reference typeCode="REFR">
|
14
|
+
<!-- reference to the relevant measure observation in the eMeasure -->
|
15
|
+
<externalObservation classCode="OBS" moodCode="EVN">
|
16
|
+
<id root="<%= population.population_id('OBSERV') %>"/>
|
17
|
+
</externalObservation>
|
18
|
+
</reference>
|
19
|
+
</observation>
|
20
|
+
</entryRelationship>
|
@@ -0,0 +1,126 @@
|
|
1
|
+
|
2
|
+
<!-- MEASURE DATA REPORTING FOR <%= population_type %> <%= aggregate_count.population_id(population_type) %> -->
|
3
|
+
<observation classCode="OBS" moodCode="EVN">
|
4
|
+
<!-- Measure Data template -->
|
5
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.5"/>
|
6
|
+
<code code="ASSERTION"
|
7
|
+
codeSystem="2.16.840.1.113883.5.4"
|
8
|
+
displayName="Assertion"
|
9
|
+
codeSystemName="ActCode"/>
|
10
|
+
<statusCode code="completed"/>
|
11
|
+
<value xsi:type="CD" code="<%= population_type %>"
|
12
|
+
codeSystem="2.16.840.1.113883.5.1063"
|
13
|
+
codeSystemName="ObservationValue"/>
|
14
|
+
<!-- Aggregate Count -->
|
15
|
+
<entryRelationship typeCode="SUBJ" inversionInd="true">
|
16
|
+
<observation classCode="OBS" moodCode="EVN">
|
17
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.3"/>
|
18
|
+
<code code="MSRAGG"
|
19
|
+
displayName="rate aggregation"
|
20
|
+
codeSystem="2.16.840.1.113883.5.4"
|
21
|
+
codeSystemName="ActCode"/>
|
22
|
+
<value xsi:type="INT" value="<%= aggregate_count.population_count(population_type, population_id) %>"/>
|
23
|
+
<methodCode code="COUNT"
|
24
|
+
displayName="Count"
|
25
|
+
codeSystem="2.16.840.1.113883.5.84"
|
26
|
+
codeSystemName="ObservationMethod"/>
|
27
|
+
</observation>
|
28
|
+
</entryRelationship>
|
29
|
+
<% aggregate_count.stratifications.each do |strat| -%>
|
30
|
+
|
31
|
+
<!-- Startification Reporting Template for <%= population_type %> <%= aggregate_count.population_id(population_type) %> Stratification <%= strat.id %> -->
|
32
|
+
|
33
|
+
<entryRelationship typeCode="COMP">
|
34
|
+
<observation classCode="OBS" moodCode="EVN">
|
35
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.4"/>
|
36
|
+
<code code="ASSERTION"
|
37
|
+
codeSystem="2.16.840.1.113883.5.4"
|
38
|
+
displayName="Assertion"
|
39
|
+
codeSystemName="ActCode"/>
|
40
|
+
<statusCode code="completed"/>
|
41
|
+
<value xsi:type="CD" nullFlavor="OTH">
|
42
|
+
<originalText>Stratum</originalText>
|
43
|
+
</value>
|
44
|
+
<entryRelationship typeCode="SUBJ" inversionInd="true">
|
45
|
+
<observation classCode="OBS" moodCode="EVN">
|
46
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.3"/>
|
47
|
+
<code code="MSRAGG"
|
48
|
+
displayName="rate aggregation"
|
49
|
+
codeSystem="2.16.840.1.113883.5.4"
|
50
|
+
codeSystemName="ActCode"/>
|
51
|
+
<value xsi:type="INT" value="<%= strat.population_count(population_type, population_id) %>"/>
|
52
|
+
<methodCode code="COUNT"
|
53
|
+
displayName="Count"
|
54
|
+
codeSystem="2.16.840.1.113883.5.84"
|
55
|
+
codeSystemName="ObservationMethod"/>
|
56
|
+
</observation>
|
57
|
+
</entryRelationship>
|
58
|
+
<% if population_type == 'MSRPOPL' -%>
|
59
|
+
<%== render :partial => 'continuous_variable_value', :locals => {:population => strat} %>
|
60
|
+
<% end -%>
|
61
|
+
<reference typeCode="REFR">
|
62
|
+
<externalObservation classCode="OBS" moodCode="EVN">
|
63
|
+
<id root="<%= strat.id %>"/>
|
64
|
+
</externalObservation>
|
65
|
+
</reference>
|
66
|
+
</observation>
|
67
|
+
</entryRelationship>
|
68
|
+
<% end -%>
|
69
|
+
<% if aggregate_count.supplemental_data.present? -%>
|
70
|
+
<% sex_supplimental_data = aggregate_count.supplemental_data_for(population_type, "SEX")
|
71
|
+
if sex_supplimental_data.present?
|
72
|
+
sex_supplimental_data.each do |sex, count| -%>
|
73
|
+
|
74
|
+
<!-- SEX Supplemental Data Reporting for <%= population_type %> <%= aggregate_count.population_id(population_type) %> -->
|
75
|
+
|
76
|
+
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Sex Supplemental Data',
|
77
|
+
:template_id => '2.16.840.1.113883.10.20.27.3.6', :supplemental_data_code => '184100006',
|
78
|
+
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => sex,
|
79
|
+
:supplemental_data_value_code_system => '2.16.840.1.113883.5.1', :count => count} %>
|
80
|
+
<% end -%>
|
81
|
+
<% end -%>
|
82
|
+
<% ethnicity_supplimental_data = aggregate_count.supplemental_data_for(population_type, "ETHNICITY")
|
83
|
+
if ethnicity_supplimental_data.present?
|
84
|
+
ethnicity_supplimental_data.each do |ethnicity, count| -%>
|
85
|
+
|
86
|
+
<!-- ETHNICITY Supplemental Data Reporting for <%= population_type %> <%= aggregate_count.population_id(population_type) %> -->
|
87
|
+
|
88
|
+
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Ethnicity Supplemental Data',
|
89
|
+
:template_id => '2.16.840.1.113883.10.20.27.3.7', :supplemental_data_code => '364699009',
|
90
|
+
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => ethnicity,
|
91
|
+
:supplemental_data_value_code_system => '2.16.840.1.113883.6.238', :count => count} %>
|
92
|
+
<% end -%>
|
93
|
+
<% end -%>
|
94
|
+
<% race_supplimental_data = aggregate_count.supplemental_data_for(population_type, "RACE")
|
95
|
+
if race_supplimental_data.present?
|
96
|
+
race_supplimental_data.each do |race, count| -%>
|
97
|
+
|
98
|
+
<!-- RACE Supplemental Data Reporting for <%= population_type %> <%= aggregate_count.population_id(population_type) %> -->
|
99
|
+
|
100
|
+
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Race Supplemental Data',
|
101
|
+
:template_id => '2.16.840.1.113883.10.20.27.3.8', :supplemental_data_code => '103579009',
|
102
|
+
:supplemental_data_code_system => '2.16.840.1.113883.6.96', :supplemental_data_value_code => race,
|
103
|
+
:supplemental_data_value_code_system => '2.16.840.1.113883.6.238', :count => count} %>
|
104
|
+
<% end -%>
|
105
|
+
<% end -%>
|
106
|
+
<% payer_supplimental_data = aggregate_count.supplemental_data_for(population_type, "PAYER")
|
107
|
+
if payer_supplimental_data.present?
|
108
|
+
payer_supplimental_data.each do |payer, count| -%>
|
109
|
+
|
110
|
+
<!-- PAYER Supplemental Data Reporting for <%= population_type %> <%= aggregate_count.population_id(population_type) %> -->
|
111
|
+
<%== render :partial => 'supplemental_data', :locals => {:template_name => 'Payer Supplemental Data',
|
112
|
+
:template_id => '2.16.840.1.113883.10.20.27.3.9', :supplemental_data_code => '48768-6',
|
113
|
+
:supplemental_data_code_system => '2.16.840.1.113883.6.1', :supplemental_data_value_code => payer,
|
114
|
+
:supplemental_data_value_code_system => '2.16.840.1.113883.3.221.5', :count => count} %>
|
115
|
+
<% end -%>
|
116
|
+
<% end -%>
|
117
|
+
<% end -%>
|
118
|
+
<% if population_type == 'MSRPOPL' -%>
|
119
|
+
<%== render :partial => 'continuous_variable_value', :locals => {:population => aggregate_count} %>
|
120
|
+
<% end -%>
|
121
|
+
<reference typeCode="REFR">
|
122
|
+
<externalObservation classCode="OBS" moodCode="EVN">
|
123
|
+
<id root="<%= aggregate_count.population_id(population_type) %>"/>
|
124
|
+
</externalObservation>
|
125
|
+
</reference>
|
126
|
+
</observation>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<observation classCode="OBS" moodCode="EVN">
|
2
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.14"/>
|
3
|
+
<code code="72510-1" codeSystem="2.16.840.1.113883.6.1"
|
4
|
+
displayName="Performance Rate"
|
5
|
+
codeSystemName="2.16.840.1.113883.6.1"/>
|
6
|
+
<statusCode code="completed"/>
|
7
|
+
<value xsi:type="REAL" value="<%= aggregate_count.performance_rate %>"/>
|
8
|
+
<reference typeCode="REFR">
|
9
|
+
<externalObservation classCode="OBS" moodCode="EVN">
|
10
|
+
<id root="<%= aggregate_count.numerator.id %>"/>
|
11
|
+
<code code="NUMER" displayName="Numerator"
|
12
|
+
codeSystem="2.16.840.1.113883.5.1063"
|
13
|
+
codeSystemName="ObservationValue"/>
|
14
|
+
</externalObservation>
|
15
|
+
</reference>
|
16
|
+
</observation>
|
@@ -0,0 +1,36 @@
|
|
1
|
+
<!-- Supplemental Date Template -->
|
2
|
+
|
3
|
+
<entryRelationship typeCode="COMP">
|
4
|
+
<observation classCode="OBS" moodCode="EVN">
|
5
|
+
<!-- <%= template_name %> -->
|
6
|
+
<templateId root="<%= template_id %>"/>
|
7
|
+
<id nullFlavor="NA" />
|
8
|
+
<code code="<%= supplemental_data_code %>"
|
9
|
+
codeSystem="<%= supplemental_data_code_system %>"/>
|
10
|
+
<statusCode code="completed"/>
|
11
|
+
<% if supplemental_data_value_code == "" || supplemental_data_value_code == "UNK" -%>
|
12
|
+
<value xsi:type="CD"
|
13
|
+
nullFlavor="UNK" />
|
14
|
+
<% else -%>
|
15
|
+
|
16
|
+
<value xsi:type="CD"
|
17
|
+
code="<%= supplemental_data_value_code %>"
|
18
|
+
codeSystem="<%= supplemental_data_value_code_system %>"/>
|
19
|
+
<% end %>
|
20
|
+
<entryRelationship typeCode="SUBJ" inversionInd="true">
|
21
|
+
<!-- Aggregate Count template -->
|
22
|
+
<observation classCode="OBS" moodCode="EVN">
|
23
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.3"/>
|
24
|
+
<code code="MSRAGG"
|
25
|
+
displayName="rate aggregation"
|
26
|
+
codeSystem="2.16.840.1.113883.5.4"
|
27
|
+
codeSystemName="ActCode"/>
|
28
|
+
<value xsi:type="INT" value="<%= count %>"/>
|
29
|
+
<methodCode code="COUNT"
|
30
|
+
displayName="Count"
|
31
|
+
codeSystem="2.16.840.1.113883.5.84"
|
32
|
+
codeSystemName="ObservationMethod"/>
|
33
|
+
</observation>
|
34
|
+
</entryRelationship>
|
35
|
+
</observation>
|
36
|
+
</entryRelationship>
|
@@ -0,0 +1,157 @@
|
|
1
|
+
<?xml version="1.0" encoding="utf-8"?>
|
2
|
+
<ClinicalDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xmlns="urn:hl7-org:v3"
|
4
|
+
xmlns:cda="urn:hl7-org:v3">
|
5
|
+
|
6
|
+
<!--
|
7
|
+
********************************************************
|
8
|
+
CDA Header
|
9
|
+
********************************************************
|
10
|
+
-->
|
11
|
+
<realmCode code="US"/>
|
12
|
+
<typeId root="2.16.840.1.113883.1.3" extension="POCD_HD000040"/>
|
13
|
+
<!-- QRDA Category III Release 1 template ID (this template ID differs from QRDA III comment only template ID). -->
|
14
|
+
<templateId root="2.16.840.1.113883.10.20.27.1.1"/>
|
15
|
+
<id root="<%= UUID.generate %>"/>
|
16
|
+
<!-- SHALL QRDA III document type code -->
|
17
|
+
<code code="55184-6" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC"
|
18
|
+
displayName="Quality Reporting Document Architecture Calculated Summary Report"/>
|
19
|
+
<!-- SHALL Title, SHOULD have this content -->
|
20
|
+
<title>QRDA Calculated Summary Report</title>
|
21
|
+
<!-- SHALL -->
|
22
|
+
<effectiveTime value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
23
|
+
<confidentialityCode codeSystem="2.16.840.1.113883.5.25" code="N"/>
|
24
|
+
<languageCode code="en-US"/>
|
25
|
+
<!-- SHOULD The version of the file being submitted. -->
|
26
|
+
<versionNumber value="1"/>
|
27
|
+
<!-- SHALL contain recordTarget and ID - but ID is nulled to NA. This is an aggregate summary report. Therefore CDA's required patient identifier is nulled. -->
|
28
|
+
<recordTarget>
|
29
|
+
<patientRole>
|
30
|
+
<id nullFlavor="NA"/>
|
31
|
+
</patientRole>
|
32
|
+
</recordTarget>
|
33
|
+
<!-- SHALL have 1..* author. MAY be device or person.
|
34
|
+
The author of the CDA document in this example is a device at a data submission vendor/registry. -->
|
35
|
+
<author>
|
36
|
+
<time value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
37
|
+
<assignedAuthor>
|
38
|
+
<!-- Registry author ID -->
|
39
|
+
<id extension="Cypress" root="MITRE"/>
|
40
|
+
<assignedAuthoringDevice>
|
41
|
+
<softwareName></softwareName>
|
42
|
+
</assignedAuthoringDevice>
|
43
|
+
<representedOrganization>
|
44
|
+
<!-- Represents unique registry organization TIN -->
|
45
|
+
<id root="root" extension="ext"/>
|
46
|
+
<!-- Contains name - specific registry not required-->
|
47
|
+
<name></name>
|
48
|
+
</representedOrganization>
|
49
|
+
</assignedAuthor>
|
50
|
+
</author>
|
51
|
+
<!-- The custodian of the CDA document is the same as the legal authenticator in this
|
52
|
+
example and represents the reporting organization. -->
|
53
|
+
<!-- SHALL -->
|
54
|
+
<custodian>
|
55
|
+
<assignedCustodian>
|
56
|
+
<representedCustodianOrganization>
|
57
|
+
<!-- SHALL have an id - This is an example root -->
|
58
|
+
<id root="root"/>
|
59
|
+
<!-- SHOULD Name not required -->
|
60
|
+
<name>Cypress</name>
|
61
|
+
</representedCustodianOrganization>
|
62
|
+
</assignedCustodian>
|
63
|
+
</custodian>
|
64
|
+
<!-- The legal authenticator of the CDA document is a single person who is at the
|
65
|
+
same organization as the custodian in this example. This element must be present. -->
|
66
|
+
<!-- SHALL -->
|
67
|
+
<legalAuthenticator>
|
68
|
+
<!-- SHALL -->
|
69
|
+
<time value="<%= Time.now.utc.to_formatted_s(:number) %>"/>
|
70
|
+
<!-- SHALL -->
|
71
|
+
<signatureCode code="S"/>
|
72
|
+
<assignedEntity>
|
73
|
+
<!-- SHALL ID -->
|
74
|
+
<id root="root"/>
|
75
|
+
<!-- SHALL -->
|
76
|
+
<representedOrganization>
|
77
|
+
<!-- SHALL Id -->
|
78
|
+
<!-- example root -->
|
79
|
+
<id root="root"/>
|
80
|
+
</representedOrganization>
|
81
|
+
</assignedEntity>
|
82
|
+
</legalAuthenticator>
|
83
|
+
|
84
|
+
|
85
|
+
<!--
|
86
|
+
********************************************************
|
87
|
+
CDA Body
|
88
|
+
********************************************************
|
89
|
+
-->
|
90
|
+
<component>
|
91
|
+
<structuredBody>
|
92
|
+
<!--
|
93
|
+
********************************************************
|
94
|
+
QRDA Category III Reporting Parameters
|
95
|
+
********************************************************
|
96
|
+
-->
|
97
|
+
<%== cat1_renderer.render :partial => 'reporting_parameters', :locals => {:start_date => start_date, :end_date => end_date} %>
|
98
|
+
<!--
|
99
|
+
********************************************************
|
100
|
+
Measure Section
|
101
|
+
********************************************************
|
102
|
+
-->
|
103
|
+
<component>
|
104
|
+
<section>
|
105
|
+
<!-- Implied template Measure Section templateId -->
|
106
|
+
<templateId root="2.16.840.1.113883.10.20.24.2.2"/>
|
107
|
+
<!-- In this case the query is using an eMeasure -->
|
108
|
+
<!-- QRDA Category III Measure Section template -->
|
109
|
+
<templateId root="2.16.840.1.113883.10.20.27.2.1"/>
|
110
|
+
<code code="55186-1" codeSystem="2.16.840.1.113883.6.1"/>
|
111
|
+
<title>Measure Section</title>
|
112
|
+
<text>
|
113
|
+
|
114
|
+
</text>
|
115
|
+
<% measures.each do |measure| %>
|
116
|
+
<entry>
|
117
|
+
<organizer classCode="CLUSTER" moodCode="EVN">
|
118
|
+
<!-- Implied template Measure Reference templateId -->
|
119
|
+
<templateId root="2.16.840.1.113883.10.20.24.3.98"/>
|
120
|
+
<!-- SHALL 1..* (one for each referenced measure) Measure Reference and Results template -->
|
121
|
+
<templateId root="2.16.840.1.113883.10.20.27.3.1"/>
|
122
|
+
<statusCode code="completed"/>
|
123
|
+
<reference typeCode="REFR">
|
124
|
+
<externalDocument classCode="DOC" moodCode="EVN">
|
125
|
+
<!-- SHALL: required Id but not restricted to the eMeasure Document/Id-->
|
126
|
+
<!-- QualityMeasureDocument/id This is the version specific identifier for eMeasure -->
|
127
|
+
<id root="<%= measure['hqmf_id'] %>"/>
|
128
|
+
|
129
|
+
<!-- SHOULD This is the title of the eMeasure -->
|
130
|
+
<text><%= measure['name'] %></text>
|
131
|
+
<!-- SHOULD: setId is the eMeasure version neutral id -->
|
132
|
+
<setId root="<%= measure['hqmf_set_id'] %>"/>
|
133
|
+
<!-- This is the sequential eMeasure Version number -->
|
134
|
+
<versionNumber value="1"/>
|
135
|
+
</externalDocument>
|
136
|
+
</reference>
|
137
|
+
|
138
|
+
<% result = results[measure['hqmf_id']]
|
139
|
+
unless result.is_cv? || result.multiple_population_types?
|
140
|
+
-%>
|
141
|
+
<component>
|
142
|
+
<%== render :partial => 'performance_rate', :locals => {:aggregate_count => result} %>
|
143
|
+
</component>
|
144
|
+
<% end -%>
|
145
|
+
<% result.top_level_populations.each do |pop|
|
146
|
+
unless pop.type == 'OBSERV' -%>
|
147
|
+
<%== render :partial => 'measure_data', :locals => {:aggregate_count => result, :population_type => pop.type, :population_id => pop.id} %>
|
148
|
+
<% end
|
149
|
+
end -%>
|
150
|
+
</organizer>
|
151
|
+
</entry>
|
152
|
+
<% end %>
|
153
|
+
</section>
|
154
|
+
</component>
|
155
|
+
</structuredBody>
|
156
|
+
</component>
|
157
|
+
</ClinicalDocument>
|