uds_plus_test_kit 1.0.3 → 1.0.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 489bdac3359252bf1373e013f355610ec8eab11222ab015621bb6b9df4a3bc80
4
- data.tar.gz: 3c1475c83546b3376301b71daa0fb8f3661d207a0660ade16c9fcd4acb9eff2f
3
+ metadata.gz: fc8a90d49751a9e2af4c9c4d5df0cf86f953ef0753751e1a49fa3a110e8c0508
4
+ data.tar.gz: 386594bb67cba437ade8694f0ca9f91cf8fac2b4939680aa7633a76c0ba50536
5
5
  SHA512:
6
- metadata.gz: 2f834ee6a5d50aa4aea2f17c6b3975f76fe4dd45c22e078326df0ca56f90268cc863f820d23d301428e9db0a5b3dc7d1b46f91c239db124292fe010ba71cc533
7
- data.tar.gz: 8e855a4443d9e0f6a45d373b6d4fdf5717d6c63802cf80b8bf2923eeae0c0b4ed1e3946cc285279703b0d95ef8bd818e2e7336353a50c8e5875efda098d95684
6
+ metadata.gz: dd607758776abef43ef2360650381b445da7bb845abf15e89f6e448827f12e389808ea2b9d546096fa7792e318fa86c5827f6c5d1c5806a0a45a37236686239d
7
+ data.tar.gz: 30340f6684aac5f01472e2104d6ca32596a3a9e605ee67709728bccf1067f0216f3b1e4b169fae89dea9e5c2fbc3f5f34f51438888654dd01ad701996a3e3163
@@ -67,6 +67,10 @@
67
67
  "system": "phone",
68
68
  "value": "234-234-5648"
69
69
  }
70
+ },
71
+ {
72
+ "name" : "hcPrenatalCareByReferralOnly",
73
+ "valueBoolean" : true
70
74
  }
71
75
  ]
72
76
  },
@@ -1,3 +1,3 @@
1
1
  { "resourceType": "Observation", "id": "de-identified-example", "meta": { "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-lab-observation" ] }, "status": "final", "category": [ { "coding": [ { "system" : "http://terminology.hl7.org/CodeSystem/observation-category", "code" : "laboratory", "display" : "Laboratory" } ] } ], "code": { "coding": [ { "system" : "http://loinc.org", "code" : "718-7", "display" : "Hemoglobin [Mass/volume] in Blood" } ] }, "subject": { "reference": "Patient/de-identified-example" }, "encounter": { "reference": "Encounter/de-identified-example" }, "effectiveDateTime" : "2005", "issued": "2005-04-03T15:30:10+01:00", "performer": [ { "reference": "Practitioner/example" } ], "valueQuantity" : { "value" : 17, "unit" : "g/dL", "system" : "http://unitsofmeasure.org" }, "bodySite": { "coding": [ { "system": "http://snomed.info/sct", "code": "368208006", "display": "Left upper arm structure" } ] }}
2
2
  { "resourceType": "Observation", "id": "de-identified-income-example", "meta": { "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-income-observation" ] }, "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "63058-2" } ] }, "subject": { "reference": "Patient/de-identified-example" }, "effectiveDateTime": "2016-03-28", "valueRange": { "low": { "value": 101 }, "high": { "value": 150 } }}
