us_core_test_kit 0.2.2 → 0.2.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (154) hide show
  1. checksums.yaml +4 -4
  2. data/lib/us_core_test_kit/fhir_resource_navigation.rb +11 -3
  3. data/lib/us_core_test_kit/generated/v3.1.1/allergy_intolerance/allergy_intolerance_validation_test.rb +1 -0
  4. data/lib/us_core_test_kit/generated/v3.1.1/allergy_intolerance/metadata.yml +1 -0
  5. data/lib/us_core_test_kit/generated/v3.1.1/bodyheight/bodyheight_validation_test.rb +1 -0
  6. data/lib/us_core_test_kit/generated/v3.1.1/bodyheight/metadata.yml +1 -0
  7. data/lib/us_core_test_kit/generated/v3.1.1/bodytemp/bodytemp_validation_test.rb +1 -0
  8. data/lib/us_core_test_kit/generated/v3.1.1/bodytemp/metadata.yml +1 -0
  9. data/lib/us_core_test_kit/generated/v3.1.1/bodyweight/bodyweight_validation_test.rb +1 -0
  10. data/lib/us_core_test_kit/generated/v3.1.1/bodyweight/metadata.yml +1 -0
  11. data/lib/us_core_test_kit/generated/v3.1.1/bp/bp_validation_test.rb +1 -0
  12. data/lib/us_core_test_kit/generated/v3.1.1/bp/metadata.yml +1 -0
  13. data/lib/us_core_test_kit/generated/v3.1.1/care_plan/care_plan_validation_test.rb +1 -0
  14. data/lib/us_core_test_kit/generated/v3.1.1/care_plan/metadata.yml +1 -0
  15. data/lib/us_core_test_kit/generated/v3.1.1/care_team/care_team_validation_test.rb +1 -0
  16. data/lib/us_core_test_kit/generated/v3.1.1/care_team/metadata.yml +1 -0
  17. data/lib/us_core_test_kit/generated/v3.1.1/condition/condition_validation_test.rb +1 -0
  18. data/lib/us_core_test_kit/generated/v3.1.1/condition/metadata.yml +1 -0
  19. data/lib/us_core_test_kit/generated/v3.1.1/device/device_must_support_test.rb +1 -2
  20. data/lib/us_core_test_kit/generated/v3.1.1/device/device_validation_test.rb +1 -0
  21. data/lib/us_core_test_kit/generated/v3.1.1/device/metadata.yml +1 -0
  22. data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_lab/diagnostic_report_lab_validation_test.rb +1 -0
  23. data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_lab/metadata.yml +1 -0
  24. data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_note/diagnostic_report_note_validation_test.rb +1 -0
  25. data/lib/us_core_test_kit/generated/v3.1.1/diagnostic_report_note/metadata.yml +1 -0
  26. data/lib/us_core_test_kit/generated/v3.1.1/document_reference/document_reference_must_support_test.rb +1 -2
  27. data/lib/us_core_test_kit/generated/v3.1.1/document_reference/document_reference_validation_test.rb +1 -0
  28. data/lib/us_core_test_kit/generated/v3.1.1/document_reference/metadata.yml +1 -0
  29. data/lib/us_core_test_kit/generated/v3.1.1/encounter/encounter_validation_test.rb +1 -0
  30. data/lib/us_core_test_kit/generated/v3.1.1/encounter/metadata.yml +1 -0
  31. data/lib/us_core_test_kit/generated/v3.1.1/goal/goal_validation_test.rb +1 -0
  32. data/lib/us_core_test_kit/generated/v3.1.1/goal/metadata.yml +1 -0
  33. data/lib/us_core_test_kit/generated/v3.1.1/head_circumference/head_circumference_validation_test.rb +1 -0
  34. data/lib/us_core_test_kit/generated/v3.1.1/head_circumference/metadata.yml +1 -0
  35. data/lib/us_core_test_kit/generated/v3.1.1/heartrate/heartrate_validation_test.rb +1 -0
  36. data/lib/us_core_test_kit/generated/v3.1.1/heartrate/metadata.yml +1 -0
  37. data/lib/us_core_test_kit/generated/v3.1.1/immunization/immunization_validation_test.rb +1 -0
  38. data/lib/us_core_test_kit/generated/v3.1.1/immunization/metadata.yml +1 -0
  39. data/lib/us_core_test_kit/generated/v3.1.1/medication_request/medication_request_validation_test.rb +1 -0
  40. data/lib/us_core_test_kit/generated/v3.1.1/medication_request/medication_validation_test.rb +1 -0
  41. data/lib/us_core_test_kit/generated/v3.1.1/medication_request/metadata.yml +1 -0
  42. data/lib/us_core_test_kit/generated/v3.1.1/metadata.yml +32 -0
  43. data/lib/us_core_test_kit/generated/v3.1.1/observation_lab/metadata.yml +1 -0
  44. data/lib/us_core_test_kit/generated/v3.1.1/observation_lab/observation_lab_validation_test.rb +1 -0
  45. data/lib/us_core_test_kit/generated/v3.1.1/organization/metadata.yml +1 -0
  46. data/lib/us_core_test_kit/generated/v3.1.1/organization/organization_validation_test.rb +1 -0
  47. data/lib/us_core_test_kit/generated/v3.1.1/patient/metadata.yml +1 -0
  48. data/lib/us_core_test_kit/generated/v3.1.1/patient/patient_validation_test.rb +1 -0
  49. data/lib/us_core_test_kit/generated/v3.1.1/pediatric_bmi_for_age/metadata.yml +1 -0
  50. data/lib/us_core_test_kit/generated/v3.1.1/pediatric_bmi_for_age/pediatric_bmi_for_age_validation_test.rb +1 -0
  51. data/lib/us_core_test_kit/generated/v3.1.1/pediatric_weight_for_height/metadata.yml +1 -0
  52. data/lib/us_core_test_kit/generated/v3.1.1/pediatric_weight_for_height/pediatric_weight_for_height_validation_test.rb +1 -0
  53. data/lib/us_core_test_kit/generated/v3.1.1/practitioner/metadata.yml +1 -0
  54. data/lib/us_core_test_kit/generated/v3.1.1/practitioner/practitioner_validation_test.rb +1 -0
  55. data/lib/us_core_test_kit/generated/v3.1.1/procedure/metadata.yml +1 -0
  56. data/lib/us_core_test_kit/generated/v3.1.1/procedure/procedure_validation_test.rb +1 -0
  57. data/lib/us_core_test_kit/generated/v3.1.1/provenance/metadata.yml +1 -0
  58. data/lib/us_core_test_kit/generated/v3.1.1/provenance/provenance_validation_test.rb +1 -0
  59. data/lib/us_core_test_kit/generated/v3.1.1/pulse_oximetry/metadata.yml +1 -0
  60. data/lib/us_core_test_kit/generated/v3.1.1/pulse_oximetry/pulse_oximetry_validation_test.rb +1 -0
  61. data/lib/us_core_test_kit/generated/v3.1.1/resprate/metadata.yml +1 -0
  62. data/lib/us_core_test_kit/generated/v3.1.1/resprate/resprate_validation_test.rb +1 -0
  63. data/lib/us_core_test_kit/generated/v3.1.1/smokingstatus/metadata.yml +1 -0
  64. data/lib/us_core_test_kit/generated/v3.1.1/smokingstatus/smokingstatus_validation_test.rb +1 -0
  65. data/lib/us_core_test_kit/generated/v3.1.1/us_core_test_suite.rb +2 -2
  66. data/lib/us_core_test_kit/generated/v4.0.0/allergy_intolerance/allergy_intolerance_validation_test.rb +1 -0
  67. data/lib/us_core_test_kit/generated/v4.0.0/allergy_intolerance/metadata.yml +1 -0
  68. data/lib/us_core_test_kit/generated/v4.0.0/blood_pressure/blood_pressure_validation_test.rb +1 -0
  69. data/lib/us_core_test_kit/generated/v4.0.0/blood_pressure/metadata.yml +1 -0
  70. data/lib/us_core_test_kit/generated/v4.0.0/bmi/bmi_validation_test.rb +1 -0
  71. data/lib/us_core_test_kit/generated/v4.0.0/bmi/metadata.yml +1 -0
  72. data/lib/us_core_test_kit/generated/v4.0.0/body_height/body_height_validation_test.rb +1 -0
  73. data/lib/us_core_test_kit/generated/v4.0.0/body_height/metadata.yml +1 -0
  74. data/lib/us_core_test_kit/generated/v4.0.0/body_temperature/body_temperature_validation_test.rb +1 -0
  75. data/lib/us_core_test_kit/generated/v4.0.0/body_temperature/metadata.yml +1 -0
  76. data/lib/us_core_test_kit/generated/v4.0.0/body_weight/body_weight_validation_test.rb +1 -0
  77. data/lib/us_core_test_kit/generated/v4.0.0/body_weight/metadata.yml +1 -0
  78. data/lib/us_core_test_kit/generated/v4.0.0/care_plan/care_plan_validation_test.rb +1 -0
  79. data/lib/us_core_test_kit/generated/v4.0.0/care_plan/metadata.yml +1 -0
  80. data/lib/us_core_test_kit/generated/v4.0.0/care_team/care_team_validation_test.rb +1 -0
  81. data/lib/us_core_test_kit/generated/v4.0.0/care_team/metadata.yml +1 -0
  82. data/lib/us_core_test_kit/generated/v4.0.0/condition/condition_validation_test.rb +1 -0
  83. data/lib/us_core_test_kit/generated/v4.0.0/condition/metadata.yml +1 -0
  84. data/lib/us_core_test_kit/generated/v4.0.0/device/device_validation_test.rb +1 -0
  85. data/lib/us_core_test_kit/generated/v4.0.0/device/metadata.yml +1 -0
  86. data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_lab/diagnostic_report_lab_validation_test.rb +1 -0
  87. data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_lab/metadata.yml +1 -0
  88. data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_note/diagnostic_report_note_validation_test.rb +1 -0
  89. data/lib/us_core_test_kit/generated/v4.0.0/diagnostic_report_note/metadata.yml +1 -0
  90. data/lib/us_core_test_kit/generated/v4.0.0/document_reference/document_reference_must_support_test.rb +1 -2
  91. data/lib/us_core_test_kit/generated/v4.0.0/document_reference/document_reference_validation_test.rb +1 -0
  92. data/lib/us_core_test_kit/generated/v4.0.0/document_reference/metadata.yml +1 -0
  93. data/lib/us_core_test_kit/generated/v4.0.0/encounter/encounter_must_support_test.rb +2 -4
  94. data/lib/us_core_test_kit/generated/v4.0.0/encounter/encounter_validation_test.rb +1 -0
  95. data/lib/us_core_test_kit/generated/v4.0.0/encounter/metadata.yml +1 -0
  96. data/lib/us_core_test_kit/generated/v4.0.0/goal/goal_validation_test.rb +1 -0
  97. data/lib/us_core_test_kit/generated/v4.0.0/goal/metadata.yml +1 -0
  98. data/lib/us_core_test_kit/generated/v4.0.0/head_circumference/head_circumference_validation_test.rb +1 -0
  99. data/lib/us_core_test_kit/generated/v4.0.0/head_circumference/metadata.yml +1 -0
  100. data/lib/us_core_test_kit/generated/v4.0.0/head_circumference_percentile/head_circumference_percentile_validation_test.rb +1 -0
  101. data/lib/us_core_test_kit/generated/v4.0.0/head_circumference_percentile/metadata.yml +1 -0
  102. data/lib/us_core_test_kit/generated/v4.0.0/heart_rate/heart_rate_validation_test.rb +1 -0
  103. data/lib/us_core_test_kit/generated/v4.0.0/heart_rate/metadata.yml +1 -0
  104. data/lib/us_core_test_kit/generated/v4.0.0/immunization/immunization_validation_test.rb +1 -0
  105. data/lib/us_core_test_kit/generated/v4.0.0/immunization/metadata.yml +1 -0
  106. data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_request_must_support_test.rb +1 -2
  107. data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_request_validation_test.rb +1 -0
  108. data/lib/us_core_test_kit/generated/v4.0.0/medication_request/medication_validation_test.rb +1 -0
  109. data/lib/us_core_test_kit/generated/v4.0.0/medication_request/metadata.yml +1 -0
  110. data/lib/us_core_test_kit/generated/v4.0.0/metadata.yml +47 -2
  111. data/lib/us_core_test_kit/generated/v4.0.0/observation_lab/metadata.yml +1 -0
  112. data/lib/us_core_test_kit/generated/v4.0.0/observation_lab/observation_lab_validation_test.rb +1 -0
  113. data/lib/us_core_test_kit/generated/v4.0.0/organization/metadata.yml +1 -0
  114. data/lib/us_core_test_kit/generated/v4.0.0/organization/organization_validation_test.rb +1 -0
  115. data/lib/us_core_test_kit/generated/v4.0.0/patient/metadata.yml +13 -1
  116. data/lib/us_core_test_kit/generated/v4.0.0/patient/patient_must_support_test.rb +8 -6
  117. data/lib/us_core_test_kit/generated/v4.0.0/patient/patient_validation_test.rb +1 -0
  118. data/lib/us_core_test_kit/generated/v4.0.0/pediatric_bmi_for_age/metadata.yml +1 -0
  119. data/lib/us_core_test_kit/generated/v4.0.0/pediatric_bmi_for_age/pediatric_bmi_for_age_validation_test.rb +1 -0
  120. data/lib/us_core_test_kit/generated/v4.0.0/pediatric_weight_for_height/metadata.yml +1 -0
  121. data/lib/us_core_test_kit/generated/v4.0.0/pediatric_weight_for_height/pediatric_weight_for_height_validation_test.rb +1 -0
  122. data/lib/us_core_test_kit/generated/v4.0.0/practitioner/metadata.yml +1 -0
  123. data/lib/us_core_test_kit/generated/v4.0.0/practitioner/practitioner_validation_test.rb +1 -0
  124. data/lib/us_core_test_kit/generated/v4.0.0/procedure/metadata.yml +1 -0
  125. data/lib/us_core_test_kit/generated/v4.0.0/procedure/procedure_validation_test.rb +1 -0
  126. data/lib/us_core_test_kit/generated/v4.0.0/provenance/metadata.yml +1 -1
  127. data/lib/us_core_test_kit/generated/v4.0.0/provenance/provenance_validation_test.rb +1 -0
  128. data/lib/us_core_test_kit/generated/v4.0.0/pulse_oximetry/metadata.yml +1 -0
  129. data/lib/us_core_test_kit/generated/v4.0.0/pulse_oximetry/pulse_oximetry_validation_test.rb +1 -0
  130. data/lib/us_core_test_kit/generated/v4.0.0/respiratory_rate/metadata.yml +1 -0
  131. data/lib/us_core_test_kit/generated/v4.0.0/respiratory_rate/respiratory_rate_validation_test.rb +1 -0
  132. data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/metadata.yml +1 -0
  133. data/lib/us_core_test_kit/generated/v4.0.0/smokingstatus/smokingstatus_validation_test.rb +1 -0
  134. data/lib/us_core_test_kit/generated/v4.0.0/us_core_test_suite.rb +2 -2
  135. data/lib/us_core_test_kit/generator/group_metadata.rb +1 -0
  136. data/lib/us_core_test_kit/generator/group_metadata_extractor.rb +5 -0
  137. data/lib/us_core_test_kit/generator/ig_loader.rb +12 -5
  138. data/lib/us_core_test_kit/generator/must_support_metadata_extractor.rb +23 -22
  139. data/lib/us_core_test_kit/generator/must_support_test_generator.rb +26 -3
  140. data/lib/us_core_test_kit/generator/validation_test_generator.rb +4 -0
  141. data/lib/us_core_test_kit/generator.rb +9 -14
  142. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodyheight.json +0 -0
  143. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodytemp.json +0 -0
  144. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bodyweight.json +0 -0
  145. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-bp.json +0 -0
  146. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-heartrate.json +0 -0
  147. data/lib/us_core_test_kit/igs/{v311 → us_core_311}/StructureDefinition-resprate.json +0 -0
  148. data/lib/us_core_test_kit/igs/{v311/package.tgz → us_core_311.tgz} +0 -0
  149. data/lib/us_core_test_kit/igs/{v400/package.tgz → us_core_400.tgz} +0 -0
  150. data/lib/us_core_test_kit/must_support_test.rb +25 -3
  151. data/lib/us_core_test_kit/search_test.rb +107 -48
  152. data/lib/us_core_test_kit/validation_test.rb +4 -2
  153. data/lib/us_core_test_kit/version.rb +3 -1
  154. metadata +13 -13
