KPI Guide: PARBx & BPI

KPI Lirov PARBx

An overview of Lirov’s Percentage of Accounts Receivable Beyond X Days and Billing Performance Index

Andrew Bruce https://twitter.com/aabrucehimni (Healthcare Analytics in R)https://andrewbruce.netlify.app/about
03-24-2022

Introduction

Yuval Lirov is a very interesting figure in the medical billing field. I was first introduced to Dr. Lirov while combing through the Amazon reviews for a book on the financial management of physician practices. Scrolling through, one happened to catch my attention:

Dr. Lirov's review from amazon.com

(#fig:class=external)Dr. Lirov’s review from amazon.com

I might be going out on a limb here, but an Amazon review is not typically as thorough and opinionated. Needless to say, I made two purchases that day. I have probably read Medical Billing Networks and Processes twice now and continue to use it as a reference.

Healthcare reimbursement is an incredibly complex field and has a steep learning curve. Whether because of that complexity or the esoteric nature of the healthcare economic model in the US, finding sources of quality knowledge can be daunting.

The signal-to-noise ratio usually favors hearing loss. Talking a lot without saying much. Dr. Lirov’s book was the first I’d come across where the reverse held true.

His book has some very interesting medical billing-related metrics, several of which he developed himself. I’d like to go over two of them, PARB\(x\) and BPI. I’ve yet to see them in use and I believe they could be valuable tools in healthcare revenue cycle management.


PARB\(x\)

PARB\(x\), or Percentage of Accounts Receivable Beyond \(x\) Days, is exactly what it sounds like: monitoring the percentage of your AR balances as they age, in what are commonly referred to as aging “buckets” or “bins.” This idea, in and of itself, is not revolutionary, other than his suggestion to use PARB\(x\) to resolve Days in AR’s inability to highlight the overall behavior of Accounts Receivable. The innovation comes in the form of using the PARB\(x\) data to create an index that tracks a payer’s performance month-to-month and annually:

PARB\(x\) data can then be used to calculate a BPI, or Billing Performance Index. BPI is a key billing performance characteristic because it’s an indicator of claims that are never paid. Obviously, the lower the index, the better the billing performance. But this statistic is meaningful only when considered in the context of the relative performance of other payers. Lirov (2009)

Billing Performance Index (BPI)

Lirov’s Billing Performance Index was inspired by a Wall Street benchmarking technique called a payment performance index. He emphasizes the advantage of a “context-driven, rule-based approach to relative benchmarking”:

The advantage of rule-driven indexing is that participation is dynamically determined at a point in time, reflecting the dynamic nature of the entire market. Today’s top 10 list of index performers may not include the same names next week…A financial instrument’s specific performance is recomputed every time the index itself is computed, reflecting the dynamic nature of performance relative to the market itself. Lirov (2009)

Applying this indexing method to payers allows providers to track the ease/difficulty of the reimbursement process with each payer. Inclusion in the monthly index indicates that the percentage of AR older than 120 days belonging to a payer ranks among the lowest in a provider’s payer mix.

This results in a provider being able to focus his or her AR management resources on more problematic payers. Lirov does suggest several criteria that should be considered before a payer is elligible for inclusion such as a minimum threshold of claims submitted and total gross charges processed.

Monthly BPI Ranking

For this example, I’ve put the mock data provided by Dr. Lirov into a data frame. The data ranks (or indexes) the payers with the top 10 lowest PARB\(x\) percentages by the most recent month’s (December) figures, including November’s figures as well. December’s rankings appear alongside a Rank Change column indicating the number of places each payer rose or fell from November to December. Using {reactable} and {reactablefmtr} I can create an interactive table of the data:

Show code
# Data frame
bpi_mon <- data.frame(
  payer = c(
    "Medicare Illinois",
    "BCBS Illinois",
    "Cigna",
    "Horizon BCBS NJ",
    "Aetna",
    "UnitedHealthcare",
    "Medicare NJ",
    "GEICO",
    "BCBS Pennsylvania",
    "BCBS Georgia"
  ),
  rank_change = c(0, 0, 1, 3, 1, -4, -1, 1, -2, 1),
  nov_rank = c(1, 2, 4, 7, 6, 3, 5, 9, 8, 10),
  nov_parbx = c(5.8, 7.9, 15.7, 20.7, 20, 15, 19.4, 36.2, 30.5, 39.9),
  dec_rank = c(1, 2, 3, 4, 5, 7, 6, 8, 10, 9),
  dec_parbx = c(6.8, 8.1, 10.7, 13.9, 14.8, 21.2, 18.8, 35.2, 43.4, 43.3)
)

# Reactable code
bpi_mon_tbl <- reactable(
  bpi_mon,
  pagination = FALSE,
  outlined = TRUE,
  showSortable = TRUE,
  defaultColDef = colDef(
    footerStyle = list(fontWeight = "bold"),
    headerClass = "col-header",
    footerClass = "col-footer",
    align = "left"
  ),
  columnGroups = list(
    colGroup(
      name = "December",
      columns = c(
        "dec_rank",
        "dec_parbx"
      )
    ),
    colGroup(
      name = "November",
      columns = c(
        "nov_rank",
        "nov_parbx"
      )
    )
  ),
  columns = list(
    dec_rank = colDef(
      name = "Rank",
      align = "center",
      width = 90
    ),
    dec_parbx = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx",
      width = 90,
      format = colFormat(
        digits = 1
      ),
      defaultSortOrder = "desc",
      align = "center",
      style = color_scales(bpi_mon)
    ),
    nov_rank = colDef(
      name = "Rank",
      align = "center",
      width = 90
    ),
    nov_parbx = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx",
      width = 90,
      format = colFormat(
        digits = 1
      ),
      align = "center",
      style = color_scales(bpi_mon)
    ),
    payer = colDef(
      name = "Payer",
      sortable = FALSE,
      align = "right",
      footer = "PARBx Averages"
    ),
    rank_change = colDef(
      name = "Change",
      width = 100,
      format = colFormat(
        digits = 0
      ),
      show = TRUE,
      align = "center",
      cell = function(value) {
        value <- format(
          value,
          big.mark = ","
        )
        if (value > 0) {
          paste0("+", value)
        } else {
          value
        }
      },
      style = function(value) {
        color <- if (value > 0) {
          "black"
        } else if (value < 0) {
          "#ef4035"
        }
        list(fontWeight = 600, color = color)
      }
    ),
    html = TRUE
  ),
  defaultSorted = "dec_rank",
  compact = FALSE,
  class = "rcm-tbl"
) |>
  add_title("Billing Performance Index: November to December 2021", align = "left", font_color = "black", font_size = 24) |>
  add_subtitle("Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days", align = "left", font_color = "black", font_size = 18, font_weight = "normal")

