plan_executor 1.0.2
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 +7 -0
- data/.gitignore +44 -0
- data/.simplecov +16 -0
- data/.travis.yml +13 -0
- data/Gemfile +26 -0
- data/Gemfile.lock +197 -0
- data/LICENSE +201 -0
- data/README.md +126 -0
- data/Rakefile +25 -0
- data/fixtures/daf/conformance-daf-query-responder.xml +1471 -0
- data/fixtures/diagnostic_order/do-100.xml +64 -0
- data/fixtures/diagnostic_order/do-200.xml +121 -0
- data/fixtures/diagnostic_order/do-300.xml +91 -0
- data/fixtures/diagnostic_order/do-400.xml +88 -0
- data/fixtures/diagnostic_report/dr-100.xml +96 -0
- data/fixtures/diagnostic_report/dr-200.xml +125 -0
- data/fixtures/diagnostic_report/dr-300.xml +132 -0
- data/fixtures/diagnostic_report/dr-400.xml +121 -0
- data/fixtures/financial/claim-example-average.xml +168 -0
- data/fixtures/financial/claim-example-simple.xml +67 -0
- data/fixtures/observation/obs-100.xml +58 -0
- data/fixtures/observation/obs-101.xml +58 -0
- data/fixtures/observation/obs-200.xml +125 -0
- data/fixtures/observation/obs-300.xml +106 -0
- data/fixtures/observation/obs-301.xml +106 -0
- data/fixtures/observation/obs-302.xml +106 -0
- data/fixtures/observation/obs-303.xml +106 -0
- data/fixtures/observation/obs-304.xml +106 -0
- data/fixtures/observation/obs-400.xml +87 -0
- data/fixtures/observation/obs-401.xml +95 -0
- data/fixtures/observation/obs-402.xml +95 -0
- data/fixtures/observation/obs-403.xml +84 -0
- data/fixtures/observation/obs-404.xml +84 -0
- data/fixtures/observation/obs-405.xml +83 -0
- data/fixtures/observation/obs-406.xml +83 -0
- data/fixtures/observation/obs-407.xml +70 -0
- data/fixtures/observation/obs-408.xml +84 -0
- data/fixtures/observation/obs-uslab-example5.xml +102 -0
- data/fixtures/order/order-100.xml +61 -0
- data/fixtures/order/order-200.xml +61 -0
- data/fixtures/order/order-300.xml +61 -0
- data/fixtures/order/order-400.xml +61 -0
- data/fixtures/order_response/ordresp-100.xml +79 -0
- data/fixtures/order_response/ordresp-110.xml +79 -0
- data/fixtures/order_response/ordresp-200.xml +79 -0
- data/fixtures/order_response/ordresp-210.xml +79 -0
- data/fixtures/order_response/ordresp-300.xml +79 -0
- data/fixtures/order_response/ordresp-310.xml +79 -0
- data/fixtures/order_response/ordresp-400.xml +79 -0
- data/fixtures/order_response/ordresp-410.xml +79 -0
- data/fixtures/organization/org-uslab-example3.xml +49 -0
- data/fixtures/patient/patient-example-updated.xml +140 -0
- data/fixtures/patient/patient-example-us-extensions(us01).xml +81 -0
- data/fixtures/patient/patient-example.xml +132 -0
- data/fixtures/patient/patient-format-example.xml +101 -0
- data/fixtures/patient/patient-minimal.xml +9 -0
- data/fixtures/patient/patient-uslab-example1.xml +44 -0
- data/fixtures/practitioner/pract-uslab-example1.xml +18 -0
- data/fixtures/practitioner/pract-uslab-example3.xml +36 -0
- data/fixtures/record/condition-example-f201-fever.xml +63 -0
- data/fixtures/record/condition-example-f205-infection.xml +20 -0
- data/fixtures/record/diagnosticreport-example-f201-brainct.xml +18 -0
- data/fixtures/record/encounter-example-f201-20130404.xml +17 -0
- data/fixtures/record/encounter-example-f202-20130128.xml +17 -0
- data/fixtures/record/observation-example-f202-temperature.xml +60 -0
- data/fixtures/record/organization-example-f201-aumc.xml +5 -0
- data/fixtures/record/organization-example-f203-bumc.xml +5 -0
- data/fixtures/record/patient-example-f201-roel.xml +16 -0
- data/fixtures/record/practitioner-example-f201-ab.xml +14 -0
- data/fixtures/record/procedure-example-f201-tpf.xml +23 -0
- data/fixtures/scheduling/appointment-simple.xml +24 -0
- data/fixtures/scheduling/appointmentresponse-patient-simple.xml +12 -0
- data/fixtures/scheduling/appointmentresponse-practitioner-simple.xml +12 -0
- data/fixtures/scheduling/practitioner-simple.xml +10 -0
- data/fixtures/scheduling/schedule-simple.xml +12 -0
- data/fixtures/scheduling/slot-simple.xml +10 -0
- data/fixtures/specimen/spec-100.xml +65 -0
- data/fixtures/specimen/spec-400.xml +70 -0
- data/fixtures/specimen/spec-uslab-example1.xml +82 -0
- data/fixtures/validation/observation.profile.xml +2045 -0
- data/fixtures/validation/observations/observation-example(example).xml +50 -0
- data/lib/FHIR_structure.json +529 -0
- data/lib/daf_resource_generator.rb +94 -0
- data/lib/data/fhir_structure.rb +8 -0
- data/lib/data/resources.rb +138 -0
- data/lib/executor.rb +56 -0
- data/lib/ext/client.rb +27 -0
- data/lib/ext/client_reply.rb +19 -0
- data/lib/plan_executor.rb +31 -0
- data/lib/resource_generator.rb +656 -0
- data/lib/tasks/tasks.rake +329 -0
- data/lib/tasks/templates/summary.html.erb +163 -0
- data/lib/test_result.rb +69 -0
- data/lib/tests/assertions.rb +261 -0
- data/lib/tests/base_test.rb +117 -0
- data/lib/tests/suites/argonaut_resprint_1_test.rb +260 -0
- data/lib/tests/suites/argonaut_resprint_2_test.rb +369 -0
- data/lib/tests/suites/argonaut_resprint_3_test.rb +309 -0
- data/lib/tests/suites/argonaut_sprint_1_test.rb +187 -0
- data/lib/tests/suites/argonaut_sprint_2_test.rb +115 -0
- data/lib/tests/suites/argonaut_sprint_3_test.rb +208 -0
- data/lib/tests/suites/argonaut_sprint_4_test.rb +335 -0
- data/lib/tests/suites/argonaut_sprint_5_test.rb +196 -0
- data/lib/tests/suites/argonaut_sprint_6_test.rb +243 -0
- data/lib/tests/suites/argonaut_sprint_7_test.rb +161 -0
- data/lib/tests/suites/base_suite.rb +116 -0
- data/lib/tests/suites/connectathon_audit_track.rb +354 -0
- data/lib/tests/suites/connectathon_fetch_patient_record.rb +443 -0
- data/lib/tests/suites/connectathon_financial_track.rb +380 -0
- data/lib/tests/suites/connectathon_lab_order_track.rb +239 -0
- data/lib/tests/suites/connectathon_patient_track.rb +364 -0
- data/lib/tests/suites/connectathon_profile_validation.rb +101 -0
- data/lib/tests/suites/connectathon_scheduling_track.rb +266 -0
- data/lib/tests/suites/connectathon_terminology_track.rb +242 -0
- data/lib/tests/suites/daf_profiles_test.rb +431 -0
- data/lib/tests/suites/format_test.rb +453 -0
- data/lib/tests/suites/history_test.rb +311 -0
- data/lib/tests/suites/read_test.rb +104 -0
- data/lib/tests/suites/resource_test.rb +553 -0
- data/lib/tests/suites/search_test.rb +219 -0
- data/lib/tests/suites/search_test_robust.rb +172 -0
- data/lib/tests/suites/sprinkler_search_test.rb +660 -0
- data/lib/tests/suites/suite_engine.rb +114 -0
- data/lib/tests/suites/transaction_test.rb +571 -0
- data/lib/tests/testscripts/base_testscript.rb +480 -0
- data/lib/tests/testscripts/testscript_engine.rb +81 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-json.xml +348 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-base-client-id-xml.xml +348 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-json.xml +420 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Client Assigned Id/track1-patient-bonus-client-id-xml.xml +420 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/README.html +68 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-json.xml +352 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-base-server-id-xml.xml +352 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-json.xml +421 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/Server Assigned Id/track1-patient-bonus-server-id-xml.xml +421 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/conformance/PatientConformance.xml +34 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.json +45 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers-min.xml +26 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.json +100 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-PeterChalmers.xml +102 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.json +53 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers-min.xml +30 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.json +108 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-create-bonus-PeterChalmers.xml +108 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.json +45 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers-min.xml +26 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.json +100 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-PeterChalmers.xml +102 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.json +53 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers-min.xml +30 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.json +108 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus1-PeterChalmers.xml +107 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.json +53 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers-min.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.json +108 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track1-Patient/_reference/resources/patient-update-bonus2-PeterChalmers.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/C-CDA_R2-1_CCD-ussg.xml +3414 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A1-empty-on-instance.xml +9 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A2-empty-by-ref.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A3-empty-by-identifier.xml +13 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-A4-empty-by-contained.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B1-CCDA-on-instance.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B2-CCDA-by-ref.xml +21 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B3-CCDA-by-identifier.xml +19 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/parameters-B4-CCDA-by-contained.xml +21 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaire-sdc-profile-example-ussg-fht.xml +3905 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-CCDA.xml +190 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/_reference/resources/questionnaireresponse-expected-ussg-fht-empty.xml +177 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track11-SDC/track11-sdc-prepop-xml.xml +142 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite1-expand-client-id.xml +925 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Client Assigned Id/track2-ts-suite2-expand-filter-client-id.xml +930 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite1-expand-server-id.xml +953 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Expand/Server Assigned Id/track2-ts-suite2-expand-filter-server-id.xml +958 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-loinc-lookup-xml.xml +224 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Lookup/track2-ts-suite5-snomed-lookup-xml.xml +224 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/README.html +85 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Translate/track2-ts-suite6-translate-xml.xml +224 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite3-validate-code-client-id.xml +1807 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Client Assigned Id/track2-ts-suite4-validate-code-client-id.xml +714 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite3-validate-code-server-id.xml +1835 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/Validate-code/Server Assigned Id/track2-ts-suite4-validate-code-server-id.xml +742 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ConceptMapSuite6Conformance.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite1Conformance.xml +17 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite2Conformance.xml +17 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite3Conformance.xml +14 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite4Conformance.xml +14 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/conformance/ValueSetSuite5Conformance.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-a.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-2-b.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-a.xml +13 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-3-b.xml +13 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-a.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/extensional-case-1-input-4-4-b.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-2.xml +10 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-loinc-input-5-3.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-2.xml +10 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/lookup-snomed-input-5-3.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-2.xml +14 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/input/translate-conceptmap-input-6-3.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-expand-min.xml +47 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-1-filter-min.xml +23 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-expand-min.xml +132 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-2-filter-min.xml +38 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-expand-min.xml +252 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-3-filter-min.xml +58 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-expand-min.xml +57 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/extensional-case-4-filter-min.xml +28 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-expand-min.xml +347 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-1-filter-min.xml +33 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-expand-min.xml +637 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-2-filter-min.xml +33 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/intensional-case-3-filter-min.xml +58 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-loinc-min.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/lookup-snomed-min.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-invalid-min.xml +10 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite3-valid-min.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-invalid-min.xml +10 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/suite4-valid-min.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/output/translate-conceptmap-min.xml +17 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-1.xml +55 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-2.xml +122 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-3.xml +222 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/extensional-case-4.xml +65 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-1.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-2.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/intensional-case-3.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track2-Terminology/_reference/resources/translate-conceptmap-case-1.xml +145 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/conformance/DecisionSupportServiceModule-Evaluate.xml +17 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-request-payload.xml +26 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-min-payload.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-incomplete-response-payload.xml +332 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-request-payload.xml +28 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-min-payload.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-malformed-response-payload.xml +20 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-request-payload.xml +28 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-min-payload.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-response-payload.xml +332 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-request-payload.xml +28 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-min-payload.xml +7 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/ecrs-fhir-cdc-immunizations-unauthorized-response-payload.xml +8 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-request-payload.xml +176 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload-min.xml +32 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/_reference/resources/gao-assessment-response-payload.xml +80 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-cdc-immunization.xml +290 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track3-CDS-on-FHIR/track3-cds-evaluate-gao-profile.xml +110 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/Client_Assigned_Id/TestScript_FHIR-Genomics.xml +170 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-1.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track6-FHIR-Genomics/_reference/resources/sequence-example-2.xml +31 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Actors.png +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder100-xml.xml +590 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder200-xml.xml +587 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder300-xml.xml +612 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Client_Assigned_Id/track7-laborder400-xml.xml +635 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Peer-to-Peer/track7-laborder100-peer2peer-xml.xml +752 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/Thumbs.db +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/LabOrderLabReport-CreateDeleteReadUpdate.xml +187 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/conformance/html.xslt +45 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100-update.xml +64 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-100.xml +64 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200-update.xml +121 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-200.xml +121 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300-update.xml +91 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-300.xml +91 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400-update.xml +88 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticOrder/do-400.xml +88 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-100.xml +96 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-200.xml +125 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-300.xml +132 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/DiagnosticReport/dr-400.xml +121 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-100.xml +58 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-101.xml +58 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-200.xml +125 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-300.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-301.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-302.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-303.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-304.xml +106 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-400.xml +87 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-401.xml +95 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-402.xml +95 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-403.xml +84 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-404.xml +84 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-405.xml +83 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-406.xml +83 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-407.xml +70 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-408.xml +84 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Observation/obs-uslab-example5.xml +102 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-100.xml +61 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-200.xml +61 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-300.xml +61 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Order/order-400.xml +61 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-100.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-110.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-200.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-210.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-300.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-310.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-400.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/OrderResponse/ordresp-410.xml +79 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Organization/org-uslab-example3.xml +49 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Patient/patient-uslab-example1.xml +44 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example1.xml +18 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Practitioner/pract-uslab-example3.xml +36 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/Thumbs.db +0 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-100.xml +65 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-400.xml +70 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Specimen/spec-uslab-example1.xml +82 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 1 Document.txt +122 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 2 Document.txt +103 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 3 Document.txt +201 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track7-LabOrderLabReport/_reference/resources/Testscript 4 Document.txt +310 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/MedicationStatementCreate.xml +11 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/conformance/PatientSearchType.xml +15 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-create.json +39 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/_reference/resources/medicationstatement-patch.json +3 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json-if-match.xml +321 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-medicationstatement-json.xml +303 -0
- data/lib/tests/testscripts/xml/Connectathon11/Track9-Patch/track9-patch-peer2peer-patient-json.xml +235 -0
- data/plan_executor.gemspec +14 -0
- data/test/fixtures/diagnostic_bundle.xml +51 -0
- data/test/fixtures/lab_results_bundle.xml +49 -0
- data/test/fixtures/observation_bundle.json +61 -0
- data/test/fixtures/testscript-example.xml +202 -0
- data/test/fixtures/testscript-history.xml +143 -0
- data/test/fixtures/testscript-readtest.xml +272 -0
- data/test/fixtures/testscript-search.xml +282 -0
- data/test/fixtures/testscript-update.xml +147 -0
- data/test/fixtures/vital_signs_bundle.xml +117 -0
- data/test/test_helper.rb +8 -0
- data/test/unit/argonaut_sprint6_test.rb +31 -0
- data/test/unit/argonaut_sprint7_test.rb +21 -0
- data/test/unit/basic_test.rb +27 -0
- data/test/unit/fetch_patient_record_test.rb +357 -0
- data/test/unit/financial_test.rb +41 -0
- data/test/unit/fixtures_test.rb +45 -0
- data/test/unit/metadata_test.rb +33 -0
- metadata +394 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
module Crucible
|
|
2
|
+
module Tests
|
|
3
|
+
class DataAccessFrameworkProfilesTest < BaseSuite
|
|
4
|
+
|
|
5
|
+
def id
|
|
6
|
+
'DataAccessFrameworkProfilesTest'
|
|
7
|
+
end
|
|
8
|
+
|
|
9
|
+
def description
|
|
10
|
+
'Test support for the U.S. Data Access Framework (DAF) Implementation Guide'
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def initialize(client1, client2=nil)
|
|
14
|
+
super(client1, client2)
|
|
15
|
+
@tags.append('argonaut')
|
|
16
|
+
@category = {id: 'core_functionality', title: 'Core Functionality'}
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def setup
|
|
20
|
+
@server_side_resources = {}
|
|
21
|
+
@resources = Crucible::Generator::Resources.new
|
|
22
|
+
@daf_conformance = @resources.daf_conformance
|
|
23
|
+
|
|
24
|
+
# Try to create a DAF patient on the server.
|
|
25
|
+
# This will facilitate SEARCH testing, if it succeeds.
|
|
26
|
+
# Do not assert that the creation worked, because CREATE is *not*
|
|
27
|
+
# required by DAF. This is a read-only test.
|
|
28
|
+
@daf_patient = Crucible::Tests::DAFResourceGenerator.daf_patient
|
|
29
|
+
reply = @client.create(@daf_patient)
|
|
30
|
+
@daf_patient.xmlId = reply.id if !reply.id.nil?
|
|
31
|
+
# assert_response_created(reply)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def teardown
|
|
35
|
+
# delete resources
|
|
36
|
+
@client.destroy(FHIR::Patient, @daf_patient.xmlId) if @daf_patient && !@daf_patient.xmlId.nil?
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# Check Conformance for DAF Profiles
|
|
40
|
+
test 'DAF00','Check Conformance for DAF Profiles' do
|
|
41
|
+
metadata {
|
|
42
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
43
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
44
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
45
|
+
requires resource: 'Conformance', methods: ['read']
|
|
46
|
+
validates resource: 'Conformance', methods: ['read']
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@conformance = @client.conformanceStatement
|
|
50
|
+
|
|
51
|
+
# Collect the list of DAF profiles
|
|
52
|
+
daf_profiles = @daf_conformance.profile.map{|x|x.reference}
|
|
53
|
+
|
|
54
|
+
# Check that the conformance declares support for all the DAF profiles
|
|
55
|
+
root_profiles = @conformance.profile.map{|x|x.try(:reference)}.compact
|
|
56
|
+
rest_profiles = @conformance.rest.map{|r|r.resource.map{|r|r.try(:profile).try(:reference)}}.flatten.compact
|
|
57
|
+
|
|
58
|
+
missing_daf_profiles = daf_profiles - root_profiles - rest_profiles
|
|
59
|
+
assert(missing_daf_profiles.compact.empty?, "The Conformance statement does not declare support for the following DAF profiles: #{missing_daf_profiles}", @conformance.to_xml)
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
# Check Conformance for SMART Security Extensions
|
|
63
|
+
test 'DAF01','Check Conformance for SMART-on-FHIR Security Extensions' do
|
|
64
|
+
metadata {
|
|
65
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
66
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
67
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
68
|
+
requires resource: 'Conformance', methods: ['read']
|
|
69
|
+
validates resource: 'Conformance', methods: ['read']
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
smart_security_base = 'http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris'
|
|
73
|
+
smart_security_extensions = ['register','authorize','token']
|
|
74
|
+
|
|
75
|
+
@rest_index = nil
|
|
76
|
+
@found_smart_code = false
|
|
77
|
+
found_smart_base = false
|
|
78
|
+
|
|
79
|
+
@conformance.rest.each_with_index do |rest,index|
|
|
80
|
+
service = rest.try(:security).try(:service)
|
|
81
|
+
if !service.nil? && !service.empty?
|
|
82
|
+
service.each do |concept|
|
|
83
|
+
concept.coding.each do |coding|
|
|
84
|
+
@found_smart_code = (!coding.nil? && coding.code=='SMART-on-FHIR' && coding.system=='http://hl7.org/fhir/restful-security-service')
|
|
85
|
+
if @found_smart_code
|
|
86
|
+
@rest_index = index
|
|
87
|
+
rest.security.extension.each do |x|
|
|
88
|
+
found_smart_base = (x.url == smart_security_base)
|
|
89
|
+
if found_smart_base
|
|
90
|
+
x.extension.each do |y|
|
|
91
|
+
smart_security_extensions.delete(y.url)
|
|
92
|
+
end
|
|
93
|
+
end
|
|
94
|
+
end # each extension
|
|
95
|
+
end
|
|
96
|
+
end # each security code
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end # each restful endpoint
|
|
100
|
+
|
|
101
|
+
assert(@found_smart_code,'Conformance does not declare the SMART-on-FHIR security service for any REST endpoints.',@conformance.to_xml)
|
|
102
|
+
assert((found_smart_base && smart_security_extensions.empty?),"Conformance does not declare the SMART-on-FHIR security extensions: #{smart_security_base} #{smart_security_extensions}",@conformance.to_xml)
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
# Check that Conformance Resource Interactions
|
|
106
|
+
test 'DAF02','Check Conformance Resource Interactions against DAF Conformance' do
|
|
107
|
+
metadata {
|
|
108
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
109
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
110
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
111
|
+
requires resource: 'Conformance', methods: ['read']
|
|
112
|
+
validates resource: 'Conformance', methods: ['read']
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
rest = @conformance.rest.first
|
|
116
|
+
rest = @conformance.rest[@rest_index] if @found_smart_code
|
|
117
|
+
|
|
118
|
+
@daf_conformance.rest.first.resource.each do |daf_resource|
|
|
119
|
+
resource = rest.resource.select{|r|r.fhirType==daf_resource.fhirType}.first
|
|
120
|
+
assert(!resource.nil?, "Server does not declare support for the #{daf_resource.fhirType} resource.")
|
|
121
|
+
|
|
122
|
+
# TODO move rest.resource.profile checks into DAF00
|
|
123
|
+
# check profile match
|
|
124
|
+
warning { assert(resource.profile.reference==daf_resource.profile.reference,"Profile for #{resource.fhirType} does not match #{daf_resource.profile.reference}",resource.profile.reference) }
|
|
125
|
+
|
|
126
|
+
# check interaction.code (and interaction.extension.valueCode for SHALL/SHOULD)
|
|
127
|
+
shall_interactions = daf_resource.interaction.select{|x|x.extension.first.value.value=='SHALL'}.map{|x|x.code}
|
|
128
|
+
should_interactions = daf_resource.interaction.select{|x|x.extension.first.value.value=='SHOULD'}.map{|x|x.code}
|
|
129
|
+
|
|
130
|
+
resource.interaction.each do |interaction|
|
|
131
|
+
should_interactions.delete(interaction.code)
|
|
132
|
+
shall_interactions.delete(interaction.code)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
warning { assert(should_interactions.empty?,"Server does not declare support for the following SHOULD interactions on #{resource.fhirType}: #{should_interactions}") }
|
|
136
|
+
assert(shall_interactions.empty?,"Server does not declare support for the following SHALL interactions on #{resource.fhirType}: #{shall_interactions}")
|
|
137
|
+
end
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
# Check that Conformance searchParams
|
|
141
|
+
test 'DAF03','Check Conformance Search Parameters against DAF Conformance' do
|
|
142
|
+
metadata {
|
|
143
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
144
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
145
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
146
|
+
requires resource: 'Conformance', methods: ['read']
|
|
147
|
+
validates resource: 'Conformance', methods: ['read']
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
rest = @conformance.rest.first
|
|
151
|
+
rest = @conformance.rest[@rest_index] if @found_smart_code
|
|
152
|
+
|
|
153
|
+
@daf_conformance.rest.first.resource.each do |daf_resource|
|
|
154
|
+
resource = rest.resource.select{|r|r.fhirType==daf_resource.fhirType}.first
|
|
155
|
+
assert(!resource.nil?, "Server does not declare support for the #{daf_resource.fhirType} resource.")
|
|
156
|
+
|
|
157
|
+
# check searchParam.name
|
|
158
|
+
shall_params = daf_resource.searchParam.select{|x|x.extension.first.value.value=='SHALL'}.map{|x|x.name}
|
|
159
|
+
should_params = daf_resource.searchParam.select{|x|x.extension.first.value.value=='SHOULD'}.map{|x|x.name}
|
|
160
|
+
|
|
161
|
+
resource.searchParam.each do |searchParam|
|
|
162
|
+
should_params.delete(searchParam.name)
|
|
163
|
+
shall_params.delete(searchParam.name)
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
warning { assert(should_params.empty?,"Server does not declare support for the following SHOULD searchParams on #{resource.fhirType}: #{should_params}") }
|
|
167
|
+
assert(shall_params.empty?,"Server does not declare support for the following SHALL searchParams on #{resource.fhirType}: #{shall_params}")
|
|
168
|
+
|
|
169
|
+
# search chains
|
|
170
|
+
shall_chain = daf_resource.searchParam.select{|x|x.extension.first.value.value=='SHALL'}.map{|x|x.chain}.flatten
|
|
171
|
+
should_chain = daf_resource.searchParam.select{|x|x.extension.first.value.value=='SHOULD'}.map{|x|x.chain}.flatten
|
|
172
|
+
|
|
173
|
+
resource.searchParam.each do |searchParam|
|
|
174
|
+
should_chain -= searchParam.chain
|
|
175
|
+
shall_chain -= searchParam.chain
|
|
176
|
+
end
|
|
177
|
+
|
|
178
|
+
warning { assert(should_chain.empty?,"Server does not declare support for the following SHOULD searchParam.chain on #{resource.fhirType}: #{should_chain}") }
|
|
179
|
+
assert(shall_chain.empty?,"Server does not declare support for the following SHALL searchParam.chain on #{resource.fhirType}: #{shall_chain}")
|
|
180
|
+
|
|
181
|
+
# search includes
|
|
182
|
+
search_includes = daf_resource.searchInclude.map(&:clone)
|
|
183
|
+
search_includes -= resource.searchInclude
|
|
184
|
+
assert(search_includes.empty?,"Server does not declare support for the following SHALL searchIncludes on #{resource.fhirType}: #{search_includes}")
|
|
185
|
+
end
|
|
186
|
+
end
|
|
187
|
+
|
|
188
|
+
# Check Conformance for $everything on Patient and Encounter
|
|
189
|
+
test 'DAF04','Check Conformance for $everything on Patient and Encounter' do
|
|
190
|
+
metadata {
|
|
191
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
192
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
193
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
194
|
+
links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
|
|
195
|
+
requires resource: 'Conformance', methods: ['read']
|
|
196
|
+
validates resource: 'Conformance', methods: ['read']
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
rest = @conformance.rest.first
|
|
200
|
+
rest = @conformance.rest[@rest_index] if @found_smart_code
|
|
201
|
+
|
|
202
|
+
supports_ambiguous_everything = rest.operation.any?{|x|['$everything','everything'].include?(x.name.downcase) && x.definition.reference.downcase.ends_with?('everything')}
|
|
203
|
+
supports_patient_everything = rest.operation.any?{|x|['$everything','everything'].include?(x.name.downcase) && x.definition.reference.downcase.ends_with?('patient-everything')}
|
|
204
|
+
supports_encounter_everything = rest.operation.any?{|x|['$everything','everything'].include?(x.name.downcase) && x.definition.reference.downcase.ends_with?('encounter-everything')}
|
|
205
|
+
|
|
206
|
+
message = 'Excerpt from patient-operations.html#everything and encounter-operations.html#everything: In the US Realm, at a minimum, the resources returned SHALL include all the data covered by the meaningful use common data elements as defined in DAF.'
|
|
207
|
+
|
|
208
|
+
assert((supports_patient_everything || supports_encounter_everything || supports_ambiguous_everything), message)
|
|
209
|
+
warning{ assert((supports_patient_everything || supports_encounter_everything), "Ambiguous everything operation: cannot determine applicable resources. #{message}") }
|
|
210
|
+
warning{ assert(supports_patient_everything, "Cannot find Patient $everything operation. #{message}")}
|
|
211
|
+
warning{ assert(supports_encounter_everything, "Cannot find Encounter $everything operation. #{message}")}
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
# Check Conformance for $validate operation support
|
|
215
|
+
# NOT REQUIRED BY DAF IMPLEMENTATION GUIDE -- WARNING ONLY
|
|
216
|
+
test 'DAF05','Optional: Check Conformance for $validate Operation Support' do
|
|
217
|
+
metadata {
|
|
218
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
219
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
220
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
221
|
+
links "#{BASE_SPEC_LINK}/resource-operations.html#validate"
|
|
222
|
+
requires resource: 'Conformance', methods: ['read']
|
|
223
|
+
validates resource: 'Conformance', methods: ['read']
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
rest = @conformance.rest.first
|
|
227
|
+
rest = @conformance.rest[@rest_index] if @found_smart_code
|
|
228
|
+
|
|
229
|
+
@supports_validate = rest.operation.any?{|x|['$validate','validate'].include?(x.name.downcase) && x.definition.reference.downcase.ends_with?('validate')}
|
|
230
|
+
message = 'Although not required by the DAF Implementation Guide, the server should support resource validation to ensure resources correctly conform to the DAF profiles.'
|
|
231
|
+
warning{ assert(@supports_validate, message) }
|
|
232
|
+
end
|
|
233
|
+
|
|
234
|
+
# Check Conformance for transaction support
|
|
235
|
+
# NOT REQUIRED BY DAF IMPLEMENTATION GUIDE -- WARNING ONLY
|
|
236
|
+
test 'DAF06','Optional: Check Conformance for Transaction Support' do
|
|
237
|
+
metadata {
|
|
238
|
+
links "#{REST_SPEC_LINK}#conformance"
|
|
239
|
+
links "#{BASE_SPEC_LINK}/conformance.html"
|
|
240
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
241
|
+
links "#{REST_SPEC_LINK}#transaction"
|
|
242
|
+
requires resource: 'Conformance', methods: ['read']
|
|
243
|
+
validates resource: 'Conformance', methods: ['read']
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
rest = @conformance.rest.first
|
|
247
|
+
rest = @conformance.rest[@rest_index] if @found_smart_code
|
|
248
|
+
|
|
249
|
+
has_transaction_interaction = rest.interaction.any?{|x|x.code=='transaction'}
|
|
250
|
+
has_transaction_mode = (!rest.transactionMode.nil? && rest.transactionMode!='not-supported')
|
|
251
|
+
|
|
252
|
+
message = 'Although not required by the DAF Implementation Guide, the server should support transaction (preferred) or batch, to facilitate the transfer of patient records.'
|
|
253
|
+
|
|
254
|
+
warning{ assert((has_transaction_interaction || has_transaction_mode), message) }
|
|
255
|
+
end
|
|
256
|
+
|
|
257
|
+
# Create DAF Profile fixtures
|
|
258
|
+
# => all MUST SUPPORT fields
|
|
259
|
+
# => using DAF bindings
|
|
260
|
+
# => with all DAF EXTENSIONS
|
|
261
|
+
# BUT THE DAF IMPLEMENTATION GUIDE DOES NOT REQUIRE CREATE/WRITE SUPPORT.
|
|
262
|
+
# TRY TO VALIDATE THESE FIXTURES... BUT VALIDATE OPERATION IS NOT REQUIRED BY DAF IG EITHER.
|
|
263
|
+
# TRY TO SEARCH FOR DAF PROFILED RESOURCES... AND THEN HAVE OUR CLIENT VALIDATE THEM, IF THEY EXIST.
|
|
264
|
+
resources = Crucible::Generator::Resources.new
|
|
265
|
+
daf_conformance = resources.daf_conformance
|
|
266
|
+
daf_conformance.rest.first.resource.each do |daf_resource|
|
|
267
|
+
|
|
268
|
+
test "DAFS0_#{daf_resource.fhirType}", "Search #{daf_resource.fhirType} for DAF-#{daf_resource.fhirType} compliant resources" do
|
|
269
|
+
metadata {
|
|
270
|
+
links "#{BASE_SPEC_LINK}/resource.html#profile-tags"
|
|
271
|
+
links "#{BASE_SPEC_LINK}/daf/daf-#{daf_resource.fhirType.downcase}.html"
|
|
272
|
+
links "#{REST_SPEC_LINK}#search"
|
|
273
|
+
requires resource: "#{daf_resource.fhirType}", methods: ['search']
|
|
274
|
+
validates resource: "#{daf_resource.fhirType}", methods: ['search']
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
klass = "FHIR::#{daf_resource.fhirType}".constantize
|
|
278
|
+
options = {
|
|
279
|
+
:search => {
|
|
280
|
+
:parameters => {
|
|
281
|
+
'_profile' => daf_resource.profile.reference
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
# search on the resource by ?_profile=
|
|
286
|
+
reply = @client.search(klass,options)
|
|
287
|
+
assert_response_ok(reply)
|
|
288
|
+
assert_bundle_response(reply)
|
|
289
|
+
warning{ assert((1 >= reply.resource.entry.size), "The server did not return any DAF-#{daf_resource.fhirType}s.") }
|
|
290
|
+
|
|
291
|
+
if reply.resource.entry.size > 0
|
|
292
|
+
# store any results to a @server_side_resources
|
|
293
|
+
@server_side_resources[daf_resource.fhirType] = reply.resource.entry.map{|x|x.resource}
|
|
294
|
+
end
|
|
295
|
+
end
|
|
296
|
+
|
|
297
|
+
test "DAFV0_#{daf_resource.fhirType}", "Client-side validation of DAF-#{daf_resource.fhirType} search results" do
|
|
298
|
+
metadata {
|
|
299
|
+
links "#{BASE_SPEC_LINK}/resource-operations.html#validate"
|
|
300
|
+
links "#{BASE_SPEC_LINK}/daf/daf-#{daf_resource.fhirType.downcase}.html"
|
|
301
|
+
}
|
|
302
|
+
resource = @server_side_resources[daf_resource.fhirType]
|
|
303
|
+
skip if resource.nil? || resource.empty?
|
|
304
|
+
|
|
305
|
+
profiles = FHIR::StructureDefinition.get_profiles_for_resource(daf_resource.fhirType)
|
|
306
|
+
profile = profiles.select{|x|x.xmlId.start_with?'daf'}.first
|
|
307
|
+
skip if profile.nil?
|
|
308
|
+
|
|
309
|
+
resource.each do |r|
|
|
310
|
+
assert(profile.is_valid?(r),"The #{daf_resource.fhirType} with ID #{r.xmlId} is not DAF compliant but claims to be.",r.to_xml)
|
|
311
|
+
end
|
|
312
|
+
end
|
|
313
|
+
|
|
314
|
+
# if there are any profiled results in the @variable, and the server supports $validate, then $validate them
|
|
315
|
+
test "DAFV1_#{daf_resource.fhirType}", "Server-side validation of DAF-#{daf_resource.fhirType} search results" do
|
|
316
|
+
metadata {
|
|
317
|
+
links "#{BASE_SPEC_LINK}/resource-operations.html#validate"
|
|
318
|
+
links "#{BASE_SPEC_LINK}/daf/daf-#{daf_resource.fhirType.downcase}.html"
|
|
319
|
+
validates resource: "#{daf_resource.fhirType}", methods: ['$validate']
|
|
320
|
+
validates profiles: ['validate-profile']
|
|
321
|
+
}
|
|
322
|
+
skip unless @supports_validate
|
|
323
|
+
resource = @server_side_resources[daf_resource.fhirType]
|
|
324
|
+
skip if resource.nil? || resource.empty?
|
|
325
|
+
|
|
326
|
+
resource.each do |r|
|
|
327
|
+
reply = @client.validate(r,{profile_uri: daf_resource.profile.reference})
|
|
328
|
+
assert_response_ok(reply)
|
|
329
|
+
if !reply.id.nil?
|
|
330
|
+
assert( !reply.id.include?('validate'), "Server created an #{daf_resource.fhirType} with the ID `#{reply.resource.xmlId}` rather than validate the resource.", reply.id)
|
|
331
|
+
end
|
|
332
|
+
end
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
end
|
|
336
|
+
|
|
337
|
+
# Validate invalid DAF patient
|
|
338
|
+
test 'DAFV2', 'Optional: Server should not $validate an invalid DAF-Patient' do
|
|
339
|
+
metadata {
|
|
340
|
+
links "#{BASE_SPEC_LINK}/patient.html"
|
|
341
|
+
links "#{BASE_SPEC_LINK}/daf/daf-patient.html"
|
|
342
|
+
links "#{BASE_SPEC_LINK}/resource-operations.html#validate"
|
|
343
|
+
links "#{BASE_SPEC_LINK}/operation-resource-validate.html"
|
|
344
|
+
requires resource: 'Patient', methods: ['$validate']
|
|
345
|
+
validates profiles: ['validate-profile']
|
|
346
|
+
}
|
|
347
|
+
skip unless @supports_validate
|
|
348
|
+
|
|
349
|
+
# Removing the identifier and adding an "animal" to the
|
|
350
|
+
# Patient violates the DAF-Patient profile.
|
|
351
|
+
patient = Crucible::Tests::DAFResourceGenerator.daf_patient
|
|
352
|
+
patient.identifier = nil
|
|
353
|
+
patient.animal = Crucible::Tests::DAFResourceGenerator.minimal_animal
|
|
354
|
+
|
|
355
|
+
reply = @client.validate(patient,{profile_uri: patient.meta.profile.first})
|
|
356
|
+
assert_response_ok(reply)
|
|
357
|
+
assert_resource_type(reply,FHIR::OperationOutcome)
|
|
358
|
+
failed = reply.resource.issue.any?{|x|['fatal','error'].include?(x.severity) || x.code=='invalid' }
|
|
359
|
+
assert(failed,'The server failed to reject an invalid DAF-Patient.')
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
# Create Invalid DAF Profile fixtures, server should reject
|
|
363
|
+
# Validate valid and invalid DAF fixtures (server should PASS and FAIL appropriately)
|
|
364
|
+
# Search for DAF Profile fixtures (including by using DAF extensions)
|
|
365
|
+
|
|
366
|
+
# Test $everything on Patient and Encounter
|
|
367
|
+
test 'DAF20','Test $everything on Patient' do
|
|
368
|
+
metadata {
|
|
369
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
370
|
+
links "#{BASE_SPEC_LINK}/patient-operations.html#everything"
|
|
371
|
+
requires resource: 'Patient', methods: ['search', '$everything']
|
|
372
|
+
validates resource: 'Patient', methods: ['search', '$everything']
|
|
373
|
+
}
|
|
374
|
+
|
|
375
|
+
resource = @server_side_resources['Patient']
|
|
376
|
+
if resource.nil? || resource.empty?
|
|
377
|
+
options = {
|
|
378
|
+
:search => {
|
|
379
|
+
:flag => nil,
|
|
380
|
+
:compartment => nil,
|
|
381
|
+
:parameters => nil
|
|
382
|
+
}
|
|
383
|
+
}
|
|
384
|
+
reply = @client.search(FHIR::Patient, options)
|
|
385
|
+
assert_response_ok(reply)
|
|
386
|
+
assert_bundle_response(reply)
|
|
387
|
+
resource = reply.resource.entry.map{|x|x.resource}
|
|
388
|
+
end
|
|
389
|
+
skip if resource.nil? || resource.empty?
|
|
390
|
+
|
|
391
|
+
reply = @client.fetch_patient_record(resource.first.xmlId)
|
|
392
|
+
|
|
393
|
+
assert_response_ok(reply)
|
|
394
|
+
assert_bundle_response(reply)
|
|
395
|
+
end
|
|
396
|
+
|
|
397
|
+
test 'DAF21','Test $everything on Encounter' do
|
|
398
|
+
metadata {
|
|
399
|
+
links "#{BASE_SPEC_LINK}/daf/daf.html"
|
|
400
|
+
links "#{BASE_SPEC_LINK}/encounter-operations.html#everything"
|
|
401
|
+
requires resource: 'Encounter', methods: ['search', '$everything']
|
|
402
|
+
validates resource: 'Encounter', methods: ['search', '$everything']
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
resource = @server_side_resources['Encounter']
|
|
406
|
+
if resource.nil? || resource.empty?
|
|
407
|
+
options = {
|
|
408
|
+
:search => {
|
|
409
|
+
:flag => nil,
|
|
410
|
+
:compartment => nil,
|
|
411
|
+
:parameters => nil
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
reply = @client.search(FHIR::Encounter, options)
|
|
415
|
+
assert_response_ok(reply)
|
|
416
|
+
assert_bundle_response(reply)
|
|
417
|
+
resource = reply.resource.entry.map{|x|x.resource}
|
|
418
|
+
end
|
|
419
|
+
skip if resource.nil? || resource.empty?
|
|
420
|
+
|
|
421
|
+
reply = @client.fetch_encounter_record(resource.first.xmlId)
|
|
422
|
+
|
|
423
|
+
assert_response_ok(reply)
|
|
424
|
+
assert_bundle_response(reply)
|
|
425
|
+
end
|
|
426
|
+
|
|
427
|
+
# The DAF Responder SHALL identify the DAF profile(s) supported as part of the FHIR BaseResource.Meta.profile attribute for each instance.
|
|
428
|
+
|
|
429
|
+
end
|
|
430
|
+
end
|
|
431
|
+
end
|