## ----include = FALSE----------------------------------------------------------
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>"
)

## -----------------------------------------------------------------------------
chi_numbers <- c(
  "0211165794",
  "9999999999",
  "402070763",
  "00402070763",
  "0101010000",
  "Missing CHI",
  NA,
  ""
)

library(phsmethods)

chi_check(chi_numbers)

## ----message=FALSE------------------------------------------------------------
library(dplyr)

data <- tibble(
  chi = c(
    "0211165794",
    "9999999999",
    "402070763",
    "00402070763",
    "0101010000",
    "Missing CHI",
    NA,
    ""
  )
)

## -----------------------------------------------------------------------------
fixed_data <- data %>%
  mutate(chi = chi_pad(chi))

checked_data <- fixed_data %>%
  mutate(valid_chi = chi_check(chi))

checked_data

## -----------------------------------------------------------------------------
fixed_data %>%
  count(valid_chi = chi_check(chi), sort = TRUE)

## -----------------------------------------------------------------------------
fixed_data %>%
  mutate(chi = if_else(chi_check(chi) != "Valid CHI", NA_character_, chi))

fixed_data %>%
  filter(chi_check(chi) == "Valid CHI")

## -----------------------------------------------------------------------------
fixed_data %>%
  mutate(
    chi_valid = if_else(
      stringr::str_detect(chi, "^0101"),
      chi_check(chi),
      chi_check(chi, check_mod10 = FALSE)
    )
  )

## -----------------------------------------------------------------------------
data <- tibble(
  chi = c(
    "0101011237",
    "0211165794",
    "0402070763",
    "0101336489",
    "1904851231",
    "2902960018"
  )
)

# Confirm all of the CHIs are valid
count(data, chi_check(chi, check_mod10 = FALSE))

data_sex <- data %>%
  mutate(sex = sex_from_chi(chi, chi_check = FALSE))
data_sex

## -----------------------------------------------------------------------------
data_sex <- data_sex %>%
  mutate(sex_factor = sex_from_chi(chi, as_factor = TRUE))

data_sex

## -----------------------------------------------------------------------------
library(ggplot2)

data_sex %>%
  ggplot(aes(y = "", fill = sex_factor)) +
  geom_bar() +
  coord_polar() +
  labs(title = "Count of Male vs Female", x = "", y = "") +
  scale_fill_brewer("Sex (from CHI)", type = "qual") +
  theme_minimal()

## -----------------------------------------------------------------------------
data_dob <- data %>%
  mutate(dob = dob_from_chi(chi))

data_dob

## -----------------------------------------------------------------------------
# Expect no one born after 2015-12-31
data %>%
  mutate(dob = dob_from_chi(chi, max_date = as.Date("2015-12-31")))

# Expect no one born before 1999-12-31 i.e. 16 years before our data started.
data %>%
  mutate(
    dob = dob_from_chi(
      chi,
      max_date = as.Date("2015-12-31"),
      min_date = as.Date("2015-12-31") - lubridate::years(16)
    )
  )

## -----------------------------------------------------------------------------
data <- data %>%
  mutate(
    event_date = as.Date(c(
      "2015-01-01",
      "2014-01-01",
      "2013-01-01",
      "2012-01-01",
      "2011-01-01",
      "2010-01-01"
    ))
  )

# Using the event date as the maximum date
data %>%
  mutate(dob = dob_from_chi(chi, max_date = event_date))

# Setting a 'fixed' minimum date as well as using the event date
data_dob <- data %>%
  mutate(
    dob = dob_from_chi(
      chi,
      max_date = event_date,
      min_date = as.Date("1915-01-01")
    )
  )

data_dob

## -----------------------------------------------------------------------------
data %>%
  mutate(age = age_from_chi(chi))

# Work out age at a fixed date
data %>%
  mutate(age = age_from_chi(chi, ref_date = as.Date("2016-01-01")))

# Work out age at a relative date
data %>%
  mutate(age = age_from_chi(chi, ref_date = event_date))

## -----------------------------------------------------------------------------
data %>%
  mutate(age = age_from_chi(chi, ref_date = event_date, max_age = 18))

data %>%
  mutate(
    age = age_from_chi(
      chi,
      ref_date = event_date,
      min_age = 60,
      max_age = 120
    )
  )

data %>%
  mutate(
    age = age_from_chi(
      chi,
      min_age = 60,
      max_age = 120
    )
  )

