Test.EIImageViewer
parent
592ec6ed98
commit
962a710ed1
|
@ -11,6 +11,28 @@ namespace IRaCIS.Core.Application.ViewModel
|
|||
public Guid VisitTaskId { get; set; }
|
||||
}
|
||||
|
||||
public class SiteVisitForTumor
|
||||
{
|
||||
/// <summary>
|
||||
/// 访视Id
|
||||
/// </summary>
|
||||
public Guid VisitTaskId { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 任务Num
|
||||
/// </summary>
|
||||
public decimal VisitTaskNum { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最早拍片日期
|
||||
/// </summary>
|
||||
public DateTime EarliestScanDate { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// 最晚拍片日期
|
||||
/// </summary>
|
||||
public DateTime LatestScanDate { get; set; }
|
||||
}
|
||||
|
||||
public class AddTaskLesionAnswerFromLastTaskOutDto
|
||||
{
|
||||
|
|
|
@ -437,7 +437,10 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.NewBoneLesionsCount,GetIntFun=GetNewBoneLesionCount},
|
||||
|
||||
|
||||
// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
new ReadingCalculateData (){QuestionType=QuestionType.SiteVisitForTumorEvaluation,GetStringFun=GetSiteVisitForTumorEvaluation},
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
@ -460,14 +463,15 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
#region 计算答案
|
||||
|
||||
var value = await calculate.GetIntFun(inDto);
|
||||
|
||||
|
||||
switch (calculate.QuestionType)
|
||||
{
|
||||
case QuestionType.NewLesionsCount:
|
||||
|
||||
if (inDto.VisitTaskNum >= 1)
|
||||
{
|
||||
item.Answer = value.ToString();
|
||||
item.Answer = (await calculate.GetIntFun(inDto)).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -477,7 +481,7 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
case QuestionType.AlwaysNewLesionsCount:
|
||||
if (inDto.VisitTaskNum >= 2)
|
||||
{
|
||||
item.Answer = value.ToString();
|
||||
item.Answer = (await calculate.GetIntFun(inDto)).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -487,15 +491,18 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
case QuestionType.NewBoneLesionsCount:
|
||||
if (inDto.VisitTaskNum >= 3)
|
||||
{
|
||||
item.Answer = value.ToString();
|
||||
item.Answer = (await calculate.GetIntFun(inDto)).ToString();
|
||||
}
|
||||
else
|
||||
{
|
||||
item.Answer = nameof(YesOrNoOrNa.NA);
|
||||
}
|
||||
break;
|
||||
case QuestionType.SiteVisitForTumorEvaluation:
|
||||
item.Answer = await calculate.GetStringFun(inDto);
|
||||
break;
|
||||
default:
|
||||
item.Answer = value.ToString();
|
||||
item.Answer =string.Empty;
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -608,6 +615,111 @@ namespace IRaCIS.Core.Application.Service.ReadingCalculate
|
|||
|
||||
#endregion
|
||||
|
||||
|
||||
|
||||
#region 访视点肿瘤评估
|
||||
/// <summary>
|
||||
/// 访视点肿瘤评估
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task<string> GetSiteVisitForTumorEvaluation(ReadingCalculateDto inDto)
|
||||
{
|
||||
await ChangeLastTaskSiteVisitForTumorEvaluation(inDto);
|
||||
var newLesionsCount = int.Parse(inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault() ?? "0");
|
||||
var baseLineLesionsCount = int.Parse(inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.BaseLineLesionsCount).Select(x => x.Answer).FirstOrDefault() ?? "0");
|
||||
var alwaysNewLesionsCount = int.Parse(inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.AlwaysNewLesionsCount).Select(x => x.Answer).FirstOrDefault() ?? "0");
|
||||
if (newLesionsCount == 0 &&
|
||||
baseLineLesionsCount == 0 &&
|
||||
alwaysNewLesionsCount == 0)
|
||||
{
|
||||
return VisitTumorEvaluation.ND.GetEnumInt();
|
||||
}
|
||||
else
|
||||
{
|
||||
return VisitTumorEvaluation.NoPD.GetEnumInt();
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 修改上一次访视结果
|
||||
/// </summary>
|
||||
/// <param name="inDto"></param>
|
||||
/// <returns></returns>
|
||||
public async Task ChangeLastTaskSiteVisitForTumorEvaluation(ReadingCalculateDto inDto)
|
||||
{
|
||||
var taskinfo = await _visitTaskRepository.Where(x => x.Id == inDto.VisitTaskId).FirstNotNullAsync();
|
||||
var taskList = await _visitTaskRepository.Where(x => x.ReadingCategory == ReadingCategory.Visit &&
|
||||
x.TrialReadingCriterionId == taskinfo.TrialReadingCriterionId &&
|
||||
x.SubjectId == taskinfo.SubjectId && x.ReadingTaskState == ReadingTaskState.HaveSigned && x.VisitTaskNum <= taskinfo.VisitTaskNum && x.TaskState == TaskState.Effect && x.ArmEnum == taskinfo.ArmEnum
|
||||
).OrderByDescending(x => x.VisitTaskNum).Select(x => new SiteVisitForTumor()
|
||||
{
|
||||
VisitTaskId=x.Id,
|
||||
VisitTaskNum=x.VisitTaskNum,
|
||||
EarliestScanDate=x.SourceSubjectVisit.EarliestScanDate??DateTime.Now,
|
||||
LatestScanDate=x.SourceSubjectVisit.LatestScanDate ?? DateTime.Now,
|
||||
}).ToListAsync();
|
||||
var lastTask = taskList.Where(x => x.VisitTaskNum < taskinfo.VisitTaskNum).OrderByDescending(x => x.VisitTaskNum).FirstOrDefault();
|
||||
|
||||
var baseLineTask = taskList.OrderBy(x => x.VisitTaskNum).FirstOrDefault();
|
||||
var newLesionsCountQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.QuestionId).FirstOrDefault();
|
||||
|
||||
var isPDResult = false;
|
||||
|
||||
if (lastTask != null)
|
||||
{
|
||||
var lastTasknewLesionsCount = int.Parse(await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync() ?? "0");
|
||||
if (lastTask.VisitTaskNum == 1m)
|
||||
{
|
||||
//基线后第二个访视(应满足访视间隔6周以上,否则顺延)
|
||||
var secondVisit = taskList.Where(x => x.VisitTaskNum >= 2 && x.EarliestScanDate >= baseLineTask.LatestScanDate.AddDays(42)).FirstOrDefault();
|
||||
if (secondVisit != null)
|
||||
{
|
||||
|
||||
// 第二访视数量
|
||||
var secondVisitLesionsCount = int.Parse(await _readingTaskQuestionAnswerRepository.Where(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == newLesionsCountQuestionId).Select(x => x.Answer).FirstOrDefaultAsync() ?? "0");
|
||||
|
||||
// 判断是否是当前访视
|
||||
if (secondVisit.VisitTaskId == inDto.VisitTaskId)
|
||||
{
|
||||
secondVisitLesionsCount = int.Parse(inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault() ?? "0");
|
||||
}
|
||||
|
||||
if (lastTasknewLesionsCount >= 2 && secondVisitLesionsCount >= 2)
|
||||
{
|
||||
isPDResult = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
var thisVisitTaskNewLesionsCount= int.Parse(inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.NewLesionsCount).Select(x => x.Answer).FirstOrDefault() ?? "0");
|
||||
|
||||
var thisVisitTask = taskList.LastOrDefault();
|
||||
|
||||
if (lastTasknewLesionsCount >= 2 && thisVisitTaskNewLesionsCount >= 2&&lastTask.LatestScanDate.AddDays(42)<= thisVisitTask.EarliestScanDate)
|
||||
{
|
||||
isPDResult = true;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
if (isPDResult)
|
||||
{
|
||||
var visitForTumorEvaluationQuestionId = inDto.QuestionInfo.Where(x => x.QuestionType == QuestionType.SiteVisitForTumorEvaluation).Select(x => x.QuestionId).FirstOrDefault();
|
||||
|
||||
await _readingTaskQuestionAnswerRepository.BatchUpdateNoTrackingAsync(x => x.VisitTaskId == lastTask.VisitTaskId && x.ReadingQuestionTrialId == visitForTumorEvaluationQuestionId,x=> new ReadingTaskQuestionAnswer
|
||||
{
|
||||
Answer= VisitTumorEvaluation.PD.GetEnumInt(),
|
||||
|
||||
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
public async Task<object> GetReportVerify(GetReportVerifyInDto inDto)
|
||||
{
|
||||
return new() {
|
||||
|
|
|
@ -995,6 +995,43 @@ namespace IRaCIS.Core.Domain.Share
|
|||
/// 自治疗后第二个访视点以来持续的新骨病变数量
|
||||
/// </summary>
|
||||
NewBoneLesionsCount = 19,
|
||||
|
||||
/// <summary>
|
||||
/// 疗效评估分组
|
||||
/// </summary>
|
||||
TherapeuticEffectEvaluationGroup=20,
|
||||
|
||||
/// <summary>
|
||||
/// 访视点肿瘤评估
|
||||
/// </summary>
|
||||
SiteVisitForTumorEvaluation = 21,
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 访视点肿瘤评估
|
||||
/// </summary>
|
||||
public enum VisitTumorEvaluation
|
||||
{
|
||||
|
||||
/// <summary>
|
||||
/// PD
|
||||
/// </summary>
|
||||
PD = 1,
|
||||
|
||||
/// <summary>
|
||||
/// ND
|
||||
/// </summary>
|
||||
ND = 2,
|
||||
|
||||
/// <summary>
|
||||
/// NE
|
||||
/// </summary>
|
||||
NE = 3,
|
||||
|
||||
/// <summary>
|
||||
/// 非PD
|
||||
/// </summary>
|
||||
NoPD = 4
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue