uds_plus_test_kit 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +201 -0
  3. data/lib/uds_plus_test_kit/examples/manifest.json +84 -0
  4. data/lib/uds_plus_test_kit/examples/manifest_2.json +101 -0
  5. data/lib/uds_plus_test_kit/examples/manifest_not_deidentified.json +67 -0
  6. data/lib/uds_plus_test_kit/igs/package/CapabilityStatement-uds-plus-data-receiver-server.json +1 -0
  7. data/lib/uds_plus_test_kit/igs/package/CapabilityStatement-uds-plus-data-source.json +1 -0
  8. data/lib/uds_plus_test_kit/igs/package/CapabilityStatement-uds-plus-data-submitter-client.json +1 -0
  9. data/lib/uds_plus_test_kit/igs/package/CapabilityStatement-uds-plus-trust-service-provider.json +1 -0
  10. data/lib/uds_plus_test_kit/igs/package/CodeSystem-udsplus-agriculture-worker-status-codes.json +1 -0
  11. data/lib/uds_plus_test_kit/igs/package/CodeSystem-udsplus-housing-status-codes.json +1 -0
  12. data/lib/uds_plus_test_kit/igs/package/CodeSystem-udsplus-insurance-codes.json +1 -0
  13. data/lib/uds_plus_test_kit/igs/package/ImplementationGuide-udsplus.json +1 -0
  14. data/lib/uds_plus_test_kit/igs/package/OperationDefinition-import.json +1 -0
  15. data/lib/uds_plus_test_kit/igs/package/OperationDefinition-udsplus-de-identify.json +1 -0
  16. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-de-identified-uds-plus-patient.json +1 -0
  17. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-age-extension.json +1 -0
  18. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-agriculture-worker-status-extension.json +1 -0
  19. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-coverage.json +1 -0
  20. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-deidentify-data.json +1 -0
  21. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-diagnosis.json +1 -0
  22. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-encounter.json +1 -0
  23. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-housing-status-extension.json +1 -0
  24. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-import-manifest.json +1 -0
  25. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-income-observation.json +1 -0
  26. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-procedure.json +1 -0
  27. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-uds-plus-sexual-orientation-observation.json +1 -0
  28. data/lib/uds_plus_test_kit/igs/package/StructureDefinition-udsplus-agriculture-worker-status.json +1 -0
  29. data/lib/uds_plus_test_kit/igs/package/example/Condition-de-identified-example.json +1 -0
  30. data/lib/uds_plus_test_kit/igs/package/example/Condition-example.json +1 -0
  31. data/lib/uds_plus_test_kit/igs/package/example/Encounter-de-identified-example.json +1 -0
  32. data/lib/uds_plus_test_kit/igs/package/example/Encounter-example.json +1 -0
  33. data/lib/uds_plus_test_kit/igs/package/example/Parameters-example.json +1 -0
  34. data/lib/uds_plus_test_kit/igs/package/example/Patient-de-identified-example.json +1 -0
  35. data/lib/uds_plus_test_kit/igs/package/example/Patient-de-identified-smallpop-example.json +1 -0
  36. data/lib/uds_plus_test_kit/igs/package/example/Patient-example.json +1 -0
  37. data/lib/uds_plus_test_kit/igs/package/example/Patient-smallpop-example.json +1 -0
  38. data/lib/uds_plus_test_kit/igs/package/openapi/uds-plus-data-receiver-server.openapi.json +152 -0
  39. data/lib/uds_plus_test_kit/igs/package/openapi/uds-plus-data-source.openapi.json +152 -0
  40. data/lib/uds_plus_test_kit/igs/package/openapi/uds-plus-data-submitter-client.openapi.json +106 -0
  41. data/lib/uds_plus_test_kit/igs/package/openapi/uds-plus-trust-service-provider.openapi.json +152 -0
  42. data/lib/uds_plus_test_kit/igs/package/other/ig-r4.json +1 -0
  43. data/lib/uds_plus_test_kit/igs/package/other/validation-oo.json +1 -0
  44. data/lib/uds_plus_test_kit/igs/package/other/validation-summary.json +1 -0
  45. data/lib/uds_plus_test_kit/igs/package/package.json +27 -0
  46. data/lib/uds_plus_test_kit/input_resource_tests/read_coverage_test.rb +54 -0
  47. data/lib/uds_plus_test_kit/input_resource_tests/read_diagnosis_test.rb +54 -0
  48. data/lib/uds_plus_test_kit/input_resource_tests/read_encounter_test.rb +54 -0
  49. data/lib/uds_plus_test_kit/input_resource_tests/read_income_test.rb +54 -0
  50. data/lib/uds_plus_test_kit/input_resource_tests/read_patient_test.rb +54 -0
  51. data/lib/uds_plus_test_kit/input_resource_tests/read_procedure_test.rb +54 -0
  52. data/lib/uds_plus_test_kit/input_resource_tests/read_sexual_orientation_test.rb +54 -0
  53. data/lib/uds_plus_test_kit/input_resource_tests/resource_group.rb +51 -0
  54. data/lib/uds_plus_test_kit/manifest_tests/invalid_type_test.rb +40 -0
  55. data/lib/uds_plus_test_kit/manifest_tests/read_data_test.rb +75 -0
  56. data/lib/uds_plus_test_kit/manifest_tests/read_manifest_test.rb +51 -0
  57. data/lib/uds_plus_test_kit/manifest_tests/uds_plus_test_group.rb +39 -0
  58. data/lib/uds_plus_test_kit/manifest_tests/validate_manifest_test.rb +28 -0
  59. data/lib/uds_plus_test_kit/uds_plus_test_suite.rb +50 -0
  60. data/lib/uds_plus_test_kit/validate_coverage_test.rb +33 -0
  61. data/lib/uds_plus_test_kit/validate_diagnosis_test.rb +33 -0
  62. data/lib/uds_plus_test_kit/validate_encounter_test.rb +33 -0
  63. data/lib/uds_plus_test_kit/validate_income_test.rb +68 -0
  64. data/lib/uds_plus_test_kit/validate_patient_test.rb +33 -0
  65. data/lib/uds_plus_test_kit/validate_procedure_test.rb +33 -0
  66. data/lib/uds_plus_test_kit/validate_sexual_orientation_test.rb +68 -0
  67. data/lib/uds_plus_test_kit/version.rb +6 -0
  68. data/lib/uds_plus_test_kit.rb +1 -0
  69. metadata +182 -0
