private SearchSummary ExecuteSearchCounts(OpenFdaApiEndPoints endPointType,
                                                  FdaFilterTypes filterType,
                                                  List <string> filterList,
                                                  int maxresultsize,
                                                  string state,
                                                  string cntField)
        {
            var apiUrl = string.Empty;
            var tmpRecallResultList = new List <ResultRecall>();

            var searchSummary = new SearchSummary()
            {
                Keyword = filterList[0],
                State   = state
            };
            var searchResults = "";

            //Limit first query to a 1 year window
            var beginDate = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(1));
            var endDate   = string.Format("{0:yyyyMMdd}", DateTime.Now.AddYears(-1));

            _fda.ResetSearch();
            _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List <string>(new[]
            {
                state
            }), FilterCompairType.And);
            _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);
            _fda.AddSearchFilter(endPointType, FdaFilterTypes.Date, new List <string>(new[]
            {
                beginDate,
                endDate
            }), FilterCompairType.And);

            _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
            apiUrl = _fda.BuildUrl(endPointType);

            searchResults = _fda.Execute(apiUrl);

            // If there was not data in the 1 yr window the get all results.
            // Check a 2 yr window for results.
            if (string.IsNullOrEmpty(searchResults))
            {
                endDate = string.Format("{0:yyyyMMdd}", DateTime.Now.AddYears(-2));

                _fda.ResetSearch();
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List <string>(new[]
                {
                    state
                }), FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Date, new List <string>(new[]
                {
                    beginDate,
                    endDate
                }), FilterCompairType.And);

                _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
                apiUrl = _fda.BuildUrl(endPointType);

                searchResults = _fda.Execute(apiUrl);
            }

            // If there was not data in the 2 yr window the get all results.
            if (string.IsNullOrEmpty(searchResults))
            {
                _fda.ResetSearch();
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List <string>(new[]
                {
                    state
                }), FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);

                _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
                apiUrl = _fda.BuildUrl(endPointType);

                searchResults = _fda.Execute(apiUrl);
            }

            if (!string.IsNullOrEmpty(searchResults))
            {
                var jo           = JObject.Parse(searchResults);
                var countResults = (JArray)(jo["results"]);

                var termCountFound = false;
                var termCount      = 0;

                foreach (var itm in countResults)
                {
                    termCount = (int)itm["count"];

                    var termClassification = (itm["term"]).ToString();

                    switch (termClassification)
                    {
                    case "Class I":

                        searchSummary.ClassICount = termCount;
                        termCountFound            = true;
                        break;

                    case "Class II":

                        searchSummary.ClassIICount = termCount;
                        termCountFound             = true;
                        break;

                    case "Class III":
                        searchSummary.ClassIIICount = termCount;
                        termCountFound = true;
                        break;
                    }
                }

                if (!termCountFound)
                {
                    searchSummary = null;
                }
            }

            return(searchSummary);
        }