div(class = "rcm-analysis", bpi_mon_tbl)

Billing Performance Index: November to December 2021

Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days

In terms of visualization, a slopegraph would be effective for displaying month-to-month ranking changes by PARB\(x\) percentages. Before I can begin any visualizations, I need to pivot my data into a “long” format with {tidyr}:

bpi_mon_long <- bpi_mon |>
  select(payer, nov_parbx, dec_parbx) |>
  rename(November = nov_parbx, December = dec_parbx) |>
  tidyr::pivot_longer(!payer, names_to = "month", values_to = "parbx")
head(bpi_mon_long, 10)
payer month parbx
Medicare Illinois November 5.8
Medicare Illinois December 6.8
BCBS Illinois November 7.9
BCBS Illinois December 8.1
Cigna November 15.7
Cigna December 10.7
Horizon BCBS NJ November 20.7
Horizon BCBS NJ December 13.9
Aetna November 20.0
Aetna December 14.8

Slopegraph

The interactive slopegraph with the {highcharter} package produces an effective presentation of data in this form. The viewer can intuitively understand each payer’s monthly ranking change and the PARB\(x\) percentage associated with that change:

Show code
parbx_hc1 <- bpi_mon_long |>
  hchart("line", hcaes(x = month, y = parbx, group = payer),
    dataLabels = list(
      enabled = TRUE,
      formatter = JS("function(){return(this.point.payer + ' ' + this.y + '%')}")
    ),
    style = list(fontSize = "16px", color = "#000000")
  ) |>
  hc_yAxis(
    gridLineWidth = 0,
    title = list(
      text = " ",
      align = "high",
      margin = 10
    ),
    labels = list(format = "{value}")
  ) |>
  hc_xAxis(
    title = list(text = NULL),
    opposite = TRUE,
    labels = list(format = "{value}"),
    crosshair = list(
      snap = TRUE,
      width = 2,
      zIndex = 0
    )
  ) |>
  hc_title(
    text = "PARBx: November to December 2021",
    align = "left",
    style = list(fontSize = "18", color = "#000000", fontWeight = "bold")
  ) |>
  hc_subtitle(
    text = "Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days",
    align = "left",
    style = list(fontSize = "14px", color = "#000000")
  ) |>
  hc_plotOptions(
    line = list(
      marker = list(
        symbol = "circle",
        lineWidth = 2,
        radius = 5
      )
    )
  ) |>
  hc_tooltip(
    useHTML = TRUE,
    crosshairs = TRUE,
    backgroundColor = "#F0F0F0",
    borderWidth = 1,
    sort = TRUE
  ) |>
  hc_legend(enabled = FALSE) |>
  hc_size(height = 800, width = 800) |>
  hc_chart(style = list(fontFamily = "Karla")) |>
  hc_chart(zoomType = "xy") |>
  hc_exporting(enabled = TRUE, filename = "chart")

