算法修改

Uat_Study
he 2023-04-12 14:26:47 +08:00
parent e4d9bdf998
commit 1dc0219fa1
4 changed files with 888 additions and 38 deletions

View File

@ -1437,10 +1437,57 @@
<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)">
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetIRECISTNoTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNewTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
<!-- Badly formed XML comment ignored for member "M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNewNoTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)" -->
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetOtherNewTargetLesionEvaluate(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
获取新靶病灶评估
获取其它既往新病灶评估
</summary>
<remarks>
if有其它既往新病灶消失或一直不存在任何其它既往新病灶
{
疗效为 ND
}
else if (任一病灶从非“存在”状态改为“存在”状态)
{
疗效为 iUPD
}
else if (至少有一个其它既往新病灶无法评估)
{
疗效为 NE
}
else if (至少有一个其它既往新病灶为疑似状态)
{
疗效为 疑似
}
</remarks>
<param name="inDto"></param>
<returns></returns>
</member>
<member name="M:IRaCIS.Core.Application.Service.ReadingCalculate.IRECIST1Point1CalculateService.GetNewLesionAfterTriggeringiRECSITAssessment(IRaCIS.Core.Application.Service.Reading.Dto.ReadingCalculateDto)">
<summary>
</summary>
<remarks>
if现至少1个“存在”状态的触发iRECIST后新病灶
{
疗效为 是
}
else if (只要有一个触发iRECIST后新病灶评估为NE)
{
疗效为 NE
}
else if (只要有一个触发iRECIST后新病灶评估为疑似)
{
疗效为 疑似
}
else
{
疗效为 否
}
</remarks>
<param name="inDto"></param>
<returns></returns>
</member>
@ -7229,14 +7276,59 @@
与基线期SOD相比减小≥30 %
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion">
<summary>
IRECIST 非靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.NotExistsNoTargetLesion">
<summary>
基线未选择任何非靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.LastNoTargetLesion">
<summary>
上次非靶病灶评估结果
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.ExistiCPD">
<summary>
任一非靶病灶状态评估为“进一步增大iCPD
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.LastNoUPD">
<summary>
出现至少1个上一访视未评估为“显著增大iUPD”的病灶本次访视评估为“显著增大iUPD
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.ExistiUPD">
<summary>
任一非靶病灶状态评估为 iUPD
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.RECISTPD">
<summary>
满足RECIST1.1PD
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.HaveNeLesion">
<summary>
有任一非靶病灶为NE状态
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNoTargetLesion.AllVanish">
<summary>
全部为消失
</summary>
</member>
<member name="T:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto">
<summary>
新靶病灶评估Dto
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.ExistsNewTargetLesion">
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.NotExistsNewTargetLesion">
<summary>
存在新靶病灶
存在新靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.AllVanish">
@ -7244,9 +7336,9 @@
所有状态为消失
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.LastTaskIsiUPD">
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.LastTaskNewTargetLesion">
<summary>
上一访视新靶病灶评估为“iUPD”
上一访视新靶病灶评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewTargetLesionDto.ISODAdd5mm">
@ -7264,9 +7356,39 @@
至少有一个新靶病无法评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.ExistsNewNoTargetLesion">
<member name="T:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto">
<summary>
存在新非靶病灶
其他既往新病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto.NotExistsOtherNewTargetLesion">
<summary>
不存在其他既往新病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto.AllVanish">
<summary>
所有状态为消失
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto.LastTaskNoExists">
<summary>
当任一病灶从非“存在”状态改为“存在”状态
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto.ExixtsUnevaluableState">
<summary>
至少有一个病灶无法评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTOtherNewTargetLesionDto.ExixtsSuspectedState">
<summary>
至少有一个其它既往新病灶为疑似状态
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.NotExistsNewNoTargetLesion">
<summary>
不存在新非靶病灶
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.AllVanish">
@ -7274,9 +7396,14 @@
所有状态为消失
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.LastTaskIsiUPD">
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.LastTaskNewNoTargetLesion">
<summary>
上一访视新靶病灶评估为“iUPD”
上一访视新非靶病灶评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.NewTargetLesion">
<summary>
当前访视的新靶病灶评估
</summary>
</member>
<member name="P:IRaCIS.Core.Application.ViewModel.IRECISTNewNoTargetLesionDto.ExixtsEnlargementState">

View File

@ -107,7 +107,51 @@ namespace IRaCIS.Core.Application.ViewModel
}
/// <summary>
/// IRECIST 非靶病灶
/// </summary>
public class IRECISTNoTargetLesion
{
/// <summary>
/// 基线未选择任何非靶病灶
/// </summary>
public bool NotExistsNoTargetLesion { get; set; }
/// <summary>
/// 上次非靶病灶评估结果
/// </summary>
public string LastNoTargetLesion { get; set; }
/// <summary>
/// 任一非靶病灶状态评估为“进一步增大iCPD
/// </summary>
public bool ExistiCPD { get; set; }
/// <summary>
/// 出现至少1个上一访视未评估为“显著增大iUPD”的病灶本次访视评估为“显著增大iUPD
/// </summary>
public bool LastNoUPD { get; set; }
/// <summary>
/// 任一非靶病灶状态评估为 iUPD
/// </summary>
public bool ExistiUPD { get; set; }
/// <summary>
/// 满足RECIST1.1PD
/// </summary>
public bool RECISTPD { get; set; }
/// <summary>
/// 有任一非靶病灶为NE状态
/// </summary>
public bool HaveNeLesion { get; set; }
/// <summary>
/// 全部为消失
/// </summary>
public bool AllVanish { get; set; }
}
/// <summary>
/// 新靶病灶评估Dto
@ -115,9 +159,9 @@ namespace IRaCIS.Core.Application.ViewModel
public class IRECISTNewTargetLesionDto
{
/// <summary>
/// 存在新靶病灶
/// 存在新靶病灶
/// </summary>
public bool ExistsNewTargetLesion { get; set; }
public bool NotExistsNewTargetLesion { get; set; }
/// <summary>
/// 所有状态为消失
@ -125,9 +169,9 @@ namespace IRaCIS.Core.Application.ViewModel
public bool AllVanish { get; set; }
/// <summary>
/// 上一访视新靶病灶评估为“iUPD”
/// 上一访视新靶病灶评估
/// </summary>
public bool LastTaskIsiUPD { get; set; }
public string LastTaskNewTargetLesion { get; set; }
/// <summary>
/// SOD增加5mm以上
@ -145,12 +189,51 @@ namespace IRaCIS.Core.Application.ViewModel
public bool ExixtsUnevaluableState { get; set; }
}
/// <summary>
/// 其他既往新病灶
/// </summary>
public class IRECISTOtherNewTargetLesionDto
{
/// <summary>
/// 不存在其他既往新病灶
/// </summary>
public bool NotExistsOtherNewTargetLesion { get; set; }
/// <summary>
/// 所有状态为消失
/// </summary>
public bool AllVanish { get; set; }
/// <summary>
/// 当任一病灶从非“存在”状态改为“存在”状态
/// </summary>
public bool LastTaskNoExists { get; set; }
/// <summary>
/// 至少有一个病灶无法评估
/// </summary>
public bool ExixtsUnevaluableState { get; set; }
/// <summary>
/// 至少有一个其它既往新病灶为疑似状态
/// </summary>
public bool ExixtsSuspectedState { get; set; }
}
///// <summary>
///// 触发iRECIST后新病灶评估
///// </summary>
//public class NewLesionAfterTriggeringiRECSITAssessmentDto
//{
//}
public class IRECISTNewNoTargetLesionDto
{
/// <summary>
/// 存在新非靶病灶
/// 存在新非靶病灶
/// </summary>
public bool ExistsNewNoTargetLesion { get; set; }
public bool NotExistsNewNoTargetLesion { get; set; }
/// <summary>
/// 所有状态为消失
@ -159,9 +242,14 @@ namespace IRaCIS.Core.Application.ViewModel
/// <summary>
/// 上一访视新靶病灶评估为“iUPD”
/// 上一访视新靶病灶评估
/// </summary>
public bool LastTaskIsiUPD { get; set; }
public string LastTaskNewNoTargetLesion { get; set; }
/// <summary>
/// 当前访视的新靶病灶评估
/// </summary>
public string NewTargetLesion { get; set; }
/// <summary>
/// 任一新非靶病灶状态为“增大”

View File

@ -1545,10 +1545,16 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
/// if基线没有靶病灶
/// {
/// 靶病灶疗效为 ND
/// }else if ((上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件)|| 上一访视评估为iUPD || 本次访视SOD增加不小于5mm)
/// }
/// else if (上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件&&比整体访视期间最低点SOD增加≥20%&&比整体访视期间最低点SOD绝对增加值≥5 mm)
/// {
/// 靶病灶疗效为 ICPD
/// } else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
/// }
/// else if (上一访视评估为iUPD||本次访视SOD增加不小于5mm)
/// {
/// 靶病灶疗效为 ICPD
/// }
/// else if (本次访视满足RECIST1.1的PD条件 && (比整体访视期间最低点SOD增加≥20 % && 比整体访视期间最低点SOD绝对增加值≥5 mm)|| (前一访视评估为iCR && 当前访视至少有一个“存在”状态的靶病灶))
/// {
/// 靶病灶疗效为 iUPD
/// } else if (有任一靶病灶为NE状态)
@ -1639,18 +1645,24 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
// 靶病灶疗效为 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)
// else if (上一访视评估为iCPD && 本次访视满足RECIST1.1的PD条件&&比整体访视期间最低点SOD增加≥20%&&比整体访视期间最低点SOD绝对增加值≥5 mm)
else if (resultData.LastTaskTarget.EqEnum(OverallAssessment.iCPD) && resultData.MeetRECISTPD && resultData.LowSodAddGreaterThan20Percent && resultData.LowSodAddGreaterThan5)
{
// 靶病灶疗效为 ICPD
result = TargetAssessment.iCPD;
}
// else if (上一访视评估为iUPD||本次访视SOD增加不小于5mm)
else if (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))
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)
{
@ -1683,11 +1695,164 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
#region IRECIST非靶病灶评估
/// <summary>
/// IRECIST非靶病灶评估
/// </summary>
/// <remarks>
/// if基线没有非靶病灶
/// {
/// 非靶病灶疗效为 ND
/// }
/// else if (上次非靶病灶评估结果为非iUPD && (任一非靶病灶状态评估为“进一步增大iCPD||出现至少1个上一访视未评估为“显著增大iUPD”的病灶本次访视评估为“显著增大iUPD”))
/// {
/// 非靶病灶疗效为 iCPD
/// }
/// else if (上次非靶病灶评估结果为非iCPD && 任一非靶病灶状态评估为“进一步增大iCPD”或“显著增大iUPD”)
/// {
/// 非靶病灶疗效为 iCPD
/// }
/// else if (满足RECIST1.1的PD标准 && 任一非靶病灶状态评估为“显著增大iUPD”)
/// {
/// 非靶病灶疗效为 iUPD
/// }
/// else if (有任一非靶病灶为NE状态)
/// {
/// 非靶病灶疗效为 NE
/// }
/// else if (全部非靶病灶均为“消失”状态)
/// {
/// 非靶病灶疗效为 iCR
/// }
/// else
/// {
/// 非靶病灶疗效为 iNN
/// }
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetIRECISTNoTargetLesionEvaluate(ReadingCalculateDto inDto)
{
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var noTargetQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NoTargetLesion).Select(x => x.QuestionId).FirstOrDefault();
// 找上一次任务 未被评为显著增大的非靶病灶
ReadingCalculateDto lastTaskCalculateDto = await _generalCalculateService.GetReadingCalculateDto(lastVisitTaskId);
var lastTaskNoiUPDIndexs = lastTaskCalculateDto.QuestionInfo.Where(x => x.LesionType == LesionType.NonTargetLesions).SelectMany(x => x.TableRowInfoList)
.Where(x => x.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && !x.Answer.EqEnum(NoTargetState.IUPD))).Select(x => x.RowIndex).ToList();
IRECISTNoTargetLesion data = new IRECISTNoTargetLesion()
{
// 基线没有非靶病灶
NotExistsNoTargetLesion = tableQuestion.Count() == 0,
// 上次非靶病灶评估结果
LastNoTargetLesion = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == noTargetQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
// 任一非靶病灶状态评估为“进一步增大iCPD
ExistiCPD = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.ICPD)),
// 出现至少1个上一访视未评估为“显著增大iUPD”的病灶本次访视评估为“显著增大iUPD
LastNoUPD = tableQuestion.Where(x => lastTaskNoiUPDIndexs.Contains(x.RowIndex)).SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.IUPD)),
// 任一非靶病灶状态评估为 iUPD
ExistiUPD = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.IUPD)),
// 满足RECIST1.1PD
RECISTPD = (await GetNoTargetLesionEvaluate(inDto)).EqEnum(NoTargetAssessment.PD),
// 有任一非靶病灶为NE状态
HaveNeLesion = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.UnableEvaluate)),
// 全部为消失
AllVanish = true,
};
foreach (var item in tableQuestion)
{
data.AllVanish = data.AllVanish && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NoTargetState.Loss));
}
NoTargetAssessment result = NoTargetAssessment.iNN;
// if基线没有非靶病灶
if (data.NotExistsNoTargetLesion)
{
// 非靶病灶疗效为 ND
result = NoTargetAssessment.ND;
}
// else if (上次非靶病灶评估结果为非iUPD && (任一非靶病灶状态评估为“进一步增大iCPD||出现至少1个上一访视未评估为“显著增大iUPD”的病灶本次访视评估为“显著增大iUPD”))
else if (!data.LastNoTargetLesion.EqEnum(NoTargetAssessment.iUPD) && (data.ExistiCPD || data.LastNoUPD))
{
// 非靶病灶疗效为 iCPD
result = NoTargetAssessment.iCPD;
}
// else if (上次非靶病灶评估结果为非iCPD && 任一非靶病灶状态评估为“进一步增大iCPD”或“显著增大iUPD”)
else if (!data.LastNoTargetLesion.EqEnum(NoTargetAssessment.iCPD) && (data.ExistiCPD || data.ExistiUPD))
{
// 非靶病灶疗效为 iCPD
result = NoTargetAssessment.iCPD;
}
// else if (满足RECIST1.1的PD标准 && 任一非靶病灶状态评估为“显著增大iUPD”)
else if (data.RECISTPD && data.ExistiUPD)
{
// 非靶病灶疗效为 iUPD
result = NoTargetAssessment.iUPD;
}
// else if (有任一非靶病灶为NE状态)
else if (data.HaveNeLesion)
{
// 非靶病灶疗效为 NE
result = NoTargetAssessment.NE;
}
// else if (全部非靶病灶均为“消失”状态)
else if (data.AllVanish)
{
// 非靶病灶疗效为 iCR
result = NoTargetAssessment.iCR;
}
// else
else
{
// 非靶病灶疗效为 iNN
result = NoTargetAssessment.iNN;
}
return result.GetEnumInt();
}
#endregion
#region IRECIST新靶病灶评估
/// <summary>
/// 获取新靶病灶评估
/// 获取IRECIST新靶病灶评估
/// </summary>
/// <remarks>
/// if所有新靶病灶消失或一直不存在任何新靶病灶
/// {
/// 疗效为 ND
/// }
/// else if (上一访视新靶病灶评估为“iUPD” && 满足iSOD增加5mm)
/// {
/// 疗效为 iCPD
/// }
/// else if (上一访视新靶病灶评估为“iCPD”&& 有"存在"状态的新靶病灶)
/// {
/// 疗效为 iCPD
/// }
/// else if (有存在状态的新靶病灶时评估为该结果)
/// {
/// 疗效为 iUPD
/// }
/// else if (至少有一个新靶病无法评估)
/// {
/// 疗效为 NE
/// }
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetNewTargetLesionEvaluate(ReadingCalculateDto inDto)
@ -1697,33 +1862,322 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
{
return TargetAssessment.NA.GetEnumInt();
}
IRECISTNewTargetLesionDto resultData = new IRECISTNewTargetLesionDto()
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var newTargetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewTargetLesion).Select(x => x.QuestionId).FirstOrDefault();
var sodQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SOD).Select(x => x.QuestionId).FirstOrDefault();
IRECISTNewTargetLesionDto data = new IRECISTNewTargetLesionDto()
{
// 是否存在新靶病灶
ExistsNewTargetLesion = tableQuestion.Count() > 0,
// 存在新靶病灶
NotExistsNewTargetLesion = tableQuestion.Count() == 0,
// 所有状态为消失
AllVanish = false,
AllVanish = true,
// 上一访视新靶病灶评估为“iUPD”
LastTaskIsiUPD = true,
// 上一访视新靶病灶评估
LastTaskNewTargetLesion = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == newTargetLesionQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
//SOD增加5mm以上
ISODAdd5mm = true,
ISODAdd5mm = await GetSODData(inDto) - (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == sodQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()).IsNullOrEmptyReturn0() >= 5,
//有"存在"状态的新靶病灶
HaveExixtsState = true,
HaveExixtsState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)),
// 至少有一个新靶病无法评估
ExixtsUnevaluableState = true,
ExixtsUnevaluableState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Exist)),
};
return string.Empty;
foreach (var item in tableQuestion)
{
data.AllVanish = data.AllVanish && item.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewTargetLesionState.Loss));
}
NewTargetLesionAssessment result = NewTargetLesionAssessment.NE;
// if所有新靶病灶消失或一直不存在任何新靶病灶
if(data.NotExistsNewTargetLesion||data.AllVanish)
{
// 疗效为 ND
result = NewTargetLesionAssessment.ND;
}
// else if (上一访视新靶病灶评估为“iUPD” && 满足iSOD增加5mm)
else if(data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iUPD)&&data.ISODAdd5mm)
{
// 疗效为 iCPD
result = NewTargetLesionAssessment.iCPD;
}
// else if (上一访视新靶病灶评估为“iCPD”&& 有"存在"状态的新靶病灶)
else if (data.LastTaskNewTargetLesion.EqEnum(NewTargetLesionAssessment.iCPD) && data.HaveExixtsState)
{
// 疗效为 iCPD
result = NewTargetLesionAssessment.iCPD;
}
// else if (有存在状态的新靶病灶时评估为该结果)
else if ( data.HaveExixtsState)
{
// 疗效为 iUPD
result = NewTargetLesionAssessment.iUPD;
}
// else if (至少有一个新靶病无法评估)
else if (data.ExixtsUnevaluableState)
{
// 疗效为 NE
result = NewTargetLesionAssessment.iUPD;
}
return result.GetEnumInt();
}
#endregion
#region 获取新非靶病灶评估
/// <summary>
/// 获取新非靶病灶评估
/// </summary>
/// <remarks>
/// if所有新非靶病灶消失或一直不存在任何新非靶病灶时评估为该结果
/// {
/// 疗效为 ND
/// }
/// else if (上一访视新非靶病灶评估为“iUPD” && 满足任一新非靶病灶状态为“增大”)
/// {
/// 疗效为 iCPD
/// }
/// else if (上一访视新非靶病灶评估为“iCPD”&& 有"存在"状态的新非靶病灶)
/// {
/// 疗效为 iCPD
/// }
/// else if (当有存在状态的新非靶病灶)
/// {
/// 疗效为 iUPD
/// }
/// else if (至少有一个新非靶病无法评估)
/// {
/// 疗效为 NE
/// }
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetNewNoTargetLesionEvaluate(ReadingCalculateDto inDto)
{
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.NewNonTargetLesion).SelectMany(x => x.TableRowInfoList).ToList();
var newTargetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewTargetLesion).Select(x => x.QuestionId).FirstOrDefault();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
var newNoTargetLesionQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewNoTargetLesion).Select(x => x.QuestionId).FirstOrDefault();
IRECISTNewNoTargetLesionDto data = new IRECISTNewNoTargetLesionDto()
{
// 不存在新非靶病灶
NotExistsNewNoTargetLesion = tableQuestion.Count() == 0,
// 所有状态为消失
AllVanish = tableQuestion.Count() == tableQuestion.Where(x => x.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.Loss))).Count(),
// 上一访视新非靶病灶评估
LastTaskNewNoTargetLesion = (await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastVisitTaskId && x.ReadingQuestionTrialId == newNoTargetLesionQuestionId)
.Select(x => x.Answer).FirstOrDefaultAsync()) ?? string.Empty,
//当前访视的新靶病灶评估
NewTargetLesion = inDto.QuestionInfo.Where(x=>x.QuestionId== newTargetLesionQuestionId).Select(x=>x.Answer).FirstIsNullReturnEmpty(),
// 任一新非靶病灶状态为“增大”
ExixtsEnlargementState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.Progression)),
// 有"存在"状态的病灶
HaveExixtsState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.Exist)),
// 至少有一个病灶无法评估
ExixtsUnevaluableState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewNoTargetLesionState.NotEvaluable)),
};
NewNoTargetLesionAssessment result = NewNoTargetLesionAssessment.NE;
// if所有新非靶病灶消失或一直不存在任何新非靶病灶时评估为该结果
if(data.NotExistsNewNoTargetLesion|| data.AllVanish)
{
// 疗效为 ND
result = NewNoTargetLesionAssessment.ND;
}
// else if (上一访视新非靶病灶评估为“iUPD” && 满足任一新非靶病灶状态为“增大”)
else if(data.LastTaskNewNoTargetLesion.EqEnum(NewNoTargetLesionAssessment.iUPD)&& data.ExixtsEnlargementState)
{
// 疗效为 iCPD
result = NewNoTargetLesionAssessment.iCPD;
}
// else if (上一访视新非靶病灶评估为“iCPD”&& 有"存在"状态的新非靶病灶)
else if (data.LastTaskNewNoTargetLesion.EqEnum(NewNoTargetLesionAssessment.iCPD) && data.HaveExixtsState)
{
// 疗效为 iCPD
result = NewNoTargetLesionAssessment.iCPD;
}
// else if (当有存在状态的新非靶病灶)
else if (data.HaveExixtsState)
{
// 疗效为 iUPD
result = NewNoTargetLesionAssessment.iUPD;
}
// else if (至少有一个新非靶病无法评估)
else if(data.ExixtsUnevaluableState)
{
// 疗效为 NE
result = NewNoTargetLesionAssessment.NE;
}
return result.GetEnumInt();
}
#endregion
#region 其它既往新病灶评估
/// <summary>
/// 获取其它既往新病灶评估
/// </summary>
/// <remarks>
/// if有其它既往新病灶消失或一直不存在任何其它既往新病灶
/// {
/// 疗效为 ND
/// }
/// else if (任一病灶从非“存在”状态改为“存在”状态)
/// {
/// 疗效为 iUPD
/// }
/// else if (至少有一个其它既往新病灶无法评估)
/// {
/// 疗效为 NE
/// }
/// else if (至少有一个其它既往新病灶为疑似状态)
/// {
/// 疗效为 疑似
/// }
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetOtherNewTargetLesionEvaluate(ReadingCalculateDto inDto)
{
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.OtherPreviousNewLesion).SelectMany(x => x.TableRowInfoList).ToList();
var lastVisitTaskId = await GetLastVisitTaskId(inDto);
// 找上一次任务 未被评为显著增大的非靶病灶
ReadingCalculateDto lastTaskCalculateDto = await _generalCalculateService.GetReadingCalculateDto(lastVisitTaskId);
var lastTaskNoExistIndexs = lastTaskCalculateDto.QuestionInfo.Where(x => x.LesionType == LesionType.OtherPreviousNewLesion).SelectMany(x => x.TableRowInfoList)
.Where(x => x.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && !x.Answer.EqEnum(OtherPreviousNewLesionState.Exists))).Select(x => x.RowIndex).ToList();
IRECISTOtherNewTargetLesionDto data = new IRECISTOtherNewTargetLesionDto()
{
// 不存在其他既往新病灶
NotExistsOtherNewTargetLesion = tableQuestion.Count() == 0,
// 所有状态为消失
AllVanish = tableQuestion.Count() == tableQuestion.Where(x => x.TableQuestionList.Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Loss))).Count(),
// 当任一病灶从非“存在”状态改为“存在”状态
LastTaskNoExists = tableQuestion.Where(x => lastTaskNoExistIndexs.Contains(x.RowIndex)).SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Exists)),
// 至少有一个病灶无法评估
ExixtsUnevaluableState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.NotEvaluable)),
// 至少有一个其它既往新病灶为疑似状态
ExixtsSuspectedState = tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(OtherPreviousNewLesionState.Equivocal)),
};
OtherPreviousNewLesionAssessment result = OtherPreviousNewLesionAssessment.Equivocal;
// if有其它既往新病灶消失或一直不存在任何其它既往新病灶
if (data.NotExistsOtherNewTargetLesion || data.AllVanish)
{
// 疗效为 ND
result = OtherPreviousNewLesionAssessment.ND;
}
// else if (任一病灶从非“存在”状态改为“存在”状态)
else if (data.LastTaskNoExists)
{
// 疗效为 iUPD
result = OtherPreviousNewLesionAssessment.iUPD;
}
// else if (至少有一个其它既往新病灶无法评估)
else if (data.ExixtsUnevaluableState)
{
// 疗效为 NE
result = OtherPreviousNewLesionAssessment.NE;
}
// else if (至少有一个其它既往新病灶为疑似状态)
else if (data.ExixtsSuspectedState)
{
// 疗效为 疑似
result = OtherPreviousNewLesionAssessment.Equivocal;
}
return result.GetEnumInt();
}
#endregion
#region 触发iRECIST后新病灶评估
/// <summary>
///
/// </summary>
/// <remarks>
/// if现至少1个“存在”状态的触发iRECIST后新病灶
/// {
/// 疗效为 是
/// }
/// else if (只要有一个触发iRECIST后新病灶评估为NE)
/// {
/// 疗效为 NE
/// }
/// else if (只要有一个触发iRECIST后新病灶评估为疑似)
/// {
/// 疗效为 疑似
/// }
/// else
/// {
/// 疗效为 否
/// }
///
/// </remarks>
/// <param name="inDto"></param>
/// <returns></returns>
public async Task<string> GetNewLesionAfterTriggeringiRECSITAssessment(ReadingCalculateDto inDto)
{
var tableQuestion = inDto.QuestionInfo.Where(x => x.LesionType == LesionType.TriggeringIRECSIT).SelectMany(x => x.TableRowInfoList).ToList();
NewLesionAfterTriggeringiRECSITAssessment result = NewLesionAfterTriggeringiRECSITAssessment.No;
// if现至少1个“存在”状态的触发iRECIST后新病灶
if (tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Exist)))
{
// 疗效为 是
result = NewLesionAfterTriggeringiRECSITAssessment.Yes;
}
// else if (只要有一个触发iRECIST后新病灶评估为NE)
else if (tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.NotEvaluable)))
{
// 疗效为 NE
result = NewLesionAfterTriggeringiRECSITAssessment.NE;
}
// else if (只要有一个触发iRECIST后新病灶评估为疑似)
else if (tableQuestion.SelectMany(x => x.TableQuestionList).Any(x => x.QuestionMark == QuestionMark.State && x.Answer.EqEnum(NewLesionAfterTriggeringiRECSITState.Equivocal)))
{
// 疗效为 疑似
result = NewLesionAfterTriggeringiRECSITAssessment.Equivocal;
}
// else
else
{
// 疗效为 否
result = NewLesionAfterTriggeringiRECSITAssessment.No;
}
return result.GetEnumInt();
}
#endregion
#endregion
#region 获取靶病灶评估