3
- { "resourceType": "Observation", "id": "de-identified-sexual-orientation-example", "meta": { "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-sexual-orientation-observation" ] }, "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "76690-7" } ] }, "subject": { "reference": "Patient/example" }, "effectiveDateTime": "2007", "valueCodeableConcept": { "coding": [ { "system": "http://snomed.info/sct", "code": "20430005", "display": "Heterosexual state" } ] }}
3
+ { "resourceType": "Observation", "id": "de-identified-sexual-orientation-example", "meta": { "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-sexual-orientation-observation" ] }, "status": "final", "code": { "coding": [ { "system": "http://loinc.org", "code": "76690-7" } ] }, "subject": { "reference": "Patient/example" }, "effectiveDateTime": "2007", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", "code": "NASK", "display": "not asked" } ] }}
@@ -1,2 +1,2 @@
1
- { "resourceType": "Patient", "id": "de-identified-example", "meta": { "extension": [ { "url": "http://hl7.org/fhir/StructureDefinition/instance-name", "valueString": "De-identified Patient Example" }, { "url": "http://hl7.org/fhir/StructureDefinition/instance-description", "valueMarkdown": "This is a patient example for the *UDS+ Patient Profile*." } ], "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient" ] }, "extension": [ { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2106-3", "display": "White" } }, { "url": "text", "valueString": "White" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race" }, { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2135-2", "display": "Hispanic or Latino" } }, { "url": "text", "valueString": "Hispanic or Latino" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity" }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex", "valueCode": "F" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-age-extension", "valueQuantity": { "value" : 36, "unit" : "yr", "system" : "http://unitsofmeasure.org", "code" : "a" } }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-genderIdentity", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", "code": "ASKU", "display": "asked but unknown" } ], "text": "asked but unknown" } }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/udsplus-agriculture-worker-status", "valueCode": "migratory" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-housing-status-extension", "valueCode": "permanent-supportive-housing" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-veteran-status-extension", "valueBoolean": false } ], "active": true, "gender": "female", "address": [ { "postalCode": "03600" } ]}
2
- { "resourceType": "Patient", "id": "de-identified-smallpop-example", "meta": { "extension": [ { "url": "http://hl7.org/fhir/StructureDefinition/instance-name", "valueString": "De-identified Patient Example" }, { "url": "http://hl7.org/fhir/StructureDefinition/instance-description", "valueMarkdown": "This is a patient example for the *UDS+ Patient Profile*." } ], "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient" ] }, "extension": [ { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2106-3", "display": "White" } }, { "url": "text", "valueString": "White" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race" }, { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2135-2", "display": "Hispanic or Latino" } }, { "url": "text", "valueString": "Hispanic or Latino" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity" }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-birthsex", "valueCode": "F" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-age-extension", "valueQuantity": { "value" : 36, "unit" : "yr", "system" : "http://unitsofmeasure.org", "code" : "a" } }, { "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-genderIdentity", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", "code": "ASKU", "display": "asked but unknown" } ], "text": "asked but unknown" } } ], "active": true, "gender": "female", "address": [ { "postalCode": "00000", "_postalCode": { "extension" : [ { "url" : "http://hl7.org/fhir/StructureDefinition/data-absent-reason", "valueCode" : "masked" }] } } ]}
1
+ { "resourceType": "Patient", "id": "de-identified-smallpop-example", "meta": { "extension": [ { "url": "http://hl7.org/fhir/StructureDefinition/instance-name", "valueString": "De-identified Patient Example" }, { "url": "http://hl7.org/fhir/StructureDefinition/instance-description", "valueMarkdown": "This is a patient example for the *UDS+ Patient Profile*." } ], "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient" ] }, "extension": [ { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2106-3", "display": "White" } }, { "url" : "detailed", "valueCoding" : { "system" : "urn:oid:2.16.840.1.113883.6.238", "code" : "2108-9", "display" : "European" } }, { "url": "text", "valueString": "White" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race" }, { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2135-2", "display": "Hispanic or Latino" } }, { "url" : "detailed", "valueCoding" : { "system" : "urn:oid:2.16.840.1.113883.6.238", "code" : "2184-0", "display" : "Dominican" } }, { "url": "text", "valueString": "Hispanic or Latino" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-birthsex-extension", "valueCode": "F" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-age-extension", "valueQuantity": { "value" : 36, "unit" : "yr", "system" : "http://unitsofmeasure.org", "code" : "a" } }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-gender-identity-extension", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", "code": "NASK", "display": "Not Asked" } ], "text": "Not Asked" } } ], "active": true, "gender": "female", "address": [ { "postalCode": "00000", "_postalCode": { "extension" : [ { "url" : "http://hl7.org/fhir/StructureDefinition/data-absent-reason", "valueCode" : "masked" }] } } ]}
2
+ { "resourceType": "Patient", "id": "de-identified-example", "meta": { "extension": [ { "url": "http://hl7.org/fhir/StructureDefinition/instance-name", "valueString": "De-identified Patient Example" }, { "url": "http://hl7.org/fhir/StructureDefinition/instance-description", "valueMarkdown": "This is a patient example for the *UDS+ Patient Profile*." } ], "profile": [ "http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-patient" ] }, "extension": [ { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2106-3", "display": "White" } }, { "url" : "detailed", "valueCoding" : { "system" : "urn:oid:2.16.840.1.113883.6.238", "code" : "2108-9", "display" : "European" } }, { "url": "text", "valueString": "White" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-race" }, { "extension": [ { "url": "ombCategory", "valueCoding": { "system": "urn:oid:2.16.840.1.113883.6.238", "code": "2135-2", "display": "Hispanic or Latino" } }, { "url" : "detailed", "valueCoding" : { "system" : "urn:oid:2.16.840.1.113883.6.238", "code" : "2184-0", "display" : "Dominican" } }, { "url": "text", "valueString": "Hispanic or Latino" } ], "url": "http://hl7.org/fhir/us/core/StructureDefinition/us-core-ethnicity" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-birthsex-extension", "valueCode": "F" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-age-extension", "valueQuantity": { "value" : 36, "unit" : "yr", "system" : "http://unitsofmeasure.org", "code" : "a" } }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-gender-identity-extension", "valueCodeableConcept": { "coding": [ { "system": "http://terminology.hl7.org/CodeSystem/v3-NullFlavor", "code": "ASKU", "display": "asked but unknown" } ], "text": "asked but unknown" } }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/udsplus-agriculture-worker-status", "valueCode": "migratory" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-housing-status-extension", "valueCode": "permanent-supportive-housing" }, { "url": "http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-veteran-status-extension", "valueBoolean": false } ], "active": true, "gender": "female", "address": [ { "postalCode": "03600" } ]}
@@ -0,0 +1,54 @@
1
+ require 'json'
2
+
3
+ module UDSPlusTestKit
4
+ class ReadAdverseEventTest < Inferno::Test
5
+ id :uds_plus_read_adverse_event_test
6
+ title 'Receive UDS+ Adverse Event Data'
7
+ description %(
8
+ Test takes from the user either: the http location of adverse event 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 :adverse_event_data,
15
+ title: 'Adverse Event 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/adverse_event_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['AdverseEvent'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !adverse_event_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if adverse_event_data.strip[0] != '{'
36
+ assert_valid_http_uri(adverse_event_data, "Adverse Event provided is not a valid http uri.")
37
+ get adverse_event_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(adverse_event_data, "JSON inputted was not in a valid format")
43
+ data = adverse_event_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 ReadAllergyIntoleranceTest < Inferno::Test
5
+ id :uds_plus_read_allergy_intolerance_test
6
+ title 'Receive UDS+ Allergy Intolerance Data'
7
+ description %(
8
+ Test takes from the user either: the http location of allergy intolerance 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 :allergy_intolerance_data,
15
+ title: 'Allergy Intolerance 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/allergy_intolerance_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['AllergyIntolerance'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !allergy_intolerance_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if allergy_intolerance_data.strip[0] != '{'
36
+ assert_valid_http_uri(allergy_intolerance_data, "Allergy Intolerance provided is not a valid http uri.")
37
+ get allergy_intolerance_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(allergy_intolerance_data, "JSON inputted was not in a valid format")
43
+ data = allergy_intolerance_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 ReadClinicalResultTest < Inferno::Test
5
+ id :uds_plus_read_clinical_result_test
6
+ title 'Receive UDS+ Clinical Result Data'
7
+ description %(
8
+ Test takes from the user either: the http location of clinical result 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 :clinical_result_data,
15
+ title: 'Clinical Result 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/clinical_result_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 !clinical_result_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if clinical_result_data.strip[0] != '{'
36
+ assert_valid_http_uri(clinical_result_data, "Location provided is not a valid http uri.")
37
+ get clinical_result_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(clinical_result_data, "JSON inputted was not in a valid format")
43
+ data = clinical_result_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 ReadLocationTest < Inferno::Test
5
+ id :uds_plus_read_location_test
6
+ title 'Receive UDS+ Location Data'
7
+ description %(
8
+ Test takes from the user either: the http location of location 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 :location_data,
15
+ title: 'Location 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/location_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['Location'] ||= []
29
+ end
30
+
31
+ run do
32
+ omit_if !location_data.present?, "No data provided; skipping test."
33
+
34
+ # if the input is a url, else it is a json
35
+ if location_data.strip[0] != '{'
36
+ assert_valid_http_uri(location_data, "Location provided is not a valid http uri.")
37
+ get location_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(location_data, "JSON inputted was not in a valid format")
43
+ data = location_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
@@ -29,6 +29,14 @@ require_relative './read_med_statement_test'
29
29
  require_relative '../validate_med_statement_test'
30
30
  require_relative './read_service_request_test'
31
31
  require_relative '../validate_service_request_test'
32
+ require_relative './read_location_test'
33
+ require_relative '../validate_location_test'
34
+ require_relative './read_allergy_intolerance_test'
35
+ require_relative '../validate_allergy_intolerance_test'
36
+ require_relative './read_adverse_event_test'
37
+ require_relative '../validate_adverse_event_test'
38
+ require_relative './read_clinical_result_test'
39
+ require_relative '../validate_clinical_result_test'
32
40
 
33
41
  module UDSPlusTestKit
34
42
  class UDSPlusResourceTestGroup < Inferno::TestGroup
@@ -61,12 +69,20 @@ module UDSPlusTestKit
61
69
  test from: :uds_plus_validate_related_person_test
62
70
  test from: :uds_plus_read_immunization_test
63
71
  test from: :uds_plus_validate_immunization_test
72
+ test from: :uds_plus_read_location_test
73
+ test from: :uds_plus_validate_location_test
74
+ test from: :uds_plus_read_allergy_intolerance_test
75
+ test from: :uds_plus_validate_allergy_intolerance_test
76
+ test from: :uds_plus_read_adverse_event_test
77
+ test from: :uds_plus_validate_adverse_event_test
64
78
  test from: :uds_plus_read_income_test
65
79
  test from: :uds_plus_validate_income_test
66
80
  test from: :uds_plus_read_sexual_orientation_test
67
81
  test from: :uds_plus_validate_sexual_orientation_test
68
82
  test from: :uds_plus_read_lab_test
69
83
  test from: :uds_plus_validate_lab_test
84
+ test from: :uds_plus_read_clinical_result_test
85
+ test from: :uds_plus_validate_clinical_result_test
70
86
  test from: :uds_plus_read_special_observation_test
71
87
  test from: :uds_plus_validate_special_observation_test
72
88
  test from: :uds_plus_read_medication_request_test
@@ -20,7 +20,8 @@ module UDSPlusTestKit
20
20
  'Observation', 'Patient', 'Procedure',
21
21
  'RelatedPerson', 'Immunization',
22
22
  'ServiceRequest', 'MedicationRequest',
23
- 'MedicationStatement'
23
+ 'MedicationStatement', 'Location',
24
+ 'AdverseEvent', 'AllergyIntolerance'
24
25
  ]
25
26
  end
26
27
 
@@ -17,6 +17,10 @@ require_relative '../validate_lab_test'
17
17
  require_relative '../validate_med_request_test'
18
18
  require_relative '../validate_med_statement_test'
19
19
  require_relative '../validate_service_request_test'
20
+ require_relative '../validate_location_test'
21
+ require_relative '../validate_allergy_intolerance_test'
22
+ require_relative '../validate_adverse_event_test'
23
+ require_relative '../validate_clinical_result_test'
20
24
 
21
25
  module UDSPlusTestKit
22
26
  class UDSPlusTestGroup < Inferno::TestGroup
@@ -41,9 +45,13 @@ module UDSPlusTestKit
41
45
  test from: :uds_plus_validate_procedure_test
42
46
  test from: :uds_plus_validate_related_person_test
43
47
  test from: :uds_plus_validate_immunization_test
48
+ test from: :uds_plus_validate_location_test
49
+ test from: :uds_plus_validate_allergy_intolerance_test
50
+ test from: :uds_plus_validate_adverse_event_test
44
51
  test from: :uds_plus_validate_income_test
45
52
  test from: :uds_plus_validate_sexual_orientation_test
46
53
  test from: :uds_plus_validate_lab_test
54
+ test from: :uds_plus_validate_clinical_result_test
47
55
  test from: :uds_plus_validate_special_observation_test
48
56
  test from: :uds_plus_validate_medication_request_test
49
57
  test from: :uds_plus_validate_medication_statement_test
@@ -22,6 +22,10 @@ require_relative '../validate_lab_test'
22
22
  require_relative '../validate_med_request_test'
23
23
  require_relative '../validate_med_statement_test'
24
24
  require_relative '../validate_service_request_test'
25
+ require_relative '../validate_location_test'
26
+ require_relative '../validate_allergy_intolerance_test'
27
+ require_relative '../validate_adverse_event_test'
28
+ require_relative '../validate_clinical_result_test'
25
29
 
26
30
  module UDSPlusTestKit
27
31
  class UDSPlusPostGroup < Inferno::TestGroup
@@ -47,9 +51,13 @@ module UDSPlusTestKit
47
51
  test from: :uds_plus_validate_procedure_test
48
52
  test from: :uds_plus_validate_related_person_test
49
53
  test from: :uds_plus_validate_immunization_test
54
+ test from: :uds_plus_validate_location_test
55
+ test from: :uds_plus_validate_allergy_intolerance_test
56
+ test from: :uds_plus_validate_adverse_event_test
50
57
  test from: :uds_plus_validate_income_test
51
58
  test from: :uds_plus_validate_sexual_orientation_test
52
59
  test from: :uds_plus_validate_lab_test
60
+ test from: :uds_plus_validate_clinical_result_test
53
61
  test from: :uds_plus_validate_special_observation_test
54
62
  test from: :uds_plus_validate_medication_request_test
55
63
  test from: :uds_plus_validate_medication_statement_test
@@ -9,7 +9,7 @@ module UDSPlusTestKit
9
9
  title 'UDS+ Test Kit'
10
10
  description %(
11
11
  The UDS+ Test Kit tests systems for their conformance to the [UDS+
12
- Implementation Guide v0.4.1](http://udsplus.drajer.com).
12
+ Implementation Guide v1.0.0](http://udsplus.drajer.com).
13
13
  The included tests function as a rudimentary data receiver. This receiver will
14
14
  take a provided Import Manifest, either as an HTTP location or as a raw json,
15
15
  and validate its contents. This includes validating the structure of the manifest,
@@ -78,7 +78,7 @@ module UDSPlusTestKit
78
78
  url: 'https://github.com/inferno-framework/uds-plus-test-kit/'
79
79
  },
80
80
  {
81
- label: 'UDS+ Implementation Guide v0.4.1',
81
+ label: 'UDS+ Implementation Guide v1.0.0',
82
82
  url: 'http://udsplus.drajer.com'
83
83
  }
84
84
  ]
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateAdverseEventTest < Inferno::Test
6
+ id :uds_plus_validate_adverse_event_test
7
+ title 'Validate UDS+ Adverse Event Data'
8
+ description %(
9
+ Test takes the Adverse Event resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['AdverseEvent'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-adverseevent'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateAllergyIntoleranceTest < Inferno::Test
6
+ id :uds_plus_validate_allergy_intolerance_test
7
+ title 'Validate UDS+ Allergy Intolerance Data'
8
+ description %(
9
+ Test takes the Allergy Intolerance resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['AllergyIntolerance'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-allergyintolerance'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,65 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateClinicalResultTest < Inferno::Test
6
+ id :uds_plus_validate_clinical_result_test
7
+ title 'Validate UDS+ Clinical Result Data'
8
+ description %(
9
+ Test takes the Clinical Result resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['Observation'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/de-identified-uds-plus-clinical-result-observation'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ no_resource_of_this_type = true
29
+ identifier_fail_message = %(Resource.meta.profile should contain the HTTP location of the
30
+ resource's Structure Definition. Resource.meta.profile either does
31
+ not exist in this resource, or its contents do not point to a valid
32
+ location for type Observation. **NOTE:**
33
+ If this error occurs, it can trigger a fail for all observation-type tests,
34
+ regardless of whether both tests were meant to run.)
35
+
36
+ data_to_test.each do |resource|
37
+ # All these assertions are to differentaite Observation data between orientation types.
38
+ # A resource is skipped if it cannot be identified as an clinical result resource.
39
+ type_identifier = resource.to_hash
40
+ assert type_identifier['meta'].present?, identifier_fail_message
41
+
42
+ type_identifier = type_identifier['meta']
43
+ assert type_identifier.is_a?(Hash), identifier_fail_message
44
+ assert type_identifier['profile'].present?, identifier_fail_message
45
+
46
+ type_identifier = type_identifier['profile']
47
+ assert type_identifier.is_a?(Array), identifier_fail_message
48
+ assert !type_identifier.empty?, identifier_fail_message
49
+
50
+
51
+ type_identifier = type_identifier.first
52
+ assert type_identifier.is_a?(String), identifier_fail_message
53
+ if !type_identifier.include?("clinical-result")
54
+ next
55
+ end
56
+
57
+ no_resource_of_this_type = false
58
+
59
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
60
+ end
61
+
62
+ omit_if no_resource_of_this_type, "No data of this type was identified."
63
+ end
64
+ end
65
+ end
@@ -0,0 +1,33 @@
1
+ require 'json'
2
+ require_relative './version'
3
+
4
+ module UDSPlusTestKit
5
+ class ValidateLocationTest < Inferno::Test
6
+ id :uds_plus_validate_location_test
7
+ title 'Validate UDS+ Location Data'
8
+ description %(
9
+ Test takes the Location resources identified
10
+ by the import manifest, and validates whether they conform
11
+ to their UDS+ Structure Definitions.
12
+ )
13
+
14
+ def data_scratch
15
+ scratch[:data_resources] ||= {}
16
+ end
17
+
18
+ def data_to_test
19
+ data_scratch['Location'] ||= []
20
+ end
21
+
22
+ run do
23
+ omit_if data_to_test.empty?, "No data of this type was identified."
24
+
25
+ profile_definition = 'http://hl7.org/fhir/us/uds-plus/StructureDefinition/uds-plus-location'
26
+ profile_with_version = "#{profile_definition}|#{UDS_PLUS_VERSION}"
27
+
28
+ data_to_test.each do |resource|
29
+ assert_valid_resource(resource: resource, profile_url: profile_with_version)
30
+ end
31
+ end
32
+ end
33
+ end
@@ -48,7 +48,14 @@ module UDSPlusTestKit
48
48
 
49
49
  type_identifier = type_identifier.first
50
50
  assert type_identifier.is_a?(String), identifier_fail_message
51
- if type_identifier.include?("income") || type_identifier.include?("sexual-orientation") || type_identifier.include?("-lab-")
51
+
52
+ known_observations = ["income", "sexual-orientation", "-lab-", "clinical-result"]
53
+ is_known_observation = false
54
+ known_observations.each do |cur|
55
+ is_known_observation = (is_known_observation || type_identifier.include?(cur))
56
+ end
57
+
58
+ if is_known_observation
52
59
  next
53
60
  else
54
61
  assert type_identifier.downcase.include?("observation"), identifier_fail_message
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module UDSPlusTestKit
4
- VERSION = '1.0.3'
5
- UDS_PLUS_VERSION = '0.4.1'
4
+ VERSION = '1.0.4'
5
+ UDS_PLUS_VERSION = '1.0.0'
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: uds_plus_test_kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Leap Orbit
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-08-02 00:00:00.000000000 Z
11
+ date: 2023-09-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: inferno_core
@@ -97,12 +97,16 @@ files:
97
97
  - lib/uds_plus_test_kit/examples/manifest.json
98
98
  - lib/uds_plus_test_kit/examples/observation.ndjson
99
99
  - lib/uds_plus_test_kit/examples/patient.ndjson
100
+ - lib/uds_plus_test_kit/input_resource_tests/read_adverse_event_test.rb
101
+ - lib/uds_plus_test_kit/input_resource_tests/read_allergy_intolerance_test.rb
102
+ - lib/uds_plus_test_kit/input_resource_tests/read_clinical_result_test.rb
100
103
  - lib/uds_plus_test_kit/input_resource_tests/read_coverage_test.rb
101
104
  - lib/uds_plus_test_kit/input_resource_tests/read_diagnosis_test.rb
102
105
  - lib/uds_plus_test_kit/input_resource_tests/read_encounter_test.rb
103
106
  - lib/uds_plus_test_kit/input_resource_tests/read_immunization_test.rb
104
107
  - lib/uds_plus_test_kit/input_resource_tests/read_income_test.rb
105
108
  - lib/uds_plus_test_kit/input_resource_tests/read_lab_test.rb
109
+ - lib/uds_plus_test_kit/input_resource_tests/read_location_test.rb
106
110
  - lib/uds_plus_test_kit/input_resource_tests/read_manifest_ind_test.rb
107
111
  - lib/uds_plus_test_kit/input_resource_tests/read_med_request_test.rb
108
112
  - lib/uds_plus_test_kit/input_resource_tests/read_med_statement_test.rb
@@ -122,12 +126,16 @@ files:
122
126
  - lib/uds_plus_test_kit/post_tests/post_manifest_test.rb
123
127
  - lib/uds_plus_test_kit/post_tests/read_post_test.rb
124
128
  - lib/uds_plus_test_kit/uds_plus_test_suite.rb
129
+ - lib/uds_plus_test_kit/validate_adverse_event_test.rb
130
+ - lib/uds_plus_test_kit/validate_allergy_intolerance_test.rb
131
+ - lib/uds_plus_test_kit/validate_clinical_result_test.rb
125
132
  - lib/uds_plus_test_kit/validate_coverage_test.rb
126
133
  - lib/uds_plus_test_kit/validate_diagnosis_test.rb
127
134
  - lib/uds_plus_test_kit/validate_encounter_test.rb
128
135
  - lib/uds_plus_test_kit/validate_immunization_test.rb
129
136
  - lib/uds_plus_test_kit/validate_income_test.rb
130
137
  - lib/uds_plus_test_kit/validate_lab_test.rb
138
+ - lib/uds_plus_test_kit/validate_location_test.rb
131
139
  - lib/uds_plus_test_kit/validate_med_request_test.rb
132
140
  - lib/uds_plus_test_kit/validate_med_statement_test.rb
133
141
  - lib/uds_plus_test_kit/validate_patient_test.rb