@@ -83,6 +83,29 @@ validate_npi_results <- function(x, ...) {
8383}
8484
8585
86+ empty_npi_summary <- function () {
87+ tibble :: tibble(
88+ npi = integer(),
89+ name = character (),
90+ enumeration_type = character (),
91+ primary_practice_address = character (),
92+ phone = character (),
93+ primary_taxonomy = character ()
94+ )
95+ }
96+
97+
98+ add_missing_columns <- function (df , columns , default = NA_character_ ) {
99+ for (column in columns ) {
100+ if (! column %in% names(df )) {
101+ df [[column ]] <- rep(default , nrow(df ))
102+ }
103+ }
104+
105+ df
106+ }
107+
108+
86109
87110# ' Summary method for \code{npi_results} S3 object
88111# '
@@ -112,39 +135,87 @@ validate_npi_results <- function(x, ...) {
112135# ' @importFrom rlang .data
113136# ' @export
114137npi_summarize.npi_results <- function (object , ... ) {
115- basic <- get_list_col(object , " basic" )
138+ validate_npi_results(object )
139+
140+ if (nrow(object ) == 0L ) {
141+ return (empty_npi_summary())
142+ }
143+
144+ basic <- get_list_col(object , " basic" ) %> %
145+ add_missing_columns(
146+ c(
147+ " basic_first_name" , " basic_last_name" ,
148+ " basic_organization_name"
149+ )
150+ ) %> %
151+ dplyr :: group_by(.data $ npi ) %> %
152+ dplyr :: slice_head(n = 1L ) %> %
153+ dplyr :: ungroup() %> %
154+ dplyr :: select(
155+ .data $ npi , .data $ basic_first_name , .data $ basic_last_name ,
156+ .data $ basic_organization_name
157+ )
158+
116159 address_loc <- get_list_col(object , " addresses" ) %> %
160+ add_missing_columns(
161+ c(
162+ " addresses_address_purpose" , " addresses_address_1" ,
163+ " addresses_address_2" , " addresses_city" , " addresses_state" ,
164+ " addresses_postal_code" , " addresses_telephone_number"
165+ )
166+ ) %> %
117167 dplyr :: filter(.data $ addresses_address_purpose == " LOCATION" ) %> %
118168 dplyr :: mutate(
119- postal_code = hyphenate_full_zip(.data $ addresses_postal_code )
169+ addresses_postal_code = hyphenate_full_zip(.data $ addresses_postal_code )
120170 )
121171
172+ address_loc $ primary_practice_address <- make_full_address(
173+ address_loc ,
174+ " addresses_address_1" ,
175+ " addresses_address_2" ,
176+ " addresses_city" ,
177+ " addresses_state" ,
178+ " addresses_postal_code"
179+ )
180+ address_loc $ phone <- address_loc $ addresses_telephone_number
181+
182+ address_loc <- address_loc %> %
183+ dplyr :: group_by(.data $ npi ) %> %
184+ dplyr :: slice_head(n = 1L ) %> %
185+ dplyr :: ungroup() %> %
186+ dplyr :: select(.data $ npi , .data $ primary_practice_address , .data $ phone )
187+
122188 # Some NPI records have only one taxonomy row with primary == FALSE;
123189 # include these along with those where primary == TRUE
124190 tax_primary <- get_list_col(object , " taxonomies" ) %> %
191+ add_missing_columns(" taxonomies_primary" , default = FALSE ) %> %
192+ add_missing_columns(" taxonomies_desc" ) %> %
125193 dplyr :: group_by(.data $ npi ) %> %
126- dplyr :: mutate(n_primary = sum(.data $ taxonomies_primary == TRUE )) %> %
127- dplyr :: filter(.data $ taxonomies_primary == TRUE | .data $ n_primary == 0 ) %> %
128- dplyr :: slice_head()
194+ dplyr :: mutate(n_primary = sum(.data $ taxonomies_primary %in% TRUE )) %> %
195+ dplyr :: filter(.data $ taxonomies_primary %in% TRUE | .data $ n_primary == 0L ) %> %
196+ dplyr :: slice_head(n = 1L ) %> %
197+ dplyr :: ungroup() %> %
198+ dplyr :: transmute(
199+ npi = .data $ npi ,
200+ primary_taxonomy = .data $ taxonomies_desc
201+ )
129202
130- tibble :: tibble(
131- npi = object $ npi ,
132- name = ifelse(object $ enumeration_type == " Individual" ,
133- paste(basic $ basic_first_name , basic $ basic_last_name ),
134- basic $ basic_organization_name
135- ),
136- enumeration_type = object $ enumeration_type ,
137- primary_practice_address = address_loc %> %
138- make_full_address(
139- " addresses_address_1" ,
140- " addresses_address_2" ,
141- " addresses_city" ,
142- " addresses_state" ,
143- " addresses_postal_code"
144- ),
145- phone = address_loc $ addresses_telephone_number ,
146- primary_taxonomy = tax_primary $ taxonomies_desc
147- )
203+ object %> %
204+ dplyr :: select(.data $ npi , .data $ enumeration_type ) %> %
205+ dplyr :: left_join(basic , by = " npi" ) %> %
206+ dplyr :: mutate(
207+ name = ifelse(
208+ .data $ enumeration_type == " Individual" ,
209+ stringr :: str_c(.data $ basic_first_name , " " , .data $ basic_last_name ),
210+ .data $ basic_organization_name
211+ )
212+ ) %> %
213+ dplyr :: left_join(address_loc , by = " npi" ) %> %
214+ dplyr :: left_join(tax_primary , by = " npi" ) %> %
215+ dplyr :: select(
216+ .data $ npi , .data $ name , .data $ enumeration_type ,
217+ .data $ primary_practice_address , .data $ phone , .data $ primary_taxonomy
218+ )
148219}
149220
150221
0 commit comments