def complex_coverage(data_criteria, check_criteria)
      same_value = data_criteria.value.nil? ||
                   data_criteria.value.try(:to_model).try(:to_json) == check_criteria.value.try(:to_model).try(:to_json)

      same_field_values = same_field_values_check(data_criteria, check_criteria)

      same_negation_values = data_criteria.negation_code_list_id.nil? ||
                             data_criteria.negation_code_list_id == check_criteria.negation_code_list_id

      same_value && same_negation_values && same_field_values
    end
def complex_coverage(data_criteria, check_criteria)
      same_value = data_criteria.value.nil? ||
                   data_criteria.value.try(:to_model).try(:to_json) == check_criteria.value.try(:to_model).try(:to_json)

      same_field_values = same_field_values_check(data_criteria, check_criteria)

      same_negation_values = data_criteria.negation_code_list_id.nil? ||
                             data_criteria.negation_code_list_id == check_criteria.negation_code_list_id

      same_value && same_negation_values && same_field_values
    end
Check elements that do not already exist; else, if they do, check if those elements are the same
 in a different, potentially matching, data criteria