module HQMF2CQL::DataCriteriaTypeAndDefinitionExtraction

Extracts the type, and modifies the data criteria, based on the template id or definition

Public Instance Methods

extract_definition_from_template_id() click to toggle source

Given a template id, derive (if available) the definition for the template. The definitions are stored in hqmf-model/data_criteria.json.

# File lib/hqmf-parser/cql/data_criteria_helpers/dc_definition_from_template_or_type_extract.rb, line 17
def extract_definition_from_template_id
  found = false

  @template_ids.each do |template_id|
    # NOTE! (Adam 6/14): The following logic should absolutely be changed
    # when Bonnie CQL support goes production. The "try this then try
    # that" approach is an artifact of the template oids changing as of
    # MAT 5.3; we want to support measures exported using 5.3, but also
    # measures that were exported using previous versions of the MAT.

    # Try a lookup using the newer template oids.
    defs = HQMF::DataCriteria.definition_for_template_id(template_id, 'r2cql')

    # If the new template oids didn't work, try a lookup using the older
    # template oids.
    defs = HQMF::DataCriteria.definition_for_template_id(template_id, 'r2') unless defs

    if defs
      @definition = defs['definition']
      @status = defs['status'].length > 0 ? defs['status'] : nil
      found ||= true
    else
      found ||= handle_known_template_id(template_id)
    end
  end

  found
end
extract_definition_from_template_or_type() click to toggle source
# File lib/hqmf-parser/cql/data_criteria_helpers/dc_definition_from_template_or_type_extract.rb, line 6
def extract_definition_from_template_or_type
  # Try to determine what kind of data criteria we are dealing with
  # First we look for a template id and if we find one just use the definition
  # status and negation associated with that
  # If no template id or not one we recognize then try to determine type from
  # the definition element.
  extract_definition_from_type unless extract_definition_from_template_id
end
extract_definition_from_type() click to toggle source

Extract the definition (sometimes status, sometimes other elements) of the data criteria based on the type

# File lib/hqmf-parser/cql/data_criteria_helpers/dc_definition_from_template_or_type_extract.rb, line 47
def extract_definition_from_type
  if @entry.at_xpath('./cda:grouperCriteria')
    @definition ||= 'derived'
    return
  end
  # See if we can find a match for the entry definition value and status.
  entry_type = attr_val('./*/cda:definition/*/cda:id/@extension')
  handle_entry_type(entry_type)
end
handle_entry_type(entry_type) click to toggle source

Generate the definition and/or status from the entry type in most cases. If the entry type is nil, and the value is a specific occurrence, more parsing may be necessary.

# File lib/hqmf-parser/cql/data_criteria_helpers/dc_definition_from_template_or_type_extract.rb, line 59
def handle_entry_type(entry_type)
  # settings is required to trigger exceptions, which set the definition
  HQMF::DataCriteria.get_settings_for_definition(entry_type, @status)
  @definition = entry_type
rescue
  # if no exact match then try a string match just using entry definition value
  case entry_type
  when 'Medication', 'Medications'
    @definition = 'medication'
    @status = 'active' unless @status
  when 'RX'
    @definition = 'medication'
    @status = 'dispensed' unless @status
  when nil
    definition_for_nil_entry
  else
    @definition = extract_definition_from_entry_type(entry_type)
  end
end