cancer_registry_reporting_test_kit 0.9.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.
Files changed (262) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/config/presets/hdea_report_preset.json +14 -0
  4. data/config/presets/inferno_reference_server_preset.json.erb +84 -0
  5. data/lib/cancer_registry_reporting_test_kit/bundle_parse.rb +161 -0
  6. data/lib/cancer_registry_reporting_test_kit/docs/ehr_suite_description.md +134 -0
  7. data/lib/cancer_registry_reporting_test_kit/docs/hdea_suite_description.md +108 -0
  8. data/lib/cancer_registry_reporting_test_kit/ehr_suite/ehr_capability_statement/mcode_capability_statement_profile_support.rb +40 -0
  9. data/lib/cancer_registry_reporting_test_kit/ehr_suite/ehr_data_access_group.rb +131 -0
  10. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_administration/medication_administration_must_support_test.rb +43 -0
  11. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_administration/medication_administration_search_test.rb +51 -0
  12. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_administration/medication_administration_validation_test.rb +41 -0
  13. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_administration/metadata.yml +72 -0
  14. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_administration_group.rb +72 -0
  15. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_request/medication_request_must_support_test.rb +55 -0
  16. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_request/medication_request_search_test.rb +55 -0
  17. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_request/medication_request_validation_test.rb +38 -0
  18. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_request/metadata.yml +94 -0
  19. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/medication_request_group.rb +73 -0
  20. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/primary_cancer_condition_group.rb +73 -0
  21. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/primary_condition/metadata.yml +100 -0
  22. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/primary_condition/primary_cancer_condition_must_support_test.rb +50 -0
  23. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/primary_condition/primary_cancer_condition_search_test.rb +70 -0
  24. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/primary_condition/primary_cancer_condition_validation_test.rb +39 -0
  25. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/radiotherapy_procedure/metadata.yml +99 -0
  26. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/radiotherapy_procedure/radiotherapy_procedure_must_support_test.rb +46 -0
  27. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/radiotherapy_procedure/radiotherapy_procedure_search_test.rb +51 -0
  28. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/radiotherapy_procedure/radiotherapy_procedure_validation_test.rb +37 -0
  29. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/radiotherapy_procedure_group.rb +83 -0
  30. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/secondary_cancer_condition_group.rb +68 -0
  31. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/secondary_condition/metadata.yml +102 -0
  32. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/secondary_condition/secondary_cancer_condition_must_support_test.rb +50 -0
  33. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/secondary_condition/secondary_cancer_condition_search_test.rb +70 -0
  34. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/secondary_condition/secondary_cancer_condition_validation_test.rb +39 -0
  35. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_distant_metastases_category/metadata.yml +65 -0
  36. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_distant_metastases_category/tnm_distant_metastases_category_must_support_test.rb +44 -0
  37. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_distant_metastases_category/tnm_distant_metastases_category_search_test.rb +69 -0
  38. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_distant_metastases_category/tnm_distant_metastases_category_validation_test.rb +39 -0
  39. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_distant_metastases_category_group.rb +74 -0
  40. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_primary_tumor_category/metadata.yml +64 -0
  41. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_primary_tumor_category/tnm_primary_tumor_category_must_support_test.rb +44 -0
  42. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_primary_tumor_category/tnm_primary_tumor_category_search_test.rb +69 -0
  43. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_primary_tumor_category/tnm_primary_tumor_category_validation_test.rb +39 -0
  44. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_primary_tumor_category_group.rb +73 -0
  45. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_regional_nodes_category/metadata.yml +64 -0
  46. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_regional_nodes_category/tnm_regional_nodes_category_must_support_test.rb +44 -0
  47. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_regional_nodes_category/tnm_regional_nodes_category_search_test.rb +69 -0
  48. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_regional_nodes_category/tnm_regional_nodes_category_validation_test.rb +39 -0
  49. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_regional_nodes_category_group.rb +73 -0
  50. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_stage_group/metadata.yml +68 -0
  51. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_stage_group/tnm_stage_group_must_support_test.rb +45 -0
  52. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_stage_group/tnm_stage_group_search_test.rb +69 -0
  53. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_stage_group/tnm_stage_group_validation_test.rb +39 -0
  54. data/lib/cancer_registry_reporting_test_kit/ehr_suite/mcode_data_access_resources/tnm_stage_group_group.rb +72 -0
  55. data/lib/cancer_registry_reporting_test_kit/ehr_suite.rb +69 -0
  56. data/lib/cancer_registry_reporting_test_kit/fhir_resource_navigation.rb +174 -0
  57. data/lib/cancer_registry_reporting_test_kit/hdea_generator/group_generator.rb +47 -0
  58. data/lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata.rb +86 -0
  59. data/lib/cancer_registry_reporting_test_kit/hdea_generator/group_metadata_extractor.rb +205 -0
  60. data/lib/cancer_registry_reporting_test_kit/hdea_generator/ig_loader.rb +78 -0
  61. data/lib/cancer_registry_reporting_test_kit/hdea_generator/ig_metadata.rb +26 -0
  62. data/lib/cancer_registry_reporting_test_kit/hdea_generator/ig_metadata_extractor.rb +78 -0
  63. data/lib/cancer_registry_reporting_test_kit/hdea_generator/ig_resources.rb +56 -0
  64. data/lib/cancer_registry_reporting_test_kit/hdea_generator/must_support_metadata_extractor.rb +399 -0
  65. data/lib/cancer_registry_reporting_test_kit/hdea_generator/must_support_test_generator.rb +134 -0
  66. data/lib/cancer_registry_reporting_test_kit/hdea_generator/naming.rb +168 -0
  67. data/lib/cancer_registry_reporting_test_kit/hdea_generator/special_cases.rb +43 -0
  68. data/lib/cancer_registry_reporting_test_kit/hdea_generator/templates/must_support.rb.erb +41 -0
  69. data/lib/cancer_registry_reporting_test_kit/hdea_generator/templates/validation.rb.erb +35 -0
  70. data/lib/cancer_registry_reporting_test_kit/hdea_generator/terminology_binding_metadata_extractor.rb +118 -0
  71. data/lib/cancer_registry_reporting_test_kit/hdea_generator/validation_test_generator.rb +125 -0
  72. data/lib/cancer_registry_reporting_test_kit/hdea_generator/value_extractor.rb +134 -0
  73. data/lib/cancer_registry_reporting_test_kit/hdea_generator.rb +66 -0
  74. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/author_validation_test.rb +61 -0
  75. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/organization_metadata.yml +47 -0
  76. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/organization_must_support_test.rb +73 -0
  77. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/practitioner_metadata.yml +51 -0
  78. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/practitioner_must_support_test.rb +73 -0
  79. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/practitioner_role_metadata.yml +48 -0
  80. data/lib/cancer_registry_reporting_test_kit/hdea_suite/author/practitioner_role_must_support_test.rb +66 -0
  81. data/lib/cancer_registry_reporting_test_kit/hdea_suite/bundle_resources_group.rb +213 -0
  82. data/lib/cancer_registry_reporting_test_kit/hdea_suite/ccrr_content_bundle_parse_and_validation_test.rb +67 -0
  83. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/allergy_intolerance/allergy_intolerance_must_support_test.rb +46 -0
  84. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/allergy_intolerance/allergy_intolerance_validation_test.rb +35 -0
  85. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/allergy_intolerance/metadata.yml +36 -0
  86. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/care_plan/care_plan_must_support_test.rb +48 -0
  87. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/care_plan/care_plan_validation_test.rb +35 -0
  88. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/care_plan/metadata.yml +50 -0
  89. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/ccrr_content_bundle/ccrr_content_bundle_must_support_test.rb +43 -0
  90. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/ccrr_content_bundle/metadata.yml +36 -0
  91. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/central_cancer_registry_primary_cancer_condition/central_cancer_registry_primary_cancer_condition_must_support_test.rb +59 -0
  92. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/central_cancer_registry_primary_cancer_condition/central_cancer_registry_primary_cancer_condition_validation_test.rb +35 -0
  93. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/central_cancer_registry_primary_cancer_condition/metadata.yml +86 -0
  94. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/composition/composition_must_support_test.rb +109 -0
  95. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/composition/composition_validation_test.rb +35 -0
  96. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/composition/metadata.yml +272 -0
  97. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/condition/condition_must_support_test.rb +45 -0
  98. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/condition/condition_validation_test.rb +35 -0
  99. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/condition/metadata.yml +33 -0
  100. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_lab/diagnostic_report_lab_must_support_test.rb +49 -0
  101. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_lab/diagnostic_report_lab_validation_test.rb +35 -0
  102. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_lab/metadata.yml +57 -0
  103. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_note/diagnostic_report_note_must_support_test.rb +53 -0
  104. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_note/diagnostic_report_note_validation_test.rb +35 -0
  105. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/diagnostic_report_note/metadata.yml +75 -0
  106. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/document_reference/document_reference_must_support_test.rb +57 -0
  107. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/document_reference/document_reference_validation_test.rb +35 -0
  108. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/document_reference/metadata.yml +68 -0
  109. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/encounter/encounter_must_support_test.rb +59 -0
  110. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/encounter/encounter_validation_test.rb +35 -0
  111. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/encounter/metadata.yml +73 -0
  112. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_radiotherapy_course_summary/mcode_radiotherapy_course_summary_must_support_test.rb +52 -0
  113. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_radiotherapy_course_summary/mcode_radiotherapy_course_summary_validation_test.rb +35 -0
  114. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_radiotherapy_course_summary/metadata.yml +59 -0
  115. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_secondary_cancer_condition/mcode_secondary_cancer_condition_must_support_test.rb +56 -0
  116. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_secondary_cancer_condition/mcode_secondary_cancer_condition_validation_test.rb +35 -0
  117. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_secondary_cancer_condition/metadata.yml +77 -0
  118. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_tnm_stage_group/mcode_tnm_stage_group_must_support_test.rb +48 -0
  119. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_tnm_stage_group/mcode_tnm_stage_group_validation_test.rb +35 -0
  120. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/mcode_tnm_stage_group/metadata.yml +46 -0
  121. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication/medication_must_support_test.rb +41 -0
  122. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication/medication_validation_test.rb +35 -0
  123. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication/metadata.yml +26 -0
  124. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_administration/medication_administration_must_support_test.rb +48 -0
  125. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_administration/medication_administration_validation_test.rb +35 -0
  126. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_administration/metadata.yml +48 -0
  127. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_request/medication_request_must_support_test.rb +57 -0
  128. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_request/medication_request_validation_test.rb +35 -0
  129. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_request/metadata.yml +86 -0
  130. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_statement/medication_statement_must_support_test.rb +41 -0
  131. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_statement/medication_statement_validation_test.rb +35 -0
  132. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/medication_statement/metadata.yml +26 -0
  133. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation/metadata.yml +26 -0
  134. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation/observation_must_support_test.rb +41 -0
  135. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation/observation_validation_test.rb +35 -0
  136. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation_lab/metadata.yml +53 -0
  137. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation_lab/observation_lab_must_support_test.rb +50 -0
  138. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/observation_lab/observation_lab_validation_test.rb +35 -0
  139. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/odh_usual_work/metadata.yml +81 -0
  140. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/odh_usual_work/odh_usual_work_must_support_test.rb +49 -0
  141. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/odh_usual_work/odh_usual_work_validation_test.rb +35 -0
  142. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/organization/metadata.yml +46 -0
  143. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/organization/organization_must_support_test.rb +55 -0
  144. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/organization/organization_validation_test.rb +35 -0
  145. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/patient/metadata.yml +51 -0
  146. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/patient/patient_must_support_test.rb +58 -0
  147. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/patient/patient_validation_test.rb +35 -0
  148. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner/metadata.yml +50 -0
  149. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner/practitioner_must_support_test.rb +55 -0
  150. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner/practitioner_validation_test.rb +35 -0
  151. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner_role/metadata.yml +47 -0
  152. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner_role/practitioner_role_must_support_test.rb +49 -0
  153. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/practitioner_role/practitioner_role_validation_test.rb +35 -0
  154. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/procedure/metadata.yml +37 -0
  155. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/procedure/procedure_must_support_test.rb +44 -0
  156. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/procedure/procedure_validation_test.rb +35 -0
  157. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/service_request/metadata.yml +26 -0
  158. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/service_request/service_request_must_support_test.rb +41 -0
  159. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/service_request/service_request_validation_test.rb +35 -0
  160. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/smokingstatus/metadata.yml +58 -0
  161. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/smokingstatus/smokingstatus_must_support_test.rb +47 -0
  162. data/lib/cancer_registry_reporting_test_kit/hdea_suite/generated/v1.0.0/smokingstatus/smokingstatus_validation_test.rb +35 -0
  163. data/lib/cancer_registry_reporting_test_kit/hdea_suite.rb +80 -0
  164. data/lib/cancer_registry_reporting_test_kit/igs/README.md +21 -0
  165. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-cancer-related-medication-administration.json +1905 -0
  166. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-cancer-related-medication-request.json +3611 -0
  167. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-primary-cancer-condition.json +2246 -0
  168. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-radiotherapy-course-summary.json +2700 -0
  169. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-secondary-cancer-condition.json +2419 -0
  170. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-tnm-distant-metastases-category.json +2320 -0
  171. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-tnm-primary-tumor-category.json +2320 -0
  172. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-tnm-regional-nodes-category.json +2320 -0
  173. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-mcode-tnm-stage-group.json +2414 -0
  174. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-medicationstatement.profile.json +1578 -0
  175. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-observation.profile.json +3510 -0
  176. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-odh-UsualWork.json +7248 -0
  177. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-servicerequest.profile.json +3048 -0
  178. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-allergyintolerance.json +1842 -0
  179. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-careplan.json +1 -0
  180. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-condition.json +2154 -0
  181. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-diagnosticreport-lab.json +2002 -0
  182. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-diagnosticreport-note.json +2049 -0
  183. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-documentreference.json +1 -0
  184. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-encounter.json +1 -0
  185. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-medication.json +1 -0
  186. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-observation-lab.json +3153 -0
  187. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-organization.json +1 -0
  188. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-patient.json +1 -0
  189. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-practitioner.json +1 -0
  190. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-practitionerrole.json +1 -0
  191. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-procedure.json +1 -0
  192. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100/StructureDefinition-us-core-smokingstatus.json +1 -0
  193. data/lib/cancer_registry_reporting_test_kit/igs/ccrr_v100.tgz +0 -0
  194. data/lib/cancer_registry_reporting_test_kit/igs/package/.index.db +0 -0
  195. data/lib/cancer_registry_reporting_test_kit/igs/package/.index.json +4 -0
  196. data/lib/cancer_registry_reporting_test_kit/igs/package/CapabilityStatement-central-cancer-registry-reporting-ehr.json +1 -0
  197. data/lib/cancer_registry_reporting_test_kit/igs/package/ImplementationGuide-hl7.fhir.us.central-cancer-registry-reporting.json +1 -0
  198. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-cancer-encounter.json +1 -0
  199. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-cancer-patient.json +1 -0
  200. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-ccrr-composition.json +1 -0
  201. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-ccrr-content-bundle.json +1 -0
  202. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-ccrr-plandefinition.json +1 -0
  203. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-ccrr-reporting-bundle.json +1 -0
  204. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-central-cancer-registry-primary-cancer-condition.json +1 -0
  205. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-central-cancer-registry-reporting-messageheader.json +1 -0
  206. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-us-ph-patient.json +1 -0
  207. data/lib/cancer_registry_reporting_test_kit/igs/package/StructureDefinition-us-ph-tribal-affiliation-extension.json +1 -0
  208. data/lib/cancer_registry_reporting_test_kit/igs/package/ValueSet-cancer-core-reportability-codes.json +1 -0
  209. data/lib/cancer_registry_reporting_test_kit/igs/package/example/AllergyIntolerance-example.json +1 -0
  210. data/lib/cancer_registry_reporting_test_kit/igs/package/example/BodyStructure-jenny-m-chest-wall-lymph-nodes-treatment-volume.json +1 -0
  211. data/lib/cancer_registry_reporting_test_kit/igs/package/example/BodyStructure-jenny-m-chest-wall-treatment-volume.json +1 -0
  212. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Bundle-ccrr-content-bundle-example.json +1 -0
  213. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Bundle-central-cancer-registry-reporting-specification-bundle-example.json +1 -0
  214. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Bundle-reporting-bundle-example.json +1 -0
  215. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Composition-ccrr-composition-example.json +1 -0
  216. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Condition-primary-cancer-condition-breast.json +1 -0
  217. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Encounter-encounter-cancer-example.json +1 -0
  218. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Endpoint-example-healthcare-endpoint.json +1 -0
  219. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Endpoint-example-ph-endpoint.json +1 -0
  220. data/lib/cancer_registry_reporting_test_kit/igs/package/example/MedicationAdministration-cancer-related-medication-administration-example.json +1 -0
  221. data/lib/cancer_registry_reporting_test_kit/igs/package/example/MessageHeader-messageheader-example-reportheader.json +1 -0
  222. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Observation-cancer-stage-group-example.json +1 -0
  223. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Observation-tnm-clinical-distant-metastases-category-cM0.json +1 -0
  224. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Observation-tnm-clinical-primary-tumor-category-cT3.json +1 -0
  225. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Observation-tnm-clinical-regional-nodes-category-cN3.json +1 -0
  226. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Organization-example-healthcare-org.json +1 -0
  227. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Organization-example-pha-org.json +1 -0
  228. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Patient-example.json +1 -0
  229. data/lib/cancer_registry_reporting_test_kit/igs/package/example/PlanDefinition-plandefinition-central-cancer-registry-reporting-example.json +1 -0
  230. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Practitioner-1.json +1 -0
  231. data/lib/cancer_registry_reporting_test_kit/igs/package/example/Procedure-radiotherapy-example.json +1 -0
  232. data/lib/cancer_registry_reporting_test_kit/igs/package/openapi/central-cancer-registry-reporting-ehr.openapi.json +364 -0
  233. data/lib/cancer_registry_reporting_test_kit/igs/package/other/ig-r4.jsonX +1 -0
  234. data/lib/cancer_registry_reporting_test_kit/igs/package/other/spec.internals +293 -0
  235. data/lib/cancer_registry_reporting_test_kit/igs/package/other/validation-oo.json +1 -0
  236. data/lib/cancer_registry_reporting_test_kit/igs/package/other/validation-summary.json +1 -0
  237. data/lib/cancer_registry_reporting_test_kit/igs/package/package.json +30 -0
  238. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-cancer-encounter.sch +19 -0
  239. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-cancer-patient.sch +175 -0
  240. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-ccrr-composition.sch +61 -0
  241. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-ccrr-content-bundle.sch +12 -0
  242. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-ccrr-plandefinition.sch +331 -0
  243. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-ccrr-reporting-bundle.sch +12 -0
  244. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-central-cancer-registry-primary-cancer-condition.sch +31 -0
  245. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-central-cancer-registry-reporting-messageheader.sch +27 -0
  246. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-us-ph-patient.sch +217 -0
  247. data/lib/cancer_registry_reporting_test_kit/igs/package/xml/StructureDefinition-us-ph-tribal-affiliation-extension.sch +36 -0
  248. data/lib/cancer_registry_reporting_test_kit/metadata.rb +71 -0
  249. data/lib/cancer_registry_reporting_test_kit/must_support_test.rb +263 -0
  250. data/lib/cancer_registry_reporting_test_kit/primitive_type.rb +7 -0
  251. data/lib/cancer_registry_reporting_test_kit/requirements/cancer-registry-reporting-test-kit_out_of_scope_requirements.csv +77 -0
  252. data/lib/cancer_registry_reporting_test_kit/requirements/cancer-registry-reporting-test-kit_requirements.csv +162 -0
  253. data/lib/cancer_registry_reporting_test_kit/requirements/generated/cancer-registry-reporting-test-kit_requirements_coverage.csv +161 -0
  254. data/lib/cancer_registry_reporting_test_kit/search_test.rb +897 -0
  255. data/lib/cancer_registry_reporting_test_kit/search_test_properties.rb +58 -0
  256. data/lib/cancer_registry_reporting_test_kit/validation_test.rb +68 -0
  257. data/lib/cancer_registry_reporting_test_kit/version.rb +6 -0
  258. data/lib/cancer_registry_reporting_test_kit.rb +6 -0
  259. data/lib/inferno_requirements_tools/ext/inferno_core/runnable.rb +22 -0
  260. data/lib/inferno_requirements_tools/tasks/requirements_coverage.rb +284 -0
  261. data/lib/requirements_config.yaml +22 -0
  262. metadata +341 -0
