21  Summary Dashboard

Metadata

    [ROWS] 90 
  [FIELDS] 10 
[MODIFIED] 2025-01-30 
[DOWNLOAD] https://download.cms.gov/openpayments/SMRY_RPTS_P01302025_01212025/PBLCTN_DSHBRD_P01302025_01212025.csv 

Data

# A tibble: 90 × 10
   dashboard_row_number data_metrics     py_2017 py_2018 py_2019 py_2020 py_2021
                                             
 1 2                    Total Dollar Am… 998344… 109882… 118794… 100519… 124674…
 2 3                    Total Dollar Am… 296470… 311980… 371116… 218672… 325478…
 3 4                    Total Dollar Am… 160510… 231246… 748979… 184671… 237104…
 4 5                    Total Dollar Am… 296309… 311749… 371041… 218487… 325240…
 5 6                    Total Dollar Am… 594550… 621907… 654725… 648136… 766416…
 6 7                    Total Dollar Am… 139533… 155362… 176525… 169179… 174644…
 7 8                    Total Dollar Am… 455016… 466545… 478199… 478957… 591771…
 8 9                    Total Dollar Am… 466174… 477411… 488186… 487109… 599788…
 9 10                   Total Dollar Am… 455016… 466545… 478199… 478957… 591814…
10 11                   Total Dollar Am… 362794… 275792… 799696… 496954… 140845…
# ℹ 80 more rows
# ℹ 3 more variables: py_2022 , py_2023 , total 

Tidyup

x <- resp |> 
    mtt(
      metric = data_metrics,
      type   = case(
        grepl("^Total Number of", metric, perl = TRUE)              ~ "count",
        grepl("^Total Dollar Amount of", metric, perl = TRUE)       ~ "dollar",
        grepl("^Total Dollar Amount Invested", metric, perl = TRUE) ~ "invest",
        grepl("^Total value of interest", metric, perl = TRUE)      ~ "value"),
      data_metrics         = NULL,
      dashboard_row_number = NULL) |>
    rsplit(~ type)

  x$count <-  mtt(
    x$count,
    metric = gsub("^Total Number of ", "", metric, perl = TRUE),
    metric = gsub("^all ", "", metric, perl = TRUE),
    type   = cheapr_if_else(grepl("^Payment Records", metric, perl = TRUE), "record", "entity")) |>
    rsplit( ~ type)

  x$count$entity <- rnm(
    x$count$entity,
    `2017` = py_2017,
    `2018` = py_2018,
    `2019` = py_2019,
    `2020` = py_2020,
    `2021` = py_2021,
    `2022` = py_2022,
    `2023` = py_2023,
    ALL = total) |>
    mtt(
      metric = gsub("Companies Making Payments \\(AM/GPO Making Payment\\)",
                    "Companies [AM/GPO] Making Payments", metric, perl = TRUE),
      metric = gsub("Physician Covered Recipients with associated payment records",
                    "Physicians with Payment Records", metric, perl = TRUE),
      metric = gsub("Non-Physician Practitioner Covered Recipients with associated payment records",
                    "NPPs with Payment Records", metric, perl = TRUE),
      metric = gsub("Teaching Hospitals with associated payment records",
                    "Teaching Hospitals with Payment Records", metric, perl = TRUE)) |>
    pivot(ids = "metric", names = list("year", "count")) |>
    roworder(metric, -year) |>
    colorder(year) |>
    mtt(count = as.integer(count)) |>
    as_tbl()

  x$count$record <- rnm(
    x$count$record,
    `2017` = py_2017,
    `2018` = py_2018,
    `2019` = py_2019,
    `2020` = py_2020,
    `2021` = py_2021,
    `2022` = py_2022,
    `2023` = py_2023,
    ALL = total
  ) |>
    mtt(
      type = case(
        grepl("General Payments", metric, perl = TRUE) ~ "General",
        grepl("Research Payments", metric, perl = TRUE) ~ "Research",
        grepl("Ownership Payments", metric, perl = TRUE) ~ "Ownership",
        .default = "All"
      ),
      status = case(
        grepl("Disputed", metric, perl = TRUE) ~ "Disputed",
        grepl("Undisputed", metric, perl = TRUE) ~ "Undisputed"
      ),
      entity = case(
        grepl("- Covered Recipient", metric, perl = TRUE) ~ "Covered Recipient",
        grepl("- Non-Covered Recipient", metric, perl = TRUE) ~ "Non-Covered Recipient",
        grepl("- Physician or Non-Covered Recipient", metric, perl = TRUE) ~ "Physician or Non-Covered Recipient",
        grepl(
          "- Non-Physician Practitioner or Non-Covered Recipient",
          metric,
          perl = TRUE
        ) ~ "Non-Physician Practitioner or Non-Covered Recipient",
        grepl(" to Physicians", metric, perl = TRUE) ~ "Physician",
        grepl(" to Non-Physician Practitioners", metric, perl = TRUE) ~ "Non-Physician Practitioner",
        grepl(" to Teaching Hospitals", metric, perl = TRUE) ~ "Teaching Hospital",
        grepl(" - Non-Covered Recipient Entity", metric, perl = TRUE) ~ "Non-Covered Recipient Entity",
        grepl(" - Non-Covered Recipient Individual", metric, perl = TRUE) ~ "Non-Covered Recipient Individual"
      ),
      metric = NULL
    ) |>
    pivot(ids = c("type", "status", "entity"),
          names = list("year", "count")) |>
    roworder(type, -year) |>
    colorder(year, type, entity) |>
    mtt(count = as.integer(count)) |>
    as_tbl()

  x$invest <- mtt(
    x$invest,
    metric = gsub("^Total Dollar Amount Invested of all Payment Records ", "", metric, perl = TRUE),
    metric = gsub("^-\\s", "", metric, perl = TRUE))

  x$value <- mtt(
    x$value,
    metric = gsub("^Total value of interest of all Payment Records ", "", metric, perl = TRUE),
    metric = gsub("^-\\s", "", metric, perl = TRUE))

  x$dollar <- mtt(
    x$dollar,
    metric = gsub("^Total Dollar Amount of ", "", metric, perl = TRUE),
    metric = gsub("^all ", "", metric, perl = TRUE))