@@ -20,9 +20,6 @@ module USCoreTestKit
20
20
  * Patient.address.state
21
21
  * Patient.birthDate
22
22
  * Patient.communication.language
23
- * Patient.extension:birthsex
24
- * Patient.extension:ethnicity
25
- * Patient.extension:race
26
23
  * Patient.gender
27
24
  * Patient.identifier
28
25
  * Patient.identifier.system
@@ -30,12 +27,17 @@ module USCoreTestKit
30
27
  * Patient.name
31
28
  * Patient.name.family
32
29
  * Patient.name.given
33
- * Patient.name.suffix
34
- * Patient.name.use
35
- * Patient.telecom
36
30
  * Patient.telecom.system
37
31
  * Patient.telecom.use
38
32
  * Patient.telecom.value
33
+
34
+ For ONC USCDI requirements, each Patient must support the following additional elements:
35
+
36
+ * Patient.extension:birthsex
37
+ * Patient.extension:ethnicity
38
+ * Patient.extension:race
39
+ * Patient.name.period.end or Patient.name.use
40
+ * Patient.name.suffix
39
41
  )
40
42
 
41
43
  id :us_core_v400_patient_must_support_test
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Observation
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/pediatric-bmi-for-age
8
8
  :profile_name: US Core Pediatric BMI for Age Observation Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Pediatric BMI for Age Observation
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Pediatric BMI for Age Observation Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/pediatric-bmi-for-age',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Observation
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/pediatric-weight-for-height
8
8
  :profile_name: US Core Pediatric Weight for Height Observation Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Pediatric Weight for Height Observation
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Pediatric Weight for Height Observation Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/pediatric-weight-for-height',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Practitioner
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner
8
8
  :profile_name: US Core Practitioner Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Practitioner
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Practitioner Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Procedure
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-procedure
8
8
  :profile_name: US Core Procedure Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Procedure
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Procedure Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-procedure',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Provenance
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-provenance
8
8
  :profile_name: US Core Provenance Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Provenance
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Provenance Profile.
@@ -64,7 +65,6 @@
64
65
  - Reference
65
66
  :target_profiles:
66
67
  - http://hl7.org/fhir/us/core/StructureDefinition/us-core-practitioner
67
- - http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization
68
68
  - :path: agent.onBehalfOf
69
69
  :types:
70
70
  - Reference
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-provenance',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Observation
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-pulse-oximetry
8
8
  :profile_name: US Core Pulse Oximetry Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Pulse Oximetry
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Pulse Oximetry Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-pulse-oximetry',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Observation
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-respiratory-rate
8
8
  :profile_name: US Core Respiratory Rate Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Respiratory Rate
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Respiratory Rate Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-respiratory-rate',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -6,6 +6,7 @@
6
6
  :resource: Observation
7
7
  :profile_url: http://hl7.org/fhir/us/core/StructureDefinition/us-core-smokingstatus
8
8
  :profile_name: US Core Smoking Status Observation Profile
9
+ :profile_version: 4.0.0
9
10
  :title: Smoking Status Observation
10
11
  :short_description: Verify support for the server capabilities required by the US
11
12
  Core Smoking Status Observation Profile.
@@ -32,6 +32,7 @@ fail if their code/system are not found in the valueset.
32
32
  run do
33
33
  perform_validation_test(scratch_resources[:all] || [],
34
34
  'http://hl7.org/fhir/us/core/StructureDefinition/us-core-smokingstatus',
35
+ '4.0.0',
35
36
  skip_if_empty: true)
36
37
  end
37
38
  end
@@ -44,8 +44,8 @@ module USCoreTestKit
44
44
  VALIDATION_MESSAGE_FILTERS = [
45
45
  %r{Sub-extension url 'introspect' is not defined by the Extension http://fhir-registry\.smarthealthit\.org/StructureDefinition/oauth-uris$},
46
46
  %r{Sub-extension url 'revoke' is not defined by the Extension http://fhir-registry\.smarthealthit\.org/StructureDefinition/oauth-uris$},
47
- /^Observation\.effective\.ofType\(Period\): vs-1:/, # Invalid invariant in FHIR v4.0.1
48
- /^Observation\.effective\.ofType\(Period\): us-core-1:/ # Invalid invariant in US Core v3.1.1
47
+ /Observation\.effective\.ofType\(Period\): vs-1:/, # Invalid invariant in FHIR v4.0.1
48
+ /Observation\.effective\.ofType\(Period\): us-core-1:/ # Invalid invariant in US Core v3.1.1
49
49
  ].freeze
50
50
 
51
51
  def self.metadata
@@ -9,6 +9,7 @@ module USCoreTestKit
9
9
  :resource,
10
10
  :profile_url,
11
11
  :profile_name,
12
+ :profile_version,
12
13
  :title,
13
14
  :short_description,
14
15
  :interactions,
@@ -32,6 +32,7 @@ module USCoreTestKit
32
32
  resource: resource,
33
33
  profile_url: profile_url,
34
34
  profile_name: profile_name,
35
+ profile_version: profile_version,
35
36
  title: title,
36
37
  short_description: short_description,
37
38
  interactions: interactions,
@@ -169,6 +170,10 @@ module USCoreTestKit
169
170
  profile.title.gsub(' ', ' ')
170
171
  end
171
172
 
173
+ def profile_version
174
+ profile.version
175
+ end
176
+
172
177
  def title
173
178
  profile.title.gsub(/US\s*Core\s*/, '').gsub(/\s*Profile/, '').strip
174
179
  end
@@ -1,5 +1,6 @@
1
1
  require 'active_support/all'
2
2
  require 'fhir_models'
3
+ require 'pathname'
3
4
  require 'rubygems/package'
4
5
  require 'zlib'
5
6
  require_relative 'ig_resources'
@@ -7,10 +8,10 @@ require_relative 'ig_resources'
7
8
  module USCoreTestKit
8
9
  class Generator
9
10
  class IGLoader
10
- attr_accessor :base_ig_directory
11
+ attr_accessor :ig_file_name
11
12
 
12
- def initialize(base_ig_directory)
13
- self.base_ig_directory = base_ig_directory
13
+ def initialize(ig_file_name)
14
+ self.ig_file_name = ig_file_name
14
15
  end
15
16
 
16
17
  def ig_resources
@@ -23,7 +24,9 @@ module USCoreTestKit
23
24
  end
24
25
 
25
26
  def load_ig
26
- tar = Gem::Package::TarReader.new(Zlib::GzipReader.open(File.join(base_ig_directory, 'package.tgz')))
27
+ tar = Gem::Package::TarReader.new(
28
+ Zlib::GzipReader.open(ig_file_name)
29
+ )
27
30
 
28
31
  tar.each do |entry|
29
32
  next if entry.directory?
@@ -49,7 +52,11 @@ module USCoreTestKit
49
52
  end
50
53
 
51
54
  def load_standalone_resources
52
- Dir.glob(File.join(base_ig_directory, '*.json')).each do |file_path|
55
+ ig_directory = ig_file_name.chomp('.tgz')
56
+
57
+ return ig_resources unless File.exist? ig_directory
58
+
59
+ Dir.glob(File.join(ig_directory, '*.json')).each do |file_path|
53
60
  begin
54
61
  resource = FHIR.from_contents(File.read(file_path))
55
62
  next if resource.nil?
@@ -277,7 +277,6 @@ module USCoreTestKit
277
277
  when '4.0.0'
278
278
  add_device_distinct_identifier
279
279
  add_patient_uscdi_elements
280
- add_provenance_agent_who
281
280
  end
282
281
  end
283
282
 
@@ -344,18 +343,23 @@ module USCoreTestKit
344
343
  def add_must_support_choices
345
344
  choices = []
346
345
 
347
- choices << {paths: ['content.attachment.data', 'content.attachment.url']} if profile.type == 'DocumentReference'
346
+ choices << { paths: ['content.attachment.data', 'content.attachment.url'] } if profile.type == 'DocumentReference'
348
347
 
349
348
  case profile.version
350
349
  when '3.1.1'
351
- choices << {paths: ['udiCarrier.carrierAIDC', 'udiCarrier.carrierHRF']} if profile.type == 'Device'
350
+ choices << { paths: ['udiCarrier.carrierAIDC', 'udiCarrier.carrierHRF'] } if profile.type == 'Device'
352
351
  when '4.0.0'
353
352
  case profile.type
354
353
  when 'Encounter'
355
- choices << {paths: ['reasonCode', 'reasonReference']}
356
- choices << {paths: ['location.location', 'serviceProvider']}
354
+ choices << { paths: ['reasonCode', 'reasonReference'] }
355
+ choices << { paths: ['location.location', 'serviceProvider'] }
357
356
  when 'MedicationRequest'
358
- choices << {paths: ['reportedBoolean', 'reportedReference']}
357
+ choices << { paths: ['reportedBoolean', 'reportedReference'] }
358
+ when 'Patient'
359
+ choices << {
360
+ paths: ['name.period.end', 'name.use'],
361
+ uscdi_only: true
362
+ }
359
363
  end
360
364
  end
361
365
 
@@ -377,37 +381,34 @@ module USCoreTestKit
377
381
  #US Core 4.0.0 Section 10.112.1.1 Additional USCDI v1 Requirement:
378
382
  @must_supports[:extensions] << {
379
383
  id: 'Patient.extension:race',
380
- url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race'
384
+ url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-race',
385
+ uscdi_only: true
381
386
  }
382
387
  @must_supports[:extensions] << {
383
388
  id: 'Patient.extension:ethnicity',
384
- url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity'
389
+ url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity',
390
+ uscdi_only: true
385
391
  }
386
392
  @must_supports[:extensions] << {
387
393
  id: 'Patient.extension:birthsex',
388
- url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex'
394
+ url: 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex',
395
+ uscdi_only: true
389
396
  }
390
397
  @must_supports[:elements] << {
391
- path: 'telecom'
398
+ path: 'name.suffix',
399
+ uscdi_only: true
392
400
  }
393
401
  @must_supports[:elements] << {
394
- path: 'name.suffix'
402
+ path: 'name.use',
403
+ fixed_value: 'old',
404
+ uscdi_only: true
395
405
  }
396
406
  @must_supports[:elements] << {
397
- path: 'name.use',
398
- fixed_value: 'old'
407
+ path: 'name.period.end',
408
+ uscdi_only: true
399
409
  }
400
410
  end
401
411
  end
402
-
403
- def add_provenance_agent_who
404
- # FHIR-36344 US Core 4.0.0 mistakenly not lable us-core-organization as MS for Provenance.agent.who
405
- # This will be fixed in US Core 5.0.0
406
- if profile.type == 'Provenance'
407
- target_element = @must_supports[:elements].find { |element| element[:path] == 'agent.who'}
408
- target_element[:target_profiles] << 'http://hl7.org/fhir/us/core/StructureDefinition/us-core-organization'
409
- end
410
- end
411
412
  end
412
413
  end
413
414
  end
@@ -68,9 +68,32 @@ module USCoreTestKit
68
68
  end
69
69
 
70
70
  def must_support_list_string
71
- slice_names = group_metadata.must_supports[:slices].map { |slice| slice[:name] }
72
- element_names = group_metadata.must_supports[:elements].map { |slice| "#{resource_type}.#{slice[:path]}" }
73
- extension_names = group_metadata.must_supports[:extensions].map { |slice| slice[:id] }
71
+ build_must_support_list_string(false)
72
+ end
73
+
74
+ def uscdi_list_string
75
+ build_must_support_list_string(true)
76
+ end
77
+
78
+ def build_must_support_list_string(uscdi_only)
79
+ slice_names = group_metadata.must_supports[:slices]
80
+ .select { |slice| slice[:uscdi_only].presence == uscdi_only.presence }
81
+ .map { |slice| slice[:name] }
82
+
83
+ element_names = group_metadata.must_supports[:elements]
84
+ .select { |element| element[:uscdi_only].presence == uscdi_only.presence }
85
+ .map { |element| "#{resource_type}.#{element[:path]}" }
86
+
87
+ extension_names = group_metadata.must_supports[:extensions]
88
+ .select { |extension| extension[:uscdi_only].presence == uscdi_only.presence }
89
+ .map { |extension| extension[:id] }
90
+
91
+ group_metadata.must_supports[:choices]&.each do |choice|
92
+ next unless choice[:uscdi_only].presence == uscdi_only.presence
93
+ choice[:paths].each { |path| element_names.delete("#{resource_type}.#{path}") }
94
+ element_names << choice[:paths].map { |path| "#{resource_type}.#{path}" }.join(' or ')
95
+ end
96
+
74
97
  (slice_names + element_names + extension_names)
75
98
  .uniq
76
99
  .sort
@@ -64,6 +64,10 @@ module USCoreTestKit
64
64
  group_metadata.profile_name
65
65
  end
66
66
 
67
+ def profile_version
68
+ group_metadata.profile_version
69
+ end
70
+
67
71
  def test_id
68
72
  "us_core_#{group_metadata.reformatted_version}_#{profile_identifier}_validation_test"
69
73
  end
@@ -16,26 +16,21 @@ require_relative 'generator/validation_test_generator'
16
16
  module USCoreTestKit
17
17
  class Generator
18
18
  def self.generate
19
- base_ig_directory = File.join(Dir.pwd, 'lib', 'us_core_test_kit', 'igs')
20
- ig_directories =
21
- Dir.entries(base_ig_directory)
22
- .reject { |path| path.start_with? '.' }
23
- .map { |path| File.join(base_ig_directory, path) }
24
- .select { |path| File.directory? path }
25
-
26
- ig_directories.each do |ig_directory|
27
- new(ig_directory).generate
19
+ ig_packages = Dir.glob(File.join(Dir.pwd, 'lib', 'us_core_test_kit', 'igs', '*.tgz'))
20
+
21
+ ig_packages.each do |ig_package|
22
+ new(ig_package).generate
28
23
  end
29
24
  end
30
25
 
31
- attr_accessor :ig_resources, :ig_metadata, :ig_directory
26
+ attr_accessor :ig_resources, :ig_metadata, :ig_file_name
32
27
 
33
- def initialize(ig_directory)
34
- self.ig_directory = ig_directory
28
+ def initialize(ig_file_name)
29
+ self.ig_file_name = ig_file_name
35
30
  end
36
31
 
37
32
  def generate
38
- puts "Generating tests for IG in #{ig_directory}"
33
+ puts "Generating tests for IG #{File.basename(ig_file_name)}"
39
34
  load_ig_package
40
35
  extract_metadata
41
36
  generate_resource_list
@@ -68,7 +63,7 @@ module USCoreTestKit
68
63
 
69
64
  def load_ig_package
70
65
  FHIR.logger = Logger.new('/dev/null')
71
- self.ig_resources = IGLoader.new(ig_directory).load
66
+ self.ig_resources = IGLoader.new(ig_file_name).load
72
67
  end
73
68
 
74
69
  def generate_resource_list
@@ -36,8 +36,16 @@ module USCoreTestKit
36
36
  end
37
37
  end
38
38
 
39
+ def include_uscdi_only_test?
40
+ config.options[:include_uscdi_only_test] == true
41
+ end
42
+
39
43
  def must_support_extensions
40
- metadata.must_supports[:extensions]
44
+ if include_uscdi_only_test?
45
+ metadata.must_supports[:extensions]
46
+ else
47
+ metadata.must_supports[:extensions].reject{ |extension| extension[:uscdi_only] }
48
+ end
41
49
  end
42
50
 
43
51
  def missing_extensions(resources = [])
@@ -50,7 +58,11 @@ module USCoreTestKit
50
58
  end
51
59
 
52
60
  def must_support_elements
53
- metadata.must_supports[:elements]
61
+ if include_uscdi_only_test?
62
+ metadata.must_supports[:elements]
63
+ else
64
+ metadata.must_supports[:elements].reject{ |element| element[:uscdi_only] }
65
+ end
54
66
  end
55
67
 
56
68
  def missing_elements(resources = [])
@@ -85,7 +97,11 @@ module USCoreTestKit
85
97
  end
86
98
 
87
99
  def must_support_slices
88
- metadata.must_supports[:slices]
100
+ if include_uscdi_only_test?
101
+ metadata.must_supports[:slices]
102
+ else
103
+ metadata.must_supports[:slices].reject{ |slice| slice[:uscdi_only] }
104
+ end
89
105
  end
90
106
 
91
107
  def missing_slices(resources = [])
@@ -124,6 +140,12 @@ module USCoreTestKit
124
140
  rescue ArgumentError
125
141
  false
126
142
  end
143
+ when 'DateTime'
144
+ begin
145
+ DateTime.parse(element)
146
+ rescue ArgumentError
147
+ false
148
+ end
127
149
  when 'String'
128
150
  element.is_a? String
129
151
  else