andrewallenbruce / provider

Public Healthcare Provider APIs :stethoscope:
https://andrewallenbruce.github.io/provider/
Other
18 stars 2 forks source link

Feature: CCN validator #59

Closed andrewallenbruce closed 1 week ago

andrewallenbruce commented 10 months ago
Code

``` r short <- dplyr::tibble( range = vctrs::vec_c(paste0("000", as.character(1:9)), paste0("00", as.character(10:99)), paste0("0", as.character(100:879))), type = "Short-term (General and Specialty) Hospital" ) ord <- dplyr::tibble( range = paste0("0", as.character(880:899)), type = "Hospital participating in ORD demonstration project" ) fqhc <- dplyr::tibble( range = vctrs::vec_c(as.character(1000:1199), as.character(1800:1989)), type = "Federally Qualified Health Center" ) maf <- dplyr::tibble( range = as.character(1225:1299), type = "Medical Assistance Facility" ) cah <- dplyr::tibble( range = as.character(1300:1399), type = "Critical Access Hospital" ) cmhc <- dplyr::tibble( range = as.character(1400:1499), type = "Community Mental Health Center" ) hospice <- dplyr::tibble( range = as.character(1500:1799), type = "Hospice" ) rnmhci <- dplyr::tibble( range = as.character(1990:1999), type = "Religious Non-medical Health Care Institution (formerly Christian Science Sanatoria Hospital Services)" ) ltch <- dplyr::tibble( range = as.character(2000:2299), type = "Long-Term Care Hospital" ) hbrdf <- dplyr::tibble( range = as.character(2300:2499), type = "Hospital-based Renal Dialysis Facility" ) irdf <- dplyr::tibble( range = as.character(2500:2899), type = "Independent Renal Dialysis Facility" ) isprdf <- dplyr::tibble( range = as.character(2900:2999), type = "Independent Special Purpose Renal Dialysis Facility" ) rehosp <- dplyr::tibble( range = as.character(3025:3099), type = "Rehabilitation Hospital" ) hha <- dplyr::tibble( range = vctrs::vec_c(as.character(3100:3199), as.character(7000:8499), as.character(9000:9799)), type = "Home Health Agency" ) child <- dplyr::tibble( range = as.character(3300:3399), type = "Children's Hospital" ) rhcp <- dplyr::tibble( range = vctrs::vec_c(as.character(3400:3499), as.character(3975:3999), as.character(8500:8899)), type = "Rural Health Clinic (Provider-based)" ) rhcf <- dplyr::tibble( range = vctrs::vec_c(as.character(3800:3974), as.character(8900:8999)), type = "Rural Health Clinic (Free-standing)" ) hbsrdf <- dplyr::tibble( range = as.character(3500:3699), type = "Hospital-based Satellite Renal Dialysis Facility" ) hbsprdf <- dplyr::tibble( range = as.character(3700:3799), type = "Hospital-based Special Purpose Renal Dialysis Facility" ) psych <- dplyr::tibble( range = as.character(4000:4499), type = "Psychiatric Hospital" ) corf <- dplyr::tibble( range = vctrs::vec_c(as.character(3200:3299), as.character(4500:4599), as.character(4800:4899)), type = "Comprehensive Outpatient Rehabilitation Facility" ) cmhc2 <- dplyr::tibble( range = vctrs::vec_c(as.character(4600:4799), as.character(4900:4999)), type = "Community Mental Health Center" ) snf <- dplyr::tibble( range = as.character(5000:6499), type = "Skilled Nursing Facility" ) outpts <- dplyr::tibble( range = as.character(6500:6989), type = "Outpatient Physical Therapy Services" ) tplant <- dplyr::tibble( range = as.character(9800:9899), type = "Transplant Center" ) numrsrv <- dplyr::tibble( range = as.character(6990:6999), type = "Number Reserved (formerly Christian Science Sanatoria Skilled Nursing Services)" ) futrsrv <- dplyr::tibble( range = as.character(9900:9999), type = "Reserved for Future Use" ) mhcmc <- dplyr::tibble( range = paste0("0", as.character(900:999)), type = "Multiple Hospital Component in a Medical Complex (Number Retired)" ) adhret <- dplyr::tibble( range = as.character(1200:1224), type = "Alcohol/Drug Hospital (Number Retired)" ) tubret <- dplyr::tibble( range = as.character(3000:3024), type = "Tuberculosis Hospital (Number Retired)" ) facility_ranges <- dplyr::bind_rows(short, ord, fqhc, maf, cah, cmhc, hospice, rnmhci, ltch, hbrdf, irdf, isprdf, rehosp, hha, child, rhcp, rhcf, hbsrdf, hbsprdf, psych, corf, cmhc2, snf, outpts, tplant, numrsrv, futrsrv, mhcmc, adhret, tubret) ```

facility_ranges |> count(type, sort = TRUE)