示例#2
0
        public string AddSearchFilter(OpenFdaApiEndPoints endpointType,
                                      FdaFilterTypes type,
                                      List<string> filters,
                                      FilterCompairType operationCompairType = FilterCompairType.Or)
        {
            // Add Filter to KeyWord List
            var keyword = string.Empty;
            var keywordToRemove = new string[]
                                  {
                                      "null",
                                      "all"
                                  };

            for (var indx = 0; indx <= filters.Count - 1; indx++)
            {
                filters[indx] = RemoveSpecialCharactersFromKeyword(filters[indx]);

                if (keywordToRemove.Contains(filters[indx].ToLower()))
                {
                    filters[indx] = string.Empty;
                }
            }

            var tmpFilters = (from el in filters
                              where el.Length > 0
                              select el).ToList();

            if (!(tmpFilters.Count == filters.Count))
            {
                filters.Clear();
                filters.AddRange(tmpFilters);
            }

            if (filters.Count == 0)
            {
                return string.Empty;
            }

            foreach (var itm in filters)
            {
                keyword += itm.ToLower() + ",";
            }

            if (!string.IsNullOrEmpty(keyword))
            {
                keyword = keyword.Substring(0, keyword.Length - 1);
            }

            if (!_keyWords.Contains(keyword))
            {
                _keyWords.Add(keyword);
            }

            var param = string.Empty;

            var tmp = string.Empty;

            switch (type)
            {
                case FdaFilterTypes.Date:

                    if (filters.Count == 1)
                    {
                        //Dim tmpDate As DateTime = ConvertDateStringToDate(filters(0), "yyyyMMdd")
                        var tmpDate = DateTime.ParseExact(filters[0], "yyyyMMdd", CultureInfo.InvariantCulture);

                        tmp = string.Format("{0:yyyyMMdd}", tmpDate); //tmpDate.ToString("yyyyMMdd")
                    }
                    else
                    {
                        Nullable<DateTime> minDate = null;
                        Nullable<DateTime> maxDate = null;

                        foreach (var itm in filters)
                        {
                            //Dim itmDate As DateTime = ConvertDateStringToDate(itm, "yyyyMMdd")
                            var itmDate = DateTime.ParseExact(itm, "yyyyMMdd", CultureInfo.InvariantCulture);

                            if (itmDate < minDate || minDate == null)
                            {
                                minDate = itmDate;
                            }

                            if (itmDate > maxDate || maxDate == null)
                            {
                                maxDate = itmDate;
                            }
                        }

                        var dtMin = string.Format("{0:yyyyMMdd}", minDate); //minDate.ToString("yyyyMMdd")
                        var dtMax = string.Format("{0:yyyyMMdd}", maxDate); // maxDate.ToString("yyyyMMdd")

                        tmp = string.Format("[{0}+TO+{1}]", dtMin, dtMax);
                    }
                    break;

                default:

                    var tmpItm = "";

                    foreach (var itm in filters)
                    {
                        tmpItm = itm.Replace(" ", "+");

                        if (tmpItm.Contains("+"))
                        {
                            tmpItm = "\"" + tmpItm + "\"";
                        }

                        tmp += tmpItm + "+";
                    }

                    if (!string.IsNullOrEmpty(tmp))
                    {
                        tmp = tmp.Substring(0, tmp.Length - 1);
                    }
                    break;
            }

            switch (endpointType)
            {
                case OpenFdaApiEndPoints.DrugEvent:

                    switch (type)
                    {
                        case FdaFilterTypes.Date:
                            param = "(";
                            param += "receivedate:" + tmp + "";
                            param += ")";
                            break;

                        case FdaFilterTypes.DrugEventDrugName:

                            param = "(patient.drug.openfda.substance_name:" + tmp;
                            param += "+";
                            param += "patient.drug.openfda.brand_name:" + tmp;
                            param += "+";
                            param += "patient.drug.openfda.generic_name:" + tmp;
                            param += "+";
                            param += "patient.drug.medicinalproduct:" + tmp + ")";
                            break;
                    }
                    break;

                case OpenFdaApiEndPoints.DeviceRecall:
                case OpenFdaApiEndPoints.DrugRecall:
                case OpenFdaApiEndPoints.FoodRecall:

                    switch (type)
                    {
                        case FdaFilterTypes.Region:

                            var tmpEnum = (States) (Enum.Parse(typeof (States), tmp));
                            param = "(state:(" + tmp + ")";
                            param += "+";
                            //param += "distribution_pattern:(Nationwide+" & tmp & "))" ' TODO:  Need the State NAME + GetEnumDescription(tmpEnum)
                            param += string.Format("distribution_pattern:(Nationwide+{0}+{1}))", tmp, Enum.GetName(typeof (States), tmpEnum));
                            // TODO:  Need the State NAME + GetEnumDescription(tmpEnum)
                            break;

                        case FdaFilterTypes.RecallReason:

                            var keywordList = tmp.Replace("\"", string.Empty).
                                                  Split('+');

                            param = "((";
                            foreach (var itm in keywordList)
                            {
                                param += string.Format("reason_for_recall:{0}+AND+", itm);
                            }
                            //Remove the Ending +AND+
                            param = param.Substring(0, param.Length - 5);
                            param += ")+(";
                            foreach (var itm in keywordList)
                            {
                                param += string.Format("product_description:{0}+AND+", itm);
                            }
                            //Remove the Ending +AND+
                            param = param.Substring(0, param.Length - 5);
                            param += "))";
                            break;

                        case FdaFilterTypes.Date:
                            param = "(";
                            param += "report_date:" + tmp + "";
                            param += "+";
                            param += "recall_initiation_date:" + tmp + "";
                            param += ")";
                            break;
                    }
                    break;

                case OpenFdaApiEndPoints.DeviceEvent:

                    switch (type)
                    {
                        case FdaFilterTypes.Date:
                            param = "(";
                            param += "date_of_event:" + tmp + "";
                            param += ")";
                            break;

                        case FdaFilterTypes.DeviceEventDescription:
                            param = "(device.brand_name:" + tmp;
                            param += "+";
                            param += "device.generic_name:" + tmp;
                            param += "+";
                            param += "mdr_text.text:" + tmp + ")";
                            break;
                    }
                    break;

                case OpenFdaApiEndPoints.DrugLabel:
                    break;
            //TBD

                default:
                    break;
            // do nothing
            }

            if (!string.IsNullOrEmpty(param))
            {
                if (!string.IsNullOrEmpty(_search))
                {
                    if (operationCompairType == FilterCompairType.Or)
                    {
                        _search += "+";
                    }
                    else
                    {
                        _search += "+AND+";
                    }
                }

                _search += param;
            }

            return param;
        }
        private SearchSummary ExecuteSearchCounts(OpenFdaApiEndPoints endPointType,
                                                  FdaFilterTypes filterType,
                                                  List<string> filterList,
                                                  int maxresultsize,
                                                  string state,
                                                  string cntField)
        {
            var apiUrl = string.Empty;
            var tmpRecallResultList = new List<ResultRecall>();

            var searchSummary = new SearchSummary()
                                {
                                    Keyword = filterList[0],
                                    State = state
                                };
            var searchResults = "";

            //Limit first query to a 1 year window
            var beginDate = string.Format("{0:yyyyMMdd}", DateTime.Now.AddDays(1));
            var endDate = string.Format("{0:yyyyMMdd}", DateTime.Now.AddYears(-1));

            _fda.ResetSearch();
            _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List<string>(new[]
                                                                                       {
                                                                                           state
                                                                                       }), FilterCompairType.And);
            _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);
            _fda.AddSearchFilter(endPointType, FdaFilterTypes.Date, new List<string>(new[]
                                                                                     {
                                                                                         beginDate,
                                                                                         endDate
                                                                                     }), FilterCompairType.And);

            _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
            apiUrl = _fda.BuildUrl(endPointType);

            searchResults = _fda.Execute(apiUrl);

            // If there was not data in the 1 yr window the get all results.
            // Check a 2 yr window for results.
            if (string.IsNullOrEmpty(searchResults))
            {
                endDate = string.Format("{0:yyyyMMdd}", DateTime.Now.AddYears(-2));

                _fda.ResetSearch();
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List<string>(new[]
                                                                                           {
                                                                                               state
                                                                                           }), FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Date, new List<string>(new[]
                                                                                         {
                                                                                             beginDate,
                                                                                             endDate
                                                                                         }), FilterCompairType.And);

                _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
                apiUrl = _fda.BuildUrl(endPointType);

                searchResults = _fda.Execute(apiUrl);
            }

            // If there was not data in the 2 yr window the get all results.
            if (string.IsNullOrEmpty(searchResults))
            {
                _fda.ResetSearch();
                _fda.AddSearchFilter(endPointType, FdaFilterTypes.Region, new List<string>(new[]
                                                                                           {
                                                                                               state
                                                                                           }), FilterCompairType.And);
                _fda.AddSearchFilter(endPointType, filterType, filterList, FilterCompairType.And);

                _fda.AddCountField(string.Format("{0}.exact", cntField.ToLower()));
                apiUrl = _fda.BuildUrl(endPointType);

                searchResults = _fda.Execute(apiUrl);
            }

            if (!string.IsNullOrEmpty(searchResults))
            {
                var jo = JObject.Parse(searchResults);
                var countResults = (JArray) (jo["results"]);

                var termCountFound = false;
                var termCount = 0;

                foreach (var itm in countResults)
                {
                    termCount = (int) itm["count"];

                    var termClassification = (itm["term"]).ToString();

                    switch (termClassification)
                    {
                        case "Class I":

                            searchSummary.ClassICount = termCount;
                            termCountFound = true;
                            break;

                        case "Class II":

                            searchSummary.ClassIICount = termCount;
                            termCountFound = true;
                            break;

                        case "Class III":
                            searchSummary.ClassIIICount = termCount;
                            termCountFound = true;
                            break;
                    }
                }

                if (!termCountFound)
                {
                    searchSummary = null;
                }
            }

            return searchSummary;
        }
