From d6d0965467f743eb67fe68b2cbbe7749aed67fa5 Mon Sep 17 00:00:00 2001 From: he <109787524@qq.com> Date: Mon, 31 Mar 2025 11:09:22 +0800 Subject: [PATCH] =?UTF-8?q?=E6=95=B4=E4=BD=93=E8=82=BF=E7=98=A4=E8=AF=84?= =?UTF-8?q?=E4=BC=B0=20=E8=AE=A1=E7=AE=97=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IRaCIS.Core.Application.xml | 273 +++++++++++++++++- .../MRECISTHCCCalculateService.cs | 175 ++++++++++- 2 files changed, 442 insertions(+), 6 deletions(-) diff --git a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml index 9b5329a27..03f5fcb40 100644 --- a/IRaCIS.Core.Application/IRaCIS.Core.Application.xml +++ b/IRaCIS.Core.Application/IRaCIS.Core.Application.xml @@ -1390,9 +1390,29 @@ + + + 修改稽查文档 + + + + + + + 新增稽查文档 + + + + - 新增或者修改稽查文档 + 通用方法 + + + + + + 获取面包屑导航 @@ -4507,6 +4527,257 @@ + + + 获取阅片的计算数据 + + + + + + + 获取Sod的值 + + + + + 删除病灶获取起始病灶序号(RECIST1Point1 固定是1) + + + + + + 获取阅片报告 + + + + + + + 测试计算 + + + + + + + + 计算任务 + + + + + + + 获取报告验证的信息(这里每个标准可能不一样 返回用object) + + + + + + + 自动计算 + + + + + + + + 获取报告整体整体评估 + + + + + + + 获取报告是否存在疾病 + + + + + + + 验证访视提交 + + + + + + + 将上一次的访视病灶添加到这一次 + + + + + + + 获取SOD + + + 靶病灶径线之和(SOD) + 非淋巴结的长径 和淋巴结的短径 + + + + + + 非淋巴结靶病灶长径之和 + + + + + + + 与基线SOD相比变化量(mm) + + + + + + + 与基线访视相比SOD变化百分比 + + + + + + + 与整个访视期间SOD最低点相比增加的值(mm) + + + + 要更新之前的 + + + + + + 与整个访视期间SOD最低点相比增加的百分比 + + + + 要更新之前的 + + + + + + 整个访视期间SOD最低点访视名称 + + + + 要更新之前的 + + + + + + 是否存在非淋巴结靶病灶 + + + + + + + 是否存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上 + + + + + + + 获取存在淋巴结靶病灶且该病灶比上一访视短径增加5MM以上的病灶 + + + + + + + 被评估为NE的单个靶病灶 + + + + + + + 整体肿瘤评估 + + + + + + + 是否存在疾病 + + + + + + + 修改与整个访视期间SOD最低点相比增加的值(mm) + + + + + + + 修改最低方式点名称 + + + + + + + 修改所有访视任务的答案 + + + + + + + + + 获取基线SOD + + + + + + + 获取最低方式 + + + + + + + 获取访视任务信息 + + + + + + + 获取上一个访视任务Id + + + + + + + 获取非靶病灶评估 + + + + + + + 获取新病灶评估 + + + + 获取阅片的计算数据 diff --git a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs index bdee25c39..f391e4a80 100644 --- a/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs +++ b/IRaCIS.Core.Application/Service/ReadingCalculate/MRECISTHCCCalculateService.cs @@ -1117,12 +1117,177 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate var targetLesion = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.TargetLesion).Select(x => x.Answer).FirstOrDefault(); var noTargetLesion = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NoTargetLesion).Select(x => x.Answer).FirstOrDefault(); var newLesions = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesions).Select(x => x.Answer).FirstOrDefault(); - var result = await _tumorAssessmentRepository.Where(x => - x.TargetLesion == (TargetAssessment)int.Parse(targetLesion.IsNullOrEmpty() ? TargetAssessment.NA.GetEnumInt() : targetLesion) && - x.NonTargetLesions == (NoTargetAssessment)int.Parse(noTargetLesion.IsNullOrEmpty() ? NoTargetAssessment.NA.GetEnumInt() : noTargetLesion) && - x.NewLesion == (NewLesionAssessment)int.Parse(newLesions.IsNullOrEmpty() ? NewLesionAssessment.NA.GetEnumInt() : newLesions)).Select(x => x.OverallEfficacy).ToListAsync(); + return CalculationGetImgOncology(targetLesion, noTargetLesion, newLesions); + } - return result.Count == 0 ? OverallAssessment.NE.GetEnumInt() : result[0].GetEnumInt(); + + + /// + /// 计算整体肿瘤评估 【测试】 + /// + /// 靶病灶 + /// 非靶病灶 + /// 新病灶 + /// + /// 靶病灶 非靶病灶 存在新病灶 整体肿瘤评估 + /// 1. CR CR 否 CR + /// 2. CR ND 否 CR + /// 3. ND CR 否 CR + /// 4. CR NN/NE 否/疑似/NE PR + /// 5. CR CR/ND 疑似/NE PR + /// 6. PR CR/ND/NN/NE 否/疑似/NE PR + /// 7. ND CR 疑似/NE PR + /// 8. SD CR/ND/NN/NE 否/疑似/NE SD + /// 9. ND NN 否/疑似/NE NN + /// 10.NE CR/ND/NN/NE 否/疑似/NE NE + /// 11.ND NE 否/疑似/NE NE + /// 12.ND ND NE NE + /// 13.ND ND 否/疑似 ND + /// 14.PD CR/NN/PD/ND/NE 是/否/疑似/NE PD + /// 15.CR/PR/SD/PD/ND/NE PD 是/否/疑似/NE PD + /// 16.CR/PR/SD/PD/ND/NE CR/NN/PD/ND/NE 是 PD + /// + /// + public string CalculationGetImgOncology(string? targetLesion, string? noTargetLesion, string? newLesions) + { + List data = new List() { + + //1. CR CR 否 CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.CR }), + }, + + // 2. CR ND 否 CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.ND }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.CR }), + }, + + // 3. ND CR 否 CR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.CR }), + }, + + // 4. CR NN/NE 否/疑似/NE PR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.NN, NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PR }), + }, + + // 5. CR CR/ND 疑似/NE PR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR, NoTargetAssessment.ND }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PR }), + }, + + // 6. PR CR/ND/NN/NE 否/疑似/NE PR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.PR }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN, NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PR }), + }, + + //7. ND CR 疑似/NE PR + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PR }), + }, + + // 8. SD CR/ND/NN/NE 否/疑似/NE SD + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.SD }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN , NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.SD }), + }, + + // 9. ND NN 否/疑似/NE NN + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.NN}), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.NN }), + }, + + // 10.NE CR/ND/NN/NE 否/疑似/NE NE + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.NE }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR, NoTargetAssessment.ND, NoTargetAssessment.NN,, NoTargetAssessment.NE, }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.NE }), + }, + + // 11.ND NE 否/疑似/NE NE + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.NE }), + }, + + // 12.ND ND NE NE + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.ND }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.NE }), + }, + + // 13.ND ND 否/疑似 ND + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.ND }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.ND }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.No,NewLesionAssessment.Suspected}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.ND }), + }, + + // 14.PD CR/NN/PD/ND/NE 是/否/疑似/NE PD + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.PD }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR, NoTargetAssessment.NN,NoTargetAssessment.PD, NoTargetAssessment.ND,NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() {NewLesionAssessment.Yes, NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PD }), + }, + + // 15.CR/PR/SD/PD/ND/NE PD 是/否/疑似/NE PD + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR, TargetAssessment.PR, TargetAssessment.SD, TargetAssessment.PD, TargetAssessment.ND, TargetAssessment.NE }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.PD }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.Yes, NewLesionAssessment.No,NewLesionAssessment.Suspected, NewLesionAssessment.NE}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PD }), + }, + + // 16.CR/PR/SD/PD/ND/NE CR/NN/PD/ND/NE 是 PD + new CalculationDto(){ + Column1=ReadingCommon.EnumToString(new List() { TargetAssessment.CR, TargetAssessment.PR, TargetAssessment.SD, TargetAssessment.PD, TargetAssessment.ND, TargetAssessment.NE }), + Column2=ReadingCommon.EnumToString(new List() { NoTargetAssessment.CR,NoTargetAssessment.NN,NoTargetAssessment.PD,NoTargetAssessment.ND,NoTargetAssessment.NE }), + Column3=ReadingCommon.EnumToString(new List() { NewLesionAssessment.Yes}), + Column4=ReadingCommon.EnumToString(new List() { OverallAssessment.PD }), + }, + }; + + var resultdata = data.Where(x => + (x.NotEq.Contains(1) ? !x.Column1.Contains(targetLesion) : x.Column1.Contains(targetLesion) || x.Column1.Count() == 0) && + (x.NotEq.Contains(2) ? !x.Column2.Contains(noTargetLesion) : x.Column2.Contains(noTargetLesion) || x.Column2.Count() == 0) && + (x.NotEq.Contains(3) ? !x.Column3.Contains(newLesions) : x.Column3.Contains(newLesions) || x.Column3.Count() == 0)) + .Select(x => x.Column4.FirstOrDefault()) + .FirstOrDefault(); + return resultdata ?? string.Empty; } #endregion