|  |  |  | --- | 
					
						
							|  |  |  | title: "Report" | 
					
						
							|  |  |  | author: "Data Science Team, LaNubia" | 
					
						
							|  |  |  | date: '`r format(Sys.time(), "%d %B, %Y")`' | 
					
						
							|  |  |  | output: | 
					
						
							|  |  |  |   html_document: | 
					
						
							|  |  |  |     theme: lumen | 
					
						
							|  |  |  |     highlight: tango | 
					
						
							|  |  |  |     self_contained: true | 
					
						
							|  |  |  |     toc: true | 
					
						
							|  |  |  |     toc_depth: 4 | 
					
						
							|  |  |  |     toc_float: true | 
					
						
							|  |  |  |     includes: | 
					
						
							|  |  |  |        in_header: plausible.html | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | --- | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r setup, include=FALSE} | 
					
						
							|  |  |  | knitr::opts_chunk$set(echo = FALSE, error=TRUE, message=FALSE, warning=FALSE) | 
					
						
							|  |  |  | library(readxl) | 
					
						
							|  |  |  | library(DT) | 
					
						
							|  |  |  | library(tidyr) | 
					
						
							|  |  |  | library(dplyr) | 
					
						
							|  |  |  | library(highcharter) | 
					
						
							|  |  |  | library(purrr) | 
					
						
							|  |  |  | library(stringr) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rxl<- function(path,...){ | 
					
						
							|  |  |  |   tryCatch(read_excel(path,...), error= function(c){ | 
					
						
							|  |  |  |     c$message<-"No Data" | 
					
						
							|  |  |  |     print("No Data") | 
					
						
							|  |  |  |     stop(c) | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ltodf<- function(path,...){ | 
					
						
							|  |  |  |   tryCatch(rbind.data.frame(path,...), error= function(c){ | 
					
						
							|  |  |  |     c$message<-"No Data" | 
					
						
							|  |  |  |     print("No Data") | 
					
						
							|  |  |  |     stop(c) | 
					
						
							|  |  |  |   }) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | **Non commercial license of Highchart library used** | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ## Status Report | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Input Available | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | contactinputpath<-list.files("./contacts/raw-data", pattern="*.xls", full.names = T) | 
					
						
							|  |  |  | accountinputpath<-list.files("./accounts/raw-data", pattern="*.xls", full.names = T) | 
					
						
							|  |  |  | projectinputpath<-list.files("./projects/raw-data", pattern="*.xls", full.names = T) | 
					
						
							|  |  |  | supportinputpath<-list.files("./support/raw-data", pattern="*.xls", full.names = T) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | conta<-lapply(contactinputpath, read_excel) | 
					
						
							|  |  |  | names(conta)<-gsub("./contacts/raw-data/","",contactinputpath) | 
					
						
							|  |  |  | c<-lapply(conta, nrow) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Input_data<-"Contact" | 
					
						
							|  |  |  | #Country<-gsub(".xlsx","",names(conta)) | 
					
						
							|  |  |  | Observations<-c | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | temp<-data.frame(Input_data,Observations) |>  | 
					
						
							|  |  |  |    pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |>  | 
					
						
							|  |  |  |   mutate(Country=gsub(".xls","",Country)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary<-temp | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | acco<-lapply(accountinputpath, read_excel) | 
					
						
							|  |  |  | names(acco)<-gsub("./accounts/raw-data/","",accountinputpath) | 
					
						
							|  |  |  | a<-lapply(acco, nrow) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Input_data<-"Accounts" | 
					
						
							|  |  |  | #Country<-gsub(".xlsx","",names(conta)) | 
					
						
							|  |  |  | Observations<-a | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | temp<-data.frame(Input_data,Observations) |>  | 
					
						
							|  |  |  |    pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |>  | 
					
						
							|  |  |  |   mutate(Country=gsub(".xls","",Country)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary<-rbind(input.summary,temp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | proja<-lapply(projectinputpath, read_excel) | 
					
						
							|  |  |  | names(proja)<-gsub("./projects/raw-data/","",projectinputpath) | 
					
						
							|  |  |  | p<-lapply(proja, nrow) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Input_data<-"Projects" | 
					
						
							|  |  |  | #Country<-gsub(".xlsx","",names(conta)) | 
					
						
							|  |  |  | Observations<-p | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | temp<-data.frame(Input_data,Observations) |>  | 
					
						
							|  |  |  |    pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |>  | 
					
						
							|  |  |  |   mutate(Country=gsub(".xls","",Country)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary<-rbind(input.summary,temp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | suppo<-lapply(supportinputpath, read_excel) | 
					
						
							|  |  |  | names(suppo)<-gsub("./support/raw-data/","",supportinputpath) | 
					
						
							|  |  |  | s<-lapply(suppo, nrow) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Input_data<-"Support" | 
					
						
							|  |  |  | #Country<-gsub(".xlsx","",names(conta)) | 
					
						
							|  |  |  | Observations<-s | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | temp<-data.frame(Input_data,Observations) |>  | 
					
						
							|  |  |  |    pivot_longer(cols = (-1), names_to = "Country", values_to = "Observations") |>  | 
					
						
							|  |  |  |   mutate(Country=gsub(".xls","",Country)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary<-rbind(input.summary,temp) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # datatable(input.summary, extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary<-input.summary |> arrange(desc(Observations)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary.summ<-input.summary |>  | 
					
						
							|  |  |  |   group_by(Input_data) |>  | 
					
						
							|  |  |  |   summarise(Observations=sum(Observations)) |>  | 
					
						
							|  |  |  |   arrange(desc(Observations)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | input.summary.drilldown<-input.summary |>  | 
					
						
							|  |  |  |   group_nest(Input_data) |>  | 
					
						
							|  |  |  |   mutate(id=Input_data, | 
					
						
							|  |  |  |          type="column", | 
					
						
							|  |  |  |          data=map(data, mutate, name=Country, y=Observations), | 
					
						
							|  |  |  |          data = map(data, list_parse)) | 
					
						
							|  |  |  | tt <- tooltip_table(c("No. of Observations(Input)"), c("{point.Observations}")) | 
					
						
							|  |  |  | hchart(input.summary.summ, | 
					
						
							|  |  |  |        "column", | 
					
						
							|  |  |  |        hcaes(x=Input_data, y=Observations, name=Input_data, drilldown=Input_data), | 
					
						
							|  |  |  |        name="Segment view", | 
					
						
							|  |  |  |        colorByPoint = TRUE) |>  | 
					
						
							|  |  |  |   hc_drilldown( | 
					
						
							|  |  |  |     allowPointDrilldown = TRUE, | 
					
						
							|  |  |  |     series = list_parse(input.summary.drilldown) | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_tooltip( | 
					
						
							|  |  |  |     pointFormat = tt, # "{point.name} {point.pop}" | 
					
						
							|  |  |  |     useHTML = TRUE, | 
					
						
							|  |  |  |     valueDecimals = 0 | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_yAxis( | 
					
						
							|  |  |  |     title = list(text = "Number of observations") | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_xAxis( | 
					
						
							|  |  |  |     title = "Segment" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "Input Summary" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_title( | 
					
						
							|  |  |  |     text = "Observations by segment" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_subtitle( | 
					
						
							|  |  |  |     text = "Click on the bar to view details by country" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Simplified view | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE} | 
					
						
							|  |  |  | input.summary |>  | 
					
						
							|  |  |  |   pivot_wider(names_from = Country, values_from = Observations) |> datatable(extensions = "Buttons",  | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE,  | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10,  | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Contacts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SAP templates available: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE} | 
					
						
							|  |  |  | datatable(data.frame(Templates=unique(rxl("./contacts/template.xlsx", sheet = "Field_Definitions")[,1])), extensions = "Buttons",  | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE,  | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10,  | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Summary of Errors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | sumerrfilepath<-list.files("./contacts/summary", pattern="*sumerror.csv", full.names = T) | 
					
						
							|  |  |  | errfilepath<-list.files("./contacts/summary", pattern="*_error.csv", full.names = T) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sumerrfiles<-lapply(sumerrfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) | 
					
						
							|  |  |  | tdf<-tdf |> mutate(Pending=Expected-Actual) |> select(-Name) |> unique() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf |>  | 
					
						
							|  |  |  |   hchart("bullet", hcaes(x=Country, y=Actual, target=Expected), color="black", name="Observations (Output)") |>  | 
					
						
							|  |  |  |   hc_chart(inverted = TRUE) |>  | 
					
						
							|  |  |  |   hc_add_series(tdf, "pie", hcaes(x=Country, y=Pending), name="Pending (Major Issues)") |>  | 
					
						
							|  |  |  |   hc_plotOptions( | 
					
						
							|  |  |  |     pie = list( | 
					
						
							|  |  |  |       center = c('70%', '70%'), | 
					
						
							|  |  |  |       size = 200, | 
					
						
							|  |  |  |       dataLabels = list(enabled = FALSE), | 
					
						
							|  |  |  |       showInLegend = T | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ) |>  | 
					
						
							|  |  |  |   hc_title( | 
					
						
							|  |  |  |     text="Expect vs Actual" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_subtitle( | 
					
						
							|  |  |  |     text="Pie shows number of major issues identified" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "ErrorSum_Contact" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Error by template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | errfiles<-lapply(errfilepath, read.csv) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, errfiles)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-tdf |>  | 
					
						
							|  |  |  |   mutate(err.deep=word(err.type,-1)) |>  | 
					
						
							|  |  |  |   mutate(err=word(err.type,1,-2)) |> select(-err.type) |>  | 
					
						
							|  |  |  |   select(c(Name, Country, err, err.deep, err.count)) |>  | 
					
						
							|  |  |  |   arrange(desc(err.count)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf.country<- tdf |> | 
					
						
							|  |  |  |       group_by(Country) |>  | 
					
						
							|  |  |  |       summarize(err.count = sum(err.count)  | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |   arrange(err.count) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Lvl1dfStatus <- tibble(name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name)) | 
					
						
							|  |  |  | Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       tdf.err <- tdf.err |> | 
					
						
							|  |  |  |         group_by(err) |> | 
					
						
							|  |  |  |         summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |         ) |> arrange(err.count)  | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       Lvl2dfStatus <- tibble(name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_"))) | 
					
						
							|  |  |  |       list(id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name="High Level Error") | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       lapply(unique(tdf.err$err), function(y_level) { | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err[tdf.err$err == y_level,] | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err.deep |> | 
					
						
							|  |  |  |           group_by(err.deep) |> | 
					
						
							|  |  |  |           summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |           ) |> arrange(err.count) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep,y = tdf.err.deep$err.count) | 
					
						
							|  |  |  |         list(id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name="Deep Dive") | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) |> unlist(recursive = FALSE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | highchart() |> | 
					
						
							|  |  |  |       hc_xAxis(type = "category") |> | 
					
						
							|  |  |  |       hc_add_series(Lvl1dfStatus, "column", hcaes(x = name, y = y),name = "Country View", showInLegend = F) |> | 
					
						
							|  |  |  |       hc_plotOptions(column = list(stacking = "normal"), lang=list(drillUpText ="Back")) |> | 
					
						
							|  |  |  |       hc_drilldown( | 
					
						
							|  |  |  |         allowPointDrilldown = TRUE, | 
					
						
							|  |  |  |         series = c(Level_2_Drilldowns, Level_3_Drilldowns) | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |       hc_yAxis( | 
					
						
							|  |  |  |     title = list(text = "Number of errors") | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_title(text="Error Count") |>  | 
					
						
							|  |  |  |   hc_subtitle(text="Click on bar for deep dive") |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_tooltip() |>  | 
					
						
							|  |  |  |         hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "Error_Contact" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Errors in details {.tabset .tabset-pills} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Mandatory | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Contact | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrfilepath<-list.files("./contacts/errors/mandatory", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | manderrfiles<-lapply(manderrfilepath, read.csv) | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles) | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Codelist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | codeerrfilepath<-list.files("./contacts/errors/codelist", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | codeerrfiles<-lapply(codeerrfilepath, read.csv) | 
					
						
							|  |  |  | codeerrdf<-do.call(ltodf, codeerrfiles) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | codeerrdf |> select(c(3,4)) |>  | 
					
						
							|  |  |  |   rename(ColValues=def.rows.val, ColNames=def.colname) |>  | 
					
						
							|  |  |  |   count(ColValues,ColNames) |> rename(Occurences=n) |>  | 
					
						
							|  |  |  |   datatable(extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Length | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | lenerrfilepath<-list.files("./contacts/errors/length", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | lenerrfiles<-lapply(lenerrfilepath, read.csv) | 
					
						
							|  |  |  | lenerrdf<-do.call(ltodf, lenerrfiles) | 
					
						
							|  |  |  |   datatable(lenerrdf,extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Accounts | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SAP templates available: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE} | 
					
						
							|  |  |  | datatable(data.frame(Templates=unique(rxl("./accounts/template.xlsx", sheet = "Field_Definitions")[,1])), extensions = "Buttons",  | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE,  | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10,  | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Summary of Errors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | sumerrfilepath<-list.files("./accounts/summary", pattern="*sumerror.csv", full.names = T) | 
					
						
							|  |  |  | errfilepath<-list.files("./accounts/summary", pattern="*_error.csv", full.names = T) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sumerrfiles<-lapply(sumerrfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) | 
					
						
							|  |  |  | tdf<-tdf |> mutate(Pending=Expected-Actual) |> select(-Name) |> unique() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf |>  | 
					
						
							|  |  |  |   hchart("bullet", hcaes(x=Country, y=Actual, target=Expected), color="black", name="Observations (Output)") |>  | 
					
						
							|  |  |  |   hc_chart(inverted = TRUE) |>  | 
					
						
							|  |  |  |   hc_add_series(tdf, "pie", hcaes(x=Country, y=Pending), name="Pending (Major Issues)") |>  | 
					
						
							|  |  |  |   hc_plotOptions( | 
					
						
							|  |  |  |     pie = list( | 
					
						
							|  |  |  |       center = c('70%', '70%'), | 
					
						
							|  |  |  |       size = 200, | 
					
						
							|  |  |  |       dataLabels = list(enabled = FALSE), | 
					
						
							|  |  |  |       showInLegend = T | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ) |>  | 
					
						
							|  |  |  |   hc_title( | 
					
						
							|  |  |  |     text="Expect vs Actual" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_subtitle( | 
					
						
							|  |  |  |     text="Pie shows number of major issues identified" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "ErrorSumm_Account" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Error by template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | errfiles<-lapply(errfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, errfiles)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-tdf |>  | 
					
						
							|  |  |  |   mutate(err.deep=word(err.type,-1)) |>  | 
					
						
							|  |  |  |   mutate(err=word(err.type,1,-2)) |> select(-err.type) |>  | 
					
						
							|  |  |  |   select(c(Name, Country, err, err.deep, err.count)) |>  | 
					
						
							|  |  |  |   arrange(desc(err.count)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf.country<- tdf |> | 
					
						
							|  |  |  |       group_by(Country) |>  | 
					
						
							|  |  |  |       summarize(err.count = sum(err.count)  | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |   arrange(err.count) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Lvl1dfStatus <- tibble(name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name)) | 
					
						
							|  |  |  | Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       tdf.err <- tdf.err |> | 
					
						
							|  |  |  |         group_by(err) |> | 
					
						
							|  |  |  |         summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |         ) |> arrange(err.count)  | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       Lvl2dfStatus <- tibble(name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_"))) | 
					
						
							|  |  |  |       list(id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name="High Level Error") | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       lapply(unique(tdf.err$err), function(y_level) { | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err[tdf.err$err == y_level,] | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err.deep |> | 
					
						
							|  |  |  |           group_by(err.deep) |> | 
					
						
							|  |  |  |           summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |           ) |> arrange(err.count) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep,y = tdf.err.deep$err.count) | 
					
						
							|  |  |  |         list(id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name="Deep Dive") | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) |> unlist(recursive = FALSE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | highchart() |> | 
					
						
							|  |  |  |       hc_xAxis(type = "category") |> | 
					
						
							|  |  |  |       hc_add_series(Lvl1dfStatus, "column", hcaes(x = name, y = y),name = "Country View", showInLegend = F) |> | 
					
						
							|  |  |  |       hc_plotOptions(column = list(stacking = "normal"), lang=list(drillUpText ="Back")) |> | 
					
						
							|  |  |  |       hc_drilldown( | 
					
						
							|  |  |  |         allowPointDrilldown = TRUE, | 
					
						
							|  |  |  |         series = c(Level_2_Drilldowns, Level_3_Drilldowns) | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |       hc_yAxis( | 
					
						
							|  |  |  |     title = list(text = "Number of errors") | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_title(text="Error Count") |>  | 
					
						
							|  |  |  |   hc_subtitle(text="Click on bar for deep dive") |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_tooltip() |>  | 
					
						
							|  |  |  |         hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "Error_Account" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Errors in details {.tabset .tabset-pills} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Mandatory {.tabset .tabset-pills} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Account | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrfilepath<-list.files("./accounts/errors/mandatory", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | manderrfiles<-lapply(manderrfilepath, read.csv) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles[c(1,3,5,7,9)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Account Team | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles[c(2,4,6,8,10)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Codelist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | codeerrfilepath<-list.files("./accounts/errors/codelist", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | codeerrfiles<-lapply(codeerrfilepath, read.csv) | 
					
						
							|  |  |  | codeerrdf<-do.call(ltodf, codeerrfiles) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | codeerrdf |> select(c(3,4)) |>  | 
					
						
							|  |  |  |   rename(ColValues=def.rows.val, ColNames=def.colname) |>  | 
					
						
							|  |  |  |   count(ColValues,ColNames) |> rename(Occurences=n) |>  | 
					
						
							|  |  |  |   datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Length | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | lenerrfilepath<-list.files("./accounts/errors/length", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | lenerrfiles<-lapply(lenerrfilepath, read.csv) | 
					
						
							|  |  |  | lenerrdf<-do.call(ltodf, lenerrfiles) | 
					
						
							|  |  |  |   datatable(lenerrdf,extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Projects | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SAP templates available: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE} | 
					
						
							|  |  |  | datatable(data.frame(Templates=unique(rxl("./projects/template.xlsx", sheet = "Field_Definitions")[,1])), extensions = "Buttons",  | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE,  | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10,  | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Summary of Errors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | sumerrfilepath<-list.files("./projects/summary", pattern="*sumerror.csv", full.names = T) | 
					
						
							|  |  |  | errfilepath<-list.files("./projects/summary", pattern="*_error.csv", full.names = T) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sumerrfiles<-lapply(sumerrfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) | 
					
						
							|  |  |  | tdf<-tdf |> mutate(Pending=Expected-Actual) |> select(-Name) |> unique() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf |>  | 
					
						
							|  |  |  |   hchart("bullet", hcaes(x=Country, y=Actual, target=Expected), color="black", name="Observations (Output)") |>  | 
					
						
							|  |  |  |   hc_chart(inverted = TRUE) |>  | 
					
						
							|  |  |  |   hc_add_series(tdf, "pie", hcaes(x=Country, y=Pending), name="Pending (Major Issues)") |>  | 
					
						
							|  |  |  |   hc_plotOptions( | 
					
						
							|  |  |  |     pie = list( | 
					
						
							|  |  |  |       center = c('70%', '70%'), | 
					
						
							|  |  |  |       size = 200, | 
					
						
							|  |  |  |       dataLabels = list(enabled = FALSE), | 
					
						
							|  |  |  |       showInLegend = T | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ) |>  | 
					
						
							|  |  |  |   hc_title( | 
					
						
							|  |  |  |     text="Expect vs Actual" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_subtitle( | 
					
						
							|  |  |  |     text="Pie shows number of major issues identified" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "ErrorSumm_Project" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Error by template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | errfiles<-lapply(errfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, errfiles)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-tdf |>  | 
					
						
							|  |  |  |   mutate(err.deep=word(err.type,-1)) |>  | 
					
						
							|  |  |  |   mutate(err=word(err.type,1,-2)) |> select(-err.type) |>  | 
					
						
							|  |  |  |   select(c(Name, Country, err, err.deep, err.count)) |>  | 
					
						
							|  |  |  |   arrange(desc(err.count)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf.country<- tdf |> | 
					
						
							|  |  |  |       group_by(Country) |>  | 
					
						
							|  |  |  |       summarize(err.count = sum(err.count)  | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |   arrange(err.count) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Lvl1dfStatus <- tibble(name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name)) | 
					
						
							|  |  |  | Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       tdf.err <- tdf.err |> | 
					
						
							|  |  |  |         group_by(err) |> | 
					
						
							|  |  |  |         summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |         ) |> arrange(err.count)  | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       Lvl2dfStatus <- tibble(name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_"))) | 
					
						
							|  |  |  |       list(id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name="High Level Error") | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       lapply(unique(tdf.err$err), function(y_level) { | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err[tdf.err$err == y_level,] | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err.deep |> | 
					
						
							|  |  |  |           group_by(err.deep) |> | 
					
						
							|  |  |  |           summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |           ) |> arrange(err.count) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep,y = tdf.err.deep$err.count) | 
					
						
							|  |  |  |         list(id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name="Deep Dive") | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) |> unlist(recursive = FALSE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | highchart() |> | 
					
						
							|  |  |  |       hc_xAxis(type = "category") |> | 
					
						
							|  |  |  |       hc_add_series(Lvl1dfStatus, "column", hcaes(x = name, y = y),name = "Country View", showInLegend = F) |> | 
					
						
							|  |  |  |       hc_plotOptions(column = list(stacking = "normal"), lang=list(drillUpText ="Back")) |> | 
					
						
							|  |  |  |       hc_drilldown( | 
					
						
							|  |  |  |         allowPointDrilldown = TRUE, | 
					
						
							|  |  |  |         series = c(Level_2_Drilldowns, Level_3_Drilldowns) | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |       hc_yAxis( | 
					
						
							|  |  |  |     title = list(text = "Number of errors") | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_title(text="Error Count") |>  | 
					
						
							|  |  |  |   hc_subtitle(text="Click on bar for deep dive") |>  | 
					
						
							|  |  |  |   hc_tooltip() |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |         hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "Error_Project" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Errors in details {.tabset .tabset-pills} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Mandatory {.tabset .tabset-pills} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Opportunity | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrfilepath<-list.files("./projects/errors/mandatory", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | manderrfiles<-lapply(manderrfilepath, read.csv) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles[c(1,3,6)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Opportunity Sales Team Party In | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrfilepath<-list.files("./projects/errors/mandatory", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | manderrfiles<-lapply(manderrfilepath, read.csv) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles[c(2,5,8)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ###### Opportunity Party Information | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | manderrfilepath<-list.files("./projects/errors/mandatory", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | manderrfiles<-lapply(manderrfilepath, read.csv) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | manderrdf<-do.call(ltodf, manderrfiles[c(4,7)]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Codelist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | codeerrfilepath<-list.files("./projects/errors/codelist", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | codeerrfiles<-lapply(codeerrfilepath, read.csv) | 
					
						
							|  |  |  | #codeerrdf<-do.call(ltodf, codeerrfiles) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | data.table::rbindlist(codeerrfiles) |> select(c(3,4)) |>  | 
					
						
							|  |  |  |   rename(ColValues=def.rows.val, ColNames=def.colname) |>  | 
					
						
							|  |  |  |   count(ColValues,ColNames) |> rename(Occurences=n) |>  | 
					
						
							|  |  |  |   datatable(manderrdf, extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ##### Length | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r} | 
					
						
							|  |  |  | lenerrfilepath<-list.files("./contacts/errors/length", pattern="*.csv", full.names = T) | 
					
						
							|  |  |  | lenerrfiles<-lapply(lenerrfilepath, read.csv) | 
					
						
							|  |  |  | lenerrdf<-do.call(ltodf, lenerrfiles) | 
					
						
							|  |  |  |   datatable(lenerrdf,extensions = "Buttons", | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE, | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10, | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10), | 
					
						
							|  |  |  |                            filter=TRUE)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ### Support | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | SAP templates available: | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE} | 
					
						
							|  |  |  | datatable(data.frame(Templates=unique(rxl("./support/template.xlsx", sheet = "Field_Definitions")[,1])), extensions = "Buttons",  | 
					
						
							|  |  |  |             options = list(paging = TRUE, | 
					
						
							|  |  |  |                            scrollX=TRUE,  | 
					
						
							|  |  |  |                            searching = TRUE, | 
					
						
							|  |  |  |                            ordering = TRUE, | 
					
						
							|  |  |  |                            dom = 'Bfrtip', | 
					
						
							|  |  |  |                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  |                            pageLength=10,  | 
					
						
							|  |  |  |                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Summary of Errors | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | sumerrfilepath<-list.files("./support/summary", pattern="*sumerror.csv", full.names = T) | 
					
						
							|  |  |  | errfilepath<-list.files("./support/summary", pattern="*_error.csv", full.names = T) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | sumerrfiles<-lapply(sumerrfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, sumerrfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, sumerrfiles)) |> arrange(desc(Expected)) | 
					
						
							|  |  |  | tdf<-tdf |> mutate(Pending=Expected-Actual) |> select(-Name) |> unique() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf |>  | 
					
						
							|  |  |  |   hchart("bullet", hcaes(x=Country, y=Actual, target=Expected), color="black", name="Observations (Output)") |>  | 
					
						
							|  |  |  |   hc_chart(inverted = TRUE) |>  | 
					
						
							|  |  |  |   hc_add_series(tdf, "pie", hcaes(x=Country, y=Pending), name="Pending (Major Issues)") |>  | 
					
						
							|  |  |  |   hc_plotOptions( | 
					
						
							|  |  |  |     pie = list( | 
					
						
							|  |  |  |       center = c('70%', '70%'), | 
					
						
							|  |  |  |       size = 200, | 
					
						
							|  |  |  |       dataLabels = list(enabled = FALSE), | 
					
						
							|  |  |  |       showInLegend = T | 
					
						
							|  |  |  |       ) | 
					
						
							|  |  |  |     ) |>  | 
					
						
							|  |  |  |   hc_title( | 
					
						
							|  |  |  |     text="Expect vs Actual" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_subtitle( | 
					
						
							|  |  |  |     text="Pie shows number of major issues identified" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "ErrorSumm_Support" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### Error by template | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```{r echo=FALSE, message=FALSE, warning=FALSE} | 
					
						
							|  |  |  | errfiles<-lapply(errfilepath, read.csv) | 
					
						
							|  |  |  | # datatable(unique(do.call(ltodf, errfiles)), extensions = "Buttons",  | 
					
						
							|  |  |  | #             options = list(paging = TRUE, | 
					
						
							|  |  |  | #                            scrollX=TRUE,  | 
					
						
							|  |  |  | #                            searching = TRUE, | 
					
						
							|  |  |  | #                            ordering = TRUE, | 
					
						
							|  |  |  | #                            dom = 'Bfrtip', | 
					
						
							|  |  |  | #                            buttons = c('copy', 'csv', 'excel', 'pdf'), | 
					
						
							|  |  |  | #                            pageLength=10,  | 
					
						
							|  |  |  | #                            lengthMenu=c(3,5,10) )) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-unique(do.call(ltodf, errfiles)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf<-tdf |>  | 
					
						
							|  |  |  |   mutate(err.deep=word(err.type,-1)) |>  | 
					
						
							|  |  |  |   mutate(err=word(err.type,1,-2)) |> select(-err.type) |>  | 
					
						
							|  |  |  |   select(c(Name, Country, err, err.deep, err.count)) |>  | 
					
						
							|  |  |  |   arrange(desc(err.count)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | tdf.country<- tdf |> | 
					
						
							|  |  |  |       group_by(Country) |>  | 
					
						
							|  |  |  |       summarize(err.count = sum(err.count)  | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |   arrange(err.count) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | Lvl1dfStatus <- tibble(name = tdf.country$Country, y = tdf.country$err.count, drilldown = tolower(name)) | 
					
						
							|  |  |  | Level_2_Drilldowns <- lapply(unique(tdf$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       tdf.err <- tdf.err |> | 
					
						
							|  |  |  |         group_by(err) |> | 
					
						
							|  |  |  |         summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |         ) |> arrange(err.count)  | 
					
						
							|  |  |  |        | 
					
						
							|  |  |  |       Lvl2dfStatus <- tibble(name = tdf.err$err, y = tdf.err$err.count, drilldown = tolower(paste(x_level, name, sep = "_"))) | 
					
						
							|  |  |  |       list(id = tolower(x_level), type = "column", data = list_parse(Lvl2dfStatus), name="High Level Error") | 
					
						
							|  |  |  |     }) | 
					
						
							|  |  |  | Level_3_Drilldowns <- lapply(unique(tdf.country$Country), function(x_level) { | 
					
						
							|  |  |  |       tdf.err <- tdf[tdf$Country == x_level,] | 
					
						
							|  |  |  |       lapply(unique(tdf.err$err), function(y_level) { | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err[tdf.err$err == y_level,] | 
					
						
							|  |  |  |         tdf.err.deep <- tdf.err.deep |> | 
					
						
							|  |  |  |           group_by(err.deep) |> | 
					
						
							|  |  |  |           summarize(err.count = sum(err.count) | 
					
						
							|  |  |  |           ) |> arrange(err.count) | 
					
						
							|  |  |  |          | 
					
						
							|  |  |  |         Lvl3dfStatus <- tibble(name = tdf.err.deep$err.deep,y = tdf.err.deep$err.count) | 
					
						
							|  |  |  |         list(id = tolower(paste(x_level, y_level, sep = "_")), type = "column", data = list_parse2(Lvl3dfStatus), name="Deep Dive") | 
					
						
							|  |  |  |       }) | 
					
						
							|  |  |  |     }) |> unlist(recursive = FALSE) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | highchart() |> | 
					
						
							|  |  |  |       hc_xAxis(type = "category") |> | 
					
						
							|  |  |  |       hc_add_series(Lvl1dfStatus, "column", hcaes(x = name, y = y),name = "Country View", showInLegend = F) |> | 
					
						
							|  |  |  |       hc_plotOptions(column = list(stacking = "normal"), lang=list(drillUpText ="Back")) |> | 
					
						
							|  |  |  |       hc_drilldown( | 
					
						
							|  |  |  |         allowPointDrilldown = TRUE, | 
					
						
							|  |  |  |         series = c(Level_2_Drilldowns, Level_3_Drilldowns) | 
					
						
							|  |  |  |       ) |>  | 
					
						
							|  |  |  |       hc_yAxis( | 
					
						
							|  |  |  |     title = list(text = "Number of errors") | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |   hc_title(text="Error Count") |>  | 
					
						
							|  |  |  |   hc_subtitle(text="Click on bar for deep dive") |>  | 
					
						
							|  |  |  |   hc_tooltip() |>  | 
					
						
							|  |  |  |   hc_credits( | 
					
						
							|  |  |  |     enabled = TRUE, | 
					
						
							|  |  |  |     text = "LaNubia Data Science", | 
					
						
							|  |  |  |     href = "https://www.lanubia.com/" | 
					
						
							|  |  |  |   ) |>  | 
					
						
							|  |  |  |         hc_exporting( | 
					
						
							|  |  |  |     enabled = TRUE, # always enabled | 
					
						
							|  |  |  |     filename = "Error_Support" | 
					
						
							|  |  |  |   ) | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 |