View File

@ -438,6 +438,106 @@ namespace IRaCIS.Core.Domain.Share
Yes = 1
}
/// <summary>
/// 其他既往新病灶状态
/// </summary>
public enum OtherPreviousNewLesionState
{
/// <summary>
/// 存在
/// </summary>
Exists = 0,
/// <summary>
/// 疑似
/// </summary>
Equivocal = 1,
/// <summary>
/// 无法评估
/// </summary>
NotEvaluable = 2,
/// <summary>
/// 消失
/// </summary>
Loss = 3,
}
/// <summary>
/// 其他既往新病灶评估
/// </summary>
public enum OtherPreviousNewLesionAssessment
{
iUPD = 1,
iCPD = 2,
/// <summary>
/// 疑似
/// </summary>
Equivocal = 3,
NE = 4,
ND = 5,
}
/// <summary>
/// 触发iRECIST后新病灶状态
/// </summary>
public enum NewLesionAfterTriggeringiRECSITState
{
/// <summary>
/// 存在
/// </summary>
Exist=1,
/// <summary>
/// 疑似
/// </summary>
Equivocal=2,
/// <summary>
/// 消失
/// </summary>
Loss =3,
/// <summary>
/// 无法评估
/// </summary>
NotEvaluable = 4,
}
/// <summary>
/// 触发iRECIST后新病灶评估
/// </summary>
public enum NewLesionAfterTriggeringiRECSITAssessment
{
/// <summary>
/// 是
/// </summary>
Yes = 1,
/// <summary>
/// 否
/// </summary>
No = 2,
/// <summary>
/// 疑似
/// </summary>
Equivocal = 3,
/// <summary>
/// NE
/// </summary>
NE = 4
}
/// <summary>
/// 整体肿瘤评估
/// </summary>
@ -598,7 +698,12 @@ namespace IRaCIS.Core.Domain.Share
/// </summary>
NN = 4,
iCR = 5,
iNN = 6,
iUPD = 7,
iCPD = 8,
}
/// <summary>
@ -1051,6 +1156,64 @@ namespace IRaCIS.Core.Domain.Share
UpdateType = 3
}
/// <summary>
/// 新靶病灶状态
/// </summary>
public enum NewTargetLesionState
{
/// <summary>
/// 存在
/// </summary>
Exist=1,
/// <summary>
/// 消失
/// </summary>
Loss=2,
/// <summary>
/// 无法评估
/// </summary>
NotEvaluable=3,
}
/// <summary>
/// 新非靶病灶状态
/// </summary>
public enum NewNoTargetLesionState
{
/// <summary>
/// 存在
/// </summary>
Exist = 1,
/// <summary>
/// 增大
/// </summary>
Progression = 1,
/// <summary>
/// 无法评估
/// </summary>
NotEvaluable = 2,
/// <summary>
/// 消失
/// </summary>
Loss = 3,
}
/// <summary>
/// 新非靶病灶评估
/// </summary>
public enum NewNoTargetLesionAssessment
{
iUPD = 1,
iCPD = 2,
NE = 3,
ND = 4,
}
public enum QuestionMark
{
/// <summary>
@ -1277,6 +1440,24 @@ namespace IRaCIS.Core.Domain.Share
IsConverted = 44,
}
/// <summary>
/// 新靶病灶评估
/// </summary>
public enum NewTargetLesionAssessment
{
iUPD = 1,
iCPD = 2,
NE = 3,
ND = 4,
}
/// <summary>
/// 访视点肿瘤评估
/// </summary>