Uat_Study
he 2023-03-06 11:27:43 +08:00
parent c4c237f131
commit d6a7e8dc62
3 changed files with 164 additions and 82 deletions

View File

@ -24,6 +24,11 @@ namespace IRaCIS.Core.Application.Service.Reading.Dto
/// </summary>
public decimal LowSod { get; set; }
/// <summary>
/// 当前SOD
/// </summary>
public decimal PresentSod { get; set; }
/// <summary>
/// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
/// </summary>

View File

@ -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;

View File

@ -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=false,
// 是否存在靶病灶
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()),
@ -1506,9 +1518,6 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
foreach (var item in tableQuestion)
{
// 是否存在靶病灶 (当前访视 至少一个靶病灶的状态为存在)
resultData.ExistsTargetLesion = resultData.ExistsTargetLesion || item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == NoTargetState.Exist.GetEnumInt();
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结的短径
@ -1533,59 +1542,125 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
.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();