parbx_hc1

Weighting Payers by Proportion of Total AR > 120 Days

There’s one step we can take to give us further insight into each payer’s relative performance: weighting their PARB\(x\) figures by the percentage of total AR older than 120 days that belongs to each. Keep in mind, the figures above represent a percentage of the AR belonging only to that payer.

Generate Random Weights

I’ll generate some random weights to add to each month. The probs() function from the wakefield package will generate a set of \(x\) numbers, the sum of which will be equal to one.

I’ll put these into a new data frame, merge the two data frames, then create a new “Weighted PARB\(x\)” column:

Show code
library(wakefield)
set.seed(1234)
a <- probs(10)
b <- probs(10)

# Create data frame with new data
props <- data.frame(
  payer = c(
    "Medicare Illinois",
    "BCBS Illinois",
    "Cigna",
    "Horizon BCBS NJ",
    "Aetna",
    "UnitedHealthcare",
    "Medicare NJ",
    "GEICO",
    "BCBS Pennsylvania",
    "BCBS Georgia"
  ),
  nov_pct = a,
  dec_pct = b
)

# Merge the two data frames
bpi_mon_wt <- merge(bpi_mon, props, by = "payer")

# Create new "Weighted PARBx" columns
# Remove "Rank" columns as they no longer apply
bpi_mon_wt <- bpi_mon_wt |>
  mutate(
    nov_parbx_wt = round(nov_parbx * nov_pct, 2),
    dec_parbx_wt = round(dec_parbx * dec_pct, 2),
    nov_pct = round(nov_pct * 100, 2),
    dec_pct = round(dec_pct * 100, 2)
  ) |>
  select(
    payer,
    nov_parbx,
    nov_pct,
    nov_parbx_wt,
    dec_parbx,
    dec_pct,
    dec_parbx_wt
  )

