cqm-parsers 0.2.3 → 3.1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (121) hide show
  1. checksums.yaml +5 -5
  2. data/Gemfile +8 -4
  3. data/README.md +57 -5
  4. data/Rakefile +1 -0
  5. data/lib/{hqmf-parser.rb → cqm-parsers.rb} +13 -45
  6. data/lib/ext/data_element.rb +1 -1
  7. data/lib/hqmf-parser/2.0/document.rb +1 -1
  8. data/lib/hqmf-parser/2.0/population_criteria.rb +1 -1
  9. data/lib/hqmf-parser/cql/document_helpers/doc_population_helper.rb +11 -6
  10. data/lib/measure-loader/cql_loader.rb +165 -0
  11. data/lib/measure-loader/elm_dependency_finder.rb +72 -0
  12. data/lib/measure-loader/elm_parser.rb +67 -0
  13. data/lib/measure-loader/exceptions.rb +10 -0
  14. data/lib/measure-loader/helpers.rb +11 -0
  15. data/lib/measure-loader/hqmf_measure_loader.rb +170 -0
  16. data/lib/measure-loader/mat_measure_files.rb +138 -0
  17. data/lib/measure-loader/source_data_criteria_loader.rb +75 -0
  18. data/lib/measure-loader/value_set_helpers.rb +68 -0
  19. data/lib/measure-loader/vsac_value_set_loader.rb +97 -0
  20. data/lib/tasks/hqmf.rake +1 -1
  21. data/lib/util/util.rb +23 -0
  22. data/lib/util/vsac_api.rb +166 -103
  23. metadata +60 -127
  24. data/lib/ext/code.rb +0 -10
  25. data/lib/qrda-export/catI-r5/_code.mustache +0 -1
  26. data/lib/qrda-export/catI-r5/_codes.mustache +0 -10
  27. data/lib/qrda-export/catI-r5/_header.mustache +0 -28
  28. data/lib/qrda-export/catI-r5/_measure_section.mustache +0 -59
  29. data/lib/qrda-export/catI-r5/_reporting_period.mustache +0 -23
  30. data/lib/qrda-export/catI-r5/_values.mustache +0 -10
  31. data/lib/qrda-export/catI-r5/qrda1_r5.mustache +0 -137
  32. data/lib/qrda-export/catI-r5/qrda1_r5.rb +0 -125
  33. data/lib/qrda-export/catI-r5/qrda_header/_author.mustache +0 -24
  34. data/lib/qrda-export/catI-r5/qrda_header/_custodian.mustache +0 -43
  35. data/lib/qrda-export/catI-r5/qrda_header/_documentation_of_service_event.mustache +0 -82
  36. data/lib/qrda-export/catI-r5/qrda_header/_information_recipient.mustache +0 -7
  37. data/lib/qrda-export/catI-r5/qrda_header/_legal_authenticator.mustache +0 -25
  38. data/lib/qrda-export/catI-r5/qrda_header/_participant.mustache +0 -7
  39. data/lib/qrda-export/catI-r5/qrda_header/_record_target.mustache +0 -28
  40. data/lib/qrda-export/catI-r5/qrda_templates/adverse_event.mustache +0 -28
  41. data/lib/qrda-export/catI-r5/qrda_templates/allergy_intolerance.mustache +0 -28
  42. data/lib/qrda-export/catI-r5/qrda_templates/assessment_performed.mustache +0 -25
  43. data/lib/qrda-export/catI-r5/qrda_templates/communication_from_patient_to_provider.mustache +0 -29
  44. data/lib/qrda-export/catI-r5/qrda_templates/communication_from_provider_to_patient.mustache +0 -24
  45. data/lib/qrda-export/catI-r5/qrda_templates/communication_from_provider_to_provider.mustache +0 -31
  46. data/lib/qrda-export/catI-r5/qrda_templates/device_applied.mustache +0 -32
  47. data/lib/qrda-export/catI-r5/qrda_templates/device_ordered.mustache +0 -31
  48. data/lib/qrda-export/catI-r5/qrda_templates/diagnosis.mustache +0 -38
  49. data/lib/qrda-export/catI-r5/qrda_templates/diagnostic_study_ordered.mustache +0 -19
  50. data/lib/qrda-export/catI-r5/qrda_templates/diagnostic_study_performed.mustache +0 -32
  51. data/lib/qrda-export/catI-r5/qrda_templates/encounter_ordered.mustache +0 -24
  52. data/lib/qrda-export/catI-r5/qrda_templates/encounter_performed.mustache +0 -40
  53. data/lib/qrda-export/catI-r5/qrda_templates/immunization_administered.mustache +0 -29
  54. data/lib/qrda-export/catI-r5/qrda_templates/insurance_provider.mustache +0 -11
  55. data/lib/qrda-export/catI-r5/qrda_templates/intervention_ordered.mustache +0 -18
  56. data/lib/qrda-export/catI-r5/qrda_templates/intervention_performed.mustache +0 -25
  57. data/lib/qrda-export/catI-r5/qrda_templates/lab_test_ordered.mustache +0 -18
  58. data/lib/qrda-export/catI-r5/qrda_templates/lab_test_performed.mustache +0 -22
  59. data/lib/qrda-export/catI-r5/qrda_templates/medication_active.mustache +0 -35
  60. data/lib/qrda-export/catI-r5/qrda_templates/medication_administered.mustache +0 -31
  61. data/lib/qrda-export/catI-r5/qrda_templates/medication_discharge.mustache +0 -55
  62. data/lib/qrda-export/catI-r5/qrda_templates/medication_dispensed.mustache +0 -39
  63. data/lib/qrda-export/catI-r5/qrda_templates/medication_ordered.mustache +0 -38
  64. data/lib/qrda-export/catI-r5/qrda_templates/patient_characteristic_expired.mustache +0 -16
  65. data/lib/qrda-export/catI-r5/qrda_templates/physical_exam_performed.mustache +0 -25
  66. data/lib/qrda-export/catI-r5/qrda_templates/procedure_ordered.mustache +0 -19
  67. data/lib/qrda-export/catI-r5/qrda_templates/procedure_performed.mustache +0 -44
  68. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_admission_source.mustache +0 -6
  69. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_anatomical_location_site.mustache +0 -1
  70. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_author.mustache +0 -7
  71. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_author_participation.mustache +0 -7
  72. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_component.mustache +0 -11
  73. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_encounter_diagnosis.mustache +0 -19
  74. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_encounter_facility_location.mustache +0 -16
  75. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_mediation_frequency.mustache +0 -3
  76. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_medication_details.mustache +0 -11
  77. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_ordinality.mustache +0 -1
  78. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_principal_diagnosis.mustache +0 -8
  79. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_reason.mustache +0 -12
  80. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_related_to.mustache +0 -6
  81. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_results.mustache +0 -19
  82. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_severity.mustache +0 -8
  83. data/lib/qrda-export/helper/cat_1_view_helper.rb +0 -146
  84. data/lib/qrda-export/helper/code_system_helper.rb +0 -77
  85. data/lib/qrda-export/helper/date_helper.rb +0 -89
  86. data/lib/qrda-import/base-importers/demographics_importer.rb +0 -49
  87. data/lib/qrda-import/base-importers/medication_importer.rb +0 -23
  88. data/lib/qrda-import/base-importers/section_importer.rb +0 -196
  89. data/lib/qrda-import/cda_identifier.rb +0 -19
  90. data/lib/qrda-import/data-element-importers/adverse_event_importer.rb +0 -24
  91. data/lib/qrda-import/data-element-importers/allergy_intolerance_importer.rb +0 -22
  92. data/lib/qrda-import/data-element-importers/assessment_performed_importer.rb +0 -24
  93. data/lib/qrda-import/data-element-importers/communication_from_patient_to_provider_importer.rb +0 -20
  94. data/lib/qrda-import/data-element-importers/communication_from_provider_to_patient_importer.rb +0 -20
  95. data/lib/qrda-import/data-element-importers/communication_from_provider_to_provider_importer.rb +0 -22
  96. data/lib/qrda-import/data-element-importers/device_applied_importer.rb +0 -24
  97. data/lib/qrda-import/data-element-importers/device_order_importer.rb +0 -19
  98. data/lib/qrda-import/data-element-importers/diagnosis_importer.rb +0 -24
  99. data/lib/qrda-import/data-element-importers/diagnostic_study_order_importer.rb +0 -21
  100. data/lib/qrda-import/data-element-importers/diagnostic_study_performed_importer.rb +0 -31
  101. data/lib/qrda-import/data-element-importers/encounter_order_importer.rb +0 -21
  102. data/lib/qrda-import/data-element-importers/encounter_performed_importer.rb +0 -42
  103. data/lib/qrda-import/data-element-importers/immunization_administered_importer.rb +0 -18
  104. data/lib/qrda-import/data-element-importers/intervention_order_importer.rb +0 -19
  105. data/lib/qrda-import/data-element-importers/intervention_performed_importer.rb +0 -23
  106. data/lib/qrda-import/data-element-importers/laboratory_test_order_importer.rb +0 -21
  107. data/lib/qrda-import/data-element-importers/laboratory_test_performed_importer.rb +0 -29
  108. data/lib/qrda-import/data-element-importers/medication_active_importer.rb +0 -17
  109. data/lib/qrda-import/data-element-importers/medication_administered_importer.rb +0 -17
  110. data/lib/qrda-import/data-element-importers/medication_discharge_importer.rb +0 -19
  111. data/lib/qrda-import/data-element-importers/medication_dispensed_importer.rb +0 -19
  112. data/lib/qrda-import/data-element-importers/medication_order_importer.rb +0 -16
  113. data/lib/qrda-import/data-element-importers/patient_characteristic_expired.rb +0 -22
  114. data/lib/qrda-import/data-element-importers/physical_exam_performed_importer.rb +0 -27
  115. data/lib/qrda-import/data-element-importers/procedure_order_importer.rb +0 -27
  116. data/lib/qrda-import/data-element-importers/procedure_performed_importer.rb +0 -35
  117. data/lib/qrda-import/data-element-importers/substance_administered_importer.rb +0 -17
  118. data/lib/qrda-import/entry_finder.rb +0 -20
  119. data/lib/qrda-import/entry_package.rb +0 -16
  120. data/lib/qrda-import/narrative_reference_handler.rb +0 -33
  121. data/lib/qrda-import/patient_importer.rb +0 -111
