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