public async Task <Dictionary <string, string> > GetControlledDrugCategories(Action <Dictionary <string, string> > onResultFetch = null)
        {
            string token = _httpContext.Session.GetString("access_token");

            var dataDictionary = _httpContext.Session.GetObject <Dictionary <string, string> >(SynapseSession.ControlledDrugCategories);

            if (!dataDictionary.IsCollectionValid())
            {
                var controlledDrugCategoriesLkp = await TerminologyAPIService.GetControlledDrugCategories(token);

                if (controlledDrugCategoriesLkp.IsCollectionValid())
                {
                    dataDictionary = controlledDrugCategoriesLkp.Where(rec => rec.Recordstatus == 1).ToDictionary(k => k.Cd.ToString(), v => v.Desc);

                    _httpContext.Session.SetObject(SynapseSession.ControlledDrugCategories, dataDictionary);
                }
            }

            dataDictionary = dataDictionary ?? new Dictionary <string, string>();

            onResultFetch?.Invoke(dataDictionary);
            return(dataDictionary);
        }