# Reactable
bpi_mon_wt_tbl <- reactable(
  bpi_mon_wt,
  pagination = FALSE,
  showSortable = TRUE,
  outlined = TRUE,
  defaultColDef = colDef(
    footerStyle = list(fontWeight = "bold"),
    headerClass = "col-header",
    footerClass = "col-footer",
    align = "left"
  ),
  columnGroups = list(
    colGroup(
      name = "December",
      columns = c(
        "dec_parbx",
        "dec_pct",
        "dec_parbx_wt"
      )
    ),
    colGroup(
      name = "November",
      columns = c(
        "nov_parbx",
        "nov_pct",
        "nov_parbx_wt"
      )
    )
  ),
  columns = list(
    dec_parbx_wt = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx (wt)",
      # width = 70,
      format = colFormat(
        digits = 1
      ),
      defaultSortOrder = "desc",
      align = "center",
      style = color_scales(bpi_mon_wt)
    ),
    dec_pct = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "Weight",
      # width = 100,
      format = colFormat(
        digits = 2
      ),
      show = TRUE,
      align = "center"
    ),
    dec_parbx = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx",
      # width = 70,
      format = colFormat(
        digits = 1
      ),
      defaultSortOrder = "desc",
      align = "center",
      style = color_scales(bpi_mon_wt)
    ),
    nov_parbx_wt = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx (wt)",
      # width = 70,
      format = colFormat(
        digits = 1
      ),
      defaultSortOrder = "desc",
      align = "center",
      style = color_scales(bpi_mon_wt)
    ),
    nov_pct = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "Weight",
      # width = 100,
      format = colFormat(
        digits = 2
      ),
      show = TRUE,
      align = "center"
    ),
    nov_parbx = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "PARBx",
      format = colFormat(
        digits = 1
      ),
      defaultSortOrder = "desc",
      align = "center",
      style = color_scales(bpi_mon_wt)
    ),
    payer = colDef(
      name = "Payer",
      width = 200,
      align = "right",
      footer = "Averages"
    ),
    html = TRUE
  ),
  defaultSorted = "dec_parbx_wt",
  compact = FALSE,
  class = "rcm-tbl"
) |>
  add_title("Weighted Billing Performance Index: November to December 2021", align = "left", font_color = "black", font_size = 24) |>
  add_subtitle("Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days, Weighted by Proportion of Total Client AR Beyond 120 Days", align = "left", font_color = "black", font_size = 14, font_weight = "normal")

div(class = "rcm-analysis", bpi_mon_wt_tbl)

Weighted Billing Performance Index: November to December 2021

Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days, Weighted by Proportion of Total Client AR Beyond 120 Days

Now we have a more accurate picture of each payer’s performance. I’ll pivot the data and create the new slopegraph:

bpi_mon_long_wt <- bpi_mon_wt |>
  select(payer, nov_parbx_wt, dec_parbx_wt) |>
  rename(November = nov_parbx_wt, December = dec_parbx_wt) |>
  tidyr::pivot_longer(!payer, names_to = "month", values_to = "parbx_wt")
head(bpi_mon_long_wt)
payer month parbx_wt
Aetna November 1.07
Aetna December 0.45
BCBS Georgia November 6.30
BCBS Georgia December 4.47
BCBS Illinois November 0.90
BCBS Illinois December 0.42

Weighted Slopegraph

