validateQuestionnaireResponse function

Future<ValidationResults> validateQuestionnaireResponse({
  1. required QuestionnaireResponse questionnaireResponse,
  2. required ResourceCache resourceCache,
})

Validates a QuestionnaireResponse against the corresponding Questionnaire.

Implementation

Future<ValidationResults> validateQuestionnaireResponse({
  required QuestionnaireResponse questionnaireResponse,
  required ResourceCache resourceCache,
}) async {
  final results = ValidationResults();

  // Extract the questionnaire URL
  final questionnaireUrl = questionnaireResponse.questionnaire?.toString();
  if (questionnaireUrl == null) {
    return results
      ..addResult(
        null,
        'QuestionnaireResponse does not reference a Questionnaire',
        Severity.error,
      );
  }

  // Retrieve the Questionnaire
  final questionnaireDef =
      await resourceCache.getCanonicalResource(questionnaireUrl);
  if (questionnaireDef == null) {
    return results
      ..addResult(
        null,
        'Failed to retrieve Questionnaire: $questionnaireUrl',
        Severity.error,
      );
  } else if (questionnaireDef is! Questionnaire) {
    return results
      ..addResult(
        null,
        'Resource at $questionnaireUrl is not a Questionnaire',
        Severity.error,
      );
  }

  // Validate the QuestionnaireResponse against the Questionnaire
  results.combineResults(
    await _validateResponseItems(
      questionnaire: questionnaireDef,
      response: questionnaireResponse,
    ),
  );

  return results;
}