@@ -0,0 +1 @@
1
+ {"resourceType":"Bundle","type":"collection","timestamp":"2023-04-05T12:57:50.562-04:00","entry":[{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/ImplementationGuide-udsplus","resource":{"resourceType":"OperationOutcome","id":"ImplementationGuide-udsplus"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Patient-de-identified-example","resource":{"resourceType":"OperationOutcome","id":"Patient-de-identified-example","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Validation_VAL_Profile_Maximum"}],"severity":"error","code":"structure","details":{"text":"Patient.text: max allowed = 0, but found 1 (from http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient|0.3.0)"},"expression":["Patient/de-identified-example: Patient"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Condition-example","resource":{"resourceType":"OperationOutcome","id":"Condition-example"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Encounter-example","resource":{"resourceType":"OperationOutcome","id":"Encounter-example","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":31},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":6},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"TerminologyEngine"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-encounter-type because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.ama-assn.org/go/cpt' is unknown so the code cannot be validated]"}],"severity":"warning","code":"code-invalid","details":{"text":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-encounter-type because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.ama-assn.org/go/cpt' is unknown so the code cannot be validated]"},"expression":["Encounter/example: Encounter.type[0]"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":50},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":6},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"TerminologyEngine"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-discharge-disposition because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.nubc.org/patient-discharge' is unknown so the code cannot be validated]"}],"severity":"warning","code":"code-invalid","details":{"text":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-discharge-disposition because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.nubc.org/patient-discharge' is unknown so the code cannot be validated]"},"expression":["Encounter/example: Encounter.hospitalization.dischargeDisposition"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Patient-smallpop-example","resource":{"resourceType":"OperationOutcome","id":"Patient-smallpop-example"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Condition-de-identified-example","resource":{"resourceType":"OperationOutcome","id":"Condition-de-identified-example","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Validation_VAL_Profile_Maximum"}],"severity":"error","code":"structure","details":{"text":"Condition.text: max allowed = 0, but found 1 (from http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-diagnosis|0.3.0)"},"expression":["Condition/de-identified-example: Condition"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Patient-example","resource":{"resourceType":"OperationOutcome","id":"Patient-example"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Parameters-example","resource":{"resourceType":"OperationOutcome","id":"Parameters-example"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Encounter-de-identified-example","resource":{"resourceType":"OperationOutcome","id":"Encounter-de-identified-example","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Validation_VAL_Profile_Minimum"}],"severity":"error","code":"structure","details":{"text":"Encounter.extension:uds-plus-age-extension: minimum required = 1, but only found 0 (from http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-encounter|0.3.0)"},"expression":["Encounter/de-identified-example: Encounter"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":27},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":6},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"TerminologyEngine"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-encounter-type because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.ama-assn.org/go/cpt' is unknown so the code cannot be validated]"}],"severity":"warning","code":"code-invalid","details":{"text":"[Unable to determine whether the provided codes are in the value set http://hl7.org/fhir/us/core/ValueSet/us-core-encounter-type because the value set or a code system it depends on is not known to the validator, Code System URI 'http://www.ama-assn.org/go/cpt' is unknown so the code cannot be validated]"},"expression":["Encounter/de-identified-example: Encounter.type[0]"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/Patient-de-identified-smallpop-example","resource":{"resourceType":"OperationOutcome","id":"Patient-de-identified-smallpop-example","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Validation_VAL_Profile_Maximum"}],"severity":"error","code":"structure","details":{"text":"Patient.text: max allowed = 0, but found 1 (from http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient|0.3.0)"},"expression":["Patient/de-identified-smallpop-example: Patient"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CodeSystem-udsplus-housing-status-codes","resource":{"resourceType":"OperationOutcome","id":"CodeSystem-udsplus-housing-status-codes","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2993},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE"}],"severity":"error","code":"structure","details":{"text":"Canonical URL 'http://hl7.org/fhir/us/uds-plus/ValueSet/udsplus-housing-status' does not resolve"},"expression":["CodeSystem/udsplus-housing-status-codes: CodeSystem.valueSet"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-diagnosis","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-diagnosis"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-age-extension","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-age-extension"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CapabilityStatement-uds-plus-data-submitter-client","resource":{"resourceType":"OperationOutcome","id":"CapabilityStatement-uds-plus-data-submitter-client"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-sexual-orientation-observation","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-sexual-orientation-observation","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"}],"severity":"error","code":"business-rule","details":{"text":"The target profile http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient is not a valid constraint on the base ([CanonicalType[http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient]]) at Observation.subject"},"expression":["StructureDefinition/uds-plus-sexual-orientation-observation: StructureDefinition"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this profile"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-sexual-orientation-observation')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CodeSystem-udsplus-insurance-codes","resource":{"resourceType":"OperationOutcome","id":"CodeSystem-udsplus-insurance-codes","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2520},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE"}],"severity":"error","code":"structure","details":{"text":"Canonical URL 'http://hl7.org/fhir/us/uds-plus/ValueSet/udsplus-insurance' does not resolve"},"expression":["CodeSystem/udsplus-insurance-codes: CodeSystem.valueSet"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-income-observation","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-income-observation","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this profile"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-income-observation')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CapabilityStatement-uds-plus-data-source","resource":{"resourceType":"OperationOutcome","id":"CapabilityStatement-uds-plus-data-source"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-deidentify-data","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-deidentify-data","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this profile"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-deidentify-data')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-import-manifest","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-import-manifest"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/OperationDefinition-udsplus-de-identify","resource":{"resourceType":"OperationOutcome","id":"OperationDefinition-udsplus-de-identify"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-udsplus-agriculture-worker-status","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-udsplus-agriculture-worker-status","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":12720},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Type_Specific_Checks_DT_URL_Resolve"}],"severity":"error","code":"structure","details":{"text":"URL value 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/udsplus-agriculture-worker-status-extension' does not resolve"},"expression":["StructureDefinition/udsplus-agriculture-worker-status: StructureDefinition.snapshot.element[3].fixed.ofType(uri)"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":13892},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"Type_Specific_Checks_DT_URL_Resolve"}],"severity":"error","code":"structure","details":{"text":"URL value 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/udsplus-agriculture-worker-status-extension' does not resolve"},"expression":["StructureDefinition/udsplus-agriculture-worker-status: StructureDefinition.differential.element[1].fixed.ofType(uri)"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this extension"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/udsplus-agriculture-worker-status')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CapabilityStatement-uds-plus-trust-service-provider","resource":{"resourceType":"OperationOutcome","id":"CapabilityStatement-uds-plus-trust-service-provider"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CapabilityStatement-uds-plus-data-receiver-server","resource":{"resourceType":"OperationOutcome","id":"CapabilityStatement-uds-plus-data-receiver-server"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-procedure","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-procedure","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"ProfileValidator"}],"severity":"error","code":"structure","details":{"text":"The diff list size changed when sorting - was 5 is now 1"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-procedure')"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"ProfileValidator"}],"severity":"error","code":"structure","details":{"text":"Sort failed: counts differ; at least one of the paths in the differential is illegal"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-procedure')"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this profile"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-procedure')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-de-identified-uds-plus-patient","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-de-identified-uds-plus-patient"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-agriculture-worker-status-extension","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-agriculture-worker-status-extension","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this extension"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-agriculture-worker-status-extension')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-encounter","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-encounter"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/OperationDefinition-import","resource":{"resourceType":"OperationOutcome","id":"OperationDefinition-import"}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-housing-status-extension","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-housing-status-extension","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this extension"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-housing-status-extension')"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/CodeSystem-udsplus-agriculture-worker-status-codes","resource":{"resourceType":"OperationOutcome","id":"CodeSystem-udsplus-agriculture-worker-status-codes","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-line","valueInteger":1},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-col","valueInteger":2237},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"},{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-message-id","valueCode":"TYPE_SPECIFIC_CHECKS_DT_CANONICAL_RESOLVE"}],"severity":"error","code":"structure","details":{"text":"Canonical URL 'http://hl7.org/fhir/us/uds-plus/ValueSet/udsplus-agriculture-worker-status' does not resolve"},"expression":["CodeSystem/udsplus-agriculture-worker-status-codes: CodeSystem.valueSet"]}]}},{"fullUrl":"http://hl7.org/fhir/us/uds-plus/OperationOutcome/StructureDefinition-uds-plus-coverage","resource":{"resourceType":"OperationOutcome","id":"StructureDefinition-uds-plus-coverage","issue":[{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"InstanceValidator"}],"severity":"warning","code":"business-rule","details":{"text":"The valueSet reference https://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.114222.4.11.3591 on element Coverage.type could not be resolved"},"expression":["StructureDefinition/uds-plus-coverage: StructureDefinition.snapshot.element[11].binding"]},{"extension":[{"url":"http://hl7.org/fhir/StructureDefinition/operationoutcome-issue-source","valueCode":"Publisher"}],"severity":"warning","code":"business-rule","details":{"text":"The Implementation Guide contains no examples for this profile"},"expression":["StructureDefinition.where(url = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-coverage')"]}]}}]}
@@ -0,0 +1 @@
1
+ {"ImplementationGuide/udsplus":{"errors":0,"warnings":0},"Patient/de-identified-example":{"errors":1,"warnings":0},"Condition/example":{"errors":0,"warnings":0},"Encounter/example":{"errors":0,"warnings":2},"Patient/smallpop-example":{"errors":0,"warnings":0},"Condition/de-identified-example":{"errors":1,"warnings":0},"Patient/example":{"errors":0,"warnings":0},"Parameters/example":{"errors":0,"warnings":0},"Encounter/de-identified-example":{"errors":1,"warnings":1},"Patient/de-identified-smallpop-example":{"errors":1,"warnings":0},"CodeSystem/udsplus-housing-status-codes":{"errors":1,"warnings":0},"StructureDefinition/uds-plus-diagnosis":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-age-extension":{"errors":0,"warnings":0},"CapabilityStatement/uds-plus-data-submitter-client":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-sexual-orientation-observation":{"errors":1,"warnings":1},"CodeSystem/udsplus-insurance-codes":{"errors":1,"warnings":0},"StructureDefinition/uds-plus-income-observation":{"errors":0,"warnings":1},"CapabilityStatement/uds-plus-data-source":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-deidentify-data":{"errors":0,"warnings":1},"StructureDefinition/uds-plus-import-manifest":{"errors":0,"warnings":0},"OperationDefinition/udsplus-de-identify":{"errors":0,"warnings":0},"StructureDefinition/udsplus-agriculture-worker-status":{"errors":2,"warnings":1},"CapabilityStatement/uds-plus-trust-service-provider":{"errors":0,"warnings":0},"CapabilityStatement/uds-plus-data-receiver-server":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-procedure":{"errors":2,"warnings":1},"StructureDefinition/de-identified-uds-plus-patient":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-agriculture-worker-status-extension":{"errors":0,"warnings":1},"StructureDefinition/uds-plus-encounter":{"errors":0,"warnings":0},"OperationDefinition/import":{"errors":0,"warnings":0},"StructureDefinition/uds-plus-housing-status-extension":{"errors":0,"warnings":1},"CodeSystem/udsplus-agriculture-worker-status-codes":{"errors":1,"warnings":0},"StructureDefinition/uds-plus-coverage":{"errors":0,"warnings":2}}
@@ -0,0 +1,27 @@
1
+ {
2
+ "name" : "fhir.us.udsplus",
3
+ "version" : "0.3.0",
4
+ "tools-version" : 3,
5
+ "type" : "IG",
6
+ "date" : "20230405125624",
7
+ "license" : "CC0-1.0",
8
+ "canonical" : "http://hl7.org/fhir/us/uds-plus",
9
+ "notForPublication" : true,
10
+ "url" : "file:///Users/nbashyam/git/uds-plus/output",
11
+ "title" : "Uniform Data System (UDS) Patient Level Submission (PLS) - UDS+ IG",
12
+ "description" : "A brief description of what udsplus is about (probably the same text as in your readme) (built Wed, Apr 5, 2023 12:56-0400-04:00)",
13
+ "fhirVersions" : ["4.0.1"],
14
+ "dependencies" : {
15
+ "hl7.fhir.r4.core" : "4.0.1",
16
+ "hl7.terminology.r4" : "5.0.0",
17
+ "hl7.fhir.us.core" : "5.0.1",
18
+ "hl7.fhir.uv.bulkdata" : "1.0.1",
19
+ "hl7.fhir.uv.smart-app-launch" : "2.0.0",
20
+ "hl7.fhir.us.davinci-deqm" : "3.0.0"
21
+ },
22
+ "author" : "HRSA UDS PLS Project",
23
+ "directories" : {
24
+ "lib" : "package",
25
+ "example" : "example"
26
+ }
27
+ }
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadCoverageTest < Inferno::Test
5
+ id :uds_plus_read_coverage_test
6
+ title 'Receive UDS+ Coverage Data'
7
+ description %(
8
+ Test takes from the user either: the http location of coverage data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :coverage_data,
15
+ title: 'Coverage Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/coverage_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Coverage'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !coverage_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if coverage_data.strip[0] != '{'
36
+ assert_valid_http_uri(coverage_data, "Location provided is not a valid http uri.")
37
+ get coverage_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(coverage_data, "JSON inputted was not in a valid format")
43
+ data = coverage_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadDiagnosisTest < Inferno::Test
5
+ id :uds_plus_read_diagnosis_test
6
+ title 'Receive UDS+ Diagnosis Data'
7
+ description %(
8
+ Test takes from the user either: the http location of diagnosis data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :diagnosis_data,
15
+ title: 'Diagnosis Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/diagnosis_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Condition'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !diagnosis_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if diagnosis_data.strip[0] != '{'
36
+ assert_valid_http_uri(diagnosis_data, "Location provided is not a valid http uri.")
37
+ get diagnosis_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(diagnosis_data, "JSON inputted was not in a valid format")
43
+ data = diagnosis_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadEncounterTest < Inferno::Test
5
+ id :uds_plus_read_encounter_test
6
+ title 'Receive UDS+ Encounter Data'
7
+ description %(
8
+ Test takes from the user either: the http location of encounter data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :encounter_data,
15
+ title: 'Encounter Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/encounter_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Encounter'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !encounter_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if encounter_data.strip[0] != '{'
36
+ assert_valid_http_uri(encounter_data, "Location provided is not a valid http uri.")
37
+ get encounter_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(encounter_data, "JSON inputted was not in a valid format")
43
+ data = encounter_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadIncomeTest < Inferno::Test
5
+ id :uds_plus_read_income_test
6
+ title 'Receive UDS+ Income Data'
7
+ description %(
8
+ Test takes from the user either: the http location of income data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :income_data,
15
+ title: 'Income Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/income_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Observation'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !income_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if income_data.strip[0] != '{'
36
+ assert_valid_http_uri(income_data, "Location provided is not a valid http uri.")
37
+ get income_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(income_data, "JSON inputted was not in a valid format")
43
+ data = income_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadPatientTest < Inferno::Test
5
+ id :uds_plus_read_patient_test
6
+ title 'Receive UDS+ Patient Data'
7
+ description %(
8
+ Test takes from the user either: the http location of patient data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :patient_data,
15
+ title: 'Patient Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/patient_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Patient'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !patient_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if patient_data.strip[0] != '{'
36
+ assert_valid_http_uri(patient_data, "Location provided is not a valid http uri.")
37
+ get patient_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(patient_data, "JSON inputted was not in a valid format")
43
+ data = patient_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadProcedureTest < Inferno::Test
5
+ id :uds_plus_read_procedure_test
6
+ title 'Receive UDS+ Procedure Data'
7
+ description %(
8
+ Test takes from the user either: the http location of procedure data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :procedure_data,
15
+ title: 'Procedure Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/procedure_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Procedure'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !procedure_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if procedure_data.strip[0] != '{'
36
+ assert_valid_http_uri(procedure_data, "Location provided is not a valid http uri.")
37
+ get procedure_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(procedure_data, "JSON inputted was not in a valid format")
43
+ data = procedure_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadSexualOrientationTest < Inferno::Test
5
+ id :uds_plus_read_sexual_orientation_test
6
+ title 'Receive UDS+ Sexual Orientation Data'
7
+ description %(
8
+ Test takes from the user either: the http location of sexual orientation data
9
+ or the raw JSON of the data itself.
10
+ It attempts to GET the data stored at the given location if a link is provided,
11
+ then validates whether a FHIR resource can be generated from the input data.
12
+ )
13
+
14
+ input :sexual_orientation_data,
15
+ title: 'Sexual Orientation Data',
16
+ optional: true,
17
+ description: %q(
18
+ User can input the data as:
19
+ a URL link to the location of the data (ex: http://www.example.com/sexual_orientation_data.json)
20
+ OR a JSON string that composes the data. Leaving this blank will skip the test.
21
+ )
22
+
23
+ def data_scratch
24
+ scratch[:data_resources] ||= {}
25
+ end
26
+
27
+ def data_to_test
28
+ data_scratch['Observation'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !sexual_orientation_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if sexual_orientation_data.strip[0] != '{'
36
+ assert_valid_http_uri(sexual_orientation_data, "Location provided is not a valid http uri.")
37
+ get sexual_orientation_data
38
+ assert_response_status(200)
39
+ assert_valid_json(request.response_body, "Data received from request is not a valid JSON")
40
+ data = request.response_body
41
+ else
42
+ assert_valid_json(sexual_orientation_data, "JSON inputted was not in a valid format")
43
+ data = sexual_orientation_data
44
+ end
45
+
46
+ resource = FHIR::Json.from_json(data)
47
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the input provided"
48
+
49
+ if resource.is_a?(FHIR::Model)
50
+ data_to_test << resource
51
+ end
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,51 @@
1
+ require_relative '../version'
2
+ require_relative './read_coverage_test'
3
+ require_relative './read_diagnosis_test'
4
+ require_relative './read_encounter_test'
5
+ require_relative './read_income_test'
6
+ require_relative './read_patient_test'
7
+ require_relative './read_procedure_test'
8
+ require_relative './read_sexual_orientation_test'
9
+ require_relative '../validate_coverage_test'
10
+ require_relative '../validate_diagnosis_test'
11
+ require_relative '../validate_encounter_test'
12
+ require_relative '../validate_income_test'
13
+ require_relative '../validate_patient_test'
14
+ require_relative '../validate_procedure_test'
15
+ require_relative '../validate_sexual_orientation_test'
16
+ require_relative '../manifest_tests/read_manifest_test'
17
+ require_relative '../manifest_tests/validate_manifest_test'
18
+
19
+ module UDSPlusTestKit
20
+ class UDSPlusResourceTestGroup < Inferno::TestGroup
21
+ title 'Individual Resource Tests'
22
+ id :uds_plus_resource_test_group
23
+ description %(
24
+ The tests below skip the import manifest step. Instead,
25
+ users can input individual resources, either by url or as
26
+ a raw json, and have these resources validated. **Important Note:**
27
+ The purpose of these tests is to quickly test a specific resource.
28
+ The test can only handle one json resource per type, unlike the
29
+ Data Submitter test, which can handle an ndjson containing many objects.
30
+ )
31
+
32
+ run_as_group
33
+
34
+ test from: :uds_plus_read_manifest_test
35
+ test from: :uds_plus_validate_manifest_test
36
+ test from: :uds_plus_read_coverage_test
37
+ test from: :uds_plus_validate_coverage_test
38
+ test from: :uds_plus_read_diagnosis_test
39
+ test from: :uds_plus_validate_diagnosis_test
40
+ test from: :uds_plus_read_encounter_test
41
+ test from: :uds_plus_validate_encounter_test
42
+ test from: :uds_plus_read_income_test
43
+ test from: :uds_plus_validate_income_test
44
+ test from: :uds_plus_read_patient_test
45
+ test from: :uds_plus_validate_patient_test
46
+ test from: :uds_plus_read_procedure_test
47
+ test from: :uds_plus_validate_procedure_test
48
+ test from: :uds_plus_read_sexual_orientation_test
49
+ test from: :uds_plus_validate_sexual_orientation_test
50
+ end
51
+ end
@@ -0,0 +1,40 @@
1
+ module UDSPlusTestKit
2
+ class InvalidTypeTest < Inferno::Test
3
+ id :uds_plus_invalid_type_test
4
+ title 'Check For Invalid Types in Import Manifest'
5
+ description %(
6
+ Test checks the titles of the data URLs found in
7
+ the import manifest, and verifies that each of
8
+ the titles provided matches with a known UDS+ data
9
+ type. Test returns a list of unmatched types found
10
+ in the manifest, or passes if all titles are valid.
11
+ )
12
+
13
+ def data_scratch
14
+ scratch[:data_resources] ||= {}
15
+ end
16
+
17
+ def valid_data_types
18
+ [
19
+ 'Coverage', 'Condition', 'Encounter',
20
+ 'Observation', 'Patient', 'Procedure'
21
+ ]
22
+ end
23
+
24
+ run do
25
+ invalid_types_found = []
26
+ data_scratch.keys.each do |data_type|
27
+ if !valid_data_types.include?(data_type)
28
+ invalid_types_found << data_type
29
+ end
30
+ end
31
+
32
+ fail_message = %(
33
+ The following invalid resource types were declared
34
+ in the import manifest: #{invalid_types_found}.
35
+ )
36
+ assert invalid_types_found.empty?, fail_message
37
+ end
38
+ end
39
+ end
40
+
@@ -0,0 +1,75 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadDataTest < Inferno::Test
5
+ id :uds_plus_read_data_test
6
+ title 'Read the contents of the import manifest'
7
+ description %(
8
+ Test iterates through the data that the Import Manifest
9
+ links to. It validates whether an ndjson is found at the given points,
10
+ and if FHIR models can be created by the values enclosed.
11
+ )
12
+
13
+ def manifest_scratch
14
+ scratch[:manifest_resources] ||= {}
15
+ end
16
+
17
+ def manifest_resources
18
+ manifest_scratch[:all] ||= []
19
+ end
20
+
21
+ def data_scratch
22
+ scratch[:data_resources] ||= {}
23
+ end
24
+
25
+ def manifest_content
26
+ return [] if manifest_resources.empty?
27
+ manifest_hash = JSON.parse(manifest_resources.first.to_json)
28
+ manifest_hash['parameter'] ||= []
29
+ end
30
+
31
+ run do
32
+ skip_if manifest_content.empty?, "No valid resource object generated in first test, so this test will be skipped."
33
+
34
+ manifest_content.each do |source|
35
+ #Iterate through manifest until udsData is found
36
+ next if source['name'] != 'udsData'
37
+
38
+ profile_name = "NO NAME"
39
+ profile_url = "NO URL"
40
+ source['part'].each do |container|
41
+ case container['name']
42
+ when 'type'
43
+ profile_name = container['valueCode']
44
+ when 'url'
45
+ profile_url = container['valueUrl']
46
+ end
47
+ end
48
+
49
+ assert profile_name != "NO NAME" && profile_url != "NO URL", %(
50
+ Input Manifest is not configured such that resource type and url
51
+ for a given input is conventionally accessible.
52
+ )
53
+
54
+ data_scratch[profile_name] ||= []
55
+
56
+ invalid_uri_message = "Invalid URL provided for type #{profile_name}"
57
+ assert_valid_http_uri(profile_url, invalid_uri_message)
58
+
59
+ get profile_url
60
+ assert_response_status(200)
61
+
62
+ request.response_body.each_line do |json_body|
63
+ assert_valid_json(json_body)
64
+
65
+ resource = FHIR::Json.from_json(json_body)
66
+
67
+ assert resource.is_a?(FHIR::Model), "Could not generate a valid resource from the #{profile_name} input provided"
68
+ if resource.is_a?(FHIR::Model)
69
+ data_scratch[profile_name] << resource
70
+ end
71
+ end
72
+ end
73
+ end
74
+ end
75
+ end