Show code
parbx_hc2 <- bpi_mon_long_wt |>
  hchart("line", hcaes(x = month, y = parbx_wt, group = payer),
    dataLabels = list(
      enabled = TRUE,
      formatter = JS(
        "
        function(){return(this.point.payer + ' ' + this.y)}
        "
      )
    )
  ) |>
  hc_yAxis(
    gridLineWidth = 0,
    title = list(
      text = " ",
      align = "high",
      margin = 10
    ),
    labels = list(format = "{value}")
  ) |>
  hc_xAxis(
    title = list(text = NULL),
    opposite = TRUE,
    labels = list(format = "{value}"),
    crosshair = list(
      snap = TRUE,
      width = 2,
      zIndex = 0
    )
  ) |>
  hc_title(
    text = "Weighted PARBx: November to December 2021",
    align = "left",
    style = list(fontSize = "18", color = "#000000", fontWeight = "bold")
  ) |>
  hc_subtitle(
    text = "Top 10 Payers with the Lowest Percentage of AR Beyond 120 Days",
    align = "left",
    style = list(fontSize = "14", color = "#000000", fontWeight = "normal")
  ) |>
  hc_plotOptions(
    line = list(
      marker = list(
        symbol = "circle",
        lineWidth = 2,
        radius = 5
      )
    )
  ) |>
  hc_tooltip(
    useHTML = TRUE,
    crosshairs = TRUE,
    backgroundColor = "#F0F0F0",
    borderWidth = 1,
    sort = TRUE
  ) |>
  hc_legend(
    enabled = FALSE
  ) |>
  hc_size(height = 800, width = 800) |>
  hc_chart(
    style = list(
      fontFamily = "Karla"
    )
  ) |>
  hc_chart(zoomType = "xy") |>
  hc_exporting(enabled = TRUE, filename = "chart")

parbx_hc2

Normal vs. Weighted Comparisons

We can see the dramatic change between the normal rankings and the weighted rankings by placing both pairs of slopegraphs side-by-side:


Annual BPI Summary

The final destination for all of this data is the annual summary of the monthly Billing Performance Index. The Annual BPI is simply a list of the payers who participated in the Monthly BPI, ranked by the number of times that they made the top 10 that year. Also included are each payer’s mean, minimum, and maximum BPI for the year. Lirov sums up the importance of the annual summary:

A low percentage of accounts receivable beyond 120 days is critical to being included in the billing index. However, the frequency of inclusion in the index is a more robust performance metric, because it measures billing performance consistency over a longer time period. The following example table lists the insurance companies that made the BPI listing for 20xx, along with their average, low, and high billing index for the year. Lirov (2009)

Note: In the following example, I’ve broken any ties in ranking between payers by giving the payer with the lower average BPI the higher rank.

Show code
# Data frame
bpi_ann <- data.frame(
  rank = 1:15,
  mon = c(
    12, 11, 11, 10, 10,
    7, 7, 7, 5, 4, 3,
    3, 3, 2, 2
  ),
  payer = c(
    "BCBS Illinois", "Cigna",
    "Medicare New Jersey",
    "Aetna", "UnitedHealthcare",
    "Medicare Illinois", "Horizon BCBS New Jersey",
    "BCBS Pennsylvania", "BCBS Georgia",
    "Anthem BCBS Colorado",
    "BCBS Michigan", "BCBS Texas", "GEICO",
    "Anthem BCBS Colorado", "Humana"
  ),
  avg = c(
    10.9, 13.4, 15.7, 16.6, 17.2,
    14, 18, 23.5, 34.1, 19.1, 6.8,
    15.2, 34.9, 9.6, 9.9
  ),
  low = c(
    7.1, 8.9, 7.5, 8.8, 11.3,
    5.8, 13.9, 12.4, 22.9, 12.4,
    3.2, 10.3, 33.4, 6.8, 7.9
  ),
  high = c(
    16, 24.1, 20.5, 22.1, 23.2,
    30.4, 24.3, 43.4, 43.3, 34.1,
    13.6, 20, 36.2, 12.3, 11.8
  )
)

