cqm-reports 3.0.0.pre.alpha.2 → 3.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (126) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -1
  3. data/README.md +27 -0
  4. data/lib/cqm-reports.rb +3 -3
  5. data/lib/html-export/qdm-patient/data_element/_data_element_other_fields.mustache +129 -5
  6. data/lib/html-export/qdm-patient/data_element/_data_element_times.mustache +36 -1
  7. data/lib/html-export/qdm-patient/qdm_patient.mustache +9 -7
  8. data/lib/html-export/qdm-patient/qdm_patient.rb +69 -5
  9. data/lib/qrda-export/catI-r5/_header.mustache +2 -2
  10. data/lib/qrda-export/catI-r5/qrda1_r5.mustache +10 -2
  11. data/lib/qrda-export/catI-r5/qrda1_r5.rb +33 -2
  12. data/lib/qrda-export/catI-r5/qrda_header/_record_target.mustache +25 -10
  13. data/lib/qrda-export/catI-r5/qrda_templates/adverse_event.mustache +8 -2
  14. data/lib/qrda-export/catI-r5/qrda_templates/allergy_intolerance.mustache +8 -8
  15. data/lib/qrda-export/catI-r5/qrda_templates/assessment_order.mustache +7 -1
  16. data/lib/qrda-export/catI-r5/qrda_templates/assessment_performed.mustache +8 -1
  17. data/lib/qrda-export/catI-r5/qrda_templates/assessment_recommended.mustache +7 -1
  18. data/lib/qrda-export/catI-r5/qrda_templates/communication_performed.mustache +12 -13
  19. data/lib/qrda-export/catI-r5/qrda_templates/device_applied.mustache +8 -5
  20. data/lib/qrda-export/catI-r5/qrda_templates/device_order.mustache +8 -3
  21. data/lib/qrda-export/catI-r5/qrda_templates/device_recommended.mustache +8 -2
  22. data/lib/qrda-export/catI-r5/qrda_templates/diagnosis.mustache +9 -9
  23. data/lib/qrda-export/catI-r5/qrda_templates/diagnostic_study_order.mustache +7 -1
  24. data/lib/qrda-export/catI-r5/qrda_templates/diagnostic_study_performed.mustache +8 -5
  25. data/lib/qrda-export/catI-r5/qrda_templates/diagnostic_study_recommended.mustache +7 -1
  26. data/lib/qrda-export/catI-r5/qrda_templates/encounter_order.mustache +11 -2
  27. data/lib/qrda-export/catI-r5/qrda_templates/encounter_performed.mustache +9 -3
  28. data/lib/qrda-export/catI-r5/qrda_templates/encounter_recommended.mustache +8 -3
  29. data/lib/qrda-export/catI-r5/qrda_templates/family_history.mustache +8 -2
  30. data/lib/qrda-export/catI-r5/qrda_templates/immunization_administered.mustache +22 -7
  31. data/lib/qrda-export/catI-r5/qrda_templates/immunization_order.mustache +8 -2
  32. data/lib/qrda-export/catI-r5/qrda_templates/intervention_order.mustache +7 -1
  33. data/lib/qrda-export/catI-r5/qrda_templates/intervention_performed.mustache +8 -5
  34. data/lib/qrda-export/catI-r5/qrda_templates/intervention_recommended.mustache +7 -1
  35. data/lib/qrda-export/catI-r5/qrda_templates/laboratory_test_order.mustache +7 -1
  36. data/lib/qrda-export/catI-r5/qrda_templates/laboratory_test_performed.mustache +8 -5
  37. data/lib/qrda-export/catI-r5/qrda_templates/laboratory_test_recommended.mustache +7 -1
  38. data/lib/qrda-export/catI-r5/qrda_templates/medication_active.mustache +17 -7
  39. data/lib/qrda-export/catI-r5/qrda_templates/medication_administered.mustache +17 -5
  40. data/lib/qrda-export/catI-r5/qrda_templates/medication_discharge.mustache +14 -3
  41. data/lib/qrda-export/catI-r5/qrda_templates/medication_dispensed.mustache +30 -17
  42. data/lib/qrda-export/catI-r5/qrda_templates/medication_order.mustache +7 -1
  43. data/lib/qrda-export/catI-r5/qrda_templates/patient_care_experience.mustache +7 -1
  44. data/lib/qrda-export/catI-r5/qrda_templates/physical_exam_order.mustache +7 -1
  45. data/lib/qrda-export/catI-r5/qrda_templates/physical_exam_performed.mustache +8 -5
  46. data/lib/qrda-export/catI-r5/qrda_templates/physical_exam_recommended.mustache +7 -1
  47. data/lib/qrda-export/catI-r5/qrda_templates/procedure_order.mustache +11 -1
  48. data/lib/qrda-export/catI-r5/qrda_templates/procedure_performed.mustache +12 -5
  49. data/lib/qrda-export/catI-r5/qrda_templates/procedure_recommended.mustache +11 -1
  50. data/lib/qrda-export/catI-r5/qrda_templates/program_participation.mustache +21 -0
  51. data/lib/qrda-export/catI-r5/qrda_templates/provider_care_experience.mustache +7 -1
  52. data/lib/qrda-export/catI-r5/qrda_templates/related_person.mustache +18 -0
  53. data/lib/qrda-export/catI-r5/qrda_templates/substance_recommended.mustache +10 -1
  54. data/lib/qrda-export/catI-r5/qrda_templates/symptom.mustache +10 -8
  55. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_author.mustache +1 -1
  56. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_encounter_diagnosis_qdm.mustache +24 -0
  57. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_entity.mustache +12 -0
  58. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_entity_care_partner.mustache +11 -0
  59. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_entity_organization.mustache +11 -0
  60. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_entity_patient.mustache +6 -0
  61. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_entity_practitioner.mustache +19 -0
  62. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_immunization_supply_request.mustache +29 -0
  63. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_medication_supply_request.mustache +12 -1
  64. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_rank.mustache +7 -0
  65. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_reason.mustache +0 -1
  66. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_related_to.mustache +1 -1
  67. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_results.mustache +8 -1
  68. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_status.mustache +1 -1
  69. data/lib/qrda-export/catIII-r2-1/_header.mustache +1 -1
  70. data/lib/qrda-export/helper/cat1_view_helper.rb +2 -0
  71. data/lib/qrda-export/helper/date_helper.rb +25 -6
  72. data/lib/qrda-export/helper/patient_view_helper.rb +39 -0
  73. data/lib/qrda-import/base-importers/demographics_importer.rb +3 -3
  74. data/lib/qrda-import/base-importers/section_importer.rb +89 -14
  75. data/lib/qrda-import/data-element-importers/adverse_event_importer.rb +2 -1
  76. data/lib/qrda-import/data-element-importers/allergy_intolerance_importer.rb +2 -1
  77. data/lib/qrda-import/data-element-importers/assessment_order_importer.rb +1 -0
  78. data/lib/qrda-import/data-element-importers/assessment_performed_importer.rb +3 -0
  79. data/lib/qrda-import/data-element-importers/assessment_recommended_importer.rb +1 -0
  80. data/lib/qrda-import/data-element-importers/communication_performed_importer.rb +7 -6
  81. data/lib/qrda-import/data-element-importers/device_applied_importer.rb +2 -0
  82. data/lib/qrda-import/data-element-importers/device_order_importer.rb +1 -0
  83. data/lib/qrda-import/data-element-importers/device_recommended_importer.rb +1 -0
  84. data/lib/qrda-import/data-element-importers/diagnosis_importer.rb +1 -0
  85. data/lib/qrda-import/data-element-importers/diagnostic_study_order_importer.rb +1 -0
  86. data/lib/qrda-import/data-element-importers/diagnostic_study_performed_importer.rb +3 -1
  87. data/lib/qrda-import/data-element-importers/diagnostic_study_recommended_importer.rb +1 -0
  88. data/lib/qrda-import/data-element-importers/encounter_order_importer.rb +3 -0
  89. data/lib/qrda-import/data-element-importers/encounter_performed_importer.rb +7 -3
  90. data/lib/qrda-import/data-element-importers/encounter_recommended_importer.rb +2 -1
  91. data/lib/qrda-import/data-element-importers/family_history_importer.rb +1 -0
  92. data/lib/qrda-import/data-element-importers/immunization_administered_importer.rb +3 -1
  93. data/lib/qrda-import/data-element-importers/immunization_order_importer.rb +4 -3
  94. data/lib/qrda-import/data-element-importers/intervention_order_importer.rb +1 -0
  95. data/lib/qrda-import/data-element-importers/intervention_performed_importer.rb +2 -0
  96. data/lib/qrda-import/data-element-importers/intervention_recommended_importer.rb +1 -0
  97. data/lib/qrda-import/data-element-importers/laboratory_test_order_importer.rb +1 -0
  98. data/lib/qrda-import/data-element-importers/laboratory_test_performed_importer.rb +2 -0
  99. data/lib/qrda-import/data-element-importers/laboratory_test_recommended_importer.rb +1 -0
  100. data/lib/qrda-import/data-element-importers/medication_active_importer.rb +2 -0
  101. data/lib/qrda-import/data-element-importers/medication_administered_importer.rb +2 -0
  102. data/lib/qrda-import/data-element-importers/medication_discharge_importer.rb +3 -1
  103. data/lib/qrda-import/data-element-importers/medication_dispensed_importer.rb +4 -5
  104. data/lib/qrda-import/data-element-importers/medication_order_importer.rb +2 -2
  105. data/lib/qrda-import/data-element-importers/patient_care_experience_importer.rb +1 -0
  106. data/lib/qrda-import/data-element-importers/physical_exam_order_importer.rb +1 -0
  107. data/lib/qrda-import/data-element-importers/physical_exam_performed_importer.rb +2 -0
  108. data/lib/qrda-import/data-element-importers/physical_exam_recommended_importer.rb +1 -0
  109. data/lib/qrda-import/data-element-importers/procedure_order_importer.rb +3 -0
  110. data/lib/qrda-import/data-element-importers/procedure_performed_importer.rb +4 -0
  111. data/lib/qrda-import/data-element-importers/procedure_recommended_importer.rb +3 -0
  112. data/lib/qrda-import/data-element-importers/program_participation_importer.rb +21 -0
  113. data/lib/qrda-import/data-element-importers/provider_care_experience_importer.rb +1 -0
  114. data/lib/qrda-import/data-element-importers/related_person_importer.rb +19 -0
  115. data/lib/qrda-import/data-element-importers/substance_administered_importer.rb +2 -0
  116. data/lib/qrda-import/data-element-importers/substance_order_importer.rb +1 -0
  117. data/lib/qrda-import/data-element-importers/substance_recommended_importer.rb +1 -0
  118. data/lib/qrda-import/data-element-importers/symptom_importer.rb +1 -0
  119. data/lib/qrda-import/patient_importer.rb +86 -68
  120. data/lib/util/entity_helper.rb +22 -0
  121. metadata +35 -13
  122. data/lib/ext/code.rb +0 -11
  123. data/lib/ext/data_element.rb +0 -24
  124. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_encounter_diagnosis.mustache +0 -23
  125. data/lib/qrda-export/catI-r5/qrda_templates/template_partials/_principal_diagnosis.mustache +0 -8
  126. data/lib/qrda-import/entry_package.rb +0 -16
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 046a88f916e40e42ced139fe200c6fbd202b61583e8e52c6b0cd95e66876d719
4
- data.tar.gz: 91135435b8c4793991b838440ea33414deb376fee10ff7728bb785cacc8549b8
3
+ metadata.gz: 9d999a13b64a6a37c2ad61c53c5325162a31eb948e95556a421474eb22cca735
4
+ data.tar.gz: f4d69a6e256859b77ea3da62a332f48e358ca4a3589d1d08bbf57889b6977f20
5
5
  SHA512:
