R/check_ds_ae_discon.R
    check_ds_ae_discon.RdThis check looks for consistency when DS.DSSPID=DISCTX* then there should be AE.AEACN*=DRUG WITHDRAWN
check_ds_ae_discon(DS, AE)boolean value if check failed or passed with 'msg' attribute if the test failed
AE <- data.frame(
 USUBJID = 1:5,
 AESTDTC = "01JAN2017",
 AETERM  = c("AE1","AE2","AE3","AE4","AE5"),
 AEDECOD = c("AE1","AE2","AE3","AE4","AE5"),
 AEACN = c("DOSE REDUCED", "DOSE REDUCED", "DOSE NOT CHANGED",
 "DOSE NOT CHANGED", "NOT APPLICABLE"),
 stringsAsFactors = FALSE
)
DS <- data.frame(
 USUBJID = 1:5,
 DSSPID  = c('XXXDISCTXXXXX'),
 DSSTDTC = '01JAN2017',
 DSCAT   = rep("DISPOSITION EVENT", 5),
 DSSCAT   = rep("TX FORM", 5),
 DSDECOD = c("PHYSICIAN DECISION", "OTHER", "PHYSICIAN DECISION", "OTHER", "DEATH"),
 stringsAsFactors = FALSE
)
# no case
check_ds_ae_discon(DS, AE)
#> [1] TRUE
# 1 case
DS[3, "DSDECOD"] <- 'ADVERSE EVENT'
check_ds_ae_discon(DS, AE)
#> [1] FALSE
#> attr(,"msg")
#> [1] "1 patient(s) with Treatment Discon due to AE but no AE record indicating drug withdrawn. "
#> attr(,"data")
#>   USUBJID  DSSCAT       DSDECOD   DSSTDTC
#> 1       3 TX FORM ADVERSE EVENT 01JAN2017
# mutliple AEACNx
AE <- data.frame(
 USUBJID = 1:5,
 AESTDTC = c("01JAN2017"),
 AETERM  = c("AE1","AE2","AE3","AE4","AE5"),
 AEDECOD = c("AE1","AE2","AE3","AE4","AE5"),
 AEACN   = rep("MULTIPLE", 5),
 AEACN1  = c("DOSE REDUCED", "DOSE NOT CHANGED", "DOSE NOT CHANGED",
 "DOSE NOT CHANGED", "NOT APPLICABLE"),
 stringsAsFactors = FALSE
)
check_ds_ae_discon(DS, AE)
#> [1] FALSE
#> attr(,"msg")
#> [1] "1 patient(s) with Treatment Discon due to AE but no AE record indicating drug withdrawn. "
#> attr(,"data")
#>   USUBJID  DSSCAT       DSDECOD   DSSTDTC
#> 1       3 TX FORM ADVERSE EVENT 01JAN2017