Skip to content

Commit e4c160d

Browse files
authored
Merge pull request #32 from The-Strategy-Unit/15-tables
Add procedures and diagnoses tables
2 parents ed27a76 + d1a2f70 commit e4c160d

31 files changed

+4792
-37
lines changed

.Renviron.example

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11
AZ_CONTAINER_INPUTS=
22
AZ_STORAGE_EP=
3+
DATA_VERSION=
4+
START_YEAR=

DESCRIPTION

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ Imports:
1919
ggplot2,
2020
ggrepel,
2121
glue,
22+
gt,
2223
jsonlite,
2324
markdown,
2425
purrr,
@@ -27,6 +28,7 @@ Imports:
2728
scales,
2829
shiny,
2930
stringr,
31+
tibble,
3032
tidyr,
3133
tidyselect,
3234
withr

NAMESPACE

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
# Generated by roxygen2: do not edit by hand
22

33
export(convert_md_to_html)
4+
export(entable_encounters)
45
export(fetch_strategy_text)
56
export(generate_rates_baseline_data)
67
export(generate_rates_funnel_data)
78
export(isolate_provider_peers)
89
export(plot_rates_box)
910
export(plot_rates_funnel)
1011
export(plot_rates_trend)
12+
export(prepare_diagnoses_data)
13+
export(prepare_procedures_data)
1114
export(run_app)
1215
export(theme_rates)
16+
importFrom(rlang,":=")
1317
importFrom(rlang,.data)
1418
importFrom(rlang,.env)

R/ZZZ.R

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
#' @importFrom rlang .data .env
1+
#' @importFrom rlang .data .env :=
22
NULL
33

44
utils::globalVariables("temp")

