代码修改

Uat_Study
he 2023-04-10 17:21:42 +08:00
parent 9d289bede7
commit b00ac06cee
4 changed files with 252 additions and 44 deletions

View File

@ -1436,13 +1436,7 @@
</summary>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetIRECISTTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取IRECIST靶病灶评估
</summary>
<param name="inDto"></param>
<returns></returns>
</member>
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetIRECISTTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNewTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取新靶病灶评估
@ -7184,14 +7178,14 @@
检查日期
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.ExistsTargetLesion">
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.NotExistsTargetLesion">
<summary>
基线未选择任何靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.LastTaskIsICPD">
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.LastTaskTarget">
<summary>
上一访视评估为iCPD
上一访视评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.MeetRECISTPD">
@ -7199,6 +7193,42 @@
满足RECISTPD
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.SODAddGreaterThan5">
<summary>
本次访视SOD增加不小于5mm
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.LowSodAddGreaterThan20Percent">
<summary>
比整体访视期间最低点SOD增加≥20 %
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.LowSodAddGreaterThan5">
<summary>
比整体访视期间最低点SOD绝对增加值≥5 mm
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.HaveExistLesion">
<summary>
当前访视至少有一个“存在”状态的靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.HaveNeLesion">
<summary>
有任一靶病灶为NE状态
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.AllLesionVanish">
<summary>
所有非淋巴结靶病灶消失径线总和为0
</summary>
</member>
<!-- Badly formed XML comment ignored for member "P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.AllMinorAxisLessThan10" -->
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTTargetLesionDto.BaseLineLessThan30">
<summary>
与基线期SOD相比减小≥30 %
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto">
<summary>
新靶病灶评估Dto

View File

@ -53,22 +53,62 @@ namespace IRaCIS.Core.Application.ViewModel
/// <summary>
/// 基线未选择任何靶病灶
/// </summary>
public bool ExistsTargetLesion { get; set; }
public bool NotExistsTargetLesion { get; set; }
/// <summary>
/// 上一访视评估为iCPD
/// 上一访视评估
/// </summary>
public bool LastTaskIsICPD { get; set; }
public string LastTaskTarget { get; set; }
/// <summary>
/// 满足RECISTPD
/// </summary>
public bool MeetRECISTPD { get; set; }
/// <summary>
/// 本次访视SOD增加不小于5mm
/// </summary>
public bool SODAddGreaterThan5 { get; set; }
/// <summary>
/// 比整体访视期间最低点SOD增加≥20 %
/// </summary>
public bool LowSodAddGreaterThan20Percent { get; set; }
/// <summary>
/// 比整体访视期间最低点SOD绝对增加值≥5 mm
/// </summary>
public bool LowSodAddGreaterThan5 { get; set; }
/// <summary>
/// 当前访视至少有一个“存在”状态的靶病灶
/// </summary>
public bool HaveExistLesion { get; set; }
/// <summary>
/// 有任一靶病灶为NE状态
/// </summary>
public bool HaveNeLesion { get; set; }
/// <summary>
/// 所有非淋巴结靶病灶消失径线总和为0
/// </summary>
public bool AllLesionVanish { get; set; }
/// <summary>
/// 所有淋巴结靶病灶的短径缩小到 < 10 mm
/// </summary>
public bool AllMinorAxisLessThan10 { get; set; }
/// <summary>
/// 与基线期SOD相比减小≥30 %
/// </summary>
public bool BaseLineLessThan30 { get; set; }
}
/// <summary>
/// 新靶病灶评估Dto
/// </summary>

View File

