carin_for_blue_button_test_kit 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (278) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/carin_for_blue_button_test_kit/capability_statement/capability_statement_group.rb +45 -0
  4. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/conformance_support_test.rb +41 -0
  5. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/fhir_version_test.rb +15 -0
  6. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/instantiates_test.rb +32 -0
  7. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/json_support_test.rb +39 -0
  8. data/lib/carin_for_blue_button_test_kit/capability_statement/tests/profile_support_test.rb +32 -0
  9. data/lib/carin_for_blue_button_test_kit/carin_search_test.rb +227 -0
  10. data/lib/carin_for_blue_button_test_kit/date_search_validator.rb +109 -0
  11. data/lib/carin_for_blue_button_test_kit/fhir_resource_navigation.rb +73 -0
  12. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/c4bb_test_suite.rb +106 -0
  13. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/coverage/coverage_must_support_test.rb +53 -0
  14. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/coverage/coverage_read_test.rb +39 -0
  15. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/coverage/coverage_validation_test.rb +43 -0
  16. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/coverage_group.rb +58 -0
  17. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_all_search_test.rb +38 -0
  18. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_careteam_search_test.rb +38 -0
  19. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_coverage_search_test.rb +38 -0
  20. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_insurer_search_test.rb +38 -0
  21. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_patient_search_test.rb +38 -0
  22. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_provider_search_test.rb +38 -0
  23. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_id_search_test.rb +59 -0
  24. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_identifier_search_test.rb +49 -0
  25. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_lastupdated_search_test.rb +48 -0
  26. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_must_support_test.rb +72 -0
  27. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_patient_search_test.rb +48 -0
  28. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_read_test.rb +39 -0
  29. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_service_date_search_test.rb +48 -0
  30. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_type_search_test.rb +49 -0
  31. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit/explanation_of_benefit_validation_test.rb +43 -0
  32. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_group.rb +110 -0
  33. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_all_search_test.rb +38 -0
  34. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_careteam_search_test.rb +38 -0
  35. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_coverage_search_test.rb +38 -0
  36. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_insurer_search_test.rb +38 -0
  37. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_patient_search_test.rb +38 -0
  38. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_provider_search_test.rb +38 -0
  39. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_id_search_test.rb +59 -0
  40. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_identifier_search_test.rb +49 -0
  41. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_lastupdated_search_test.rb +48 -0
  42. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_must_support_test.rb +120 -0
  43. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_patient_search_test.rb +48 -0
  44. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_read_test.rb +39 -0
  45. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_service_date_search_test.rb +48 -0
  46. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_type_search_test.rb +49 -0
  47. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_validation_test.rb +43 -0
  48. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_inpatient_institutional_group.rb +58 -0
  49. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_all_search_test.rb +38 -0
  50. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_careteam_search_test.rb +38 -0
  51. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_coverage_search_test.rb +38 -0
  52. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_insurer_search_test.rb +38 -0
  53. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_patient_search_test.rb +38 -0
  54. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_provider_search_test.rb +38 -0
  55. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_id_search_test.rb +59 -0
  56. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_identifier_search_test.rb +49 -0
  57. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_lastupdated_search_test.rb +48 -0
  58. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_must_support_test.rb +112 -0
  59. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_patient_search_test.rb +48 -0
  60. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_read_test.rb +39 -0
  61. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_service_date_search_test.rb +48 -0
  62. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_type_search_test.rb +49 -0
  63. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_validation_test.rb +43 -0
  64. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_outpatient_institutional_group.rb +58 -0
  65. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_all_search_test.rb +38 -0
  66. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_careteam_search_test.rb +38 -0
  67. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_coverage_search_test.rb +38 -0
  68. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_insurer_search_test.rb +38 -0
  69. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_patient_search_test.rb +38 -0
  70. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_provider_search_test.rb +38 -0
  71. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_id_search_test.rb +59 -0
  72. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_identifier_search_test.rb +49 -0
  73. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_lastupdated_search_test.rb +48 -0
  74. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_must_support_test.rb +103 -0
  75. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_patient_search_test.rb +48 -0
  76. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_read_test.rb +39 -0
  77. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_service_date_search_test.rb +48 -0
  78. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_type_search_test.rb +49 -0
  79. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_validation_test.rb +43 -0
  80. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_pharmacy_group.rb +58 -0
  81. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_all_search_test.rb +38 -0
  82. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_careteam_search_test.rb +38 -0
  83. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_coverage_search_test.rb +38 -0
  84. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_insurer_search_test.rb +38 -0
  85. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_patient_search_test.rb +38 -0
  86. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_provider_search_test.rb +38 -0
  87. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_id_search_test.rb +59 -0
  88. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_identifier_search_test.rb +49 -0
  89. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_lastupdated_search_test.rb +48 -0
  90. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_must_support_test.rb +97 -0
  91. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_patient_search_test.rb +48 -0
  92. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_read_test.rb +39 -0
  93. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_service_date_search_test.rb +48 -0
  94. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_type_search_test.rb +49 -0
  95. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_validation_test.rb +43 -0
  96. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/explanation_of_benefit_professional_non_clinician_group.rb +58 -0
  97. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/organization/organization_must_support_test.rb +55 -0
  98. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/organization/organization_read_test.rb +39 -0
  99. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/organization/organization_validation_test.rb +43 -0
  100. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/organization_group.rb +58 -0
  101. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/patient/patient_must_support_test.rb +69 -0
  102. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/patient/patient_read_test.rb +39 -0
  103. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/patient/patient_validation_test.rb +43 -0
  104. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/patient_group.rb +58 -0
  105. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/practitioner/practitioner_must_support_test.rb +46 -0
  106. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/practitioner/practitioner_read_test.rb +39 -0
  107. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/practitioner/practitioner_validation_test.rb +43 -0
  108. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/practitioner_group.rb +58 -0
  109. data/lib/carin_for_blue_button_test_kit/generated/v1.1.0/resource_list.rb +17 -0
  110. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/c4bb_test_suite.rb +110 -0
  111. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_coverage_payor_search_test.rb +38 -0
  112. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_id_search_test.rb +59 -0
  113. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_lastupdated_search_test.rb +48 -0
  114. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_must_support_test.rb +53 -0
  115. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_read_test.rb +39 -0
  116. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage/coverage_validation_test.rb +43 -0
  117. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/coverage_group.rb +87 -0
  118. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_billable_period_start_search_test.rb +48 -0
  119. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_all_search_test.rb +38 -0
  120. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_careteam_search_test.rb +38 -0
  121. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_coverage_search_test.rb +38 -0
  122. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_insurer_search_test.rb +38 -0
  123. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_patient_search_test.rb +38 -0
  124. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_payee_search_test.rb +38 -0
  125. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_explanation_of_benefit_provider_search_test.rb +38 -0
  126. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_id_search_test.rb +59 -0
  127. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_identifier_search_test.rb +49 -0
  128. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_lastupdated_search_test.rb +48 -0
  129. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_must_support_test.rb +73 -0
  130. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_patient_search_test.rb +48 -0
  131. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_read_test.rb +39 -0
  132. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_service_date_search_test.rb +48 -0
  133. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_service_start_date_search_test.rb +48 -0
  134. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_type_search_test.rb +49 -0
  135. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit/explanation_of_benefit_validation_test.rb +43 -0
  136. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_group.rb +118 -0
  137. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_billable_period_start_search_test.rb +48 -0
  138. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_all_search_test.rb +38 -0
  139. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_careteam_search_test.rb +38 -0
  140. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_coverage_search_test.rb +38 -0
  141. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_insurer_search_test.rb +38 -0
  142. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_patient_search_test.rb +38 -0
  143. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_payee_search_test.rb +38 -0
  144. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_explanation_of_benefit_provider_search_test.rb +38 -0
  145. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_id_search_test.rb +59 -0
  146. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_identifier_search_test.rb +49 -0
  147. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_lastupdated_search_test.rb +48 -0
  148. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_must_support_test.rb +121 -0
  149. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_patient_search_test.rb +48 -0
  150. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_read_test.rb +39 -0
  151. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_service_date_search_test.rb +48 -0
  152. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_service_start_date_search_test.rb +48 -0
  153. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_type_search_test.rb +49 -0
  154. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional/explanation_of_benefit_inpatient_institutional_validation_test.rb +43 -0
  155. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_inpatient_institutional_group.rb +58 -0
  156. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_billable_period_start_search_test.rb +48 -0
  157. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_all_search_test.rb +38 -0
  158. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_careteam_search_test.rb +38 -0
  159. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_coverage_search_test.rb +38 -0
  160. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_insurer_search_test.rb +38 -0
  161. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_patient_search_test.rb +38 -0
  162. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_payee_search_test.rb +38 -0
  163. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_explanation_of_benefit_provider_search_test.rb +38 -0
  164. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_id_search_test.rb +59 -0
  165. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_identifier_search_test.rb +49 -0
  166. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_lastupdated_search_test.rb +48 -0
  167. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_must_support_test.rb +112 -0
  168. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_patient_search_test.rb +48 -0
  169. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_read_test.rb +39 -0
  170. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_service_date_search_test.rb +48 -0
  171. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_service_start_date_search_test.rb +48 -0
  172. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_type_search_test.rb +49 -0
  173. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral/explanation_of_benefit_oral_validation_test.rb +43 -0
  174. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_oral_group.rb +58 -0
  175. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_billable_period_start_search_test.rb +48 -0
  176. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_all_search_test.rb +38 -0
  177. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_careteam_search_test.rb +38 -0
  178. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_coverage_search_test.rb +38 -0
  179. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_insurer_search_test.rb +38 -0
  180. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_patient_search_test.rb +38 -0
  181. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_payee_search_test.rb +38 -0
  182. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_explanation_of_benefit_provider_search_test.rb +38 -0
  183. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_id_search_test.rb +59 -0
  184. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_identifier_search_test.rb +49 -0
  185. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_lastupdated_search_test.rb +48 -0
  186. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_must_support_test.rb +114 -0
  187. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_patient_search_test.rb +48 -0
  188. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_read_test.rb +39 -0
  189. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_service_date_search_test.rb +48 -0
  190. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_service_start_date_search_test.rb +48 -0
  191. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_type_search_test.rb +49 -0
  192. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional/explanation_of_benefit_outpatient_institutional_validation_test.rb +43 -0
  193. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_outpatient_institutional_group.rb +58 -0
  194. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_billable_period_start_search_test.rb +48 -0
  195. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_all_search_test.rb +38 -0
  196. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_careteam_search_test.rb +38 -0
  197. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_coverage_search_test.rb +38 -0
  198. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_insurer_search_test.rb +38 -0
  199. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_patient_search_test.rb +38 -0
  200. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_payee_search_test.rb +38 -0
  201. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_explanation_of_benefit_provider_search_test.rb +38 -0
  202. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_id_search_test.rb +59 -0
  203. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_identifier_search_test.rb +49 -0
  204. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_lastupdated_search_test.rb +48 -0
  205. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_must_support_test.rb +109 -0
  206. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_patient_search_test.rb +48 -0
  207. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_read_test.rb +39 -0
  208. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_service_date_search_test.rb +48 -0
  209. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_service_start_date_search_test.rb +48 -0
  210. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_type_search_test.rb +49 -0
  211. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy/explanation_of_benefit_pharmacy_validation_test.rb +43 -0
  212. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_pharmacy_group.rb +58 -0
  213. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_billable_period_start_search_test.rb +48 -0
  214. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_all_search_test.rb +38 -0
  215. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_careteam_search_test.rb +38 -0
  216. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_coverage_search_test.rb +38 -0
  217. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_insurer_search_test.rb +38 -0
  218. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_patient_search_test.rb +38 -0
  219. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_payee_search_test.rb +38 -0
  220. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_explanation_of_benefit_provider_search_test.rb +38 -0
  221. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_id_search_test.rb +59 -0
  222. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_identifier_search_test.rb +49 -0
  223. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_lastupdated_search_test.rb +48 -0
  224. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_must_support_test.rb +108 -0
  225. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_patient_search_test.rb +48 -0
  226. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_read_test.rb +39 -0
  227. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_service_date_search_test.rb +48 -0
  228. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_service_start_date_search_test.rb +48 -0
  229. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_type_search_test.rb +49 -0
  230. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician/explanation_of_benefit_professional_non_clinician_validation_test.rb +43 -0
  231. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/explanation_of_benefit_professional_non_clinician_group.rb +58 -0
  232. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/organization/organization_must_support_test.rb +55 -0
  233. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/organization/organization_read_test.rb +39 -0
  234. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/organization/organization_validation_test.rb +43 -0
  235. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/organization_group.rb +81 -0
  236. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/patient/patient_must_support_test.rb +68 -0
  237. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/patient/patient_read_test.rb +39 -0
  238. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/patient/patient_validation_test.rb +43 -0
  239. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/patient_group.rb +81 -0
  240. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/practitioner/practitioner_must_support_test.rb +46 -0
  241. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/practitioner/practitioner_read_test.rb +39 -0
  242. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/practitioner/practitioner_validation_test.rb +43 -0
  243. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/practitioner_group.rb +81 -0
  244. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/related_person/related_person_must_support_test.rb +47 -0
  245. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/related_person/related_person_read_test.rb +39 -0
  246. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/related_person/related_person_validation_test.rb +43 -0
  247. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/related_person_group.rb +81 -0
  248. data/lib/carin_for_blue_button_test_kit/generated/v2.0.0/resource_list.rb +19 -0
  249. data/lib/carin_for_blue_button_test_kit/generator/group_generator.rb +210 -0
  250. data/lib/carin_for_blue_button_test_kit/generator/group_metadata.rb +87 -0
  251. data/lib/carin_for_blue_button_test_kit/generator/group_metadata_extractor.rb +240 -0
  252. data/lib/carin_for_blue_button_test_kit/generator/ig_loader.rb +76 -0
  253. data/lib/carin_for_blue_button_test_kit/generator/ig_metadata.rb +50 -0
  254. data/lib/carin_for_blue_button_test_kit/generator/ig_metadata_extractor.rb +40 -0
  255. data/lib/carin_for_blue_button_test_kit/generator/ig_resources.rb +50 -0
  256. data/lib/carin_for_blue_button_test_kit/generator/include_search_test_generator.rb +105 -0
  257. data/lib/carin_for_blue_button_test_kit/generator/must_support_metadata_extractor.rb +326 -0
  258. data/lib/carin_for_blue_button_test_kit/generator/must_support_test_generator.rb +131 -0
  259. data/lib/carin_for_blue_button_test_kit/generator/naming.rb +36 -0
  260. data/lib/carin_for_blue_button_test_kit/generator/read_test_generator.rb +109 -0
  261. data/lib/carin_for_blue_button_test_kit/generator/resource_list_generator.rb +43 -0
  262. data/lib/carin_for_blue_button_test_kit/generator/search_definition_metadata_extractor.rb +207 -0
  263. data/lib/carin_for_blue_button_test_kit/generator/search_metadata_extractor.rb +74 -0
  264. data/lib/carin_for_blue_button_test_kit/generator/search_test_generator.rb +299 -0
  265. data/lib/carin_for_blue_button_test_kit/generator/special_cases.rb +21 -0
  266. data/lib/carin_for_blue_button_test_kit/generator/suite_generator.rb +94 -0
  267. data/lib/carin_for_blue_button_test_kit/generator/terminology_binding_metadata_extractor.rb +109 -0
  268. data/lib/carin_for_blue_button_test_kit/generator/validation_test_generator.rb +137 -0
  269. data/lib/carin_for_blue_button_test_kit/generator/value_extractor.rb +50 -0
  270. data/lib/carin_for_blue_button_test_kit/generator.rb +90 -0
  271. data/lib/carin_for_blue_button_test_kit/must_support_test.rb +211 -0
  272. data/lib/carin_for_blue_button_test_kit/read_test.rb +51 -0
  273. data/lib/carin_for_blue_button_test_kit/search_test.rb +781 -0
  274. data/lib/carin_for_blue_button_test_kit/search_test_properties.rb +57 -0
  275. data/lib/carin_for_blue_button_test_kit/validation_test.rb +57 -0
  276. data/lib/carin_for_blue_button_test_kit/version.rb +5 -0
  277. data/lib/carin_for_blue_button_test_kit.rb +2 -0
  278. metadata +405 -0
