class CqmValidators::DataValidator

Constants

HL7_QRDA_OIDS

Public Class Methods

new(measure_ids) click to toggle source
# File lib/data_validator.rb, line 52
def initialize(measure_ids)
  measures = CQM::Measure.find(measure_ids)
  @value_set_ids = measures.collect { |m| m.value_sets.map(&:_id) }.flatten.uniq
end

Public Instance Methods

validate(file, options = {}) click to toggle source
# File lib/data_validator.rb, line 57
def validate(file, options = {})
  doc = get_document(file)

  doc.xpath('//*[@sdtc:valueSet]').each_with_object([]) do |node, errors|
    oid = node.at_xpath('@sdtc:valueSet')
    vs = CQM::ValueSet.where('oid' => oid, '_id' => { '$in' => @value_set_ids }).first
    next unless vs

    code = node.at_xpath('@code')
    code_system_oid = node.at_xpath('@codeSystem')
    null_flavor = node.at_xpath('@nullFlavor')
    next unless vs.concepts.where(code: code, code_system_oid: code_system_oid).count.zero?

    unless null_flavor
      errors << build_error("The code #{code} in codeSystem #{code_system_oid} cannot be found in the declared valueset #{oid}",
                            node.path, options[:file_name])
    end
  end
end