arg_npi<-new_class( name ="arg_npi", package =NULL, properties =list( x =new_property( class =new_union(NULL, class_character), setter =function(self, value){self@x<-as.character(value[which_not_na(value)])self}, getter =function(self){as.character(self@x[which_not_na(self@x)])}), op =new_property( class =class_character, default ="=", getter =function(self)if(length(self@x)>1)"IN"else"=")), validator =function(self){if(not_null(self@x)&&length(self@x)>0){assert_nchars(self@x, 10L, "npi")assert_digits(self@x)assert_luhn(self@x)}})
value<-c("132456789", "1324567890", "132456789", "132456789")kit::pallv(nchar(value), value =10L)allv(nchar(as_chr(value)), 10L)
prop_npi<-new_property( class =new_union(NULL, class_character, class_numeric), validator =function(value){if(is.null(value))return()if(!allv(nchar(as_chr(value)), 10L))"`npi` must be 10 characters long"if(any(stri_detect_regex(value, "^[0-9]{1,10}$")))"`npi` must be all digits"if(any(!check_luhn(value)))"`npi` must pass Luhn algorithm"if(any(!stri_startswith(value, "[12]")))"`npi` must start with 1 or 2"})prop_state<-new_property( class =null_character, validator =function(value){if(not_null(value)){if(!is_character(value))"`state` must be a character vector"if(any(sf_chars(value)!=2L))"`state` must be 2 characters long"if(any(!value%in%state.abb)){paste("Invalid state(s) entered:",paste0(value[which_(value%in%state.abb, invert =TRUE)], collapse =", "))}}})
class_arg
class_arg<-new_class("class_arg", properties =list( endpoint =new_property(class_character, validator =function(value){if(length(value)!=1L)"must be length 1"}), field =new_property(NULL|class_character, validator =function(value){if(not_null(value)){if(length(value)!=1L)"must be length 1"}}), operator =new_property(class_character, default ="=", validator =function(value){if(any(!value%in%c("=", ">=", "<=", ">", "<", "<>", "STARTS_WITH", "ENDS_WITH", "CONTAINS", "IN", "NOT IN", "BETWEEN", "NOT BETWEEN")))"@operator invalid"})))# choices = new_property(NULL | class_character,# setter = function(self, value) {# self@choices <- value# self}),npi<-new_class( name ="npi", parent =class_arg, properties =list( input =new_property(NULL|class_character|class_numeric), field =new_property(NULL|class_character, getter =function(self){if(not_null(self@endpoint)){kit::nswitch(self@endpoint,"affiliations", "npi","enrollees", "NPI","open_payments", "covered_recipient_npi")}})), validator =function(self){if(not_null(self@input)){if(!allv(nchar(as_chr(self@input)), 10L))"`npi` must be 10 characters long"if(any(stri_detect_regex(self@input, "^[0-9]{1,10}$")))"`npi` must be all digits"if(any(!check_luhn(as_chr(self@input))))"`npi` must pass Luhn algorithm"if(any(!stri_detect_regex(self@input, "^[12]")))"`npi` must start with 1 or 2"}})npinpi( endpoint ="affiliations", operator ="IN", input =c(1043218118, 1023630738))
pac<-class_arg( label ="pac", alias ="PECOS_ASCT_CNTL_ID", operators =c("=", "IN", "NOT IN", "STARTS_WITH", "ENDS_WITH"))enid<-class_arg( label ="enid", alias ="ENRLMT_ID", operators =c("=", "IN", "NOT IN", "STARTS_WITH", "ENDS_WITH"))state<-class_arg( label ="state", alias ="STATE_CD", operators =c("=", "IN", "NOT IN", "STARTS_WITH", "ENDS_WITH"), choices =state.abb)name<-class_arg( label ="first", alias ="FIRST_NAME", operators =c("=", "IN", "NOT IN", "STARTS_WITH", "ENDS_WITH"))gender<-class_arg( label ="gender", alias ="GNDR_SW", operators =c("=", "IN", "NOT IN", "STARTS_WITH", "ENDS_WITH"), choices =c("M", "F", "9"))list2("NPI"=npi,"PECOS_ASCT_CNTL_ID"=pac,"ENRLMT_ID"=enid,"PROVIDER_TYPE_CD"=spec_code,"PROVIDER_TYPE_DESC"=spec_desc,"STATE_CD"=state,"FIRST_NAME"=first,"MDL_NAME"=middle,"LAST_NAME"=last,"ORG_NAME"=org,"GNDR_SW"=gender)class_args<-new_class("class_args", properties =list(args =class_list))list( npi =arg_npi, pac =arg_pac, enid =arg_enid, state =arg_state, first =arg_firstname, gender =arg_gender)args@#' enrollees(enid = "I20040309000221")#'#' enrollees(npi = "1417918293", spec_code = "14-41")#'#' enrollees(pac = "2860305554", gender = "9")try(class_args( id =1234567890, state ="ZZ", number ="300.12"))
class_args
null_numeric<-new_union(NULL, class_numeric)null_vector<-new_union(NULL, class_vector)null_character<-new_union(NULL, class_character)class_args<-new_class("class_args", properties =list( id =null_numeric, state =null_character, name =null_character, number =null_numeric), validator =function(self){if(not_null(self@state)&&any(!self@state%in%state.abb))paste("`state`", self@state, "not found")})try(class_args( id =1234567890, state ="ZZ", number ="300.12"))try(class_args( state ="ZZ", name ="Jerry", number =300.12))class_args(state =c("GA", "MD"))