@@ -1,11 +0,0 @@
1
- <entryRelationship typeCode="REFR">
2
- <observation classCode="OBS" moodCode="EVN">
3
- <!-- Component -->
4
- <templateId root="2.16.840.1.113883.10.20.24.3.149" extension="2017-08-01" />
5
- <id root="{{random_id}}"/>
6
- {{#code}}
7
- <code {{> _code}}/>
8
- {{/code}}
9
- {{{result_value}}}
10
- </observation>
11
- </entryRelationship>
@@ -1,19 +0,0 @@
1
- <entryRelationship typeCode="REFR">
2
- <act classCode="ACT" moodCode="EVN">
3
- <templateId extension="2015-08-01" root="2.16.840.1.113883.10.20.22.4.80"/>
4
- <code code="29308-4" codeSystem="2.16.840.1.113883.6.1" codeSystemName="LOINC" displayName="Diagnosis"/>
5
- <entryRelationship typeCode="SUBJ">
6
- <observation classCode="OBS" moodCode="EVN">
7
- <!-- Problem observation template -->
8
- <templateId extension="2015-08-01" root="2.16.840.1.113883.10.20.22.4.4"/>
9
- <id root="{{random_id}}"/>
10
- <code code="29308-4" codeSystem="2.16.840.1.113883.6.1">
11
- <translation code="282291009" codeSystem="2.16.840.1.113883.6.96"/>
12
- </code>
13
- <statusCode code="completed"/>
14
- {{{relevant_period}}}
15
- <value {{> _code}} xsi:type="CD"/>
16
- </observation>
17
- </entryRelationship>
18
- </act>
19
- </entryRelationship>
@@ -1,16 +0,0 @@
1
- <participant typeCode="LOC">
2
- <!-- Facility Location template -->
3
- <templateId extension="2017-08-01" root="2.16.840.1.113883.10.20.24.3.100"/>
4
- <time>
5
- {{{facility_period}}}
6
- </time>
7
- <participantRole classCode="SDLOC">
8
- {{#code}}
9
- <code {{> _code}}/>
10
- {{/code}}
11
- <telecom nullFlavor="UNK"/>
12
- <playingEntity classCode="PLC">
13
- <name/>
14
- </playingEntity>
15
- </participantRole>
16
- </participant>
@@ -1,3 +0,0 @@
1
- <effectiveTime xsi:type="PIVL_TS" institutionSpecified="true" operator="A">
2
- <period value="1" unit="d"/>
3
- </effectiveTime>
@@ -1,11 +0,0 @@
1
- {{#route}}
2
- <routeCode {{> _code}}/>
3
- {{/route}}
4
- {{#negated}}
5
- <doseQuantity nullFlavor="NA"/>
6
- {{/negated}}
7
- {{^negated}}
8
- {{#dosage}}
9
- <doseQuantity value="{{value}}" unit="{{unit}}"/>
10
- {{/dosage}}
11
- {{/negated}}
@@ -1,8 +0,0 @@
1
- <entryRelationship typeCode="REFR">
2
- <observation classCode="OBS" moodCode="EVN">
3
- <templateId root="2.16.840.1.113883.10.20.24.3.152" extension="2017-08-01"/>
4
- <id root="{{random_id}}"/>
5
- <code code="8319008" codeSystem="2.16.840.1.113883.6.96" displayName="Principal Diagnosis" codeSystemName="SNOMED"/>
6
- <value {{> _code}} xsi:type="CD"/>
7
- </observation>
8
- </entryRelationship>
@@ -1,12 +0,0 @@
1
- <entryRelationship typeCode="RSON">
2
- <observation classCode="OBS" moodCode="EVN">
3
- <templateId root="2.16.840.1.113883.10.20.24.3.88" extension="2017-08-01"/>
4
- <id root="1.3.6.1.4.1.115" extension="{{random_id}}" />
5
- <code code="77301-0" codeSystem="2.16.840.1.113883.6.1" displayName="reason" codeSystemName="LOINC"/>
6
- <statusCode code="completed"/>
7
- {{#relevantPeriod}}
8
- {{{relevant_period}}}
9
- {{/relevantPeriod}}
10
- <value {{> _code}} xsi:type="CD"/>
11
- </observation>
12
- </entryRelationship>
@@ -1,6 +0,0 @@
1
- <sdtc:inFulfillmentOf1 typeCode="FLFS">
2
- <sdtc:templateId root="2.16.840.1.113883.10.20.24.3.150" extension="2017-08-01"/>
3
- <sdtc:actReference classCode="ACT" moodCode="EVN">
4
- <sdtc:id root="1.3.6.1.4.1.115" extension="{{{as_id}}}"/>
5
- </sdtc:actReference>
6
- </sdtc:inFulfillmentOf1>
@@ -1,19 +0,0 @@
1
- <entryRelationship typeCode="REFR">
2
- <observation classCode="OBS" moodCode="EVN">
3
- <!-- Conforms to C-CDA R2 Result Observation (V2) -->
4
- <templateId root="2.16.840.1.113883.10.20.22.4.2" extension="2015-08-01"/>
5
- <id root="1.3.6.1.4.1.115" extension="{{random_id}}"/>
6
- {{> _codes}}
7
- <statusCode code="completed"/>
8
- {{#relevantPeriod}}
9
- {{{relevant_period_as_value}}}
10
- {{/relevantPeriod}}
11
- {{^relevantPeriod}}
12
- {{#authorDatetime}}
13
- {{{author_effective_time}}}
14
- {{/authorDatetime}}
15
- {{/relevantPeriod}}
16
- {{{result_value}}}
17
- </observation>
18
- </entryRelationship>
19
-
@@ -1,8 +0,0 @@
1
- <entryRelationship typeCode="REFR">
2
- <observation classCode="OBS" moodCode="EVN">
3
- <templateId root="2.16.840.1.113883.10.20.22.4.8" extension="2014-06-09" />
4
- <code code="SEV" codeSystem="2.16.840.1.113883.5.4" />
5
- <statusCode code="completed" />
6
- <value xsi:type="CD" {{> _code}}/>
7
- </observation>
8
- </entryRelationship>
@@ -1,146 +0,0 @@
1
- module Qrda
2
- module Export
3
- module Helper
4
- module Cat1ViewHelper
5
- def random_id
6
- UUID.generate
7
- end
8
-
9
- def as_id
10
- self[:value]
11
- end
12
-
13
- def object_id
14
- self[:_id]
15
- end
16
-
17
- def submission_program
18
- @submission_program
19
- end
20
-
21
- def provider
22
- JSON.parse(@provider.to_json) if @provider
23
- end
24
-
25
- def provider_addresses
26
- @provider['addresses']
27
- end
28
-
29
- def provider_street
30
- self['street'].join('')
31
- end
32
-
33
- def provider_npi
34
- @provider['cda_identifiers'].map { |cda| cda['extension'] if cda['root'] == '2.16.840.1.113883.4.6' }.compact.first
35
- end
36
-
37
- def provider_tin
38
- @provider['cda_identifiers'].map { |cda| cda['extension'] if cda['root'] == '2.16.840.1.113883.4.2' }.compact.first
39
- end
40
-
41
- def provider_ccn
42
- @provider['cda_identifiers'].map { |cda| cda['extension'] if cda['root'] == '2.16.840.1.113883.4.336' }.compact.first
43
- end
44
-
45
- def provider_type_code
46
- @provider['specialty']
47
- end
48
-
49
- def mrn
50
- @patient.extendedData['medical_record_number']
51
- end
52
-
53
- def given_name
54
- @patient.givenNames.join(' ')
55
- end
56
-
57
- def family_name
58
- @patient.familyName
59
- end
60
-
61
- def birthdate
62
- @patient.birthDatetime.to_formatted_s(:number)
63
- end
64
-
65
- def gender
66
- @patient.dataElements.where(hqmfOid: '2.16.840.1.113883.10.20.28.3.55').first.dataElementCodes.first['code']
67
- end
68
-
69
- def race
70
- @patient.dataElements.where(hqmfOid: '2.16.840.1.113883.10.20.28.3.59').first.dataElementCodes.first['code']
71
- end
72
-
73
- def ethnic_group
74
- @patient.dataElements.where(hqmfOid: '2.16.840.1.113883.10.20.28.3.56').first.dataElementCodes.first['code']
75
- end
76
-
77
- def insurance_provider
78
- @insurance_provider
79
- end
80
-
81
- def insurance_provider_code_and_code_system
82
- "code=\"#{self['codes'].values.first[0]}\" codeSystem=\"#{code_system_oid(self['codes'].keys.first)}\" codeSystemName=\"#{self['codes'].keys.first}\""
83
- end
84
-
85
- def measures
86
- @measures.only(:hqmf_id, :hqmf_set_id, :description).as_json
87
- end
88
-
89
- def negation_ind
90
- self[:negationRationale].nil? ? "" : "negationInd=\"true\""
91
- end
92
-
93
- def negated
94
- self[:negationRationale].nil? ? false : true
95
- end
96
-
97
- def multiple_codes?
98
- self[:dataElementCodes].size > 1
99
- end
100
-
101
- def code_system_oid(name)
102
- Qrda::Export::Helper::CodeSystemHelper.oid_for_code_system(name)
103
- end
104
-
105
- def code_and_codesystem
106
- if self['codeSystem'] == 'NA_VALUESET'
107
- "nullFlavor=\"NA\" sdtc:valueSet=\"#{self['code']}\""
108
- else
109
- "code=\"#{self['code']}\" codeSystem=\"#{code_system_oid(self['codeSystem'])}\" codeSystemName=\"#{self['codeSystem']}\""
110
- end
111
- end
112
-
113
- def primary_code_and_codesystem
114
- "code=\"#{self[:dataElementCodes][0]['code']}\" codeSystem=\"#{code_system_oid(self[:dataElementCodes][0]['codeSystem'])}\" codeSystemName=\"#{self[:dataElementCodes][0]['codeSystem']}\""
115
- end
116
-
117
- def translation_codes_and_codesystem_list
118
- translation_list = ""
119
- self[:dataElementCodes].each_with_index do |_dec, index|
120
- next if index.zero?
121
- translation_list += "<translation code=\"#{self[:dataElementCodes][index]['code']}\" codeSystem=\"#{code_system_oid(self[:dataElementCodes][index]['codeSystem'])}\" codeSystemName=\"#{self[:dataElementCodes][index]['codeSystem']}\"/>"
122
- end
123
- translation_list
124
- end
125
-
126
- def result_value
127
- return "<value xsi:type=\"CD\" nullFlavor=\"UNK\"/>" unless self['result']
128
- result_string = if self['result'].is_a? Array
129
- result_value_as_string(self['result'][0])
130
- elsif self['result'].is_a? Hash
131
- result_value_as_string(self['result'])
132
- elsif !self['result'].nil?
133
- "<value xsi:type=\"PQ\" value=\"#{self['result']}\" unit=\"1\"/>"
134
- end
135
- result_string
136
- end
137
-
138
- def result_value_as_string(result)
139
- return "<value xsi:type=\"CD\" nullFlavor=\"UNK\"/>" unless result
140
- return "<value xsi:type=\"CD\" code=\"#{result['code']}\" codeSystem=\"#{code_system_oid(result['codeSystem'])}\" codeSystemName=\"#{result['codeSystem']}\"/>" if result['code']
141
- return "<value xsi:type=\"PQ\" value=\"#{result['value']}\" unit=\"#{result['unit']}\"/>" if result['unit']
142
- end
143
- end
144
- end
145
- end
146
- end
@@ -1,77 +0,0 @@
1
- module Qrda
2
- module Export
3
- module Helper
4
- # General helpers for working with codes and code systems
5
- class CodeSystemHelper
6
- CODE_SYSTEMS = {
7
- '2.16.840.1.113883.6.1' => 'LOINC',
8
- '2.16.840.1.113883.6.96' => 'SNOMED-CT',
9
- '2.16.840.1.113883.6.12' => 'CPT',
10
- '2.16.840.1.113883.6.88' => 'RxNorm',
11
- '2.16.840.1.113883.6.103' => 'ICD-9-CM',
12
- '2.16.840.1.113883.6.104' => 'ICD-9-PCS',
13
- '2.16.840.1.113883.6.4' => 'ICD-10-PCS',
14
- '2.16.840.1.113883.6.90' => 'ICD-10-CM',
15
- '2.16.840.1.113883.6.14' => 'HCP',
16
- '2.16.840.1.113883.6.285' => 'HCPCS',
17
- '2.16.840.1.113883.5.2' => "HL7 Marital Status",
18
- '2.16.840.1.113883.12.292' => 'CVX',
19
- '2.16.840.1.113883.5.83' => 'HITSP C80 Observation Status',
20
- '2.16.840.1.113883.3.26.1.1' => 'NCI Thesaurus',
21
- '2.16.840.1.113883.3.88.12.80.20' => 'FDA',
22
- "2.16.840.1.113883.4.9" => "UNII",
23
- "2.16.840.1.113883.6.69" => "NDC",
24
- '2.16.840.1.113883.5.14' => 'HL7 ActStatus',
25
- '2.16.840.1.113883.6.259' => 'HL7 Healthcare Service Location',
26
- '2.16.840.1.113883.12.112' => 'DischargeDisposition',
27
- '2.16.840.1.113883.5.4' => 'HL7 Act Code',
28
- '2.16.840.1.113883.1.11.18877' => 'HL7 Relationship Code',
29
- '2.16.840.1.113883.6.238' => 'CDC Race',
30
- '2.16.840.1.113883.6.177' => 'NLM MeSH',
31
- '2.16.840.1.113883.5.1076' => "Religious Affiliation",
32
- '2.16.840.1.113883.1.11.19717' => "HL7 ActNoImmunicationReason",
33
- '2.16.840.1.113883.3.88.12.80.33' => "NUBC",
34
- '2.16.840.1.113883.1.11.78' => "HL7 Observation Interpretation",
35
- '2.16.840.1.113883.3.221.5' => "Source of Payment Typology",
36
- '2.16.840.1.113883.6.13' => 'CDT',
37
- '2.16.840.1.113883.18.2' => 'AdministrativeSex'
38
- }
39
-
40
- CODE_SYSTEM_ALIASES = {
41
- 'FDA SPL' => 'NCI Thesaurus',
42
- 'HSLOC' => 'HL7 Healthcare Service Location',
43
- 'SOP' => "Source of Payment Typology"
44
- }
45
-
46
- # Some old OID are still around in data, this hash maps retired OID values to
47
- # the new value
48
- OID_ALIASES = {
49
- '2.16.840.1.113883.6.59' => '2.16.840.1.113883.12.292' # CVX
50
- }
51
-
52
- # Returns the name of a code system given an oid
53
- # @param [String] oid of a code system
54
- # @return [String] the name of the code system as described in the measure definition JSON
55
- def self.code_system_for(oid)
56
- oid = OID_ALIASES[oid] if OID_ALIASES[oid]
57
- CODE_SYSTEMS[oid] || "Unknown"
58
- end
59
-
60
- # Returns the oid for a code system given a codesystem name
61
- # @param [String] the name of the code system
62
- # @return [String] the oid of the code system
63
- def self.oid_for_code_system(code_system)
64
- code_system = CODE_SYSTEM_ALIASES[code_system] if CODE_SYSTEM_ALIASES[code_system]
65
- CODE_SYSTEMS.invert[code_system]
66
- end
67
-
68
- # Returns the whole map of OIDs to code systems
69
- # @terurn [Hash] oids as keys, code system names as values
70
- def self.code_systems
71
- CODE_SYSTEMS
72
- end
73
- end
74
- end
75
- end
76
- end
77
-
@@ -1,89 +0,0 @@
1
- module Qrda
2
- module Export
3
- module Helper
4
- module DateHelper
5
- def value_or_null_flavor(time)
6
- # this is a bit of a hack for a defineded undefined date
7
- if time && DateTime.parse(time).year < 3000
8
- "value='#{DateTime.parse(time).utc.to_formatted_s(:number)}'"
9
- else
10
- "nullFlavor='UNK'"
11
- end
12
- end
13
-
14
- def performance_period_start
15
- @performance_period_start.to_formatted_s(:number)
16
- end
17
-
18
- def performance_period_end
19
- @performance_period_end.to_formatted_s(:number)
20
- end
21
-
22
- def current_time
23
- Time.now.utc.to_formatted_s(:number)
24
- end
25
-
26
- def author_time
27
- "<time #{value_or_null_flavor(self['authorDatetime'])}/>"
28
- end
29
-
30
- def author_effective_time
31
- "<effectiveTime #{value_or_null_flavor(self['authorDatetime'])}/>"
32
- end
33
-
34
- def expired_date_time
35
- "<effectiveTime>"\
36
- "<low #{value_or_null_flavor(self['expiredDatetime'])}/>"\
37
- "</effectiveTime>"
38
- end
39
-
40
- def prevalence_period
41
- "<effectiveTime>"\
42
- "<low #{value_or_null_flavor(self['prevalencePeriod']['low'])}/>"\
43
- "<high #{value_or_null_flavor(self['prevalencePeriod']['high'])}/>"\
44
- "</effectiveTime>"
45
- end
46
-
47
- def relevant_period
48
- "<effectiveTime>"\
49
- "<low #{value_or_null_flavor(self['relevantPeriod']['low'])}/>"\
50
- "<high #{value_or_null_flavor(self['relevantPeriod']['high'])}/>"\
51
- "</effectiveTime>"
52
- end
53
-
54
- def relevant_period_as_value
55
- "<effectiveTime #{value_or_null_flavor(self['relevantPeriod']['low'])}/>"
56
- end
57
-
58
- def insurance_provider_period
59
- start_time = self['start_time'] ? DateTime.strptime(self['start_time'].to_s, '%s').to_s : nil
60
- end_time = self['end_time'] ? DateTime.strptime(self['end_time'].to_s, '%s').to_s : nil
61
- "<effectiveTime>"\
62
- "<low #{value_or_null_flavor(start_time)}/>"\
63
- "<high #{value_or_null_flavor(end_time)}/>"\
64
- "</effectiveTime>"
65
- end
66
-
67
- def medication_duration_effective_time
68
- "<effectiveTime xsi:type=\"IVL_TS\">"\
69
- "<low #{value_or_null_flavor(self['relevantPeriod']['low'])}/>"\
70
- "<high #{value_or_null_flavor(self['relevantPeriod']['high'])}/>"\
71
- "</effectiveTime>"
72
- end
73
-
74
- def facility_period
75
- "<low #{value_or_null_flavor(self['locationPeriod']['low'])}/>"\
76
- "<high #{value_or_null_flavor(self['locationPeriod']['high'])}/>"
77
- end
78
-
79
- def incision_datetime
80
- "<effectiveTime #{value_or_null_flavor(self['incisionDatetime'])}/>"
81
- end
82
-
83
- def completed_prevalence_period
84
- self['prevalencePeriod']['high'] ? true : false
85
- end
86
- end
87
- end
88
- end
89
- end