@@ -0,0 +1,109 @@
1
+ module CarinForBlueButtonTestKit
2
+ class Generator
3
+ class TerminologyBindingMetadataExtractor
4
+ attr_accessor :profile_elements, :ig_resources, :resource
5
+
6
+ def initialize(profile_elements, ig_resources, resource)
7
+ self.profile_elements = profile_elements
8
+ self.ig_resources = ig_resources
9
+ self.resource = resource
10
+ end
11
+
12
+ def terminology_bindings
13
+ (element_terminology_bindings + extension_terminology_bindings).compact
14
+ # add_terminology_bindings_from_extensions
15
+ # profile_elements.select { |element| element.type&.first&.code == 'Extension' }
16
+ # .each { |extension| add_terminology_bindings_from_extension(extension) }
17
+ end
18
+
19
+ def element_has_fixed_value?(element)
20
+ case element.type.first.code
21
+ when 'Quantity'
22
+ code = profile_elements.find { |e| e.path == "#{element.path}.code" }
23
+ system = profile_elements.find { |e| e.path == "#{element.path}.system" }
24
+ code&.fixedCode || system&.fixedUri
25
+ when 'code'
26
+ element.fixedCode.present?
27
+ end
28
+ end
29
+
30
+ def profile_elements_with_bindings
31
+ profile_elements
32
+ .select { |element| element.binding.present? }
33
+ .reject { |element| element_has_fixed_value? element }
34
+ end
35
+
36
+ def element_terminology_bindings
37
+ profile_elements_with_bindings.map do |element|
38
+ {
39
+ type: element.type.first.code,
40
+ strength: element.binding.strength,
41
+ # Goal.target.detail has an unbound binding
42
+ system: element.binding.valueSet&.split('|')&.first,
43
+ path: element.path.gsub('[x]', '').gsub("#{resource}.", '')
44
+ }
45
+ end
46
+ end
47
+
48
+ def extension_profile_elements
49
+ profile_elements
50
+ .select { |element| element.type&.first&.code == 'Extension' }
51
+ .select { |element| extension_profile_url(element).present? }
52
+ end
53
+
54
+ def extension_profile_url(extension)
55
+ extension.type.first.profile&.first
56
+ end
57
+
58
+ def extension_terminology_bindings
59
+ extension_profile_elements
60
+ .flat_map do |extension_profile_element|
61
+ url = extension_profile_url(extension_profile_element)
62
+ extension = ig_resources.profile_by_url(url)
63
+
64
+ # TODO: Temporaray fix for extension defined out of US Core. FI-1623
65
+ next if extension.nil?
66
+
67
+ elements = extension.snapshot.element
68
+ elements_with_bindings = elements.select do |element|
69
+ element.binding.present? && !element.id.include?('Extension.extension')
70
+ end
71
+
72
+ elements_with_bindings.map do |element|
73
+ {
74
+ type: element.type.first.code,
75
+ strength: element.binding.strength,
76
+ system: element.binding.valueSet&.split('|')&.first,
77
+ path: element.path.gsub('[x]', '').gsub('Extension.', ''),
78
+ extensions: [url]
79
+ }
80
+ end + nested_extension_terminology_bindings(elements, url)
81
+ end
82
+ end
83
+
84
+ def nested_extension_terminology_bindings(elements, extension_url)
85
+ nested_extensions = elements.select { |element| element.path == 'Extension.extension' }
86
+ nested_extensions.flat_map do |nested_extension|
87
+ nested_extension_element = elements.find { |element| element.id == "#{nested_extension.id}.url" }
88
+ next unless nested_extension_element.present?
89
+
90
+ nested_extension_url = nested_extension_element.fixedUri
91
+ nested_elements_with_bindings = elements.select do |element|
92
+ element.id.include?(nested_extension.id) && element.binding.present?
93
+ end
94
+
95
+ nested_elements_with_bindings.map do |element|
96
+ {
97
+ type: element.type.first.code,
98
+ strength: element.binding.strength,
99
+ system: element.binding.valueSet&.split('|')&.first,
100
+ path: element.path.gsub('[x]', '').gsub('Extension.extension.', ''),
101
+ extensions: [extension_url, nested_extension_url]
102
+ }
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
108
+ end
109
+
@@ -0,0 +1,137 @@
1
+ require_relative 'naming'
2
+
3
+ module CarinForBlueButtonTestKit
4
+ class Generator
5
+ class ValidationTestGenerator
6
+ class << self
7
+ def generate(ig_metadata, base_output_dir)
8
+ ig_metadata.groups
9
+ .each do |group|
10
+ new(group, base_output_dir: base_output_dir).generate
11
+ end
12
+ end
13
+ end
14
+
15
+ attr_accessor :group_metadata, :medication_request_metadata, :base_output_dir
16
+
17
+ def initialize(group_metadata, medication_request_metadata = nil, base_output_dir:)
18
+ self.group_metadata = group_metadata
19
+ self.medication_request_metadata = medication_request_metadata
20
+ self.base_output_dir = base_output_dir
21
+ end
22
+
23
+ def template
24
+ @template ||= File.read(File.join(__dir__, 'templates', 'validation.rb.erb'))
25
+ end
26
+
27
+ def output
28
+ @output ||= ERB.new(template).result(binding)
29
+ end
30
+
31
+ def base_output_file_name
32
+ "#{class_name.underscore}.rb"
33
+ end
34
+
35
+ def output_file_directory
36
+ File.join(base_output_dir, directory_name)
37
+ end
38
+
39
+ def output_file_name
40
+ File.join(output_file_directory, base_output_file_name)
41
+ end
42
+
43
+ def directory_name
44
+ Naming.snake_case_for_profile(medication_request_metadata || group_metadata)
45
+ end
46
+
47
+ def profile_identifier
48
+ Naming.snake_case_for_profile(group_metadata)
49
+ end
50
+
51
+ def profile_url
52
+ group_metadata.profile_url
53
+ end
54
+
55
+ def profile_name
56
+ group_metadata.profile_name
57
+ end
58
+
59
+ def profile_version
60
+ group_metadata.profile_version
61
+ end
62
+
63
+ def test_id
64
+ "c4bb_#{group_metadata.reformatted_version}_#{profile_identifier}_validation_test"
65
+ end
66
+
67
+ def class_name
68
+ "#{Naming.upper_camel_case_for_profile(group_metadata)}ValidationTest"
69
+ end
70
+
71
+ def module_name
72
+ "CARIN4BB#{group_metadata.reformatted_version.upcase}"
73
+ end
74
+
75
+ def resource_type
76
+ group_metadata.resource
77
+ end
78
+
79
+ def conformance_expectation
80
+ read_interaction[:expectation]
81
+ end
82
+
83
+ def specific_resource_type
84
+ case profile_identifier
85
+ when 'explanation_of_benefit_inpatient_institutional'
86
+ return "ExplanationOfBenefitInpatientInstitutional"
87
+ when 'explanation_of_benefit_oral'
88
+ return "ExplanationOfBenefitOral"
89
+ when 'explanation_of_benefit_outpatient_institutional'
90
+ return "ExplanationOfBenefitOutpatientInstitutional"
91
+ when 'explanation_of_benefit_pharmacy'
92
+ return "ExplanationOfBenefitPharmacy"
93
+ when 'explanation_of_benefit_professional_non_clinician'
94
+ return "ExplanationOfBenefitProfessionalNonClinician"
95
+ else
96
+ return self.resource_type
97
+ end
98
+ end
99
+
100
+ def skip_if_empty
101
+ # Return true if a system must demonstrate at least one example of the resource type.
102
+ # This drives omit vs. skip result statuses in this test.
103
+ resource_type != 'Medication'
104
+ end
105
+
106
+ def generate
107
+ FileUtils.mkdir_p(output_file_directory)
108
+ File.open(output_file_name, 'w') { |f| f.write(output) }
109
+
110
+ test_metadata = {
111
+ id: test_id,
112
+ file_name: base_output_file_name
113
+ }
114
+ group_metadata.add_test(**test_metadata)
115
+ end
116
+
117
+ def description
118
+ <<~DESCRIPTION
119
+ #{description_intro}
120
+ It verifies the presence of mandatory elements and that elements with
121
+ required bindings contain appropriate values. CodeableConcept element
122
+ bindings will fail if none of their codings have a code/system belonging
123
+ to the bound ValueSet. Quantity, Coding, and code element bindings will
124
+ fail if their code/system are not found in the valueset.
125
+ DESCRIPTION
126
+ end
127
+
128
+ def description_intro
129
+ <<~GENERIC_INTRO
130
+ This test verifies resources returned from the first search conform to
131
+ the [#{profile_name}](#{profile_url}).
132
+ Systems must demonstrate at least one valid example in order to pass this test.
133
+ GENERIC_INTRO
134
+ end
135
+ end
136
+ end
137
+ end
@@ -0,0 +1,50 @@
1
+ module CarinForBlueButtonTestKit
2
+ class Generator
3
+ class ValueExactor
4
+ attr_accessor :ig_resources, :resource
5
+
6
+ def initialize(ig_resources, resource)
7
+ self.ig_resources = ig_resources
8
+ self.resource = resource
9
+ end
10
+
11
+ def value_set_binding(the_element)
12
+ the_element&.binding
13
+ end
14
+
15
+ def value_set(the_element)
16
+ ig_resources.value_set_by_url(value_set_binding(the_element)&.valueSet)
17
+ end
18
+
19
+ def bound_systems(the_element)
20
+ value_set(the_element)&.compose&.include&.reject { |code| code.concept.nil? }
21
+ end
22
+
23
+ def values_from_value_set_binding(the_element)
24
+ bound_systems = bound_systems(the_element)
25
+
26
+ return [] if bound_systems.blank?
27
+
28
+ bound_systems.flat_map { |system| system.concept.map { |code| code.code } }.uniq
29
+ end
30
+
31
+ def fhir_metadata(current_path)
32
+ FHIR.const_get(resource)::METADATA[current_path]
33
+ end
34
+
35
+ def values_from_resource_metadata(paths)
36
+ values = []
37
+
38
+ paths.each do |current_path|
39
+ current_metadata = fhir_metadata(current_path)
40
+
41
+ if current_metadata&.dig('valid_codes').present?
42
+ values = values + current_metadata['valid_codes'].values.flatten
43
+ end
44
+ end
45
+
46
+ values
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,90 @@
1
+ require 'inferno/ext/fhir_models'
2
+
3
+ require_relative 'generator/ig_loader'
4
+ require_relative 'generator/ig_metadata_extractor'
5
+ require_relative 'generator/resource_list_generator'
6
+ require_relative 'generator/validation_test_generator'
7
+ require_relative 'generator/group_generator'
8
+ require_relative 'generator/suite_generator'
9
+ require_relative 'generator/read_test_generator'
10
+ require_relative 'generator/must_support_test_generator'
11
+ require_relative 'generator/search_test_generator'
12
+
13
+ module CarinForBlueButtonTestKit
14
+ class Generator
15
+ def self.generate
16
+ ig_packages = Dir.glob(File.join(Dir.pwd, 'lib', 'carin_for_blue_button_test_kit', 'igs', '*.tgz'))
17
+
18
+ ig_packages.each do |ig_package|
19
+ new(ig_package).generate
20
+ end
21
+ end
22
+
23
+ attr_accessor :ig_resources, :ig_metadata, :ig_file_name
24
+
25
+ def initialize(ig_file_name)
26
+ self.ig_file_name = ig_file_name
27
+ end
28
+
29
+ def generate
30
+ puts "Generating tests for IG #{File.basename(ig_file_name)}"
31
+ load_ig_package
32
+ extract_metadata
33
+ generate_resource_list
34
+ generate_read_tests
35
+ generate_validation_tests
36
+ generate_must_support_tests
37
+ generate_search_tests
38
+
39
+ generate_groups
40
+ generate_suites
41
+ end
42
+
43
+ def load_ig_package
44
+ FHIR.logger = Logger.new('/dev/null')
45
+ self.ig_resources = IGLoader.new(ig_file_name).load
46
+ end
47
+
48
+ def extract_metadata
49
+ self.ig_metadata = IGMetadataExtractor.new(ig_resources).extract
50
+
51
+ FileUtils.mkdir_p(base_output_dir)
52
+ File.open(File.join(base_output_dir, 'metadata.yml'), 'w') do |file|
53
+ file.write(YAML.dump(ig_metadata.to_hash))
54
+ end
55
+ end
56
+
57
+ def base_output_dir
58
+ File.join(__dir__, 'generated', ig_metadata.ig_version)
59
+ end
60
+
61
+ def generate_resource_list
62
+ ResourceListGenerator.generate(ig_metadata, base_output_dir)
63
+ end
64
+
65
+ def generate_validation_tests
66
+ ValidationTestGenerator.generate(ig_metadata, base_output_dir)
67
+ end
68
+
69
+ def generate_read_tests
70
+ ReadTestGenerator.generate(ig_metadata, base_output_dir)
71
+ end
72
+
73
+ def generate_groups
74
+ GroupGenerator.generate(ig_metadata, base_output_dir)
75
+ end
76
+
77
+ def generate_suites
78
+ SuiteGenerator.generate(ig_metadata, base_output_dir)
79
+ end
80
+
81
+ def generate_must_support_tests
82
+ MustSupportTestGenerator.generate(ig_metadata, base_output_dir)
83
+ end
84
+
85
+ def generate_search_tests
86
+ SearchTestGenerator.generate(ig_metadata, base_output_dir)
87
+ end
88
+
89
+ end
90
+ end
@@ -0,0 +1,211 @@
1
+ require_relative 'fhir_resource_navigation'
2
+
3
+ module CarinForBlueButtonTestKit
4
+ module MustSupportTest
5
+ extend Forwardable
6
+ include FHIRResourceNavigation
7
+
8
+ def_delegators 'self.class', :metadata
9
+
10
+ def all_scratch_resources
11
+ scratch_resources[:all]
12
+ end
13
+
14
+ def perform_must_support_test(resources)
15
+ skip_if resources.blank?, "No #{resource_type} resources were found"
16
+
17
+ missing_elements(resources)
18
+ missing_slices(resources)
19
+ missing_extensions(resources)
20
+
21
+ handle_must_support_choices if metadata.must_supports[:choices].present?
22
+
23
+ if (missing_elements + missing_slices + missing_extensions).length.zero?
24
+ pass
25
+ end
26
+
27
+ skip "Could not find #{missing_must_support_strings.join(', ')} in the #{resources.length} " \
28
+ "provided #{resource_type} resource(s)"
29
+ end
30
+
31
+ def handle_must_support_choices
32
+ missing_elements.delete_if do |element|
33
+ choices = metadata.must_supports[:choices].find { |choice| choice[:paths]&.include?(element[:path]) }
34
+ is_any_choice_supported?(choices)
35
+ end
36
+
37
+ missing_extensions.delete_if do |extension|
38
+ choices = metadata.must_supports[:choices].find { |choice| choice[:extension_ids]&.include?(extension[:id]) }
39
+ is_any_choice_supported?(choices)
40
+ end
41
+
42
+ missing_slices.delete_if do |slice|
43
+ choices = metadata.must_supports[:choices].find { |choice| choice[:slice_names]&.include?(slice[:name]) }
44
+ is_any_choice_supported?(choices)
45
+ end
46
+ end
47
+
48
+ def is_any_choice_supported? (choices)
49
+ choices.present? &&
50
+ (
51
+ choices[:paths]&.any? { |path| missing_elements.none? { |element| element[:path] == path } } ||
52
+ choices[:extension_ids]&.any? { |extension_id| missing_extensions.none? { |extension| extension[:id] == extension_id} } ||
53
+ choices[:slice_names]&.any? { |slice_name| missing_slices.none? { |slice| slice[:name] == slice_name} }
54
+ )
55
+ end
56
+
57
+ def missing_must_support_strings
58
+ missing_elements.map { |element_definition| missing_element_string(element_definition) } +
59
+ missing_slices.map { |slice_definition| slice_definition[:name] } +
60
+ missing_extensions.map { |extension_definition| extension_definition[:id] }
61
+ end
62
+
63
+ def missing_element_string(element_definition)
64
+ if element_definition[:fixed_value].present?
65
+ "#{element_definition[:path]}:#{element_definition[:fixed_value]}"
66
+ else
67
+ element_definition[:path]
68
+ end
69
+ end
70
+
71
+ def exclude_uscdi_only_test?
72
+ config.options[:exclude_uscdi_only_test] == true
73
+ end
74
+
75
+ def must_support_extensions
76
+ if exclude_uscdi_only_test?
77
+ metadata.must_supports[:extensions].reject{ |extension| extension[:uscdi_only] }
78
+ else
79
+ metadata.must_supports[:extensions]
80
+ end
81
+ end
82
+
83
+ def missing_extensions(resources = [])
84
+ @missing_extensions ||=
85
+ must_support_extensions.select do |extension_definition|
86
+ resources.none? do |resource|
87
+ resource.extension.any? { |extension| extension.url == extension_definition[:url] }
88
+ end
89
+ end
90
+ end
91
+
92
+ def must_support_elements
93
+ if exclude_uscdi_only_test?
94
+ metadata.must_supports[:elements].reject{ |element| element[:uscdi_only] }
95
+ else
96
+ metadata.must_supports[:elements]
97
+ end
98
+ end
99
+
100
+ def missing_elements(resources = [])
101
+ @missing_elements ||=
102
+ must_support_elements.select do |element_definition|
103
+ resources.none? do |resource|
104
+ path = element_definition[:path] #.delete_suffix('[x]')
105
+ value_found = find_a_value_at(resource.source_hash, path) do |value|
106
+ value_without_extensions =
107
+ value.respond_to?(:to_hash) ? value.to_hash.reject { |key, _| key == 'extension' } : value
108
+
109
+ (value_without_extensions.present? || value_without_extensions == false) &&
110
+ (element_definition[:fixed_value].blank? || value == element_definition[:fixed_value])
111
+
112
+ end
113
+
114
+ # Note that false.present? => false, which is why we need to add this extra check
115
+ value_found.present? || value_found == false
116
+ end
117
+ end
118
+
119
+ @missing_elements
120
+ end
121
+
122
+ def must_support_slices
123
+ if exclude_uscdi_only_test?
124
+ metadata.must_supports[:slices].reject{ |slice| slice[:uscdi_only] }
125
+ else
126
+ metadata.must_supports[:slices]
127
+ end
128
+ end
129
+
130
+ def missing_slices(resources = [])
131
+ @missing_slices ||=
132
+ must_support_slices.select do |slice|
133
+ resources.none? do |resource|
134
+ path = slice[:path] # .delete_suffix('[x]')
135
+ find_slice(resource.source_hash, path, slice[:discriminator]).present?
136
+ end
137
+ end
138
+ end
139
+
140
+ def find_slice(resource, path, discriminator)
141
+ find_a_value_at(resource, path) do |element|
142
+ case discriminator[:type]
143
+ when 'patternCodeableConcept'
144
+ coding_path = discriminator[:path].present? ? "#{discriminator[:path]}.coding" : 'coding'
145
+ find_a_value_at(element, coding_path) do |coding|
146
+ coding[:code.to_s] == discriminator[:code] && coding[:system.to_s] == discriminator[:system]
147
+ end
148
+ when 'patternCoding'
149
+ coding_path = discriminator[:path].present? ? discriminator[:path] : ''
150
+ find_a_value_at(element, coding_path) do |coding|
151
+ coding[:code.to_s] == discriminator[:code] && coding[:system.to_s] == discriminator[:system]
152
+ end
153
+ when 'patternIdentifier'
154
+ find_a_value_at(element, discriminator[:path]) { |identifier| identifier[:system.to_s] == discriminator[:system] }
155
+ when 'value'
156
+ values = discriminator[:values].map { |value| value.merge(path: value[:path].split('.')) }
157
+ find_slice_by_values(element, values)
158
+ when 'type'
159
+ case discriminator[:code]
160
+ when 'Date'
161
+ begin
162
+ Date.parse(element)
163
+ rescue ArgumentError
164
+ false
165
+ end
166
+ when 'DateTime'
167
+ begin
168
+ DateTime.parse(element)
169
+ rescue ArgumentError
170
+ false
171
+ end
172
+ when 'String'
173
+ element.is_a? String
174
+ else
175
+ element.is_a? FHIR.const_get(discriminator[:code])
176
+ end
177
+ when 'requiredBinding'
178
+ coding_path = discriminator[:path].present? ? "#{discriminator[:path]}.coding" : 'coding'
179
+ find_a_value_at(element, coding_path) {|coding| discriminator[:values].include?(coding[:code.to_s]) }
180
+ end
181
+ end
182
+ end
183
+
184
+ def find_slice_by_values(element, value_definitions)
185
+ path_prefixes = value_definitions.map { |value_definition| value_definition[:path].first }.uniq
186
+ Array.wrap(element).find do |el|
187
+ path_prefixes.all? do |path_prefix|
188
+ value_definitions_for_path =
189
+ value_definitions
190
+ .select { |value_definition| value_definition[:path].first == path_prefix }
191
+ .each { |value_definition| value_definition[:path].shift }
192
+
193
+ find_a_value_at(el, path_prefix) do |el_found|
194
+ child_element_value_definitions, current_element_value_definitions =
195
+ value_definitions_for_path.partition { |value_definition| value_definition[:path].present? }
196
+
197
+ current_element_values_match =
198
+ current_element_value_definitions
199
+ .all? { |value_definition| value_definition[:value] == el_found }
200
+
201
+ child_element_values_match =
202
+ child_element_value_definitions.present? ?
203
+ find_slice_by_values(el_found, child_element_value_definitions) : true
204
+
205
+ current_element_values_match && child_element_values_match
206
+ end
207
+ end
208
+ end
209
+ end
210
+ end
211
+ end
@@ -0,0 +1,51 @@
1
+ module CarinForBlueButtonTestKit
2
+ module ReadTest
3
+ def all_scratch_resources
4
+ scratch_resources[:all] ||= []
5
+ end
6
+
7
+ def perform_read_test(resources, reply_handler = nil)
8
+ skip_if resources.blank?, no_resources_skip_message
9
+
10
+ if config.options[:read_all_resources]
11
+ resources.each do |id|
12
+ fhir_read(resource_type, id)
13
+ read_and_validate(resource)
14
+ end
15
+ else
16
+ fhir_read(resource_type, resources.first)
17
+ read_and_validate(resource)
18
+ end
19
+ end
20
+
21
+ def read_and_validate(resource_to_read)
22
+ id = resource_id(resource_to_read)
23
+
24
+ assert_response_status(200)
25
+ assert_resource_type(resource_type, resource: resource_to_read)
26
+ assert resource.id.present? && resource.id == id, bad_resource_id_message(id)
27
+
28
+ if resource_to_read.is_a?(FHIR::Model)
29
+ all_scratch_resources << resource
30
+ end
31
+ end
32
+
33
+ def resource_id(resource)
34
+ resource.is_a?(FHIR::Reference) ? resource.reference.split('/').last : resource.id
35
+ end
36
+
37
+ def no_resources_skip_message
38
+ "No #{resource_type} resources appear to be available. " \
39
+ 'Please use patients with more information.'
40
+ end
41
+
42
+ def bad_resource_id_message(expected_id)
43
+ "Expected resource to have id: `#{expected_id.inspect}`, but found `#{resource.id.inspect}`"
44
+ end
45
+
46
+ def resource_class
47
+ FHIR.const_get(resource_type)
48
+ end
49
+ end
50
+ end
51
+