#> # A tibble: 29 × 2
#>    type                                                                        n
#>    <chr>                                                                   <int>
#>  1 Home Health Agency                                                       2400
#>  2 Skilled Nursing Facility                                                 1500
#>  3 Short-term (General and Specialty) Hospital                               879
#>  4 Rural Health Clinic (Provider-based)                                      525
#>  5 Psychiatric Hospital                                                      500
#>  6 Outpatient Physical Therapy Services                                      490
#>  7 Community Mental Health Center                                            400
#>  8 Independent Renal Dialysis Facility                                       400
#>  9 Federally Qualified Health Center                                         390
#> 10 Comprehensive Outpatient Rehabilitation Facility                          300
#> 11 Hospice                                                                   300
#> 12 Long-Term Care Hospital                                                   300
#> 13 Rural Health Clinic (Free-standing)                                       275
#> 14 Hospital-based Renal Dialysis Facility                                    200
#> 15 Hospital-based Satellite Renal Dialysis Facility                          200
#> 16 Children's Hospital                                                       100
#> 17 Critical Access Hospital                                                  100
#> 18 Hospital-based Special Purpose Renal Dialysis Facility                    100
#> 19 Independent Special Purpose Renal Dialysis Facility                       100
#> 20 Multiple Hospital Component in a Medical Complex (Number Retired)         100
#> 21 Reserved for Future Use                                                   100
#> 22 Transplant Center                                                         100
#> 23 Medical Assistance Facility                                                75
#> 24 Rehabilitation Hospital                                                    75
#> 25 Alcohol/Drug Hospital (Number Retired)                                     25
#> 26 Tuberculosis Hospital (Number Retired)                                     25
#> 27 Hospital participating in ORD demonstration project                        20
#> 28 Number Reserved (formerly Christian Science Sanatoria Skilled Nursing …    10
#> 29 Religious Non-medical Health Care Institution (formerly Christian Scie…    10

Created on 2023-11-29 with reprex v2.0.2

andrewallenbruce commented 10 months ago

Using {ivs}:

Code

``` r short <- dplyr::tibble( type = "Short-term (General and Specialty) Hospital", start = 1L, end = 880L ) ord <- dplyr::tibble( type = "Hospital participating in ORD demonstration project", start = 880L, end = 900L ) fqhc <- dplyr::tibble( type = c("Federally Qualified Health Center", "Federally Qualified Health Center"), start = c(1000L, 1800L), end = c(1200L, 1990L), ) maf <- dplyr::tibble( type = "Medical Assistance Facility", start = 1225L, end = 1300L ) cah <- dplyr::tibble( type = "Critical Access Hospital", start = 1300L, end = 1400L ) cmhc <- dplyr::tibble( type = c("Community Mental Health Center", "Community Mental Health Center", "Community Mental Health Center"), start = c(1400L, 4600L, 4900L), end = c(1500L, 4800L, 5000L) ) hospice <- dplyr::tibble( type = "Hospice", start = 1500L, end = 1800L ) rnmhci <- dplyr::tibble( type = "Religious Non-medical Health Care Institution (formerly Christian Science Sanatoria Hospital Services)", start = 1990L, end = 2000L ) ltch <- dplyr::tibble( type = "Long-Term Care Hospital", start = 2000L, end = 2300L ) hbrdf <- dplyr::tibble( type = "Hospital-based Renal Dialysis Facility", start = 2300L, end = 2500L ) irdf <- dplyr::tibble( type = "Independent Renal Dialysis Facility", start = 2500L, end = 2900L ) isprdf <- dplyr::tibble( type = "Independent Special Purpose Renal Dialysis Facility", start = 2900L, end = 3000L ) rehosp <- dplyr::tibble( type = "Rehabilitation Hospital", start = 3025L, end = 3100L ) hha <- dplyr::tibble( type = c("Home Health Agency", "Home Health Agency", "Home Health Agency"), start = c(3100L, 7000L, 9000L), end = c(3200L, 8500L, 9800L) ) child <- dplyr::tibble( type = "Children's Hospital", start = 3300L, end = 3400L ) rhcp <- dplyr::tibble( type = c("Rural Health Clinic (Provider-based)", "Rural Health Clinic (Provider-based)", "Rural Health Clinic (Provider-based)"), start = c(3400L, 3975L, 8500L), end = c(3500L, 4000L, 8900L) ) rhcf <- dplyr::tibble( type = c("Rural Health Clinic (Free-standing)", "Rural Health Clinic (Free-standing)"), start = c(3800L, 8900L), end = c(3975L, 9000L) ) hbsrdf <- dplyr::tibble( type = "Hospital-based Satellite Renal Dialysis Facility", start = 3500L, end = 3700L ) hbsprdf <- dplyr::tibble( type = "Hospital-based Special Purpose Renal Dialysis Facility", start = 3700L, end = 3800L ) psych <- dplyr::tibble( type = "Psychiatric Hospital", start = 4000L, end = 4500L ) corf <- dplyr::tibble( type = c("Comprehensive Outpatient Rehabilitation Facility", "Comprehensive Outpatient Rehabilitation Facility", "Comprehensive Outpatient Rehabilitation Facility"), start = c(3200L, 4500L, 4800L), end = c(3300L, 4600L, 4900L) ) snf <- dplyr::tibble( type = "Skilled Nursing Facility", start = 5000L, end = 6500L ) outpts <- dplyr::tibble( type = "Outpatient Physical Therapy Services", start = 6500L, end = 6990L ) tplant <- dplyr::tibble( type = "Transplant Center", start = 9800L, end = 9900L ) numrsrv <- dplyr::tibble( type = "Number Reserved (formerly Christian Science Sanatoria Skilled Nursing Services)", start = 6990L, end = 7000L ) futrsrv <- dplyr::tibble( type = "Reserved for Future Use", start = 9900L, end = 10000L ) mhcmc <- dplyr::tibble( type = "Multiple Hospital Component in a Medical Complex (Number Retired)", start = 900L, end = 1000L ) adhret <- dplyr::tibble( type = "Alcohol/Drug Hospital (Number Retired)", start = 1200L, end = 1225L ) tubret <- dplyr::tibble( type = "Tuberculosis Hospital (Number Retired)", start = 3000L, end = 3025L ) ranges <- dplyr::bind_rows(adhret, cah, child, cmhc, corf, fqhc, futrsrv, hbrdf, hha, hospice, hbsprdf, hbsrdf, irdf, isprdf, ltch, maf, mhcmc, numrsrv, ord, outpts, psych, rehosp, rhcf, rhcp, rnmhci, short, snf, tplant, tubret) ```