R/app_server.R

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,28 @@
22
#' @param input,output,session Internal parameters for 'shiny'.
33
#' @noRd
44
app_server <- function(input, output, session) {
5+
# Env variables ----
6+
inputs_container_name <- Sys.getenv("AZ_CONTAINER_INPUTS")
7+
data_version <- Sys.getenv("DATA_VERSION")
8+
start_year <- Sys.getenv("START_YEAR") |> as.numeric()
9+
510
# Data ----
6-
container <- azkit::get_container(Sys.getenv("AZ_CONTAINER_INPUTS"))
7-
rates_data <- azkit::read_azure_parquet(container, "rates", "dev")
11+
inputs_container <- azkit::get_container(inputs_container_name)
12+
rates_data <- azkit::read_azure_parquet(
13+
inputs_container,
14+
"rates",
15+
data_version
16+
)
17+
procedures_data <- azkit::read_azure_parquet(
18+
inputs_container,
19+
"procedures",
20+
data_version
21+
)
22+
diagnoses_data <- azkit::read_azure_parquet(
23+
inputs_container,
24+
"diagnoses",
25+
data_version
26+
)
827

928
# Lookups ----
1029
providers_lookup <- jsonlite::read_json(
@@ -23,6 +42,14 @@ app_server <- function(input, output, session) {
2342
app_sys("app", "data", "peers.csv"),
2443
col_types = "c"
2544
)
45+
procedures_lookup <- readr::read_csv(
46+
app_sys("app", "data", "procedures.csv"),
47+
col_types = "c"
48+
)
49+
diagnoses_lookup <- readr::read_csv(
50+
app_sys("app", "data", "diagnoses.csv"),
51+
col_types = "c"
52+
)
2653

2754
# User inputs ----
2855
selected_provider <- mod_select_provider_server(
@@ -47,4 +74,20 @@ app_server <- function(input, output, session) {
4774
selected_provider,
4875
selected_strategy
4976
)
77+
mod_table_procedures_server(
78+
"mod_table_procedures",
79+
procedures_data,
80+
procedures_lookup,
81+
selected_provider,
82+
selected_strategy,
83+
start_year
84+
)
85+
mod_table_diagnoses_server(
86+
"mod_table_diagnoses",
87+
diagnoses_data,
88+
diagnoses_lookup,
89+
selected_provider,
90+
selected_strategy,
91+
start_year
92+
)
5093
}

R/app_ui.R

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
app_ui <- function(request) {
55
bslib::page_sidebar(
66
title = "Explore TPMA data (in development)",
7+
fillable = FALSE, # allow page scroll
78

89
sidebar = bslib::sidebar(
910
mod_select_provider_ui("mod_select_provider"),
@@ -23,8 +24,19 @@ app_ui <- function(request) {
2324

2425
bslib::layout_columns(
2526
col_widths = c(3, 9),
27+
fill = FALSE,
28+
fillable = FALSE,
2629
mod_show_strategy_text_ui("mod_show_strategy_text"),
27-
mod_plot_rates_ui("mod_plot_rates")
30+
bslib::layout_column_wrap(
31+
width = 1,
32+
gap = "0.8rem",
33+
mod_plot_rates_ui("mod_plot_rates"),
34+
bslib::layout_column_wrap(
35+
width = 1 / 2,
36+
mod_table_procedures_ui("mod_table_procedures"),
37+
mod_table_diagnoses_ui("mod_table_diagnoses")
38+
)
39+
)
2840
)
2941
)
3042
}
File renamed without changes.

R/fct_tables.R

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#' Create 'gt' Summary Table of Procedures or Diagnoses
2+
#' @param encounters_prepared A data.frame. Data for procedures or diagnoses
3+
#' ('encounters') that's been processed with [prepare_procedures_data] or
4+
#' [prepare_diagnoses_data].
5+
#' @return A 'gt' table.
6+
#' @export
7+
entable_encounters <- function(encounters_prepared) {
8+
encounter_description <- names(encounters_prepared)[1]
9+
encounter_type <- stringr::str_remove(encounter_description, "_description")
10+
encounter_type_title <- stringr::str_to_title(encounter_type)
11+
12+
encounters_prepared |>
13+
gt::gt(encounter_description) |>
14+
gt::cols_label(
15+
!!rlang::sym(encounter_description) := encounter_type_title,
16+
"n" = "Count of Activity (spells)",
17+
"pcnt" = "% of Total Activity"
18+
) |>
19+
gt::tab_stubhead(encounter_type_title) |>
20+
gt::fmt_number(
21+
c("n"),
22+
decimals = 0,
23+
use_seps = TRUE
24+
) |>
25+
gt::fmt_percent(
26+
c("pcnt"),
27+
decimals = 1
28+
) |>
29+
gt::grand_summary_rows(
30+
columns = "n",
31+
fns = list(Total = ~ sum(.)),
32+
fmt = list(
33+
~ gt::fmt_number(., decimals = 0, use_seps = TRUE)
34+
)
35+
) |>
36+
gt::tab_style(
37+
style = list(
38+
gt::cell_fill(color = "#EFEFEF"),
39+
gt::cell_text(weight = "bold")
40+
),
41+
locations = list(
42+
gt::cells_column_labels(),
43+
gt::cells_stubhead(),
44+
gt::cells_grand_summary(),
45+
gt::cells_stub_grand_summary()
46+
)
47+
) |>
48+
gt::tab_style(
49+
style = list(
50+
gt::cell_fill(color = "#FBFBFB"),
51+
gt::cell_text(weight = "bold")
52+
),
53+
locations = list(
54+
gt::cells_body(
55+
rows = .data[[encounter_description]] == "Other"
56+
),
57+
gt::cells_stub(
58+
rows = .data[[encounter_description]] == "Other"
59+
)
60+
)
61+
)
62+
}

R/mod_plot_rates.R

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33
#' @noRd
44
mod_plot_rates_ui <- function(id) {
55
ns <- shiny::NS(id)
6+
# these plots share a y axis, so don't use layout_column_wrap()
67
bslib::layout_columns(
7-
col_widths = 4,
8+
col_widths = c(5, 5, 2),
9+
fill = FALSE,
10+
fillable = FALSE,
811
mod_plot_rates_trend_ui(ns("mod_plot_rates_trend")),
912
mod_plot_rates_funnel_ui(ns("mod_plot_rates_funnel")),
1013
mod_plot_rates_box_ui(ns("mod_plot_rates_box"))
@@ -14,10 +17,10 @@ mod_plot_rates_ui <- function(id) {
1417
#' Plot Rates Server
1518
#' @param id Internal parameter for `shiny`.
1619
#' @param rates A data.frame. Annual rate values for combinations of provider
17-
#' and TPMA.
20+
#' and strategy.
1821
#' @param peers_lookup A data.frame. A row per provider-peer pair.
19-
#' @param selected_provider Character. Provider code, e.g. `"RCX"`.
20-
#' @param selected_strategy Character. TPMA variable name, e.g.
22+
#' @param selected_provider Character. Provider code, e.g. `"RCF"`.
23+
#' @param selected_strategy Character. Strategy variable name, e.g.
2124
#' `"alcohol_partially_attributable_acute"`.
2225
#' @noRd
2326
mod_plot_rates_server <- function(

R/mod_plot_rates_box.R

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,10 @@ mod_plot_rates_box_ui <- function(id) {
1313
#' Plot Rates Box Server
1414
#' @param id Internal parameter for `shiny`.
1515
#' @param rates A data.frame. Annual rate values for combinations of provider
16-
#' and TPMA.
16+
#' and strategy.
1717
#' @param peers_lookup A data.frame. A row per provider-peer pair.
18-
#' @param selected_provider Character. Provider code, e.g. `"RCX"`.
19-
#' @param selected_strategy Character. TPMA variable name, e.g.
18+
#' @param selected_provider Character. Provider code, e.g. `"RCF"`.
19+
#' @param selected_strategy Character. Strategy variable name, e.g.
2020
#' `"alcohol_partially_attributable_acute"`.
2121
#' @param y_axis_limits Numeric vector. Min and max values for the y axis.
2222
#' @noRd

0 commit comments

Comments
 (0)