|
|
|
@ -117,6 +117,7 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
[HttpPost("api/app/DiagnosisFunction/GetDoctorCheckDiagnosisResultAsync")] |
|
|
|
[AllowAnonymous] |
|
|
|
public async Task<GetDiagnosisResultDto> GetDoctorCheckDiagnosisResultAsync(GetDiagnosisResultRequestDto input) |
|
|
|
{ |
|
|
|
#region 小结
|
|
|
|
@ -538,14 +539,14 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
//老系统 拆分结果后,每个结果如果匹配到了结果模板,就不继续诊断匹配
|
|
|
|
//新系统 匹配到底
|
|
|
|
|
|
|
|
var resultAry = GetResultArry(item.Result); |
|
|
|
List<string> templateResultList = new List<string>(); |
|
|
|
for (int i = 0; i < resultAry.Length; i++) |
|
|
|
{ |
|
|
|
templateResultList.Add(Regex.Replace(resultAry[0], @"\d+(\.\d+)?", "$")); |
|
|
|
} |
|
|
|
//var resultAry = GetResultArry(item.Result);
|
|
|
|
//List<string> templateResultList = new List<string>();
|
|
|
|
//for (int i = 0; i < resultAry.Length; i++)
|
|
|
|
//{
|
|
|
|
// templateResultList.Add(Regex.Replace(resultAry[0], @"\d+(\.\d+)?", "$"));
|
|
|
|
//}
|
|
|
|
|
|
|
|
// List<string> templateResultList = new List<string>(GetResultArry(item.Result));
|
|
|
|
List<string> templateResultList = new List<string>(GetResultArry(item.Result)); |
|
|
|
|
|
|
|
var summaryResultMatchIsOld = await _sysParmValueManager.GetSysParmValueAsync(Guid.Empty, "summary_result_match_isold"); |
|
|
|
|
|
|
|
@ -561,13 +562,16 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
|
|
|
|
foreach (var itemResult in templateResultList) |
|
|
|
{ |
|
|
|
string itemResultConvert = Regex.Replace(itemResult, @"(\d+)\s*\*\s*(\d+)", "*"); |
|
|
|
itemResultConvert = Regex.Replace(itemResultConvert, @"\d+(\.\d+)?", "$"); |
|
|
|
|
|
|
|
List<string> tempDiagnosisList = new List<string>(); |
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(itemResult) || itemResult.StartsWith("余未见异常")) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
var templatesList = item.ItemResultTemplates.Where(o => o.Result == itemResult && o.IsResultIntoSummary == 'Y').ToList(); |
|
|
|
var templatesList = item.ItemResultTemplates.Where(o => (o.Result == itemResultConvert || o.Result == itemResult) && o.IsResultIntoSummary == 'Y').ToList(); |
|
|
|
foreach (var template in templatesList) |
|
|
|
{ |
|
|
|
if (template != null && template.DiagnosisId != null && template.DiagnosisId != Guid.Empty) |
|
|
|
@ -685,11 +689,11 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
{ |
|
|
|
return null; |
|
|
|
} |
|
|
|
decimal resultDecimal; |
|
|
|
if (!decimal.TryParse(itemInput.Result, out resultDecimal)) |
|
|
|
{ |
|
|
|
return null; |
|
|
|
} |
|
|
|
//decimal resultDecimal;
|
|
|
|
//if (!decimal.TryParse(itemInput.Result, out resultDecimal))
|
|
|
|
//{
|
|
|
|
// return null;
|
|
|
|
//}
|
|
|
|
var referenceRangeList = itemInput.ReferenceRanges.Where(o => o.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number).ToList(); |
|
|
|
if (!referenceRangeList.Any()) |
|
|
|
{ |
|
|
|
@ -827,11 +831,14 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
//}
|
|
|
|
foreach (var resultSplit in resultArry) |
|
|
|
{ |
|
|
|
string resultSplitConvert = Regex.Replace(resultSplit, @"(\d+)\s*\*\s*(\d+)", "*"); |
|
|
|
resultSplitConvert = Regex.Replace(resultSplitConvert, @"\d+(\.\d+)?", "$"); |
|
|
|
|
|
|
|
if (string.IsNullOrWhiteSpace(resultSplit) || resultSplit.StartsWith("余未见异常")) |
|
|
|
{ |
|
|
|
continue; |
|
|
|
} |
|
|
|
var templatesList = itemInput.ItemResultTemplates.Where(o => o.Result == resultSplit && o.IsResultIntoSummary == 'Y').ToList(); |
|
|
|
var templatesList = itemInput.ItemResultTemplates.Where(o => (o.Result == resultSplit || o.Result == resultSplitConvert) && o.IsResultIntoSummary == 'Y').ToList(); |
|
|
|
foreach (var template in templatesList) |
|
|
|
{ |
|
|
|
|
|
|
|
@ -987,169 +994,169 @@ namespace Shentun.Peis.DiagnosisFunctions |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 执行项目 诊断函数
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="input"></param>
|
|
|
|
/// <param name="item_datas"></param>
|
|
|
|
/// <param name="patientRegister_data"></param>
|
|
|
|
/// <param name="diagnosisTrips"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<List<GetDiagnosisResult_Detail>> GetDiagnosisResultInItemAsync(GetDiagnosisResultRequestDto input, List<Item> item_datas, PatientRegister patientRegister_data, List<string> diagnosisTrips) |
|
|
|
{ |
|
|
|
var reslist = new List<GetDiagnosisResult_Detail>(); |
|
|
|
|
|
|
|
if (input.Items.Count > 0) |
|
|
|
{ |
|
|
|
foreach (var item_data in item_datas) |
|
|
|
{ |
|
|
|
if (item_data.IsDiagnosisFunction == 'Y' && !string.IsNullOrEmpty(item_data.DiagnosisFunction)) |
|
|
|
{ |
|
|
|
var DiagnosisFunctionResult_Item = GetCodeResult(input, item_data.DiagnosisFunction, item_datas); |
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(DiagnosisFunctionResult_Item)) |
|
|
|
{ |
|
|
|
reslist.Add(new GetDiagnosisResult_Detail |
|
|
|
{ |
|
|
|
DiagnosisResult = DiagnosisFunctionResult_Item |
|
|
|
}); |
|
|
|
} |
|
|
|
///// <summary>
|
|
|
|
///// 执行项目 诊断函数
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="input"></param>
|
|
|
|
///// <param name="item_datas"></param>
|
|
|
|
///// <param name="patientRegister_data"></param>
|
|
|
|
///// <param name="diagnosisTrips"></param>
|
|
|
|
///// <returns></returns>
|
|
|
|
//private async Task<List<GetDiagnosisResult_Detail>> GetDiagnosisResultInItemAsync(GetDiagnosisResultRequestDto input, List<Item> item_datas, PatientRegister patientRegister_data, List<string> diagnosisTrips)
|
|
|
|
//{
|
|
|
|
// var reslist = new List<GetDiagnosisResult_Detail>();
|
|
|
|
|
|
|
|
//是否继续执行参考范围规则
|
|
|
|
if (item_data.IsContinueProcess == 'Y' && item_data.IsProduceSummary == 'Y') |
|
|
|
{ |
|
|
|
string itemResult_Request = input.Items.Where(m => m.ItemId == item_data.Id).FirstOrDefault().Result; //项目结果
|
|
|
|
// if (input.Items.Count > 0)
|
|
|
|
// {
|
|
|
|
// foreach (var item_data in item_datas)
|
|
|
|
// {
|
|
|
|
// if (item_data.IsDiagnosisFunction == 'Y' && !string.IsNullOrEmpty(item_data.DiagnosisFunction))
|
|
|
|
// {
|
|
|
|
// var DiagnosisFunctionResult_Item = GetCodeResult(input, item_data.DiagnosisFunction, item_datas);
|
|
|
|
|
|
|
|
//执行参考范围
|
|
|
|
string referenceRangesResult = await GetDiagnosisResultInReferenceRangesAsync(item_data, itemResult_Request, patientRegister_data, diagnosisTrips); |
|
|
|
if (!string.IsNullOrEmpty(referenceRangesResult)) |
|
|
|
{ |
|
|
|
if (item_data.IsNameIntoSummary == 'Y') |
|
|
|
DiagnosisFunctionResult_Item = item_data.DisplayName + DiagnosisFunctionResult_Item; |
|
|
|
reslist.Add(new GetDiagnosisResult_Detail { DiagnosisResult = referenceRangesResult }); |
|
|
|
// if (!string.IsNullOrEmpty(DiagnosisFunctionResult_Item))
|
|
|
|
// {
|
|
|
|
// reslist.Add(new GetDiagnosisResult_Detail
|
|
|
|
// {
|
|
|
|
// DiagnosisResult = DiagnosisFunctionResult_Item
|
|
|
|
// });
|
|
|
|
// }
|
|
|
|
|
|
|
|
} |
|
|
|
// //是否继续执行参考范围规则
|
|
|
|
// if (item_data.IsContinueProcess == 'Y' && item_data.IsProduceSummary == 'Y')
|
|
|
|
// {
|
|
|
|
// string itemResult_Request = input.Items.Where(m => m.ItemId == item_data.Id).FirstOrDefault().Result; //项目结果
|
|
|
|
|
|
|
|
// //执行参考范围
|
|
|
|
// string referenceRangesResult = await GetDiagnosisResultInReferenceRangesAsync(item_data, itemResult_Request, patientRegister_data, diagnosisTrips);
|
|
|
|
// if (!string.IsNullOrEmpty(referenceRangesResult))
|
|
|
|
// {
|
|
|
|
// if (item_data.IsNameIntoSummary == 'Y')
|
|
|
|
// DiagnosisFunctionResult_Item = item_data.DisplayName + DiagnosisFunctionResult_Item;
|
|
|
|
// reslist.Add(new GetDiagnosisResult_Detail { DiagnosisResult = referenceRangesResult });
|
|
|
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return reslist; |
|
|
|
} |
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 执行项目 参考范围获取结果
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="item"></param>
|
|
|
|
/// <param name="itemResult"></param>
|
|
|
|
/// <param name="patientRegister_data"></param>
|
|
|
|
/// <param name="diagnosisTrips"></param>
|
|
|
|
/// <returns></returns>
|
|
|
|
private async Task<string> GetDiagnosisResultInReferenceRangesAsync(Item item, string itemResult, PatientRegister patientRegister_data, List<string> diagnosisTrips) |
|
|
|
{ |
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
string referenceRangesResult = ""; |
|
|
|
string diagnosisTrip = ""; //诊断提示,参考范围性别、年龄 异常时出现
|
|
|
|
// return reslist;
|
|
|
|
//}
|
|
|
|
|
|
|
|
var item_ReferenceRangeList = item.ReferenceRanges.Where(m => m.ReferenceRangeTypeFlag == item.ReferenceRangeTypeFlag).ToList(); |
|
|
|
if (item_ReferenceRangeList.Any() && item.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number) |
|
|
|
{ |
|
|
|
//数字参考范围
|
|
|
|
///// <summary>
|
|
|
|
///// 执行项目 参考范围获取结果
|
|
|
|
///// </summary>
|
|
|
|
///// <param name="item"></param>
|
|
|
|
///// <param name="itemResult"></param>
|
|
|
|
///// <param name="patientRegister_data"></param>
|
|
|
|
///// <param name="diagnosisTrips"></param>
|
|
|
|
///// <returns></returns>
|
|
|
|
//private async Task<string> GetDiagnosisResultInReferenceRangesAsync(Item item, string itemResult, PatientRegister patientRegister_data, List<string> diagnosisTrips)
|
|
|
|
//{
|
|
|
|
|
|
|
|
// string referenceRangesResult = "";
|
|
|
|
// string diagnosisTrip = ""; //诊断提示,参考范围性别、年龄 异常时出现
|
|
|
|
|
|
|
|
List<ReferenceRange> referenceRanges = new List<ReferenceRange>(); |
|
|
|
// var item_ReferenceRangeList = item.ReferenceRanges.Where(m => m.ReferenceRangeTypeFlag == item.ReferenceRangeTypeFlag).ToList();
|
|
|
|
// if (item_ReferenceRangeList.Any() && item.ReferenceRangeTypeFlag == ItemReferenceRangeTypeFlag.Number)
|
|
|
|
// {
|
|
|
|
// //数字参考范围
|
|
|
|
|
|
|
|
if (patientRegister_data.Age != null) |
|
|
|
{ |
|
|
|
referenceRanges = item_ReferenceRangeList.Where(m => m.AgeLowerLimit <= patientRegister_data.Age |
|
|
|
&& m.AgeUpperLimit >= patientRegister_data.Age).ToList(); |
|
|
|
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
//if (string.IsNullOrEmpty(DiagnosisTrip))
|
|
|
|
//{
|
|
|
|
// DiagnosisTrip += "未登记年龄";
|
|
|
|
//}
|
|
|
|
//else
|
|
|
|
//{
|
|
|
|
// DiagnosisTrip += ",未登记年龄";
|
|
|
|
//}
|
|
|
|
// List<ReferenceRange> referenceRanges = new List<ReferenceRange>();
|
|
|
|
|
|
|
|
diagnosisTrip = "未登记年龄"; |
|
|
|
// if (patientRegister_data.Age != null)
|
|
|
|
// {
|
|
|
|
// referenceRanges = item_ReferenceRangeList.Where(m => m.AgeLowerLimit <= patientRegister_data.Age
|
|
|
|
// && m.AgeUpperLimit >= patientRegister_data.Age).ToList();
|
|
|
|
|
|
|
|
//找出默认的0-200
|
|
|
|
referenceRanges = item_ReferenceRangeList.Where(m => m.AgeLowerLimit == 0 |
|
|
|
&& m.AgeUpperLimit == 200).ToList(); |
|
|
|
} |
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// //if (string.IsNullOrEmpty(DiagnosisTrip))
|
|
|
|
// //{
|
|
|
|
// // DiagnosisTrip += "未登记年龄";
|
|
|
|
// //}
|
|
|
|
// //else
|
|
|
|
// //{
|
|
|
|
// // DiagnosisTrip += ",未登记年龄";
|
|
|
|
// //}
|
|
|
|
|
|
|
|
// diagnosisTrip = "未登记年龄";
|
|
|
|
|
|
|
|
// //找出默认的0-200
|
|
|
|
// referenceRanges = item_ReferenceRangeList.Where(m => m.AgeLowerLimit == 0
|
|
|
|
// && m.AgeUpperLimit == 200).ToList();
|
|
|
|
// }
|
|
|
|
|
|
|
|
if (referenceRanges.Any()) |
|
|
|
{ |
|
|
|
//比对性别
|
|
|
|
var referenceRanges2 = referenceRanges.Where(m => patientRegister_data.SexId != null && m.ForSexId == patientRegister_data.SexId).ToList(); |
|
|
|
// if (referenceRanges.Any())
|
|
|
|
// {
|
|
|
|
// //比对性别
|
|
|
|
// var referenceRanges2 = referenceRanges.Where(m => patientRegister_data.SexId != null && m.ForSexId == patientRegister_data.SexId).ToList();
|
|
|
|
|
|
|
|
if (!referenceRanges2.Any()) |
|
|
|
{ |
|
|
|
//未找到,去匹配适用性别为A的
|
|
|
|
referenceRanges2 = referenceRanges.Where(m => m.ForSexId == ForSexFlag.All).ToList(); |
|
|
|
// if (!referenceRanges2.Any())
|
|
|
|
// {
|
|
|
|
// //未找到,去匹配适用性别为A的
|
|
|
|
// referenceRanges2 = referenceRanges.Where(m => m.ForSexId == ForSexFlag.All).ToList();
|
|
|
|
|
|
|
|
if (referenceRanges2.Any()) |
|
|
|
{ |
|
|
|
//数字参考范围类型
|
|
|
|
referenceRangesResult = await GetDiagnosisResultInNumRangeAsync(item, itemResult, referenceRanges2[0]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// if (referenceRanges2.Any())
|
|
|
|
// {
|
|
|
|
// //数字参考范围类型
|
|
|
|
// referenceRangesResult = await GetDiagnosisResultInNumRangeAsync(item, itemResult, referenceRanges2[0]);
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
//////符合条件的参考范围
|
|
|
|
//var item_ReferenceRange = item_ReferenceRangeList.Where(m =>
|
|
|
|
//(m.ForSexId.ToString() == ForSexFlag.All || (patientRegister_data.SexId != null && m.ForSexId == patientRegister_data.SexId))
|
|
|
|
// && patientRegister_data.Age != null
|
|
|
|
// && m.AgeLowerLimit <= patientRegister_data.Age
|
|
|
|
// && m.AgeUpperLimit >= patientRegister_data.Age).ToList();
|
|
|
|
|
|
|
|
//if (item_ReferenceRange.Count > 0)
|
|
|
|
//{
|
|
|
|
// if (item_ReferenceRange.Count == 1)
|
|
|
|
// {
|
|
|
|
// //数字参考范围类型
|
|
|
|
// result = await GetDiagnosisResultInNumRangeAsync(item, itemResult, item_ReferenceRange[0]);
|
|
|
|
// }
|
|
|
|
|
|
|
|
//}
|
|
|
|
} |
|
|
|
else |
|
|
|
{ |
|
|
|
//无参考范围或者字符参考范围
|
|
|
|
referenceRangesResult = await GetDiagnosisResultInItemResultTemplateAsync(item, itemResult); |
|
|
|
if (string.IsNullOrEmpty(referenceRangesResult)) |
|
|
|
{ |
|
|
|
//未匹配上,继续
|
|
|
|
referenceRangesResult = await GetDiagnosisResultInItemResultMatchAsync(item, itemResult); |
|
|
|
// //////符合条件的参考范围
|
|
|
|
// //var item_ReferenceRange = item_ReferenceRangeList.Where(m =>
|
|
|
|
// //(m.ForSexId.ToString() == ForSexFlag.All || (patientRegister_data.SexId != null && m.ForSexId == patientRegister_data.SexId))
|
|
|
|
// // && patientRegister_data.Age != null
|
|
|
|
// // && m.AgeLowerLimit <= patientRegister_data.Age
|
|
|
|
// // && m.AgeUpperLimit >= patientRegister_data.Age).ToList();
|
|
|
|
|
|
|
|
// //if (item_ReferenceRange.Count > 0)
|
|
|
|
// //{
|
|
|
|
// // if (item_ReferenceRange.Count == 1)
|
|
|
|
// // {
|
|
|
|
// // //数字参考范围类型
|
|
|
|
// // result = await GetDiagnosisResultInNumRangeAsync(item, itemResult, item_ReferenceRange[0]);
|
|
|
|
// // }
|
|
|
|
|
|
|
|
// //}
|
|
|
|
// }
|
|
|
|
// else
|
|
|
|
// {
|
|
|
|
// //无参考范围或者字符参考范围
|
|
|
|
// referenceRangesResult = await GetDiagnosisResultInItemResultTemplateAsync(item, itemResult);
|
|
|
|
// if (string.IsNullOrEmpty(referenceRangesResult))
|
|
|
|
// {
|
|
|
|
// //未匹配上,继续
|
|
|
|
// referenceRangesResult = await GetDiagnosisResultInItemResultMatchAsync(item, itemResult);
|
|
|
|
|
|
|
|
if (string.IsNullOrEmpty(referenceRangesResult)) |
|
|
|
{ |
|
|
|
//未匹配上,继续
|
|
|
|
//对比项目默认结果,如果不是默认结果则直接用结果做为小结。
|
|
|
|
if (item.DefaultResult != itemResult) |
|
|
|
{ |
|
|
|
referenceRangesResult = itemResult; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// if (string.IsNullOrEmpty(referenceRangesResult))
|
|
|
|
// {
|
|
|
|
// //未匹配上,继续
|
|
|
|
// //对比项目默认结果,如果不是默认结果则直接用结果做为小结。
|
|
|
|
// if (item.DefaultResult != itemResult)
|
|
|
|
// {
|
|
|
|
// referenceRangesResult = itemResult;
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
// }
|
|
|
|
|
|
|
|
} |
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
|
|
if (!string.IsNullOrEmpty(diagnosisTrip)) |
|
|
|
diagnosisTrips.Add(diagnosisTrip); |
|
|
|
// if (!string.IsNullOrEmpty(diagnosisTrip))
|
|
|
|
// diagnosisTrips.Add(diagnosisTrip);
|
|
|
|
|
|
|
|
|
|
|
|
return referenceRangesResult; |
|
|
|
} |
|
|
|
// return referenceRangesResult;
|
|
|
|
//}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// 根据项目结果模板生成
|
|
|
|
|