Merge branch 'master' of http://192.168.1.2:8033/IRaCIS_Core_Api
commit
0709f886b0
|
@ -2020,7 +2020,7 @@
|
|||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.TargetLesionCalculateDto.LowPercentLess20">
|
||||
<summary>
|
||||
SOD 百分比 整体访视期间最低点SOD相比增加
|
||||
SOD 百分比 整体访视期间SOD最低点SOD相比增加<20%
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.TargetLesionCalculateDto.LowPercentBigger20">
|
||||
|
@ -2050,7 +2050,7 @@
|
|||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.TargetLesionCalculateDto.CurrentMajoreBigger0">
|
||||
<summary>
|
||||
当前访视点非淋巴结病灶长径>0
|
||||
当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
|
||||
</summary>
|
||||
</member>
|
||||
<member name="P:IRaCIS.Core.Application.Service.Reading.Dto.TargetLesionCalculateDto.CurrenShortBigger10">
|
||||
|
|
|
@ -630,6 +630,7 @@ namespace IRaCIS.Application.Services
|
|||
IsSign = x.IsSign,
|
||||
ClinicalUploadType = x.ClinicalDataTrialSet.ClinicalUploadType,
|
||||
CriterionEnumList = x.ClinicalDataTrialSet.CriterionEnumList,
|
||||
TrialClinicalDataSetCriteriaList=x.ClinicalDataTrialSet.TrialClinicalDataSetCriteriaList,
|
||||
Id = x.Id,
|
||||
UploadRole = x.ClinicalDataTrialSet.UploadRole,
|
||||
IsCRCUpload = x.ClinicalDataTrialSet.UploadRole == UploadRole.CRC,
|
||||
|
@ -647,8 +648,9 @@ namespace IRaCIS.Application.Services
|
|||
// 根据标准
|
||||
if (inDto.VisitTaskId != null)
|
||||
{
|
||||
var criterionType = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).Include(x => x.TrialReadingCriterion).Select(x => x.TrialReadingCriterion.CriterionType).FirstNotNullAsync();
|
||||
result = result.Where(x => x.CriterionEnumList.Contains((int)criterionType)).ToList();
|
||||
var visitTaskInfo = await _visitTaskRepository.FirstOrDefaultAsync(x => x.Id == inDto.VisitTaskId);
|
||||
|
||||
result = result.Where(x => x.TrialClinicalDataSetCriteriaList.Any(z=>z.TrialReadingCriterionId==visitTaskInfo.TrialReadingCriterionId)).ToList();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -25,7 +25,12 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public decimal LowSod { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在靶病灶
|
||||
/// 当前SOD
|
||||
/// </summary>
|
||||
public decimal PresentSod { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
|
||||
/// </summary>
|
||||
public bool ExistsTargetLesion { get; set; }
|
||||
|
||||
|
@ -55,7 +60,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public bool SODPercentLess30 { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// SOD 百分比 整体访视期间最低点SOD相比增加
|
||||
/// SOD 百分比 整体访视期间SOD最低点SOD相比增加<20%
|
||||
/// </summary>
|
||||
public bool LowPercentLess20 { get; set; }
|
||||
|
||||
|
@ -85,7 +90,7 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
public string LastTargetLesionEvaluate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 当前访视点非淋巴结病灶长径>0
|
||||
/// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0
|
||||
/// </summary>
|
||||
public bool CurrentMajoreBigger0 { get; set; }
|
||||
|
||||
|
|
|
@ -389,6 +389,8 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
|
|||
|
||||
|
||||
public ClinicalDataTable ClinicalTableData { get; set; }
|
||||
|
||||
public List<TrialClinicalDataSetCriterion> TrialClinicalDataSetCriteriaList { get; set; }
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1977,6 +1977,8 @@ namespace IRaCIS.Application.Services
|
|||
task.IsNeedReadClinicalData = clinicalDataList.Where(x => x.ClinicalDataLevel != ClinicalLevel.Subject).Count() > 0;
|
||||
}
|
||||
|
||||
// 如果已经签名 就不需要再读了
|
||||
task.IsNeedReadClinicalData = visitTaskInfo.ReadingTaskState == ReadingTaskState.HaveSigned ? false : task.IsNeedReadClinicalData;
|
||||
task.DigitPlaces = criterionInfo.DigitPlaces;
|
||||
task.CriterionType = criterionInfo.CriterionType;
|
||||
task.IseCRFShowInDicomReading = criterionInfo.IseCRFShowInDicomReading;
|
||||
|
|
|
@ -1377,54 +1377,63 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <remarks>
|
||||
/// 靶病灶疗效评估算法:
|
||||
///if(没有靶病灶)
|
||||
/// 靶病灶疗效评估算法-20230306确认版本:
|
||||
///if(基线没有靶病灶)
|
||||
///{
|
||||
///靶病灶疗效为 ND
|
||||
/// 靶病灶疗效为 ND
|
||||
///}else
|
||||
///{
|
||||
///初始化靶病灶疗效为 SD
|
||||
///If(上次访视点评估是CR)
|
||||
///{
|
||||
///修改靶病灶疗效为 CR
|
||||
///If (有被评估为NE的单个靶病灶)
|
||||
///{
|
||||
///靶病灶疗效为 NE
|
||||
///}
|
||||
///If(当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
///{
|
||||
/// 靶病灶疗效为 PD
|
||||
///}
|
||||
///If(当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
///{
|
||||
/// 靶病灶疗效为 PD
|
||||
///}
|
||||
///} else
|
||||
///{
|
||||
/// if(最低点SOD不为0,比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值(mm)≥5 mm)
|
||||
/// 初始化靶病灶疗效为 SD
|
||||
///
|
||||
/// if (与基线期SOD相比减小≥30 %)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PR
|
||||
///
|
||||
/// }
|
||||
///
|
||||
///if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
|
||||
/// {
|
||||
/// 靶病灶疗效为 CR
|
||||
///
|
||||
/// }
|
||||
///
|
||||
///if (有被评估为NE的单个靶病灶)
|
||||
/// {
|
||||
/// 靶病灶疗效为 NE
|
||||
///
|
||||
/// }
|
||||
///
|
||||
///if (最低点SOD > 0)
|
||||
///{
|
||||
/// if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///}else
|
||||
/// {
|
||||
/// if (有被评估为NE的单个靶病灶)
|
||||
///
|
||||
/// }
|
||||
///}
|
||||
///else
|
||||
///{
|
||||
/// 靶病灶疗效为 NE
|
||||
///}else
|
||||
/// {
|
||||
/// if (与基线期SOD相比减小≥30 %
|
||||
///{
|
||||
/// if (与整体访视期间最低点SOD相比增加<20 % 或者 比整体访视期间最低点SOD绝对增加值<5 mm)
|
||||
///{
|
||||
/// 靶病灶疗效为 PR
|
||||
/// //进入该分支最低点SOD=0
|
||||
/// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为PD
|
||||
///
|
||||
/// }
|
||||
///}
|
||||
///
|
||||
/// if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10)
|
||||
///{
|
||||
/// 靶病灶疗效为 CR
|
||||
///}
|
||||
/// }
|
||||
///if(上次访视点评估是CR)
|
||||
/// {
|
||||
/// if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///
|
||||
/// }
|
||||
/// }
|
||||
/// if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
/// {
|
||||
/// 靶病灶疗效为 PD
|
||||
///
|
||||
/// }
|
||||
///}
|
||||
///}
|
||||
/// </remarks>
|
||||
/// <returns></returns>
|
||||
|
@ -1435,14 +1444,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
{
|
||||
return TargetAssessment.NA.GetEnumInt();
|
||||
}
|
||||
|
||||
|
||||
TargetLesionCalculateDto resultData = new TargetLesionCalculateDto()
|
||||
{
|
||||
// 是否存在靶病灶
|
||||
ExistsTargetLesion= tableQuestion.Count()>0,
|
||||
ExistsTargetLesion = tableQuestion.Count() > 0,
|
||||
|
||||
// 最低SOD
|
||||
LowSod=(await GetLowSODVisit(inDto)).Select(x=>x.SOD).FirstOrDefault(),
|
||||
LowSod = (await GetLowSODVisit(inDto)).Select(x => x.SOD).FirstOrDefault(),
|
||||
|
||||
// 当前Sod
|
||||
PresentSod = (await GetSODData(inDto)) ?? 0,
|
||||
|
||||
//非淋巴结靶病灶长径之和 decimal
|
||||
SumOfDiameter = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SumOfDiameter).Sum(x => x.Answer.IsNullOrEmptyReturn0()),
|
||||
|
@ -1479,11 +1491,11 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
//// 上次访视点整体肿瘤评估
|
||||
LastTargetLesionEvaluate = string.Empty,
|
||||
|
||||
// 当前访视点非淋巴结病灶长径>0
|
||||
CurrentMajoreBigger0 = true,
|
||||
// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm
|
||||
CurrentMajoreBigger0 = false,
|
||||
|
||||
// 至少一个淋巴结靶病灶短径≥10 mm
|
||||
CurrenShortBigger10 = true,
|
||||
// 当前访视点淋巴结病灶, 至少一个淋巴结靶病灶短径≥10 mm
|
||||
CurrenShortBigger10 = false,
|
||||
|
||||
//淋巴结非靶病灶状态全部为消失
|
||||
NonTargetStateIsLoss = true,
|
||||
|
@ -1499,7 +1511,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||
{
|
||||
// 淋巴结非靶病灶状态全部为消失
|
||||
resultData.NonTargetStateIsLoss = item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault()== NoTargetState.Loss.GetEnumInt();
|
||||
resultData.NonTargetStateIsLoss = resultData.NonTargetStateIsLoss&& item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault()== NoTargetState.Loss.GetEnumInt();
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1509,15 +1521,17 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||
{
|
||||
// 淋巴结的短径
|
||||
resultData.DiameterLessThan10 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
|
||||
resultData.DiameterLessThan10 = resultData.DiameterLessThan10&&(item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() < 10;
|
||||
|
||||
resultData.CurrenShortBigger10= resultData.CurrenShortBigger10|| (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.ShortAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() >= 10;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && !x.Answer.EqEnum(YesOrNoOrNa.Yes)))
|
||||
{
|
||||
// 当前访视点非淋巴结病灶
|
||||
resultData.CurrentMajoreBigger0 = (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
|
||||
// 当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径
|
||||
resultData.CurrentMajoreBigger0 = resultData.CurrentMajoreBigger0|| (item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.MajorAxis).Select(x => x.Answer).FirstOrDefault()).IsNullOrEmptyReturn0() > 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1527,64 +1541,126 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
resultData.LastTargetLesionEvaluate = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == questionId)
|
||||
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty;
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
TargetAssessment result = TargetAssessment.SD;
|
||||
//if(基线没有靶病灶)
|
||||
if (!resultData.ExistsTargetLesion)
|
||||
{
|
||||
// 靶病灶疗效为 ND
|
||||
result = TargetAssessment.ND;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
|
||||
//初始化靶病灶疗效为 SD
|
||||
result = TargetAssessment.SD;
|
||||
|
||||
//if (与基线期SOD相比减小≥30 %)
|
||||
if (resultData.SODPercentBigger30)
|
||||
{
|
||||
if (resultData.ExixtsNETargetLesion)
|
||||
{
|
||||
result = TargetAssessment.NE;
|
||||
}
|
||||
if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
|
||||
{
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
if (resultData.CurrentMajoreBigger0)
|
||||
//靶病灶疗效为 PR
|
||||
result = TargetAssessment.PR;
|
||||
}
|
||||
//if (非淋巴结靶病灶长径之和 == 0 并且所有淋巴结靶病灶的短径 < 10且淋巴结非靶病灶全部消失)
|
||||
if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10 && resultData.NonTargetStateIsLoss)
|
||||
{
|
||||
//靶病灶疗效为 CR
|
||||
result = TargetAssessment.CR;
|
||||
}
|
||||
// if (有被评估为NE的单个靶病灶)
|
||||
if (resultData.ExixtsNETargetLesion)
|
||||
{
|
||||
// 靶病灶疗效为 NE
|
||||
result = TargetAssessment.NE;
|
||||
}
|
||||
//if (最低点SOD > 0)
|
||||
if (resultData.LowSod > 0)
|
||||
{
|
||||
// if(比整体访视期间最低点SOD增加≥20 % 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
if (resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
|
||||
{
|
||||
// 靶病灶疗效为 PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
if (resultData.LowSod != 0 && resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
|
||||
//进入该分支最低点SOD=0
|
||||
// if (当前访视SOD > 0 且与整个访视期间最低点相比增加的值≥5 mm)
|
||||
if (resultData.PresentSod > 0 && resultData.LowChangeBigger5)
|
||||
{
|
||||
// 靶病灶疗效为PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (resultData.ExixtsNETargetLesion)
|
||||
{
|
||||
result = TargetAssessment.NE;
|
||||
}
|
||||
else
|
||||
{
|
||||
if (resultData.SODPercentBigger30)
|
||||
{
|
||||
if (resultData.LowPercentLess20 || resultData.LowChangeLess5)
|
||||
{
|
||||
result = TargetAssessment.PR;
|
||||
}
|
||||
|
||||
if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10&&resultData.NonTargetStateIsLoss)
|
||||
{
|
||||
result = TargetAssessment.CR;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//if(上次访视点评估是CR)
|
||||
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
|
||||
{
|
||||
//if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
|
||||
if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
|
||||
{
|
||||
//靶病灶疗效为 PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
//if (当前访视点非淋巴结病灶至少一个非淋巴结靶病灶的长径>0 mm。)
|
||||
if (resultData.CurrentMajoreBigger0)
|
||||
{
|
||||
//靶病灶疗效为 PD
|
||||
result = TargetAssessment.PD;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#region 之前的逻辑 备注
|
||||
//if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
|
||||
//{
|
||||
// if (resultData.ExixtsNETargetLesion)
|
||||
// {
|
||||
// result = TargetAssessment.NE;
|
||||
// }
|
||||
// if (resultData.CurrenShortBigger10 && resultData.IsAddFive)
|
||||
// {
|
||||
// result = TargetAssessment.PD;
|
||||
// }
|
||||
// if (resultData.CurrentMajoreBigger0)
|
||||
// {
|
||||
// result = TargetAssessment.PD;
|
||||
// }
|
||||
//}
|
||||
|
||||
//else
|
||||
//{
|
||||
// if (resultData.LowSod != 0 && resultData.LowPercentBigger20 && resultData.LowChangeBigger5)
|
||||
// {
|
||||
// result = TargetAssessment.PD;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (resultData.ExixtsNETargetLesion)
|
||||
// {
|
||||
// result = TargetAssessment.NE;
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// if (resultData.SODPercentBigger30)
|
||||
// {
|
||||
// if (resultData.LowPercentLess20 || resultData.LowChangeLess5)
|
||||
// {
|
||||
// result = TargetAssessment.PR;
|
||||
// }
|
||||
|
||||
// if (resultData.SumOfDiameter == 0 && resultData.DiameterLessThan10 && resultData.NonTargetStateIsLoss)
|
||||
// {
|
||||
// result = TargetAssessment.CR;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
//}
|
||||
#endregion
|
||||
|
||||
|
||||
}
|
||||
|
||||
return result.GetEnumInt();
|
||||
|
|
Loading…
Reference in New Issue