R/qof.R

Defines functions extract_qof_codes extract_qof_codes.rclinconcept get_codes_matching_qof_pattern

#' Get groups of codes from the DB (e.g. similar format to the NHS QoF) based on inclusions and exclusions
#' Internally this uses the 'get_codes_matching_qof_pattern' function to retrieve included and excluded codes
#' and then removes excluded codes from the set.
#' @param dict dict object (see rcc_from_list/rcc_from_file)
#' @param include code pattern to include codes for (a single code or a vector can be used)
#' @param exclude code pattern to exclude codes for (a single code or a vector can be used)
#' @return character vector containing codes based on inclusions and exclusions
#' @export
#' @examples
#' dict<-rcc_from_file("/path/to/dictconfig")
#' h3_codes_with_exclusions<-extract_qof_codes(config,"H3...%",c("H32..%","H31..."))
#
extract_qof_codes<-function(dict,code,exclusions=c()) {
  UseMethod("extract_qof_codes")
}
extract_qof_codes.rclinconcept<-function(dict,include,exclude=c()) {
  included_codes<-get_codes_matching_qof_pattern(dict,include)

  for(exclusion in exclusions) {
    excluded_codes<-get_codes_matching_qof_pattern(dict,exclude)
    included_codes<-included_codes[!(included_codes %in% excluded_codes)]
  }
  included_codes
}

#' Function which gets codes matching the QOF pattern (e.g. if % is used finds all child codes)
#'
#' @param config rexceed config object (see new_config)
#' @param pattern READ code pattern to get codes for
#' @param read_version can be 2 or 3
#' @return character vector containing READ codes based on read_code pattern
#' @export
#
get_codes_matching_qof_pattern<-function(dict,pattern) {
  codes<-c()
  if(!is.vector(pattern)) {
    pattern=c(pattern)
  }
  for(pattern_item in pattern) {
    pattlen<-nchar(pattern_item)
    if(substring(pattern_item,pattlen,pattlen)=="%") {
      non_pattern<-substring(pattern_item,1,pattlen-1)

      codes<-c(codes,non_pattern)
      codes<-c(codes,get_child_codes(dict,non_pattern,output_codes=T))
    }
    else {
      codes<-c(codes,pattern_item)
    }
  }
  codes
}
rcfree/rclinconcept documentation built on Nov. 8, 2019, 8:09 a.m.