x
$count
$count$entity
# A tibble: 32 × 3
   year  metric                              count
 *                                 
 1 ALL   Companies [AM/GPO] Making Payments   2843
 2 2023  Companies [AM/GPO] Making Payments   1776
 3 2022  Companies [AM/GPO] Making Payments   1858
 4 2021  Companies [AM/GPO] Making Payments   1855
 5 2020  Companies [AM/GPO] Making Payments   1779
 6 2019  Companies [AM/GPO] Making Payments   1797
 7 2018  Companies [AM/GPO] Making Payments   1755
 8 2017  Companies [AM/GPO] Making Payments   1678
 9 ALL   NPPs with Payment Records          414900
10 2023  NPPs with Payment Records          309427
# ℹ 22 more rows

$count$record
# A tibble: 320 × 5
   year  type  entity                     status    count
 *                              
 1 ALL   All   NA                         NA     84035057
 2 ALL   All   Physician                  NA     65341949
 3 ALL   All   Non-Physician Practitioner NA     12787445
 4 ALL   All   Teaching Hospital          NA      1131236
 5 2023  All   NA                         NA     15639275
 6 2023  All   Physician                  NA      9630514
 7 2023  All   Non-Physician Practitioner NA      4976520
 8 2023  All   Teaching Hospital          NA       143632
 9 2022  All   NA                         NA     14277900
10 2022  All   Physician                  NA      9036995
# ℹ 310 more rows


$dollar
# A tibble: 35 × 9
   py_2017       py_2018    py_2019 py_2020 py_2021 py_2022 py_2023 total metric
                                   
 1 9983443884.20 109882560… 118794… 100519… 124674… 127965… 126890… 7243… Payme…
 2 2964700222.32 311980393… 371116… 218672… 325478… 380973… 327760… 2232… Payme…
 3 1605102.03    2312465.96 748979… 184671… 237104… 206960… 122548… 1217… Payme…
 4 2963095120.29 311749147… 371041… 218487… 325240… 380766… 327637… 2231… Payme…
 5 5945500870.57 621907659… 654725… 648136… 766416… 783691… 807165… 4876… Payme…
 6 1395333630.70 155362520… 176525… 169179… 174644… 171621… 157933… 1144… Payme…
 7 4550167239.87 466545139… 478199… 478957… 591771… 612070… 649231… 3731… Payme…
 8 4661745514.93 477411500… 488186… 487109… 599788… 619872… 656340… 3794… Payme…
 9 4550167239.87 466545139… 478199… 478957… 591814… 612112… 649284… 3731… Payme…
10 3627948.41    2757924.06 799696… 496954… 140845… 571428… 208709… 3404… Payme…
# ℹ 25 more rows

$invest
# A tibble: 5 × 9
  py_2017      py_2018      py_2019 py_2020 py_2021 py_2022 py_2023 total metric
                                   
1 268224163.55 542424630.64 526403… 420228… 416271… 287661… 218848… 2680… Owner…
2 23232.00     64837.50     0.00    0.00    0.00    0.00    11600.… 9966… Owner…
3 268200931.55 542359793.14 526403… 420228… 416271… 287661… 218836… 2679… Owner…
4 268224163.55 542424630.64 526403… 420228… 416271… 287661… 218848… 2680… to Ph…
5 23232.00     64837.50     0.00    0.00    0.00    0.00    11600.… 9966… to Ph…

$value
# A tibble: 6 × 9
  py_2017       py_2018     py_2019 py_2020 py_2021 py_2022 py_2023 total metric
                                   
1 1073242791.31 1649375557… 162102… 138381… 154850… 114988… 133978… 1339… Owner…
2 27902592.00   265936.00   0.00    0.00    0.00    99992.… 160592… 1605… Owner…
3 1045340199.31 1649109621… 162102… 138381… 154850… 114978… 133961… 1339… Owner…
4 1073242791.31 1649375557… 162102… 138381… 154850… 114988… 133978… 1339… to Ph…
5 27902592.00   265936.00   0.00    0.00    0.00    99992.… 160592… 1605… to Ph…
6 1045340199.31 1649109621… 162102… 138381… 154850… 114978… 133961… 1339… to Ph…