示例#4
0
        public string AddSearchFilter(OpenFdaApiEndPoints endpointType,
                                      FdaFilterTypes type,
                                      List <string> filters,
                                      FilterCompairType operationCompairType = FilterCompairType.Or)
        {
            // Add Filter to KeyWord List
            var keyword         = string.Empty;
            var keywordToRemove = new string[]
            {
                "null",
                "all"
            };

            for (var indx = 0; indx <= filters.Count - 1; indx++)
            {
                filters[indx] = RemoveSpecialCharactersFromKeyword(filters[indx]);

                if (keywordToRemove.Contains(filters[indx].ToLower()))
                {
                    filters[indx] = string.Empty;
                }
            }

            var tmpFilters = (from el in filters
                              where el.Length > 0
                              select el).ToList();

            if (!(tmpFilters.Count == filters.Count))
            {
                filters.Clear();
                filters.AddRange(tmpFilters);
            }

            if (filters.Count == 0)
            {
                return(string.Empty);
            }

            foreach (var itm in filters)
            {
                keyword += itm.ToLower() + ",";
            }

            if (!string.IsNullOrEmpty(keyword))
            {
                keyword = keyword.Substring(0, keyword.Length - 1);
            }

            if (!_keyWords.Contains(keyword))
            {
                _keyWords.Add(keyword);
            }

            var param = string.Empty;

            var tmp = string.Empty;

            switch (type)
            {
            case FdaFilterTypes.Date:

                if (filters.Count == 1)
                {
                    //Dim tmpDate As DateTime = ConvertDateStringToDate(filters(0), "yyyyMMdd")
                    var tmpDate = DateTime.ParseExact(filters[0], "yyyyMMdd", CultureInfo.InvariantCulture);

                    tmp = string.Format("{0:yyyyMMdd}", tmpDate);     //tmpDate.ToString("yyyyMMdd")
                }
                else
                {
                    Nullable <DateTime> minDate = null;
                    Nullable <DateTime> maxDate = null;

                    foreach (var itm in filters)
                    {
                        //Dim itmDate As DateTime = ConvertDateStringToDate(itm, "yyyyMMdd")
                        var itmDate = DateTime.ParseExact(itm, "yyyyMMdd", CultureInfo.InvariantCulture);

                        if (itmDate < minDate || minDate == null)
                        {
                            minDate = itmDate;
                        }

                        if (itmDate > maxDate || maxDate == null)
                        {
                            maxDate = itmDate;
                        }
                    }

                    var dtMin = string.Format("{0:yyyyMMdd}", minDate);     //minDate.ToString("yyyyMMdd")
                    var dtMax = string.Format("{0:yyyyMMdd}", maxDate);     // maxDate.ToString("yyyyMMdd")

                    tmp = string.Format("[{0}+TO+{1}]", dtMin, dtMax);
                }
                break;

            default:

                var tmpItm = "";

                foreach (var itm in filters)
                {
                    tmpItm = itm.Replace(" ", "+");

                    if (tmpItm.Contains("+"))
                    {
                        tmpItm = "\"" + tmpItm + "\"";
                    }

                    tmp += tmpItm + "+";
                }

                if (!string.IsNullOrEmpty(tmp))
                {
                    tmp = tmp.Substring(0, tmp.Length - 1);
                }
                break;
            }

            switch (endpointType)
            {
            case OpenFdaApiEndPoints.DrugEvent:

                switch (type)
                {
                case FdaFilterTypes.Date:
                    param  = "(";
                    param += "receivedate:" + tmp + "";
                    param += ")";
                    break;

                case FdaFilterTypes.DrugEventDrugName:

                    param  = "(patient.drug.openfda.substance_name:" + tmp;
                    param += "+";
                    param += "patient.drug.openfda.brand_name:" + tmp;
                    param += "+";
                    param += "patient.drug.openfda.generic_name:" + tmp;
                    param += "+";
                    param += "patient.drug.medicinalproduct:" + tmp + ")";
                    break;
                }
                break;

            case OpenFdaApiEndPoints.DeviceRecall:
            case OpenFdaApiEndPoints.DrugRecall:
            case OpenFdaApiEndPoints.FoodRecall:

                switch (type)
                {
                case FdaFilterTypes.Region:

                    var tmpEnum = (States)(Enum.Parse(typeof(States), tmp));
                    param  = "(state:(" + tmp + ")";
                    param += "+";
                    //param += "distribution_pattern:(Nationwide+" & tmp & "))" ' TODO:  Need the State NAME + GetEnumDescription(tmpEnum)
                    param += string.Format("distribution_pattern:(Nationwide+{0}+{1}))", tmp, Enum.GetName(typeof(States), tmpEnum));
                    // TODO:  Need the State NAME + GetEnumDescription(tmpEnum)
                    break;

                case FdaFilterTypes.RecallReason:

                    var keywordList = tmp.Replace("\"", string.Empty).
                                      Split('+');

                    param = "((";
                    foreach (var itm in keywordList)
                    {
                        param += string.Format("reason_for_recall:{0}+AND+", itm);
                    }
                    //Remove the Ending +AND+
                    param  = param.Substring(0, param.Length - 5);
                    param += ")+(";
                    foreach (var itm in keywordList)
                    {
                        param += string.Format("product_description:{0}+AND+", itm);
                    }
                    //Remove the Ending +AND+
                    param  = param.Substring(0, param.Length - 5);
                    param += "))";
                    break;

                case FdaFilterTypes.Date:
                    param  = "(";
                    param += "report_date:" + tmp + "";
                    param += "+";
                    param += "recall_initiation_date:" + tmp + "";
                    param += ")";
                    break;
                }
                break;

            case OpenFdaApiEndPoints.DeviceEvent:

                switch (type)
                {
                case FdaFilterTypes.Date:
                    param  = "(";
                    param += "date_of_event:" + tmp + "";
                    param += ")";
                    break;

                case FdaFilterTypes.DeviceEventDescription:
                    param  = "(device.brand_name:" + tmp;
                    param += "+";
                    param += "device.generic_name:" + tmp;
                    param += "+";
                    param += "mdr_text.text:" + tmp + ")";
                    break;
                }
                break;

            case OpenFdaApiEndPoints.DrugLabel:
                break;
//TBD

            default:
                break;
// do nothing
            }

            if (!string.IsNullOrEmpty(param))
            {
                if (!string.IsNullOrEmpty(_search))
                {
                    if (operationCompairType == FilterCompairType.Or)
                    {
                        _search += "+";
                    }
                    else
                    {
                        _search += "+AND+";
                    }
                }

                _search += param;
            }

            return(param);
        }