@@ -0,0 +1,134 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'naming'
4
+ require_relative 'special_cases'
5
+ require 'pry'
6
+ module CancerRegistryReportingTestKit
7
+ class HdeaGenerator
8
+ class MustSupportTestGenerator
9
+ class << self
10
+ def generate(ig_metadata, base_output_dir)
11
+ ig_metadata.groups
12
+ .reject { |group| SpecialCases::IGNORE_FOR_GENERATION.include?(group.profile_url) }
13
+ .each { |group| new(group, base_output_dir).generate }
14
+ end
15
+ end
16
+
17
+ attr_accessor :group_metadata, :base_output_dir
18
+
19
+ def initialize(group_metadata, base_output_dir)
20
+ self.group_metadata = group_metadata
21
+ self.base_output_dir = base_output_dir
22
+ end
23
+
24
+ def template
25
+ @template ||= File.read(File.join(__dir__, 'templates', 'must_support.rb.erb'))
26
+ end
27
+
28
+ def output
29
+ @output ||= ERB.new(template).result(binding)
30
+ end
31
+
32
+ def base_output_file_name
33
+ "#{class_name.underscore}.rb"
34
+ end
35
+
36
+ def output_file_directory
37
+ File.join(base_output_dir, profile_identifier)
38
+ end
39
+
40
+ def output_file_name
41
+ File.join(output_file_directory, base_output_file_name)
42
+ end
43
+
44
+ def read_interaction
45
+ self.class.read_interaction(group_metadata)
46
+ end
47
+
48
+ def profile_identifier
49
+ Naming.snake_case_for_profile(group_metadata)
50
+ end
51
+
52
+ def profile_url
53
+ group_metadata.profile_url
54
+ end
55
+
56
+ def profile_name
57
+ "#{group_metadata.profile_name.chomp(' Profile')} profile"
58
+ end
59
+
60
+ def profile_version
61
+ group_metadata.profile_version
62
+ end
63
+
64
+ def profile_link
65
+ "#{profile_url}|#{profile_version}"
66
+ end
67
+
68
+ def test_id
69
+ "ccrr_#{group_metadata.reformatted_version}_#{profile_identifier}_must_support_test"
70
+ end
71
+
72
+ def class_name
73
+ "#{Naming.upper_camel_case_for_profile(group_metadata)}MustSupportTest"
74
+ end
75
+
76
+ def module_name
77
+ "HDEA#{group_metadata.reformatted_version.upcase}"
78
+ end
79
+
80
+ def resource_type
81
+ group_metadata.resource
82
+ end
83
+
84
+ def resource_collection_string
85
+ 'all_scratch_resources'
86
+ end
87
+
88
+ def must_support_list_string
89
+ build_must_support_list_string(false)
90
+ end
91
+
92
+ def uscdi_list_string
93
+ build_must_support_list_string(true)
94
+ end
95
+
96
+ def build_must_support_list_string(uscdi_only)
97
+ slice_names = group_metadata.must_supports[:slices]
98
+ .select { |slice| slice[:uscdi_only].presence == uscdi_only.presence }
99
+ .map { |slice| slice[:slice_id] }
100
+
101
+ element_names = group_metadata.must_supports[:elements]
102
+ .select { |element| element[:uscdi_only].presence == uscdi_only.presence }
103
+ .map { |element| "#{resource_type}.#{element[:path]}" }
104
+
105
+ extension_names = group_metadata.must_supports[:extensions]
106
+ .select { |extension| extension[:uscdi_only].presence == uscdi_only.presence }
107
+ .map { |extension| extension[:id] }
108
+
109
+ group_metadata.must_supports[:choices]&.each do |choice|
110
+ next unless choice[:uscdi_only].presence == uscdi_only.presence && choice.key?(:paths)
111
+
112
+ choice[:paths].each { |path| element_names.delete("#{resource_type}.#{path}") }
113
+ element_names << choice[:paths].map { |path| "#{resource_type}.#{path}" }.join(' or ')
114
+ end
115
+
116
+ (slice_names + element_names + extension_names)
117
+ .uniq
118
+ .sort
119
+ .map { |name| "#{' ' * 8}* #{name}" }
120
+ .join("\n")
121
+ end
122
+
123
+ def generate
124
+ FileUtils.mkdir_p(output_file_directory)
125
+ File.write(output_file_name, output)
126
+
127
+ group_metadata.add_test(
128
+ id: test_id,
129
+ file_name: base_output_file_name
130
+ )
131
+ end
132
+ end
133
+ end
134
+ end
@@ -0,0 +1,168 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CancerRegistryReportingTestKit
4
+ class HdeaGenerator
5
+ module Naming
6
+ USCORE_ALLERGY_INTOLERANCE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-allergyintolerance'
7
+ USCORE_CARE_PLAN = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-careplan'
8
+ USCORE_CARE_TEAM = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-careteam'
9
+ USCORE_CONDITION = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-condition'
10
+ USCORE_IMPLANTABLE_DEVICE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-implantable-device'
11
+ USCORE_DIAGNOSTIC_REPORT_NOTE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-note'
12
+ USCORE_DIAGNOSTIC_REPORT_LAB = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-diagnosticreport-lab'
13
+ USCORE_DOCUMENT_REFERENCE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-documentreference'
14
+ USCORE_ENCOUNTER = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-encounter'
15
+ USCORE_GOAL = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-goal'
16
+ USCORE_IMMUNIZATION = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-immunization'
17
+ USCORE_LOCATION = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-location'
18
+ USCORE_MEDICATION = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-medication'
19
+ MCODE_MEDICATION_REQUEST = 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-cancer-related-medication-request'
20
+ USCORE_SMOKINGSTATUS = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-smokingstatus'
21
+ USCORE_PEDIATRIC_WEIGHT_FOR_HEIGHT = 'http://hl7.org/fhir/us/core/StructureDefinition/pediatric-weight-for-height'
22
+ USCORE_OBSERVATION_LAB = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-observation-lab'
23
+ USCORE_PEDIATRIC_BMI_FOR_AGE = 'http://hl7.org/fhir/us/core/StructureDefinition/pediatric-bmi-for-age'
24
+ USCORE_PULSE_OXIMETRY = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-pulse-oximetry'
25
+ USCORE_HEAD_CIRCUMFERENCE = 'http://hl7.org/fhir/us/core/StructureDefinition/head-occipital-frontal-circumference-percentile'
26
+ USCORE_ORGANIZATION = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization'
27
+ USCORE_PATIENT = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient'
28
+ USCORE_PRACTITIONER = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner'
29
+ USCORE_PRACTITIONER_ROLE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitionerrole'
30
+ USCORE_PROCEDURE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-procedure'
31
+ USCORE_PROVENANCE = 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-provenance'
32
+ BASE_SERVICE_REQUEST = 'http://hl7.org/fhir/StructureDefinition/ServiceRequest'
33
+ BASE_MEDICATION_STATEMENT = 'http://hl7.org/fhir/StructureDefinition/MedicationStatement'
34
+
35
+ ## FOR HDEA
36
+ CCRR_COMPOSITION = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-composition'
37
+ CCRR_CONTENT_BUNDLE = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-content-bundle'
38
+ CCRR_PRIMARY_CONDITION = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/central-cancer-registry-primary-cancer-condition'
39
+ MCODE_SECONDARY_CANCER_CONDITION = 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-secondary-cancer-condition'
40
+ MCODE_TNM_STAGE_GROUP = 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-tnm-stage-group'
41
+ MCODE_RADIOTHERAPY_COURSE_SUMMARY = 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-radiotherapy-course-summary'
42
+ ODH_USUAL_WORK = 'http://hl7.org/fhir/us/odh/StructureDefinition/odh-UsualWork'
43
+ BASE_OBSERVATION = 'http://hl7.org/fhir/StructureDefinition/Observation'
44
+ MCODE_MEDICATION_ADMINISTRATION = 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-cancer-related-medication-administration'
45
+ AUTHOR = ['http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitionerrole',
46
+ 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner', 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization'].freeze
47
+
48
+ ## Unused Profiles
49
+ CCRR_CANCER_ENCOUNTER = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/cancer-encounter'
50
+ CCRR_CANCER_PATIENT = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/cancer-patient'
51
+ CCRR_PUBLIC_HEALTH_PATIENT = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/us-ph-patient'
52
+ CCRR_REPORTING_BUNDLE = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-reporting-bundle'
53
+ CCRR_MESSAGE_HEADER = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/central-cancer-registry-reporting-messageheader'
54
+ CCRR_PLAN_DEFINITION = 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-plandefinition'
55
+
56
+ IG_LINKS = {
57
+ 'v3.1.1' => 'http://hl7.org/fhir/us/core/STU3.1.1',
58
+ 'v4.0.0' => 'http://hl7.org/fhir/us/core/STU4',
59
+ 'v5.0.1' => 'http://hl7.org/fhir/us/core/STU5.0.1',
60
+ 'v6.1.0' => 'http://hl7.org/fhir/us/core/STU6.1',
61
+ 'v7.0.0' => 'http://hl7.org/fhir/us/core/STU7'
62
+ }.freeze
63
+
64
+ PROFILE_URL_TO_SECTION_NAME_MAP = {
65
+ USCORE_PATIENT => '`patient` element',
66
+ USCORE_ENCOUNTER => '`encounter` element',
67
+ USCORE_PRACTITIONER => '`author` element',
68
+ USCORE_PRACTITIONER_ROLE => '`author` element',
69
+ USCORE_ORGANIZATION => '`author` element',
70
+ CCRR_PRIMARY_CONDITION => 'Primary Cancer Condition section',
71
+ MCODE_SECONDARY_CANCER_CONDITION => 'Secondary Cancer Condition section',
72
+ MCODE_TNM_STAGE_GROUP => 'Cancer Stage Group section',
73
+ MCODE_RADIOTHERAPY_COURSE_SUMMARY => 'Radiotherapy Course Summary section',
74
+ USCORE_CONDITION => 'Problems section',
75
+ USCORE_ALLERGY_INTOLERANCE => 'Allergies section',
76
+ MCODE_MEDICATION_ADMINISTRATION => 'Medications and Medications Administered sections',
77
+ USCORE_MEDICATION => 'Medications and Medications Administered sections',
78
+ BASE_MEDICATION_STATEMENT => 'Medications and Medications Administered sections',
79
+ ODH_USUAL_WORK => 'Occupational Data section',
80
+ USCORE_OBSERVATION_LAB => 'Results section',
81
+ USCORE_DIAGNOSTIC_REPORT_LAB => 'Results section',
82
+ USCORE_DIAGNOSTIC_REPORT_NOTE => 'Notes section',
83
+ USCORE_DOCUMENT_REFERENCE => 'Notes section',
84
+ MCODE_MEDICATION_REQUEST => 'Plan of Treatment section',
85
+ BASE_SERVICE_REQUEST => 'Plan of Treatment section',
86
+ USCORE_CARE_PLAN => 'Plan of Treatment section',
87
+ USCORE_PROCEDURE => 'Procedures section',
88
+ BASE_OBSERVATION => 'Vital Signs section',
89
+ USCORE_SMOKINGSTATUS => 'Social History section'
90
+ }
91
+
92
+ PROFILE_TO_RESOURCE_KEY_MAP = {
93
+ USCORE_ALLERGY_INTOLERANCE => :allergy_intolerance_resources,
94
+ USCORE_CARE_PLAN => :care_plan_resources,
95
+ CCRR_PRIMARY_CONDITION => :central_cancer_registry_primary_cancer_condition_resources,
96
+ USCORE_DOCUMENT_REFERENCE => :document_reference_resources,
97
+ USCORE_ENCOUNTER => :encounter_resources,
98
+ MCODE_RADIOTHERAPY_COURSE_SUMMARY => :mcode_radiotherapy_course_summary_resources,
99
+ MCODE_SECONDARY_CANCER_CONDITION => :mcode_secondary_cancer_condition_resources,
100
+ MCODE_TNM_STAGE_GROUP => :mcode_tnm_stage_group_resources,
101
+ MCODE_MEDICATION_ADMINISTRATION => :medication_administration_resources,
102
+ USCORE_MEDICATION => :medication_resources,
103
+ ODH_USUAL_WORK => :odh_usual_work_resources,
104
+ USCORE_ORGANIZATION => :organization_resources,
105
+ USCORE_PATIENT => :patient_resources,
106
+ USCORE_PRACTITIONER_ROLE => :practitioner_role_resources,
107
+ USCORE_PRACTITIONER => :practitioner_resources,
108
+ USCORE_PROCEDURE => :procedure_resources,
109
+ USCORE_SMOKINGSTATUS => :smokingstatus_resources,
110
+ BASE_SERVICE_REQUEST => :service_request_resources,
111
+ USCORE_CONDITION => :condition_resources,
112
+ BASE_MEDICATION_STATEMENT => :medication_statement_resources,
113
+ USCORE_OBSERVATION_LAB => :observation_lab_resources,
114
+ USCORE_DIAGNOSTIC_REPORT_NOTE => :diagnostic_report_note_resources,
115
+ USCORE_DIAGNOSTIC_REPORT_LAB => :diagnostic_report_lab_resources,
116
+ CCRR_COMPOSITION => :composition_resources,
117
+ MCODE_MEDICATION_REQUEST => :medication_request_resources,
118
+ BASE_OBSERVATION => :observation_resources,
119
+ CCRR_CONTENT_BUNDLE => :ccrr_content_bundle_resources
120
+ }.freeze
121
+
122
+ class << self
123
+ def section_for_profile_url(profile_url)
124
+ PROFILE_URL_TO_SECTION_NAME_MAP[profile_url]
125
+ end
126
+
127
+ def resources_with_multiple_profiles
128
+ # ['Condition', 'DiagnosticReport', 'Observation']
129
+ %w[Patient Encounter Bundle Observation DiagnosticReport Condition Procedure]
130
+ end
131
+
132
+ def resource_has_multiple_profiles?(resource)
133
+ resources_with_multiple_profiles.include? resource
134
+ end
135
+
136
+ def snake_case_for_profile(group_metadata)
137
+ resource = group_metadata.resource
138
+ return resource.underscore unless resource_has_multiple_profiles?(resource)
139
+
140
+ if group_metadata.profile_url == USCORE_HEAD_CIRCUMFERENCE
141
+ return group_metadata.reformatted_version == 'v311' ? 'head_circumference' : 'head_circumference_percentile'
142
+ end
143
+
144
+ group_metadata.name
145
+ .delete_prefix('us_core_')
146
+ .gsub('diagnosticreport', 'diagnostic_report')
147
+ .underscore
148
+ end
149
+
150
+ ## HDEA QUICK PATCH
151
+ def snake_case_for_url(url)
152
+ # special case for author
153
+ return 'author_resources' if url.is_a?(Array)
154
+
155
+ PROFILE_TO_RESOURCE_KEY_MAP[url]
156
+ end
157
+
158
+ def upper_camel_case_for_profile(group_metadata)
159
+ snake_case_for_profile(group_metadata).camelize
160
+ end
161
+
162
+ def ig_link(version)
163
+ IG_LINKS[version]
164
+ end
165
+ end
166
+ end
167
+ end
168
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CancerRegistryReportingTestKit
4
+ class HdeaGenerator
5
+ module SpecialCases
6
+ class << self
7
+ # def move_ms_and_validation(ig_metadata)
8
+ # ms_group_metadata = CancerRegistryReportingTestKit::HdeaGenerator::GroupMetadata.new({name: "must_support", class_name: "MustSupportSequence", resource: "MustSupport", reformatted_version: "v100", version: "v1.0.0", title: 'Must Support'})
9
+ # validation_group_metadata = CancerRegistryReportingTestKit::HdeaGenerator::GroupMetadata.new({name: "must_support", class_name: "MustSupportSequence", resource: "Validation", reformatted_version: "v100", version: "v1.0.0", title: 'Validation'})
10
+ # ig_metadata.groups.each do |group|
11
+ # tests_to_delete = []
12
+ # group.tests.each do |test|
13
+ # if test[:id].include?('must_support')
14
+ # ms_group_metadata.add_test(id: test[:id], file_name: test[:file_name])
15
+ # tests_to_delete << test
16
+ # elsif test[:id].include?('validation')
17
+ # validation_group_metadata.add_test(id: test[:id], file_name: test[:file_name])
18
+ # tests_to_delete << test
19
+ # end
20
+ # end
21
+ # tests_to_delete.each { |test| group.tests.delete(test) }
22
+ # end
23
+ # ig_metadata.groups << ms_group_metadata
24
+ # ig_metadata.groups << validation_group_metadata
25
+ # end
26
+ end
27
+
28
+ IGNORE_FOR_GENERATION = ['http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/central-cancer-registry-reporting-messageheader',
29
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-reporting-bundle',
30
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/cancer-patient',
31
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/cancer-encounter',
32
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/us-ph-tribal-affiliation-extension',
33
+ 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-primary-cancer-condition',
34
+ 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-tnm-distant-metastases-category',
35
+ 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-tnm-primary-tumor-category',
36
+ 'http://hl7.org/fhir/us/mcode/StructureDefinition/mcode-tnm-regional-nodes-category',
37
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-plandefinition',
38
+ 'http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/us-ph-patient'
39
+ ].freeze
40
+ IGNORE_FOR_VALIDATION = ['http://hl7.org/fhir/us/central-cancer-registry-reporting/StructureDefinition/ccrr-content-bundle'].freeze
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,41 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../must_support_test'
4
+ require_relative '../../../../hdea_generator/group_metadata'
5
+
6
+ module CancerRegistryReportingTestKit
7
+ module <%= module_name %>
8
+ class <%= class_name %> < Inferno::Test
9
+ include CancerRegistryReportingTestKit::MustSupportTest
10
+
11
+ title '<%= profile_name %> must support element coverage'
12
+ description %(
13
+ This test looks across all instances
14
+ associated with the [<%= profile_name %>](<%= profile_link %>)
15
+ found in the provided report Bundles and verifies that they
16
+ contain populated examples of the following must support elements
17
+ defined in the profile:
18
+
19
+ <%= must_support_list_string %>
20
+ )
21
+
22
+ id :<%= test_id %>
23
+
24
+ def resource_type
25
+ '<%= resource_type %>'
26
+ end
27
+
28
+ def self.metadata
29
+ @metadata ||= HdeaGenerator::GroupMetadata.new(YAML.load_file(File.join(__dir__, 'metadata.yml'), aliases: true))
30
+ end
31
+
32
+ def scratch_resources
33
+ scratch[:<%= profile_identifier %>_resources] ||= {}
34
+ end
35
+
36
+ run do
37
+ perform_must_support_test(<%= resource_collection_string %>)
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../../../../validation_test'
4
+
5
+ module CancerRegistryReportingTestKit
6
+ module <%= module_name %>
7
+ class <%= class_name %> < Inferno::Test
8
+ include CancerRegistryReportingTestKit::ValidationTest
9
+
10
+ id :<%= test_id %>
11
+ title '<%= profile_name %> conformance'
12
+ description %(
13
+ This test verifies that <%= resource_type %> instances
14
+ <%= section_name %> of the provided reports conform to the
15
+ [<%= profile_name %>](<%= profile_link %>).
16
+ )
17
+
18
+
19
+ def resource_type
20
+ '<%= resource_type %>'
21
+ end
22
+
23
+ def scratch_resources
24
+ scratch[:<%= profile_identifier %>_resources] ||= {}
25
+ end
26
+
27
+ run do
28
+ perform_validation_test(scratch_resources[:all] || [],
29
+ '<%= profile_url %>',
30
+ '<%= profile_version %>',
31
+ skip_if_empty: <%= skip_if_empty %>)
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,118 @@
1
+ # frozen_string_literal: true
2
+
3
+ module CancerRegistryReportingTestKit
4
+ class HdeaGenerator
5
+ class TerminologyBindingMetadataExtractor
6
+ attr_accessor :profile_elements, :ig_resources, :resource
7
+
8
+ def initialize(profile_elements, ig_resources, resource)
9
+ self.profile_elements = profile_elements
10
+ self.ig_resources = ig_resources
11
+ self.resource = resource
12
+ end
13
+
14
+ def terminology_bindings
15
+ (element_terminology_bindings + extension_terminology_bindings).compact
16
+ # add_terminology_bindings_from_extensions
17
+ # profile_elements.select { |element| element.type&.first&.code == 'Extension' }
18
+ # .each { |extension| add_terminology_bindings_from_extension(extension) }
19
+ end
20
+
21
+ def element_has_fixed_value?(element)
22
+ case element.type.first.code
23
+ when 'Quantity'
24
+ code = profile_elements.find { |e| e.path == "#{element.path}.code" }
25
+ system = profile_elements.find { |e| e.path == "#{element.path}.system" }
26
+ code&.fixedCode || system&.fixedUri
27
+ when 'code'
28
+ element.fixedCode.present?
29
+ end
30
+ end
31
+
32
+ def element_has_optional_binding_slice?(element)
33
+ element.sliceName.present? && element.min.zero?
34
+ end
35
+
36
+ def profile_elements_with_bindings
37
+ profile_elements
38
+ .select { |element| element.binding.present? && element.binding.strength == 'required' }
39
+ .reject { |element| element_has_fixed_value?(element) || element_has_optional_binding_slice?(element) }
40
+ end
41
+
42
+ def element_terminology_bindings
43
+ profile_elements_with_bindings.map do |element|
44
+ binding = {
45
+ type: element.type.first.code,
46
+ strength: element.binding.strength,
47
+ # Goal.target.detail has an unbound binding
48
+ system: element.binding.valueSet&.split('|')&.first,
49
+ path: element.path.gsub('[x]', '').gsub("#{resource}.", '')
50
+ }
51
+
52
+ binding[:required_binding_slice] = true if element.sliceName.present? && element.min.positive?
53
+
54
+ binding
55
+ end
56
+ end
57
+
58
+ def extension_profile_elements
59
+ profile_elements
60
+ .select { |element| element.type&.first&.code == 'Extension' }
61
+ .select { |element| extension_profile_url(element).present? }
62
+ end
63
+
64
+ def extension_profile_url(extension)
65
+ extension.type.first.profile&.first
66
+ end
67
+
68
+ def extension_terminology_bindings
69
+ extension_profile_elements
70
+ .flat_map do |extension_profile_element|
71
+ url = extension_profile_url(extension_profile_element)
72
+ extension = ig_resources.profile_by_url(url)
73
+
74
+ # TODO: Temporaray fix for extension defined out of US Core. FI-1623
75
+ next if extension.nil?
76
+
77
+ elements = extension.snapshot.element
78
+ elements_with_bindings = elements.select do |element|
79
+ element.binding.present? && !element.id.include?('Extension.extension')
80
+ end
81
+
82
+ elements_with_bindings.map do |element|
83
+ {
84
+ type: element.type.first.code,
85
+ strength: element.binding.strength,
86
+ system: element.binding.valueSet&.split('|')&.first,
87
+ path: element.path.gsub('[x]', '').gsub('Extension.', ''),
88
+ extensions: [url]
89
+ }
90
+ end + nested_extension_terminology_bindings(elements, url)
91
+ end
92
+ end
93
+
94
+ def nested_extension_terminology_bindings(elements, extension_url)
95
+ nested_extensions = elements.select { |element| element.path == 'Extension.extension' }
96
+ nested_extensions.flat_map do |nested_extension|
97
+ nested_extension_element = elements.find { |element| element.id == "#{nested_extension.id}.url" }
98
+ next unless nested_extension_element.present?
99
+
100
+ nested_extension_url = nested_extension_element.fixedUri
101
+ nested_elements_with_bindings = elements.select do |element|
102
+ element.id.include?(nested_extension.id) && element.binding.present?
103
+ end
104
+
105
+ nested_elements_with_bindings.map do |element|
106
+ {
107
+ type: element.type.first.code,
108
+ strength: element.binding.strength,
109
+ system: element.binding.valueSet&.split('|')&.first,
110
+ path: element.path.gsub('[x]', '').gsub('Extension.extension.', ''),
111
+ extensions: [extension_url, nested_extension_url]
112
+ }
113
+ end
114
+ end
115
+ end
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,125 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'naming'
4
+ require_relative 'special_cases'
5
+
6
+ module CancerRegistryReportingTestKit
7
+ class HdeaGenerator
8
+ class ValidationTestGenerator
9
+ class << self
10
+ def generate(ig_metadata, base_output_dir)
11
+ ig_metadata.groups
12
+ .reject { |group| SpecialCases::IGNORE_FOR_GENERATION.include?(group.profile_url) }
13
+ .reject { |group| SpecialCases::IGNORE_FOR_VALIDATION.include?(group.profile_url) }
14
+ .each do |group|
15
+ new(group, base_output_dir: base_output_dir).generate
16
+ end
17
+ end
18
+ end
19
+
20
+ attr_accessor :group_metadata, :medication_request_metadata, :base_output_dir
21
+
22
+ def initialize(group_metadata, medication_request_metadata = nil, base_output_dir:)
23
+ self.group_metadata = group_metadata
24
+ self.medication_request_metadata = medication_request_metadata
25
+ self.base_output_dir = base_output_dir
26
+ end
27
+
28
+ def template
29
+ @template ||= File.read(File.join(__dir__, 'templates', 'validation.rb.erb'))
30
+ end
31
+
32
+ def output
33
+ @output ||= ERB.new(template).result(binding)
34
+ end
35
+
36
+ def base_output_file_name
37
+ "#{class_name.underscore}.rb"
38
+ end
39
+
40
+ def output_file_directory
41
+ File.join(base_output_dir, profile_identifier)
42
+ end
43
+
44
+ def output_file_name
45
+ File.join(output_file_directory, base_output_file_name)
46
+ end
47
+
48
+ def directory_name
49
+ Naming.snake_case_for_profile(medication_request_metadata || group_metadata)
50
+ end
51
+
52
+ def profile_identifier
53
+ Naming.snake_case_for_profile(group_metadata)
54
+ end
55
+
56
+ def section_name
57
+ raw = Naming.section_for_profile_url(profile_url)&.chomp('s')
58
+ return unless raw.present?
59
+
60
+ if raw.include?('element')
61
+ "referenced in the #{raw}s"
62
+ else
63
+ "found in the #{raw}s"
64
+ end
65
+ end
66
+
67
+ def profile_url
68
+ group_metadata.profile_url
69
+ end
70
+
71
+ def profile_name
72
+ "#{group_metadata.profile_name.chomp(' Profile')} profile"
73
+ end
74
+
75
+ def profile_version
76
+ group_metadata.profile_version
77
+ end
78
+
79
+ def profile_link
80
+ "#{profile_url}|#{profile_version}"
81
+ end
82
+
83
+ def test_id
84
+ "ccrr_#{group_metadata.reformatted_version}_#{profile_identifier}_validation_test"
85
+ end
86
+
87
+ def class_name
88
+ "#{Naming.upper_camel_case_for_profile(group_metadata)}ValidationTest"
89
+ end
90
+
91
+ def module_name
92
+ "HDEA#{group_metadata.reformatted_version.upcase}"
93
+ end
94
+
95
+ def resource_type
96
+ group_metadata.resource
97
+ end
98
+
99
+ def conformance_expectation
100
+ read_interaction[:expectation]
101
+ end
102
+
103
+ def skip_if_empty
104
+ # Return true if a system must demonstrate at least one example of the resource type.
105
+ # This drives omit vs. skip result statuses in this test.
106
+ resource_type != 'Medication'
107
+ end
108
+
109
+ def generate
110
+ File.write(output_file_name, output)
111
+
112
+ test_metadata = {
113
+ id: test_id,
114
+ file_name: base_output_file_name
115
+ }
116
+
117
+ # if resource_type == 'Medication'
118
+ # medication_request_metadata.add_test(**test_metadata)
119
+ # else
120
+ group_metadata.add_test(**test_metadata)
121
+ # end
122
+ end
123
+ end
124
+ end
125
+ end