6
- metadata.gz: edd69c08263f69d9775374749d29ebfd2d2ef73daeafc14b8b71a7c98a585c1e70fc709cc7d66300519a980e36878a3617d848068bc5b03573ecf34e2a33ced6
7
- data.tar.gz: a57c164a58a8bbb1227bd4a2c3ea99bd30bc96370d598ebc3073ecd11f370501cbb9ea07393569c6317eabe8145637833cea983bc4f89672bcd9e10bfd0d2187
6
+ metadata.gz: 99e4bb97fe1ecbcb0a4f336b0e2e6d0f5d6d85dd05f539a4ea71ad28fbb091b9cf78c2c23605f0e1344c736b4fdc38e0cda8bc12efb2ca52f4f393f158f979c6
7
+ data.tar.gz: 5c0b2e94fa51e623b071aecfc34537bc16efed7069d1bac433b178491462679fde863b24b6ee7cce9191b27e320d24fdfa004b0077f6e5be8492524f23cc89e5
data/Gemfile CHANGED
@@ -17,6 +17,7 @@ group :development do
17
17
  end
18
18
 
19
19
  group :test do
20
+ gem 'cqm-models', '~> 3.0.3'
20
21
  gem 'factory_girl', '~> 4.1.0'
21
22
  gem 'tailor', '~> 1.1.2'