# Reactable
bpi_ann_tbl <- reactable(
  bpi_ann,
  pagination = FALSE,
  outlined = TRUE,
  defaultColDef = colDef(
    footerStyle = list(fontWeight = "bold"),
    headerClass = "col-header",
    footerClass = "col-footer",
    align = "left"
  ),
  columnGroups = list(
    colGroup(
      name = "Percentage of AR Beyond 120 Days",
      columns = c("avg", "low", "high")
    )
  ),
  columns = list(
    rank = colDef(
      name = "Rank",
      align = "center",
      width = 80
    ),
    mon = colDef(
      name = "Months Included",
      align = "center",
      width = 110
    ),
    payer = colDef(
      name = "Payer",
      align = "left",
      footer = "PARBx Averages"
    ),
    avg = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "Avg",
      width = 100,
      format = colFormat(digits = 1),
      align = "center",
      style = color_scales(bpi_ann)
    ),
    low = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "Low",
      width = 100,
      format = colFormat(digits = 1),
      align = "center",
      style = color_scales(bpi_ann)
    ),
    high = colDef(
      footer = function(values) sprintf("%.2f", mean(values)),
      name = "High",
      width = 100,
      format = colFormat(digits = 1),
      align = "center",
      style = color_scales(bpi_ann)
    ),
    html = TRUE
  ),
  compact = FALSE,
  class = "rcm-tbl"
) |>
  add_title("2021 Annual Billing Performance Index", align = "left", font_color = "black", font_size = 24) |>
  add_subtitle("Top 15 Payers Ranked by Number of Months Included in the Monthly BPI", align = "left", font_color = "black", font_size = 18, font_weight = "normal")

div(class = "rcm-analysis", bpi_ann_tbl)

2021 Annual Billing Performance Index

Top 15 Payers Ranked by Number of Months Included in the Monthly BPI

As with the monthly BPI, the annual figures would be more representative if weighted by percentage of total AR older than 120 days, but the general idea is there. So there we are, two interesting medical billing KPIs from Dr. Yuval Lirov. I think there’s tremendous potential value in these and would be interested to see real-world use cases.

Last updated on

# [1] "2022-07-12 11:55:03 EDT"

Session Info

