Module: USCoreTestKit::ValidationTest

Included in:
USCoreV311::AllergyIntoleranceValidationTest, USCoreV311::BodyheightValidationTest, USCoreV311::BodytempValidationTest, USCoreV311::BodyweightValidationTest, USCoreV311::BpValidationTest, USCoreV311::CarePlanValidationTest, USCoreV311::CareTeamValidationTest, USCoreV311::ConditionValidationTest, USCoreV311::DeviceValidationTest, USCoreV311::DiagnosticReportLabValidationTest, USCoreV311::DiagnosticReportNoteValidationTest, USCoreV311::DocumentReferenceValidationTest, USCoreV311::EncounterValidationTest, USCoreV311::GoalValidationTest, USCoreV311::HeadCircumferenceValidationTest, USCoreV311::HeartrateValidationTest, USCoreV311::ImmunizationValidationTest, USCoreV311::MedicationRequestValidationTest, USCoreV311::MedicationValidationTest, USCoreV311::ObservationLabValidationTest, USCoreV311::OrganizationValidationTest, USCoreV311::PatientValidationTest, USCoreV311::PediatricBmiForAgeValidationTest, USCoreV311::PediatricWeightForHeightValidationTest, USCoreV311::PractitionerValidationTest, USCoreV311::ProcedureValidationTest, USCoreV311::ProvenanceValidationTest, USCoreV311::PulseOximetryValidationTest, USCoreV311::ResprateValidationTest, USCoreV311::SmokingstatusValidationTest, USCoreV400::AllergyIntoleranceValidationTest, USCoreV400::BloodPressureValidationTest, USCoreV400::BmiValidationTest, USCoreV400::BodyHeightValidationTest, USCoreV400::BodyTemperatureValidationTest, USCoreV400::BodyWeightValidationTest, USCoreV400::CarePlanValidationTest, USCoreV400::CareTeamValidationTest, USCoreV400::ConditionValidationTest, USCoreV400::DeviceValidationTest, USCoreV400::DiagnosticReportLabValidationTest, USCoreV400::DiagnosticReportNoteValidationTest, USCoreV400::DocumentReferenceValidationTest, USCoreV400::EncounterValidationTest, USCoreV400::GoalValidationTest, USCoreV400::HeadCircumferencePercentileValidationTest, USCoreV400::HeadCircumferenceValidationTest, USCoreV400::HeartRateValidationTest, USCoreV400::ImmunizationValidationTest, USCoreV400::MedicationRequestValidationTest, USCoreV400::MedicationValidationTest, USCoreV400::ObservationLabValidationTest, USCoreV400::OrganizationValidationTest, USCoreV400::PatientValidationTest, USCoreV400::PediatricBmiForAgeValidationTest, USCoreV400::PediatricWeightForHeightValidationTest, USCoreV400::PractitionerValidationTest, USCoreV400::ProcedureValidationTest, USCoreV400::ProvenanceValidationTest, USCoreV400::PulseOximetryValidationTest, USCoreV400::RespiratoryRateValidationTest, USCoreV400::SmokingstatusValidationTest
Defined in:
lib/us_core_test_kit/validation_test.rb

Constant Summary collapse

DAR_CODE_SYSTEM_URL =
'http://terminology.hl7.org/CodeSystem/data-absent-reason'.freeze
DAR_EXTENSION_URL =
'http://hl7.org/fhir/StructureDefinition/data-absent-reason'.freeze

Instance Method Summary collapse

Instance Method Details

#check_for_dar(resource) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/us_core_test_kit/validation_test.rb', line 20

def check_for_dar(resource)
  unless scratch[:dar_code_found]
    resource.each_element do |element, meta, _path|
      next unless element.is_a?(FHIR::Coding)

      check_for_dar_code(element)
    end
  end

  unless scratch[:dar_extension_found]
    check_for_dar_extension(resource)
  end
end

#check_for_dar_code(coding) ⇒ Object



34
35
36
37
38
39
# File 'lib/us_core_test_kit/validation_test.rb', line 34

def check_for_dar_code(coding)
  return unless coding.code == 'unknown' && coding.system == DAR_CODE_SYSTEM_URL

  scratch[:dar_code_found] = true
  output dar_code_found: 'true'
end

#check_for_dar_extension(resource) ⇒ Object



41
42
43
44
45
46
# File 'lib/us_core_test_kit/validation_test.rb', line 41

def check_for_dar_extension(resource)
  return unless resource.source_contents&.include? DAR_EXTENSION_URL

  scratch[:dar_extension_found] = true
  output dar_extension_found: 'true'
end

#perform_validation_test(resources, profile_url) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
# File 'lib/us_core_test_kit/validation_test.rb', line 6

def perform_validation_test(resources, profile_url)
  skip_if resources.blank?,
          "No #{resource_type} resources conforming to the #{profile_url} profile were returned."

  resources.each do |resource|
    resource_is_valid?(resource: resource, profile_url: profile_url)
    check_for_dar(resource)
  end

  errors_found = messages.any? { |message| message[:type] == 'error' }

  assert !errors_found, "Resource does not conform to the profile #{profile_url}"
end