22
23
  gem 'cane', '~> 2.3.0'
@@ -26,6 +27,5 @@ group :test do
26
27
  gem 'minitest', '~> 5.3'
27
28
  gem 'minitest-reporters'
28
29
  gem 'awesome_print', :require => 'ap'
29
- gem 'cqm-validators'
30
30
  gem 'nokogiri-diff'
31
31
  end
data/README.md CHANGED
@@ -11,6 +11,7 @@ Starting with version **2.0.0** released on 6/20/2019, cqm-reports versioning ha
11
11
  | X | QRDA Cat 1 | QRDA Cat 3 |
12
12
  | --- | --- | --- |
13
13
  | 2 | R1 STU5.1 | R1 STU2.1 |
14
+ | 3 | R1 STU5.2 | R1 STU2.1 |
14
15
 
15
16
  * **Y** indicates major changes (incompatible API changes)
16
17
 
@@ -18,6 +19,32 @@ Starting with version **2.0.0** released on 6/20/2019, cqm-reports versioning ha
18
19
 
19
20
  For the versions available, see [tags on this repository](https://github.com/projecttacoma/cqm-validators/tags).
20
21
 
22
+ Importing QRDA
23
+ ==========
24
+
25
+ A QRDA document can be imported into a CQM::Patient (defined in [cqm-models](https://github.com/projecttacoma/cqm-models)) using the following commands.
26
+
27
+ doc = Nokogiri::XML(file)
28
+ patient, warnings = QRDA::Cat1::PatientImporter.instance.parse_cat1(doc)
29
+
30
+ Exporting QRDA Category I
31
+ ==========
32
+
33
+ Exporting a QRDA document from a CQM::Patient (defined in [cqm-models](https://github.com/projecttacoma/cqm-models)) using the following command.
34
+
35
+ Qrda1R5.new(patient, measures, options).render
36
+ * patient is a [CQM::Patient](https://github.com/projecttacoma/cqm-models/blob/master/app/models/cqm/patient.rb)
37
+ * measures is an array of [CQM::Measure](https://github.com/projecttacoma/cqm-models/blob/master/app/models/cqm/measure.rb)
38
+ * options is a hash that can be used to pass in:
39
+ * provider
40
+ * patient_addresses
41
+ * patient_telecoms
42
+ * start_time
43
+ * end_time
44
+ * submission_program
45
+
46
+ QRDA export requires the [mustache](https://github.com/mustache/mustache) gem
47
+
21
48
  ## License
22
49
 
23
50
  Copyright 2019 The MITRE Corporation
@@ -5,6 +5,7 @@ require 'ostruct'
5
5
  require_relative 'util/code_system_helper'
6
6
  require_relative 'util/hqmf_template_helper'
7
7
  require_relative 'util/qrda_template_helper'
8
+ require_relative 'util/entity_helper.rb'
8
9
 
9
10
  require_relative 'qrda-export/helper/frequency_helper.rb'
10
11
  require_relative 'qrda-export/helper/aggregate_object_helper.rb'
@@ -18,7 +19,6 @@ require_relative 'html-export/qdm-patient/qdm_patient.rb'
18
19
  require_relative 'qrda-export/catI-r5/qrda1_r5.rb'
19
20
  require_relative 'qrda-export/catIII-r2-1/qrda3_r21.rb'
20
21
 
21
- require_relative 'qrda-import/entry_package.rb'
22
22
  require_relative 'qrda-import/cda_identifier.rb'
23
23
  require_relative 'qrda-import/narrative_reference_handler.rb'
24
24
  require_relative 'qrda-import/entry_finder.rb'
@@ -66,11 +66,11 @@ require_relative 'qrda-import/data-element-importers/physical_exam_recommended_i
66
66
  require_relative 'qrda-import/data-element-importers/procedure_order_importer.rb'
67
67
  require_relative 'qrda-import/data-element-importers/procedure_performed_importer.rb'
68
68
  require_relative 'qrda-import/data-element-importers/procedure_recommended_importer.rb'
69
+ require_relative 'qrda-import/data-element-importers/program_participation_importer.rb'
69
70
  require_relative 'qrda-import/data-element-importers/provider_care_experience_importer.rb'
71
+ require_relative 'qrda-import/data-element-importers/related_person_importer.rb'
70
72
  require_relative 'qrda-import/data-element-importers/substance_administered_importer.rb'
71
73
  require_relative 'qrda-import/data-element-importers/substance_order_importer.rb'
72
74
  require_relative 'qrda-import/data-element-importers/substance_recommended_importer.rb'
73
75
  require_relative 'qrda-import/data-element-importers/symptom_importer.rb'
74
76
  require_relative 'qrda-import/patient_importer.rb'
75
- require_relative 'ext/data_element.rb'
76
- require_relative 'ext/code.rb'
@@ -15,8 +15,18 @@
15
15
  <div class="div-table-head--no-border"><span class="criteria-heading">Anatomical Location Site:</span> {{{code_code_system_string}}}</div>
16
16
  </div>
17
17
  {{/anatomicalLocationSite}}
18
+ {{#cause}}
19
+ <div class="div-head-row">
20
+ <div class="div-table-head--no-border"><span class="criteria-heading">Cause:</span> {{{code_code_system_string}}}</div>
21
+ </div>
22
+ {{/cause}}
23
+ {{#category}}
24
+ <div class="div-head-row">
25
+ <div class="div-table-head--no-border"><span class="criteria-heading">Category:</span> {{{code_code_system_string}}}</div>
26
+ </div>
27
+ {{/category}}
18
28
  {{#components}}
19
- {{#code}}
29
+ {{#code}}
20
30
  <div class="div-head-row">
21
31
  <div class="div-table-head--no-border"><span class="criteria-heading">Component Code:</span> {{{code_code_system_string}}}</div>
22
32
  </div>
@@ -27,9 +37,14 @@
27
37
  </div>
28
38
  {{/result}}
29
39
  {{/components}}
40
+ {{#daysSupplied}}
41
+ <div class="div-head-row">
42
+ <div class="div-table-head--no-border"><span class="criteria-heading">Days Supplied:</span> {{{daysSupplied}}}</div>
43
+ </div>
44
+ {{/daysSupplied}}
30
45
  {{#diagnoses}}
31
46
  <div class="div-head-row">
32
- <div class="div-table-head--no-border"><span class="criteria-heading">Diagnosis:</span> {{{code_code_system_string}}}</div>
47
+ <div class="div-table-head--no-border"><span class="criteria-heading">Diagnosis:</span> {{{nested_code_string}}}</div>
33
48
  </div>
34
49
  {{/diagnoses}}
35
50
  {{#dischargeDisposition}}
@@ -37,14 +52,24 @@
37
52
  <div class="div-table-head--no-border"><span class="criteria-heading">Discharge Disposition:</span> {{{code_code_system_string}}}</div>
38
53
  </div>
39
54
  {{/dischargeDisposition}}
55
+ {{#dispenser}}
56
+ <div class="div-head-row">
57
+ <div class="div-table-head--no-border"><span class="criteria-heading">Dispenser:</span> {{{entity_string}}}</div>
58
+ </div>
59
+ {{/dispenser}}
60
+ {{#dosage}}
61
+ <div class="div-head-row">
62
+ <div class="div-table-head--no-border"><span class="criteria-heading">Dosage:</span> {{{unit_string}}}</div>
63
+ </div>
64
+ {{/dosage}}
40
65
  {{#facilityLocation}}
41
66
  <div class="div-head-row">
42
- <div class="div-table-head--no-border"><span class="criteria-heading">Facility Location:</span> {{{code_code_system_string}}}</div>
67
+ <div class="div-table-head--no-border"><span class="criteria-heading">Facility Location:</span> {{{nested_code_string}}}</div>
43
68
  </div>
44
69
  {{/facilityLocation}}
45
70
  {{#facilityLocations}}
46
71
  <div class="div-head-row">
47
- <div class="div-table-head--no-border"><span class="criteria-heading">Facility:</span> {{{facility_string}}}</div>
72
+ <div class="div-table-head--no-border"><span class="criteria-heading">Facility:</span> {{{nested_code_string}}}</div>
48
73
  </div>
49
74
  {{/facilityLocations}}
50
75
  {{#frequency}}
@@ -52,11 +77,31 @@
52
77
  <div class="div-table-head--no-border"><span class="criteria-heading">Frequency:</span> {{{code_code_system_string}}}</div>
53
78
  </div>
54
79
  {{/frequency}}
80
+ {{#identifier}}
81
+ <div class="div-head-row">
82
+ <div class="div-table-head--no-border"><span class="criteria-heading">Identifier:</span> {{{identifier_string}}}</div>
83
+ </div>
84
+ {{/identifier}}
55
85
  {{#lengthOfStay}}
56
86
  <div class="div-head-row">
57
87
  <div class="div-table-head--no-border"><span class="criteria-heading">Length Of Stay:</span> {{{unit_string}}}</div>
58
88
  </div>
59
89
  {{/lengthOfStay}}
90
+ {{#linkedPatientId}}
91
+ <div class="div-head-row">
92
+ <div class="div-table-head--no-border"><span class="criteria-heading">Linked Patient Id:</span> {{{linkedPatientId}}}</div>
93
+ </div>
94
+ {{/linkedPatientId}}
95
+ {{#medium}}
96
+ <div class="div-head-row">
97
+ <div class="div-table-head--no-border"><span class="criteria-heading">Medium:</span> {{{code_code_system_string}}}</div>
98
+ </div>
99
+ {{/medium}}
100
+ {{#methodCode}}
101
+ <div class="div-head-row">
102
+ <div class="div-table-head--no-border"><span class="criteria-heading">Method:</span> {{{code_code_system_string}}}</div>
103
+ </div>
104
+ {{/methodCode}}
60
105
  {{#negationRationale}}
61
106
  <div class="div-head-row">
62
107
  <div class="div-table-head--no-border"><span class="criteria-heading">Negation Reason:</span> {{{code_code_system_string}}}</div>
@@ -67,26 +112,105 @@
67
112
  <div class="div-table-head--no-border"><span class="criteria-heading">Ordinality:</span> {{{code_code_system_string}}}</div>
68
113
  </div>
69
114
  {{/ordinality}}
115
+ {{#participant}}
116
+ <div class="div-head-row">
117
+ <div class="div-table-head--no-border"><span class="criteria-heading">Participant:</span> {{{entity_string}}}</div>
118
+ </div>
119
+ {{/participant}}
120
+ {{#performer}}
121
+ <div class="div-head-row">
122
+ <div class="div-table-head--no-border"><span class="criteria-heading">Performer:</span> {{{entity_string}}}</div>
123
+ </div>
124
+ {{/performer}}
125
+ {{#prescriber}}
126
+ <div class="div-head-row">
127
+ <div class="div-table-head--no-border"><span class="criteria-heading">Prescriber:</span> {{{entity_string}}}</div>
128
+ </div>
129
+ {{/prescriber}}
70
130
  {{#principalDiagnosis}}
71
131
  <div class="div-head-row">
72
132
  <div class="div-table-head--no-border"><span class="criteria-heading">Principal Diagnosis:</span> {{{code_code_system_string}}}</div>
73
133
  </div>
74
134
  {{/principalDiagnosis}}
135
+ {{#priority}}
136
+ <div class="div-head-row">
137
+ <div class="div-table-head--no-border"><span class="criteria-heading">Priority:</span> {{{code_code_system_string}}}</div>
138
+ </div>
139
+ {{/priority}}
140
+ {{#rank}}
141
+ <div class="div-head-row">
142
+ <div class="div-table-head--no-border"><span class="criteria-heading">Rank:</span> {{{rank}}}</div>
143
+ </div>
144
+ {{/rank}}
75
145
  {{#reason}}
76
146
  <div class="div-head-row">
77
147
  <div class="div-table-head--no-border"><span class="criteria-heading">Reason:</span> {{{code_code_system_string}}}</div>
78
148
  </div>
79
149
  {{/reason}}
150
+ {{#recipient}}
151
+ <div class="div-head-row">
152
+ <div class="div-table-head--no-border"><span class="criteria-heading">Recipient:</span> {{{entity_string}}}</div>
153
+ </div>
154
+ {{/recipient}}
155
+ {{#recorder}}
156
+ <div class="div-head-row">
157
+ <div class="div-table-head--no-border"><span class="criteria-heading">Recorder:</span> {{{entity_string}}}</div>
158
+ </div>
159
+ {{/recorder}}
160
+ {{#referenceRange}}
161
+ <div class="div-head-row">
162
+ <div class="div-table-head--no-border"><span class="criteria-heading">Reference Range Start:</span> {{{low}}}</div>
163
+ </div>
164
+ <div class="div-head-row">
165
+ <div class="div-table-head--no-border"><span class="criteria-heading">Reference Range End:</span> {{{high}}}</div>
166
+ </div>
167
+ {{/referenceRange}}
168
+ {{#refills}}
169
+ <div class="div-head-row">
170
+ <div class="div-table-head--no-border"><span class="criteria-heading">Refills:</span> {{{refills}}}</div>
171
+ </div>
172
+ {{/refills}}
173
+ {{#relatedTo}}
174
+ {{! TODO: relatedTo is an array of strings, which are ids of dataElements, and not very useful to the user}}
175
+ <div class="div-head-row">
176
+ <div class="div-table-head--no-border"><span class="criteria-heading">Related To:</span> {{{relatedTo}}}</div>
177
+ </div>
178
+ {{/relatedTo}}
179
+ {{#relationship}}
180
+ <div class="div-head-row">
181
+ <div class="div-table-head--no-border"><span class="criteria-heading">Relationship:</span> {{{code_code_system_string}}}</div>
182
+ </div>
183
+ {{/relationship}}
184
+ {{#requester}}
185
+ <div class="div-head-row">
186
+ <div class="div-table-head--no-border"><span class="criteria-heading">Requester:</span> {{{entity_string}}}</div>
187
+ </div>
188
+ {{/requester}}
80
189
  {{#route}}
81
190
  <div class="div-head-row">
82
191
  <div class="div-table-head--no-border"><span class="criteria-heading">Route:</span> {{{code_code_system_string}}}</div>
83
192
  </div>
84
193
  {{/route}}
194
+ {{#sender}}
195
+ <div class="div-head-row">
196
+ <div class="div-table-head--no-border"><span class="criteria-heading">Sender:</span> {{{entity_string}}}</div>
197
+ </div>
198
+ {{/sender}}
199
+ {{#setting}}
200
+ <div class="div-head-row">
201
+ <div class="div-table-head--no-border"><span class="criteria-heading">Setting:</span> {{{code_code_system_string}}}</div>
202
+ </div>
203
+ {{/setting}}
85
204
  {{#severity}}
86
205
  <div class="div-head-row">
87
206
  <div class="div-table-head--no-border"><span class="criteria-heading">Severity:</span> {{{code_code_system_string}}}</div>
88
207
  </div>
89
208
  {{/severity}}
209
+ {{#supply}}
210
+ <div class="div-head-row">
211
+ <div class="div-table-head--no-border"><span class="criteria-heading">Supply:</span> {{{unit_string}}}</div>
212
+ </div>
213
+ {{/supply}}
90
214
  {{#status}}
91
215
  <div class="div-head-row">
92
216
  <div class="div-table-head--no-border"><span class="criteria-heading">Status:</span> {{{code_code_system_string}}}</div>
@@ -103,4 +227,4 @@
103
227
  </div>
104
228
  {{/result}}
105
229
  </div>
106
- </div>
230
+ </div>
@@ -10,6 +10,11 @@
10
10
  </div>
11
11
  {{/end_time?}}
12
12
  {{/relevantPeriod}}
13
+ {{#relevantDatetime}}
14
+ <div class="div-head-row">
15
+ <div class="div-table-head--no-border"><span class="criteria-heading">Relevant Date/Time:</span> {{{relevantDatetime}}}</div>
16
+ </div>
17
+ {{/relevantDatetime}}
13
18
  {{#prevalencePeriod}}
14
19
  <div class="div-head-row">
15
20
  <div class="div-table-head--no-border"><span class="criteria-heading">Prevalence Period Start:</span> {{{low}}}</div>
@@ -20,6 +25,16 @@
20
25
  </div>
21
26
  {{/end_time?}}
22
27
  {{/prevalencePeriod}}
28
+ {{#participationPeriod}}
29
+ <div class="div-head-row">
30
+ <div class="div-table-head--no-border"><span class="criteria-heading">Participation Period Start:</span> {{{low}}}</div>
31
+ </div>
32
+ {{#end_time?}}
33
+ <div class="div-head-row">
34
+ <div class="div-table-head--no-border"><span class="criteria-heading">Participation Period End:</span> {{{high}}}</div>
35
+ </div>
36
+ {{/end_time?}}
37
+ {{/participationPeriod}}
23
38
  {{#authorDatetime}}
24
39
  <div class="div-head-row">
25
40
  <div class="div-table-head--no-border"><span class="criteria-heading">Author Date/Time:</span> {{{authorDatetime}}}</div>
@@ -40,5 +55,25 @@
40
55
  <div class="div-table-head--no-border"><span class="criteria-heading">Incision Date/Time:</span> {{{incisionDatetime}}}</div>
41
56
  </div>
42
57
  {{/incisionDatetime}}
58
+ {{#receivedDatetime}}
59
+ <div class="div-head-row">
60
+ <div class="div-table-head--no-border"><span class="criteria-heading">Received Date/Time:</span> {{{receivedDatetime}}}</div>
61
+ </div>
62
+ {{/receivedDatetime}}
63
+ {{#sentDatetime}}
64
+ <div class="div-head-row">
65
+ <div class="div-table-head--no-border"><span class="criteria-heading">Sent Date/Time:</span> {{{sentDatetime}}}</div>
66
+ </div>
67
+ {{/sentDatetime}}
68
+ {{#birthDatetime}}
69
+ <div class="div-head-row">
70
+ <div class="div-table-head--no-border"><span class="criteria-heading">Birth Date/Time:</span> {{{birthDatetime}}}</div>
71
+ </div>
72
+ {{/birthDatetime}}
73
+ {{#expiredDatetime}}
74
+ <div class="div-head-row">
75
+ <div class="div-table-head--no-border"><span class="criteria-heading">Expired Date/Time:</span> {{{expiredDatetime}}}</div>
76
+ </div>
77
+ {{/expiredDatetime}}
78
+ </div>
43
79
  </div>
44
- </div>
@@ -3,7 +3,7 @@
3
3
  <head>
4
4
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
5
5
  {{#patient}}
6
- <title>Cypress Certification Patient Test Record: {{{given_name}}} {{familyName}}</title>
6
+ <title>Cypress Certification Patient Test Record: {{given_name}} {{familyName}}</title>
7
7
  {{/patient}}
8
8
  {{#include_style?}}
9
9
  {{> _header_css}}
@@ -11,12 +11,12 @@
11
11
  </head>
12
12
  <body>
13
13
  {{#patient}}
14
- <h1 class="h1center">Cypress Certification Patient Test Record: {{{given_name}}} {{familyName}}</h1>
14
+ <h1 class="h1center">Cypress Certification Patient Test Record: {{given_name}} {{familyName}}</h1>
15
15
  <div class="div-table">
16
16
  <div class="div-table-body">
17
17
  <div class="div-head-row patient_narr_tr panel panel-default patient-details">
18
18
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Patient</span></div>
19
- <div class="div-table-head">{{{given_name}}} {{familyName}}</div>
19
+ <div class="div-table-head">{{given_name}} {{familyName}}</div>
20
20
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Sex</span></div>
21
21
  <div class="div-table-head">{{{gender}}}</div>
22
22
  </div>
@@ -24,14 +24,14 @@
24
24
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Date of birth</span></div>
25
25
  <div class="div-table-head">{{{birthdate}}}</div>
26
26
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Date of expiration</span></div>
27
- <div class="div-table-head"></div>
27
+ <div class="div-table-head">{{{expiration}}}</div>
28
28
  </div>
29
29
  <div class="div-head-row patient_narr_tr panel panel-default patient-details">
30
30
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Race</span></div>
31
31
  <div class="div-table-head">{{{race}}}</div>
32
32
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Ethnicity</span></div>
33
33
  <div class="div-table-head">{{{ethnic_group}}}</div>
34
- </div>
34
+ </div>
35
35
  <div class="div-head-row patient_narr_tr panel panel-default patient-details">
36
36
  <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Insurance Providers</span></div>
37
37
  <div class="div-table-head">{{{payer}}}</div>
@@ -39,8 +39,10 @@
39
39
  <div class="div-table-head">{{{mrn}}} Cypress</div>
40
40
  </div>
41
41
  <div class="div-head-row patient_narr_tr panel panel-default patient-details">
42
- <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Contact info</span></div>
43
- <div class="div-table-head"></div>
42
+ <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Address</span></div>
43
+ <div class="div-table-head">{{{patient_addresses}}}</div>
44
+ <div class="div-table-head patient_narr_th panel-heading"><span class="td_label">Telecom</span></div>
45
+ <div class="div-table-head">{{{patient_telecoms}}}</div>
44
46
  </div>
45
47
  </div>
46
48
  </div>
@@ -1,6 +1,7 @@
1
1
  require 'mustache'
2
2
  class QdmPatient < Mustache
3
3
  include Qrda::Export::Helper::PatientViewHelper
4
+ include HQMF::Util::EntityHelper
4
5
 
5
6
  self.template_path = __dir__
6
7
 
@@ -8,6 +9,36 @@ class QdmPatient < Mustache
8
9
  @include_style = include_style
9
10
  @patient = patient
10
11
  @qdmPatient = patient.qdmPatient
12
+ @patient_addresses = patient['addresses']
13
+ @patient_telecoms = patient['telecoms']
14
+ end
15
+
16
+ def patient_addresses
17
+ @patient_addresses ||= [CQM::Address.new(
18
+ use: 'HP',
19
+ street: ['202 Burlington Rd.'],
20
+ city: 'Bedford',
21
+ state: 'MA',
22
+ zip: '01730',
23
+ country: 'US'
24
+ )]
25
+ address_str = ""
26
+ @patient_addresses.each do |address|
27
+ # create formatted address
28
+ address_str += "<address>"
29
+ address['street'].each { |street| address_str += "#{street}<br>" }
30
+ address_str += "#{address['city']}, #{address['state']} #{address['zip']}<br> #{address['country']} </address>"
31
+ end
32
+ address_str
33
+ end
34
+
35
+ def patient_telecoms
36
+ @patient_telecoms ||= [CQM::Telecom.new(
37
+ use: 'HP',
38
+ value: '555-555-2003'
39
+ )]
40
+ # create formatted telecoms
41
+ @patient_telecoms.map { |telecom| "(#{telecom['use']}) #{telecom['value']}" }.join("<br>")
11
42
  end
12
43
 
13
44
  def include_style?
@@ -17,17 +48,50 @@ class QdmPatient < Mustache
17
48
  def data_elements
18
49
  de_hash = {}
19
50
  @qdmPatient.dataElements.each do |data_element|
51
+ data_element['methodCode'] = data_element['method'] if data_element['method']
20
52
  de_hash[data_element._type] ? de_hash[data_element._type][:element_list] << data_element : de_hash[data_element._type] = { title: data_element._type, element_list: [data_element] }
21
53
  end
22
54
  JSON.parse(de_hash.values.to_json)
23
55
  end
24
56
 
25
57
  def unit_string
58
+ return "#{self['value']} " if !self['unit'] || self['unit'] == '1'
26
59
  "#{self['value']} #{self['unit']}"
27
60
  end
28
61
 
62
+ def entity_string
63
+ if care_partner_entity?
64
+ "</br>&nbsp; Care Partner: #{identifier_for_element(self['identifier'])}
65
+ </br>&nbsp; Care Partner Relationship: #{code_for_element(self['relationship'])}"
66
+ elsif organization_entity?
67
+ "</br>&nbsp; Organization: #{identifier_for_element(self['identifier'])}
68
+ </br>&nbsp; Organization Type: #{code_for_element(self['type'])}"
69
+ elsif patient_entity?
70
+ "</br>&nbsp; Patient: #{identifier_for_element(self['identifier'])}"
71
+ elsif practitioner_entity?
72
+ "</br>&nbsp; Practitioner: #{identifier_for_element(self['identifier'])}
73
+ </br>&nbsp; Practitioner Role: #{code_for_element(self['role'])},
74
+ </br>&nbsp; Practitioner Specialty: #{code_for_element(self['specialty'])},
75
+ </br>&nbsp; Practitioner Qualification: #{code_for_element(self['qualification'])}"
76
+ else
77
+ "</br>&nbsp; Entity: #{identifier_for_element(self['identifier'])}"
78
+ end
79
+ end
80
+
81
+ def identifier_string
82
+ identifier_for_element(self)
83
+ end
84
+
85
+ def identifier_for_element(identifier)
86
+ "#{identifier['value']} (#{identifier['namingSystem']})"
87
+ end
88
+
29
89
  def code_code_system_string
30
- "#{self['code']} (#{HQMF::Util::CodeSystemHelper.code_system_for(self['system'])})"
90
+ code_for_element(self)
91
+ end
92
+
93
+ def code_for_element(element)
94
+ "#{element['code']} (#{HQMF::Util::CodeSystemHelper.code_system_for(element['system'])})"
31
95
  end
32
96
 
33
97
  def code_system_name
@@ -35,14 +99,14 @@ class QdmPatient < Mustache
35
99
  end
36
100
 
37
101
  def result_string
38
- return unit_string if self['unit']
102
+ return unit_string if self['value']
39
103
  return code_code_system_string if self['code']
40
104
 
41
- ''
105
+ self['result']
42
106
  end
43
107
 
44
- def facility_string
45
- "#{self['code']['code']} (#{self['code']['codeSystem']})"
108
+ def nested_code_string
109
+ code_for_element(self['code'])
46
110
  end
47
111
 
48
112
  def end_time?