@ -1524,55 +1524,166 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
lastVisitTaskId = lastTaskId;
return lastTaskId;
}
}
#endregion
#region 计算阅片问题 外层问题
#region IRECIST计算
#region 获取IRECIST靶病灶评估
/// <summary>
/// 获取IRECIST靶病灶评估
/// </summary>
/// <param name="inDto"></param>
/// <remarks>
/// if基线没有靶病灶
/// {
/// 靶病灶疗效为 ND
/// }else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
/// {
/// 靶病灶疗效为 ICPD
/// } else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
/// {
/// 靶病灶疗效为 iUPD
/// } else if (有任一靶病灶为NE状态)
/// {
/// 靶病灶疗效为 NE
/// }
/// else if (所有非淋巴结靶病灶消失径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
/// {
/// 靶病灶疗效为 iCR
/// } else if (与基线期SOD相比减小≥30 %)
/// {
/// 靶病灶疗效为 iPR
/// }
/// else
/// {
/// 靶病灶疗效为 iSD
/// }
///
/// </remarks>
/// <returns></returns>
public async Task<string> GetIRECISTTargetLesionEvaluate(ReadingCalculateDto inDto)
{
//if基线没有靶病灶
//{
// 靶病灶疗效为 ND
//}else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
//{
// 靶病灶疗效为 ICPD
//} else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
//{
// 靶病灶疗效为 iUPD
//} else if (有任一靶病灶为NE状态)
// {
// 靶病灶疗效为 NE
//}
// else if (所有非淋巴结靶病灶消失径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
//{
// 靶病灶疗效为 iCR
//} else if (与基线期SOD相比减小≥30 %)
//{
// 靶病灶疗效为 iPR
//}
//else
// {
// 靶病灶疗效为 iSD
//}
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var tumorQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.Tumor).Select(x => x.QuestionId).FirstOrDefault();
//if()
return string.Empty;
var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
IRECISTTargetLesionDto resultData = new IRECISTTargetLesionDto()
{
// 基线没有靶病灶
NotExistsTargetLesion = tableQuestion.Count() == 0,
// 上一访视评估
LastTaskTarget = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == tumorQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
// 满足RECISTPD
MeetRECISTPD = (await GetTargetLesionEvaluate(inDto)) == TargetAssessment.PD.GetEnumInt(),
// 本次访视SOD增加不小于5mm
SODAddGreaterThan5 = await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == sodQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5,
//比整体访视期间最低点SOD增加≥20 %
LowSodAddGreaterThan20Percent = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 20,
// 比整体访视期间最低点SOD绝对增加值≥5 mm
LowSodAddGreaterThan5 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.LowestIncrease).Sum(x => x.Answer.IsNullOrEmptyReturn0()) >= 5,
// 当前访视至少有一个“存在”状态的靶病灶
HaveExistLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.Exist)),
// 有任一靶病灶为NE状态
HaveNeLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(TargetState.UnableEvaluate)),
// 所有非淋巴结靶病灶消失径线总和为0
AllLesionVanish = true,
// 所有淋巴结靶病灶的短径缩小到 < 10 mm
AllMinorAxisLessThan10 = true,
// 与基线期SOD相比减小≥30 %
BaseLineLessThan30 = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SODPercent).Sum(x => x.Answer.IsNullOrEmptyReturn0()) <= -30,
};
foreach (var item in tableQuestion)
{
if (item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.IsLymph && x.Answer.EqEnum(YesOrNoOrNa.Yes)))
{
// 淋巴结的短径
resultData.AllMinorAxisLessThan10 = resultData.AllMinorAxisLessThan10 && (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.AllLesionVanish = resultData.AllLesionVanish && item.TableQuestionList.Where(x => x.QuestionMark == QuestionMark.State).Select(x => x.Answer).FirstOrDefault() == TargetState.Loss.GetEnumInt();
}
}
TargetAssessment result = TargetAssessment.SD;
// if基线没有靶病灶
if (resultData.NotExistsTargetLesion)
{
// 靶病灶疗效为 ND
result = TargetAssessment.ND;
}
// }else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
else if ((resultData.LastTaskTarget.EqEnum(OverallAssessment.iCPD) && resultData.MeetRECISTPD) || resultData.LastTaskTarget.EqEnum(OverallAssessment.iUPD) || resultData.SODAddGreaterThan5)
{
// 靶病灶疗效为 ICPD
result = TargetAssessment.iCPD;
}
// } else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
else if(resultData.MeetRECISTPD&&(resultData.LowSodAddGreaterThan20Percent&&resultData.LowSodAddGreaterThan5)|| (resultData.LastTaskTarget.EqEnum(OverallAssessment.iCR)&&resultData.HaveExistLesion))
{
// 靶病灶疗效为 iUPD
result = TargetAssessment.iUPD;
}
// else if (有任一靶病灶为NE状态)
else if(resultData.HaveNeLesion)
{
// 靶病灶疗效为 NE
result = TargetAssessment.NE;
}
// else if (所有非淋巴结靶病灶消失径线总和为0 mm && 所有淋巴结靶病灶的短径缩小到 < 10 mm)
else if(resultData.AllLesionVanish&&resultData.AllMinorAxisLessThan10)
{
// 靶病灶疗效为 iCR
result = TargetAssessment.iCR;
}
// else if (与基线期SOD相比减小≥30 %)
else if(resultData.BaseLineLessThan30)
{
// 靶病灶疗效为 iPR
result = TargetAssessment.iPR;
}
// else
else
{
// 靶病灶疗效为 iSD
result = TargetAssessment.iSD;
}
return result.GetEnumInt();
}
#endregion
#region IRECIST非靶病灶评估
#endregion
/// <summary>
/// 获取新靶病灶评估
@ -1611,6 +1722,8 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
return string.Empty;
}
#endregion
#region 获取靶病灶评估
@ -1848,7 +1961,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
}
}
//if上次访视点评估是CR
if (resultData.LastTargetLesionEvaluate.EqEnum(TargetAssessment.CR))
if (resultData.LastTargetLesionEvaluate.EqEnum(OverallAssessment.CR))
{
//if (当前访视点淋巴结病灶,至少一个淋巴结靶病灶短径≥10 mm 并且该淋巴结靶病灶短径绝对增加值≥5 mm)
// 换句话说 就是 短径≥10 的病灶 和 短径增加值≥5的病灶 的交集数量大于0

View File

@ -483,7 +483,22 @@ namespace IRaCIS.Core.Domain.Share
/// </summary>
SD = 6,
iCR = 7,
iPR = 8,
iSD = 10,
iNN = 11,
iUPD = 12,
iCPD = 13,
}
@ -626,6 +641,16 @@ namespace IRaCIS.Core.Domain.Share
/// </summary>
ND = 5,
iCR=6,
iPR=7,
iSD=8,
iUPD=9,
iCPD=10,
}