Session Info
session
# ─ Session info ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#  setting  value
#  version  R version 4.2.1 (2022-06-23 ucrt)
#  os       Windows 10 x64 (build 25151)
#  system   x86_64, mingw32
#  ui       RTerm
#  language (EN)
#  collate  English_United States.utf8
#  ctype    English_United States.utf8
#  tz       America/New_York
#  date     2022-07-12
#  pandoc   2.17.1.1 @ C:/Program Files/RStudio/bin/quarto/bin/ (via rmarkdown)
# 
# ─ Packages ───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
#  package       * version date (UTC) lib source
#  assertthat      0.2.1   2019-03-21 [1] CRAN (R 4.2.0)
#  backports       1.4.1   2021-12-13 [1] CRAN (R 4.2.0)
#  broom           1.0.0   2022-07-01 [1] CRAN (R 4.2.1)
#  bslib           0.3.1   2021-10-06 [1] CRAN (R 4.2.0)
#  cachem          1.0.6   2021-08-19 [1] CRAN (R 4.2.0)
#  cellranger      1.1.0   2016-07-27 [1] CRAN (R 4.2.0)
#  cli             3.3.0   2022-04-25 [1] CRAN (R 4.2.0)
#  colorspace      2.0-3   2022-02-21 [1] CRAN (R 4.2.0)
#  crayon          1.5.1   2022-03-26 [1] CRAN (R 4.2.0)
#  crosstalk       1.2.0   2021-11-04 [1] CRAN (R 4.2.0)
#  curl            4.3.2   2021-06-23 [1] CRAN (R 4.2.0)
#  data.table      1.14.2  2021-09-27 [1] CRAN (R 4.2.0)
#  DBI             1.1.3   2022-06-18 [1] CRAN (R 4.2.0)
#  dbplyr          2.2.1   2022-06-27 [1] CRAN (R 4.2.0)
#  digest          0.6.29  2021-12-01 [1] CRAN (R 4.2.0)
#  distill         1.4     2022-05-12 [1] CRAN (R 4.2.0)
#  downlit         0.4.2   2022-07-05 [1] CRAN (R 4.2.0)
#  dplyr         * 1.0.9   2022-04-28 [1] CRAN (R 4.2.0)
#  ellipsis        0.3.2   2021-04-29 [1] CRAN (R 4.2.0)
#  evaluate        0.15    2022-02-18 [1] CRAN (R 4.2.0)
#  fansi           1.0.3   2022-03-24 [1] CRAN (R 4.2.0)
#  fastmap         1.1.0   2021-01-25 [1] CRAN (R 4.2.0)
#  forcats       * 0.5.1   2021-01-27 [1] CRAN (R 4.2.0)
#  fs              1.5.2   2021-12-08 [1] CRAN (R 4.2.0)
#  generics        0.1.3   2022-07-05 [1] CRAN (R 4.2.0)
#  ggplot2       * 3.3.6   2022-05-03 [1] CRAN (R 4.2.0)
#  glue            1.6.2   2022-02-24 [1] CRAN (R 4.2.0)
#  gtable          0.3.0   2019-03-25 [1] CRAN (R 4.2.0)
#  haven           2.5.0   2022-04-15 [1] CRAN (R 4.2.0)
#  highcharter   * 0.9.4   2022-01-03 [1] CRAN (R 4.2.0)
#  highr           0.9     2021-04-16 [1] CRAN (R 4.2.0)
#  hms             1.1.1   2021-09-26 [1] CRAN (R 4.2.0)
#  htmltools     * 0.5.2   2021-08-25 [1] CRAN (R 4.2.0)
#  htmlwidgets     1.5.4   2021-09-08 [1] CRAN (R 4.2.0)
#  httr            1.4.3   2022-05-04 [1] CRAN (R 4.2.0)
#  igraph          1.3.2   2022-06-13 [1] CRAN (R 4.2.0)
#  jquerylib       0.1.4   2021-04-26 [1] CRAN (R 4.2.0)
#  jsonlite        1.8.0   2022-02-22 [1] CRAN (R 4.2.0)
#  knitr           1.39    2022-04-26 [1] CRAN (R 4.2.0)
#  lattice         0.20-45 2021-09-22 [2] CRAN (R 4.2.1)
#  lifecycle       1.0.1   2021-09-24 [1] CRAN (R 4.2.0)
#  lubridate     * 1.8.0   2021-10-07 [1] CRAN (R 4.2.0)
#  magrittr        2.0.3   2022-03-30 [1] CRAN (R 4.2.0)
#  memoise         2.0.1   2021-11-26 [1] CRAN (R 4.2.0)
#  modelr          0.1.8   2020-05-19 [1] CRAN (R 4.2.0)
#  munsell         0.5.0   2018-06-12 [1] CRAN (R 4.2.0)
#  pillar          1.7.0   2022-02-01 [1] CRAN (R 4.2.0)
#  pkgconfig       2.0.3   2019-09-22 [1] CRAN (R 4.2.0)
#  printr        * 0.2     2021-09-27 [1] CRAN (R 4.2.0)
#  purrr         * 0.3.4   2020-04-17 [1] CRAN (R 4.2.0)
#  quantmod        0.4.20  2022-04-29 [1] CRAN (R 4.2.0)
#  R.cache         0.15.0  2021-04-30 [1] CRAN (R 4.2.0)
#  R.methodsS3     1.8.2   2022-06-13 [1] CRAN (R 4.2.0)
#  R.oo            1.25.0  2022-06-12 [1] CRAN (R 4.2.0)
#  R.utils         2.12.0  2022-06-28 [1] CRAN (R 4.2.0)
#  R6              2.5.1   2021-08-19 [1] CRAN (R 4.2.0)
#  reactable     * 0.3.0   2022-05-26 [1] CRAN (R 4.2.0)
#  reactablefmtr * 2.0.0   2022-03-16 [1] CRAN (R 4.2.0)
#  reactR          0.4.4   2021-02-22 [1] CRAN (R 4.2.0)
#  readr         * 2.1.2   2022-01-30 [1] CRAN (R 4.2.0)
#  readxl          1.4.0   2022-03-28 [1] CRAN (R 4.2.0)
#  rematch2        2.1.2   2020-05-01 [1] CRAN (R 4.2.0)
#  reprex          2.0.1   2021-08-05 [1] CRAN (R 4.2.0)
#  rlang           1.0.2   2022-03-04 [1] CRAN (R 4.2.0)
#  rlist           0.4.6.2 2021-09-03 [1] CRAN (R 4.2.0)
#  rmarkdown       2.14    2022-04-25 [1] CRAN (R 4.2.0)
#  rstudioapi      0.13    2020-11-12 [1] CRAN (R 4.2.0)
#  rvest           1.0.2   2021-10-16 [1] CRAN (R 4.2.0)
#  sass            0.4.1   2022-03-23 [1] CRAN (R 4.2.0)
#  scales          1.2.0   2022-04-13 [1] CRAN (R 4.2.0)
#  sessioninfo     1.2.2   2021-12-06 [1] CRAN (R 4.2.0)
#  stringi         1.7.6   2021-11-29 [1] CRAN (R 4.2.0)
#  stringr       * 1.4.0   2019-02-10 [1] CRAN (R 4.2.0)
#  styler          1.7.0   2022-03-13 [1] CRAN (R 4.2.0)
#  tibble        * 3.1.7   2022-05-03 [1] CRAN (R 4.2.0)
#  tidyr         * 1.2.0   2022-02-01 [1] CRAN (R 4.2.0)
#  tidyselect      1.1.2   2022-02-21 [1] CRAN (R 4.2.0)
#  tidyverse     * 1.3.1   2021-04-15 [1] CRAN (R 4.2.0)
#  TTR             0.24.3  2021-12-12 [1] CRAN (R 4.2.0)
#  tzdb            0.3.0   2022-03-28 [1] CRAN (R 4.2.0)
#  utf8            1.2.2   2021-07-24 [1] CRAN (R 4.2.0)
#  uuid            1.1-0   2022-04-19 [1] CRAN (R 4.2.0)
#  vctrs           0.4.1   2022-04-13 [1] CRAN (R 4.2.0)
#  wakefield     * 0.3.6   2020-09-13 [1] CRAN (R 4.2.0)
#  withr           2.5.0   2022-03-03 [1] CRAN (R 4.2.0)
#  xaringanExtra   0.6.0   2022-06-07 [1] CRAN (R 4.2.0)
#  xfun            0.31    2022-05-10 [1] CRAN (R 4.2.0)
#  xml2            1.3.3   2021-11-30 [1] CRAN (R 4.2.0)
#  xts             0.12.1  2020-09-09 [1] CRAN (R 4.2.0)
#  yaml            2.3.5   2022-02-21 [1] CRAN (R 4.2.0)
#  zoo             1.8-10  2022-04-15 [1] CRAN (R 4.2.0)
# 
#  [1] C:/Users/andyb/AppData/Local/R/win-library/4.2
#  [2] C:/Program Files/R/R-4.2.1/library
# 
# ──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Lirov, Yuval. 2009. Medical Billing Networks and Processes: Profitable and Compliant Revenue Cycle Management in the Internet Age. Marlboro, N.J.: Affinity Billing.

References

Corrections

If you see mistakes or want to suggest changes, please create an issue on the source repository.

Reuse

Text and figures are licensed under Creative Commons Attribution CC BY 4.0. Source code is available at https://github.com/andrewallenbruce, unless otherwise noted. The figures that have been reused from other sources don't fall under this license and can be recognized by a note in their caption: "Figure from ...".

Citation

For attribution, please cite this work as

Bruce (2022, March 24). Andrew Bruce: KPI Guide: PARBx & BPI. Retrieved from https://andrewbruce.netlify.app/posts/kpi-parbx-bpi/

BibTeX citation

@misc{bruce2022kpi,
  author = {Bruce, Andrew},
  title = {Andrew Bruce: KPI Guide: PARBx & BPI},
  url = {https://andrewbruce.netlify.app/posts/kpi-parbx-bpi/},
  year = {2022}
}