range_test <- ranges |>
  dplyr::arrange(start) |>
  dplyr::mutate(range = ivs::iv(start, end), .keep = "unused")

range_test
#> # A tibble: 39 × 2
#>    type                                                                    range
#>    <chr>                                                               <iv<int>>
#>  1 Short-term (General and Specialty) Hospital                          [1, 880)
#>  2 Hospital participating in ORD demonstration project                [880, 900)
#>  3 Multiple Hospital Component in a Medical Complex (Number Retir…   [900, 1000)
#>  4 Federally Qualified Health Center                                [1000, 1200)
#>  5 Alcohol/Drug Hospital (Number Retired)                           [1200, 1225)
#>  6 Medical Assistance Facility                                      [1225, 1300)
#>  7 Critical Access Hospital                                         [1300, 1400)
#>  8 Community Mental Health Center                                   [1400, 1500)
#>  9 Hospice                                                          [1500, 1800)
#> 10 Federally Qualified Health Center                                [1800, 1990)
#> 11 Religious Non-medical Health Care Institution (formerly Christ…  [1990, 2000)
#> 12 Long-Term Care Hospital                                          [2000, 2300)
#> 13 Hospital-based Renal Dialysis Facility                           [2300, 2500)
#> 14 Independent Renal Dialysis Facility                              [2500, 2900)
#> 15 Independent Special Purpose Renal Dialysis Facility              [2900, 3000)
#> 16 Tuberculosis Hospital (Number Retired)                           [3000, 3025)
#> 17 Rehabilitation Hospital                                          [3025, 3100)
#> 18 Home Health Agency                                               [3100, 3200)
#> 19 Comprehensive Outpatient Rehabilitation Facility                 [3200, 3300)
#> 20 Children's Hospital                                              [3300, 3400)
#> 21 Rural Health Clinic (Provider-based)                             [3400, 3500)
#> 22 Hospital-based Satellite Renal Dialysis Facility                 [3500, 3700)
#> 23 Hospital-based Special Purpose Renal Dialysis Facility           [3700, 3800)
#> 24 Rural Health Clinic (Free-standing)                              [3800, 3975)
#> 25 Rural Health Clinic (Provider-based)                             [3975, 4000)
#> 26 Psychiatric Hospital                                             [4000, 4500)
#> 27 Comprehensive Outpatient Rehabilitation Facility                 [4500, 4600)
#> 28 Community Mental Health Center                                   [4600, 4800)
#> 29 Comprehensive Outpatient Rehabilitation Facility                 [4800, 4900)
#> 30 Community Mental Health Center                                   [4900, 5000)
#> 31 Skilled Nursing Facility                                         [5000, 6500)
#> 32 Outpatient Physical Therapy Services                             [6500, 6990)
#> 33 Number Reserved (formerly Christian Science Sanatoria Skilled …  [6990, 7000)
#> 34 Home Health Agency                                               [7000, 8500)
#> 35 Rural Health Clinic (Provider-based)                             [8500, 8900)
#> 36 Rural Health Clinic (Free-standing)                              [8900, 9000)
#> 37 Home Health Agency                                               [9000, 9800)
#> 38 Transplant Center                                                [9800, 9900)
#> 39 Reserved for Future Use                                         [9900, 10000)

facility_code <- 3000L

range_test |>
  dplyr::mutate(is_between = ivs::iv_includes(range, facility_code)) |>
  dplyr::filter(is_between == TRUE) |>
  dplyr::pull(type)

#> [1] "Tuberculosis Hospital (Number Retired)"

Created on 2023-11-29 with reprex v2.0.2