/// <summary> /// for batch task /// </summary> /// <param name="nlpEngine"></param> /// <param name="patientEMRDetail"></param> /// <returns></returns> public List <HPODataModel> GetNlpHPOResultBatch(string patientEMRDetail) { var hpoList = new List <HPODataModel>(); if (!string.IsNullOrWhiteSpace(patientEMRDetail)) { try { var clientName = "HPOStringMatchHost"; var api = _config.GetValue <string>("NLPAddress:HPOStringMatchApi"); var client = _clientFactory.CreateClient(clientName); string boundary = DateTime.Now.Ticks.ToString("X"); var formData = new MultipartFormDataContent(boundary); patientEMRDetail = "{\"text\":\"" + patientEMRDetail + "\"}"; formData.Add(new StringContent(patientEMRDetail), "texts"); var response = client.PostAsync(api, formData); var result = response.Result.Content.ReadAsStringAsync().Result.ToString(); var hpoEngineList = JsonConvert.DeserializeObject <List <HPOAPIEngineResultModel> >(result); foreach (var r in hpoEngineList) { if (r.Positivie == 0) { continue; } foreach (var hpo in r.Similarchpoid) { var data = new HPODataModel(); data.HPOId = hpo; var item = hpoList.FirstOrDefault(x => x.HPOId == data.HPOId); if (item == null) { hpoList.Add(data); } } } } catch (Exception ex) { _logger.LogError("NLPSystemRepository GetPatientHPOResult报错:" + ex.ToString()); } } return(hpoList); }
public List <HPODataModel> GetExamHPOResultBatch(string patientVisitId) { var result = new List <HPODataModel>(); if (!string.IsNullOrWhiteSpace(patientVisitId)) { //获取所有检验HPO规则 var examBase = _localMemoryCache.GetExamBaseDataList(); //获取所有检验数据 var examList = new List <ExamBaseDataModel>(); string sql = GetSqlText("home-get-exam-data-sql.txt"); sql = string.Format(sql, patientVisitId); using (var reader = dbgp.Ado.GetDataReader(sql)) { while (reader.Read()) { var data = new ExamBaseDataModel(); data.ExamCode = reader["exam_code"] == DBNull.Value ? "" : reader["exam_code"].ToString(); data.ExamName = reader["exam_name"] == DBNull.Value ? "" : reader["exam_name"].ToString(); data.SampleCode = reader["sample_code"] == DBNull.Value ? "" : reader["sample_code"].ToString(); data.SampleName = reader["sample_name"] == DBNull.Value ? "" : reader["sample_name"].ToString(); data.Range = reader["range"] == DBNull.Value ? "" : reader["range"].ToString(); data.ExamValue = reader["value"] == DBNull.Value ? 0 : Convert.ToDecimal(reader["value"]); data.ExamTimeStr = reader["examTimeStr"] == DBNull.Value ? "" : reader["examTimeStr"].ToString(); examList.Add(data); } } //遍历每条规则,查看检验数据里面是否有符合规则的数据 foreach (var r in examBase) { var subList = examList.Where(x => x.ExamCode == r.ExamCode && x.SampleCode.ToUpper() == r.SampleCode.ToUpper()).ToList(); if (subList.Count == 0) { continue; } var list = new List <ExamBaseDataModel>(); //区间命中 if (r.Maxinum > 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue > r.Minimum && x.ExamValue < r.Maxinum).ToList(); } //低于最小值命中 else if (r.Maxinum == 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue < r.Minimum).ToList(); } //大于最大值命中 else if (r.Maxinum > 0 && r.Minimum == 0) { list = subList.Where(x => x.ExamValue > r.Maxinum).ToList(); } if (list != null && list.Any()) { if (list.Count >= r.MatchTime) { if (!result.Any(x => x.HPOId == r.HPOId)) { var hpoItem = new HPODataModel(); hpoItem.HPOId = r.HPOId; result.Add(hpoItem); } } } } } else { } return(result); }
public List <HPODataModel> SearchStandardHPOList(string searchHPOText) { var searchedHPOList = new List <HPODataModel>(); if (_hostingEnvironment.IsProduction()) { if (!string.IsNullOrWhiteSpace(searchHPOText)) { string sql = GetSqlText("search-standard-hpo-sql.txt"); sql = string.Format(sql, searchHPOText); using (var reader = dbgp.Ado.GetDataReader(sql)) { while (reader.Read()) { var data = new HPODataModel(); data.Name = reader["name_cn"] == DBNull.Value ? "" : reader["name_cn"].ToString(); data.NameEnglish = reader["name_en"] == DBNull.Value ? "" : reader["name_en"].ToString(); data.HPOId = reader["hpoid"] == DBNull.Value ? "" : reader["hpoid"].ToString(); searchedHPOList.Add(data); } } } } else { searchedHPOList.Add(new HPODataModel { Name = "震颤", NameEnglish = "Tremor", HPOId = "HP:0001337" }); searchedHPOList.Add(new HPODataModel { Name = "帕金森症", NameEnglish = "Parkinsonism", HPOId = "HP:0001300" }); searchedHPOList.Add(new HPODataModel { Name = "运动迟缓", NameEnglish = "Bradykinesia", HPOId = "HP:0002067" }); searchedHPOList.Add(new HPODataModel { Name = "强直", NameEnglish = "Rigidity", HPOId = "HP:0002063" }); searchedHPOList.Add(new HPODataModel { Name = "姿势不稳", NameEnglish = "Postural instability", HPOId = "HP:0002172" }); searchedHPOList.Add(new HPODataModel { Name = "核上性凝视麻痹", NameEnglish = "Supranuclear gaze palsy", HPOId = "HP:0000605" }); searchedHPOList.Add(new HPODataModel { Name = "眼睑失用症", NameEnglish = "Eyelid apraxia", HPOId = "HP:0000658" }); searchedHPOList.Add(new HPODataModel { Name = "肌张力障碍", NameEnglish = "Dystonia", HPOId = "HP:0001332" }); searchedHPOList.Add(new HPODataModel { Name = "智能衰退", NameEnglish = "Mental deterioration", HPOId = "HP:0001268" }); searchedHPOList.Add(new HPODataModel { Name = "构音障碍", NameEnglish = "Dysarthria", HPOId = "HP:0001260" }); searchedHPOList.Add(new HPODataModel { Name = "曳行步态", NameEnglish = "Shuffling gait", HPOId = "HP:0002362" }); searchedHPOList.Add(new HPODataModel { Name = "常染色体隐性遗传", NameEnglish = "Autosomal recessive inheritance", HPOId = "HP:0000007" }); } foreach (var r in searchedHPOList) { r.CHPOName = r.Name; } return(searchedHPOList); }
public List <HPODataModel> GetPatientExamDataResult(string patientVisitIds) { var result = new List <HPODataModel>(); if (_hostingEnvironment.IsProduction() && !string.IsNullOrWhiteSpace(patientVisitIds)) { //获取所有检验HPO规则 var examBase = _localMemoryCache.GetExamBaseDataList(); //获取所有检验数据 var examList = new List <ExamBaseDataModel>(); string sql = GetSqlText("home-get-exam-data-sql.txt"); sql = string.Format(sql, patientVisitIds); using (var reader = dbgp.Ado.GetDataReader(sql)) { while (reader.Read()) { var data = new ExamBaseDataModel(); data.ExamCode = reader["exam_code"] == DBNull.Value ? "" : reader["exam_code"].ToString(); data.ExamName = reader["exam_name"] == DBNull.Value ? "" : reader["exam_name"].ToString(); data.SampleCode = reader["sample_code"] == DBNull.Value ? "" : reader["sample_code"].ToString(); data.SampleName = reader["sample_name"] == DBNull.Value ? "" : reader["sample_name"].ToString(); data.Range = reader["range"] == DBNull.Value ? "" : reader["range"].ToString(); data.ExamValue = reader["value"] == DBNull.Value ? 0 : Convert.ToDecimal(reader["value"]); data.ExamTimeStr = reader["examTimeStr"] == DBNull.Value ? "" : reader["examTimeStr"].ToString(); examList.Add(data); } } //遍历每条规则,查看检验数据里面是否有符合规则的数据 foreach (var r in examBase) { var subList = examList.Where(x => x.ExamCode == r.ExamCode && x.SampleCode.ToUpper() == r.SampleCode.ToUpper()).ToList(); if (subList.Count == 0) { continue; } var list = new List <ExamBaseDataModel>(); //区间命中 if (r.Maxinum > 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue > r.Minimum && x.ExamValue < r.Maxinum).ToList(); } //低于最小值命中 else if (r.Maxinum == 0 && r.Minimum > 0) { list = subList.Where(x => x.ExamValue < r.Minimum).ToList(); } //大于最大值命中 else if (r.Maxinum > 0 && r.Minimum == 0) { list = subList.Where(x => x.ExamValue > r.Maxinum).ToList(); } if (list != null && list.Any()) { if (list.Count >= r.MatchTime) { var data = result.FirstOrDefault(x => x.HPOId == r.HPOId); if (data != null) { data.ExamData.AddRange(list); } else { var hpoItem = new HPODataModel(); hpoItem.HPOId = r.HPOId; hpoItem.Name = r.HPOName; hpoItem.CHPOName = r.HPOName; hpoItem.NameEnglish = r.HPOEnglish; hpoItem.TermSource = "检验规则"; hpoItem.HasExam = true; hpoItem.ExamData = new List <ExamBaseDataModel>(); hpoItem.ExamData.AddRange(list); result.Add(hpoItem); } } } } } else { var hpoItem = new HPODataModel { Name = "高蛋白血症", NameEnglish = "Hyperproteinemia", HPOId = "HP:0002152", CHPOName = "高蛋白血症", TermSource = "检验规则" }; var item = new ExamBaseDataModel(); item.HPOId = "HP:0002152"; item.HPOName = "高蛋白血症"; item.HPOEnglish = "Hyperproteinemia"; item.ExamCode = "2925"; item.ExamName = "总蛋白"; item.SampleCode = "LIS126"; item.SampleName = "血清"; item.Range = "60.0-83.0 g/L"; item.ExamValue = 121; item.ExamTimeStr = "2019-12-12"; var item1 = new ExamBaseDataModel(); item1.HPOId = "HP:0002152"; item1.HPOName = "高蛋白血症"; item1.HPOEnglish = "Hyperproteinemia"; item1.ExamCode = "2925"; item1.ExamName = "总蛋白"; item1.SampleCode = "LIS126"; item1.SampleName = "血清"; item1.Range = "60.0-83.0 g/L"; item1.ExamValue = 99; item1.ExamTimeStr = "2020-01-12"; hpoItem.HasExam = true; hpoItem.ExamData = new List <ExamBaseDataModel>(); hpoItem.ExamData.Add(item); hpoItem.ExamData.Add(item1); result.Add(hpoItem); } return(result); }
/// <summary> /// patientEmpiId can be empiid or cardNo /// </summary> /// <param name="nlpEngine"></param> /// <param name="patientEMRDetail"></param> /// <param name="patientEmpiId"></param> /// <returns></returns> public List <HPODataModel> GetPatientHPOResult(string nlpEngine, string patientEMRDetail, string patientVisitIds) { var hpoList = new List <HPODataModel>(); //首先获取检验数据HPO if (!string.IsNullOrWhiteSpace(patientVisitIds)) { hpoList.AddRange(_rdrDataRepository.GetPatientExamDataResult(patientVisitIds)); } if (!string.IsNullOrWhiteSpace(patientEMRDetail)) { //如果API 启用,就调用API 否则取数据库跑出来的结果 if (_config.GetValue <bool>("NLPAddress:HPOApiEnable")) { try { var clientName = "HPOStringMatchHost"; var api = _config.GetValue <string>("NLPAddress:HPOStringMatchApi"); if (nlpEngine.Equals("Spacy")) { clientName = "HPOSpacyMatchHost"; api = _config.GetValue <string>("NLPAddress:HPOSpacyMatchApi"); } var client = _clientFactory.CreateClient(clientName); string boundary = DateTime.Now.Ticks.ToString("X"); var formData = new MultipartFormDataContent(boundary); patientEMRDetail = "{\"text\":\"" + patientEMRDetail + "\"}"; _logger.LogError($"GetPatientHPOResult request,HPO engine:{nlpEngine},api:{api} 请求数据:" + patientEMRDetail); formData.Add(new StringContent(patientEMRDetail), "texts"); var response = client.PostAsync(api, formData); var result = response.Result.Content.ReadAsStringAsync().Result.ToString(); _logger.LogError($"GetPatientHPOResult result,HPO engine:{nlpEngine},api:{api} 返回数据:" + result); var hpoEngineList = JsonConvert.DeserializeObject <List <HPOAPIEngineResultModel> >(result); var subList = new List <HPODataModel>(); foreach (var r in hpoEngineList) { foreach (var hpo in r.Similarchpoid) { var data = new HPODataModel(); if (nlpEngine.Equals("Spacy")) { data.Name = r.Emrword + ":" + r.Similarchpoterm; } else { data.Name = r.Emrword; } data.Positivie = r.Positivie; data.StartIndex = r.Start; data.EndIndex = r.End; data.HPOId = hpo; data.TermSource = r.TermSource == null ? "" : string.Join(",", r.TermSource); data.Editable = true; data.IndexList = new List <HPOMatchIndexModel>(); data.IndexList.Add(new HPOMatchIndexModel { StartIndex = data.StartIndex, EndIndex = data.EndIndex }); var item = subList.FirstOrDefault(x => x.HPOId == data.HPOId && x.Name == data.Name && x.Positivie == data.Positivie); if (item != null) { item.IndexList.AddRange(data.IndexList); } else { subList.Add(data); } } } var chpoList = from T1 in _localMemoryCache.GetCHPO2020StandardList() join T2 in subList.Select(x => x.HPOId) on T1.HpoId equals T2 select new CHPO2020Model { NameChinese = T1.NameChinese, HpoId = T1.HpoId, NameEnglish = T1.NameEnglish }; foreach (var r in subList) { r.IndexList = r.IndexList.OrderBy(x => x.StartIndex).ToList(); var chpo2020Data = chpoList.FirstOrDefault(x => x.HpoId == r.HPOId); if (chpo2020Data != null) { r.CHPOName = chpo2020Data.NameChinese; r.NameEnglish = chpo2020Data.NameEnglish; } } hpoList.AddRange(subList); } catch (Exception ex) { _logger.LogError("NLPSystemRepository GetPatientHPOResult报错:" + ex.ToString()); } } else { hpoList.Add(new HPODataModel { Name = "僵硬", NameEnglish = "Rigors", HPOId = "HP:0025145", Editable = true, CHPOName = "运动迟缓", TermSource = "hpo,omaha" }); hpoList[1].IndexList = new List <HPOMatchIndexModel>(); hpoList[1].IndexList.Add(new HPOMatchIndexModel { StartIndex = 23, EndIndex = 25 }); hpoList[1].IndexList.Add(new HPOMatchIndexModel { StartIndex = 113, EndIndex = 115 }); hpoList[1].IndexList.Add(new HPOMatchIndexModel { StartIndex = 722, EndIndex = 724 }); hpoList.Add(new HPODataModel { Name = "抖动", NameEnglish = "Tremor", HPOId = "HP:0001337", Editable = true, CHPOName = "震颤", TermSource = "umls" }); hpoList[2].IndexList = new List <HPOMatchIndexModel>(); hpoList[2].IndexList.Add(new HPOMatchIndexModel { StartIndex = 20, EndIndex = 22 }); hpoList.Add(new HPODataModel { Name = "运动迟缓", NameEnglish = "Bradykinesia", HPOId = "HP:0002067", Editable = true, TermSource = "umls,hpo,omaha", CHPOName = "运动迟缓" }); hpoList[3].IndexList = new List <HPOMatchIndexModel>(); hpoList[3].IndexList.Add(new HPOMatchIndexModel { StartIndex = 160, EndIndex = 163 }); hpoList.Add(new HPODataModel { Name = "构音障碍", NameEnglish = "Dysarthria", HPOId = "HP:0001260", Editable = true, Positivie = 0, TermSource = "umls,hpo,omaha", CHPOName = "构音障碍" }); hpoList[4].IndexList = new List <HPOMatchIndexModel>(); hpoList[4].IndexList.Add(new HPOMatchIndexModel { StartIndex = 334, EndIndex = 338 }); } } return(hpoList); }