Module: DaVinciDTRTestKit::QuestionnaireHelper
- Included in:
- DTRFullEHRV220AdaptiveQuestionnairesCompletedTest, DTRFullEHRV220NextQuestionRequestValidationTest, DTRFullEHRV220NextQuestionResponseValidationTest, DTRFullEHRV220QuestionnaireAdaptiveMustSupportTest, DTRFullEHRV220QuestionnaireBaseMustSupportTest, DTRFullEHRV220QuestionnaireStandardMustSupportTest, DTRFullEHRV220UIDisplayAndInteractionAttestationTest, DTRPayerServerV220::QuestionnaireAdaptiveMustSupportTest, DTRPayerServerV220::QuestionnaireAdaptiveSearchMustSupportTest, DTRPayerServerV220::QuestionnaireBaseMustSupportTest, DTRPayerServerV220::QuestionnairePackageBundleMustSupportTest, DTRPayerServerV220::QuestionnairePackageOutputParametersMustSupportTest, DTRPayerServerV220::QuestionnaireStandardMustSupportTest, MockPayer::FullEHRV220NextQuestionEndpoint
- Defined in:
- lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb
Instance Method Summary collapse
-
#adaptive_questionnaire?(questionnaire) ⇒ Boolean
Categorizing Questionnaires.
-
#contained_questionnaire_from_questionnaire_response(questionnaire_response) ⇒ Object
$next-question extraction of QuestionnaireResponse and Questionnaire.
-
#no_questionnaires_returned?(requests) ⇒ Boolean
Generic Questionnaire Extraction ($questionnaire-package or $next-question).
-
#questionnaire_canonical_url(questionnaire) ⇒ Object
Canonical URLs.
-
#questionnaire_display(questionnaire) ⇒ Object
Display for Questionnaires.
- #questionnaire_from_next_question_output_parameters(parameters) ⇒ Object
- #questionnaire_from_package_bundle(bundle, include_standard: true, include_adaptive: true) ⇒ Object
- #questionnaire_package_bundles(parameters) ⇒ Object
-
#questionnaire_package_output_parameters_from_operation_responses(requests) ⇒ Object
$questionnaire-package extraction of Parameters, Bundle, Questionnaire.
- #questionnaire_response_from_next_question_request(request_body) ⇒ Object
-
#questionnaire_response_from_next_question_response(response_body) ⇒ Object
$next-question has a single "return" out parameter typed as a Resource, so per the FHIR spec (https://www.hl7.org/fhir/R4/operations.html#response) a conformant response is the raw QuestionnaireResponse rather than a Parameters wrapper (see dtr_next_question_response_validation_test); a Parameters-wrapped
returnis tolerated too. - #questionnaires_from_operation_response_parameters(parameters, request, include_standard: true, include_adaptive: true) ⇒ Object
- #questionnaires_from_operation_responses(requests, include_standard: true, include_adaptive: true) ⇒ Object
- #questionnaires_from_questionnaire_package_output_parameters(parameters, include_standard: true, include_adaptive: true) ⇒ Object
Instance Method Details
#adaptive_questionnaire?(questionnaire) ⇒ Boolean
Categorizing Questionnaires
19 20 21 22 23 24 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 19 def adaptive_questionnaire?(questionnaire) questionnaire.extension.find do |extension| extension.valueBoolean != false && extension.url == 'http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-questionnaireAdaptive' end end |
#contained_questionnaire_from_questionnaire_response(questionnaire_response) ⇒ Object
$next-question extraction of QuestionnaireResponse and Questionnaire
78 79 80 81 82 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 78 def contained_questionnaire_from_questionnaire_response(questionnaire_response) questionnaire_response&.contained&.find do |contained_resource| contained_resource.is_a?(FHIR::Questionnaire) end end |
#no_questionnaires_returned?(requests) ⇒ Boolean
Generic Questionnaire Extraction ($questionnaire-package or $next-question)
45 46 47 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 45 def no_questionnaires_returned?(requests) questionnaires_from_operation_responses(requests).blank? end |
#questionnaire_canonical_url(questionnaire) ⇒ Object
Canonical URLs
7 8 9 10 11 12 13 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 7 def questionnaire_canonical_url(questionnaire) if questionnaire.version.present? "#{questionnaire.url}|#{questionnaire.version}" else questionnaire.url end end |
#questionnaire_display(questionnaire) ⇒ Object
Display for Questionnaires
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 30 def questionnaire_display(questionnaire) canonical_url = questionnaire_canonical_url(questionnaire) title = questionnaire.title.present? ? questionnaire.title : questionnaire.name if title.present? "#{title} (#{canonical_url})" else canonical_url end end |
#questionnaire_from_next_question_output_parameters(parameters) ⇒ Object
84 85 86 87 88 89 90 91 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 84 def questionnaire_from_next_question_output_parameters(parameters) return_parameter = parameters.parameter.find do |parameter| parameter.name == 'return' && parameter.resource.is_a?(FHIR::QuestionnaireResponse) end return nil unless return_parameter.present? contained_questionnaire_from_questionnaire_response(return_parameter.resource) end |
#questionnaire_from_package_bundle(bundle, include_standard: true, include_adaptive: true) ⇒ Object
143 144 145 146 147 148 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 143 def questionnaire_from_package_bundle(bundle, include_standard: true, include_adaptive: true) bundle.entry.find do |entry| entry.resource.is_a?(FHIR::Questionnaire) && (adaptive_questionnaire?(entry.resource) ? include_adaptive : include_standard) end&.resource end |
#questionnaire_package_bundles(parameters) ⇒ Object
130 131 132 133 134 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 130 def questionnaire_package_bundles(parameters) parameters.parameter.filter_map do |parameter| parameter.resource if parameter.name == 'packagebundle' && parameter.resource.is_a?(FHIR::Bundle) end end |
#questionnaire_package_output_parameters_from_operation_responses(requests) ⇒ Object
$questionnaire-package extraction of Parameters, Bundle, Questionnaire
124 125 126 127 128 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 124 def questionnaire_package_output_parameters_from_operation_responses(requests) parsed_operation_responses(requests).filter_map do |_request, response| response if response.is_a?(FHIR::Parameters) end end |
#questionnaire_response_from_next_question_request(request_body) ⇒ Object
109 110 111 112 113 114 115 116 117 118 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 109 def questionnaire_response_from_next_question_request(request_body) case request_body when FHIR::QuestionnaireResponse request_body when FHIR::Parameters request_body.parameter.find do |parameter| parameter.name == 'questionnaire-response' && parameter.resource.is_a?(FHIR::QuestionnaireResponse) end&.resource end end |
#questionnaire_response_from_next_question_response(response_body) ⇒ Object
$next-question has a single "return" out parameter typed as a Resource, so per the FHIR
spec (https://www.hl7.org/fhir/R4/operations.html#response) a conformant response is the
raw QuestionnaireResponse rather than a Parameters wrapper (see
dtr_next_question_response_validation_test); a Parameters-wrapped return is tolerated too.
Expects an already-parsed response body (a FHIR resource), not a raw request/JSON string.
98 99 100 101 102 103 104 105 106 107 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 98 def questionnaire_response_from_next_question_response(response_body) case response_body when FHIR::QuestionnaireResponse response_body when FHIR::Parameters response_body.parameter.find do |parameter| parameter.name == 'return' && parameter.resource.is_a?(FHIR::QuestionnaireResponse) end&.resource end end |
#questionnaires_from_operation_response_parameters(parameters, request, include_standard: true, include_adaptive: true) ⇒ Object
65 66 67 68 69 70 71 72 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 65 def questionnaires_from_operation_response_parameters(parameters, request, include_standard: true, include_adaptive: true) if request.url.include?('$questionnaire-package') questionnaires_from_questionnaire_package_output_parameters(parameters, include_standard:, include_adaptive:) elsif request.url.include?('$next-question') Array.wrap(include_adaptive ? questionnaire_from_next_question_output_parameters(parameters) : nil) end end |
#questionnaires_from_operation_responses(requests, include_standard: true, include_adaptive: true) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 49 def questionnaires_from_operation_responses(requests, include_standard: true, include_adaptive: true) questionnaires = [] parsed_operation_responses(requests).each do |request, response| # pull out Questionnaires from requests ($q-p and $n-q) if response.is_a?(FHIR::QuestionnaireResponse) questionnaires << contained_questionnaire_from_questionnaire_response(response) if include_adaptive elsif response.is_a?(FHIR::Parameters) questionnaires.concat(questionnaires_from_operation_response_parameters(response, request, include_standard:, include_adaptive:)) end end questionnaires.compact end |
#questionnaires_from_questionnaire_package_output_parameters(parameters, include_standard: true, include_adaptive: true) ⇒ Object
136 137 138 139 140 141 |
# File 'lib/davinci_dtr_test_kit/cross_suite/v2.2.0/questionnaire_helper.rb', line 136 def questionnaires_from_questionnaire_package_output_parameters(parameters, include_standard: true, include_adaptive: true) questionnaire_package_bundles(parameters).filter_map do |bundle| questionnaire_from_package_bundle(bundle, include_standard:, include_adaptive:) end end |