|
@@ -2,6 +2,7 @@ package com.diagbot.process;
|
|
|
|
|
|
import com.diagbot.biz.push.entity.Item;
|
|
import com.diagbot.biz.push.entity.Item;
|
|
import com.diagbot.biz.push.entity.Lis;
|
|
import com.diagbot.biz.push.entity.Lis;
|
|
|
|
+import com.diagbot.biz.push.entity.Scale;
|
|
import com.diagbot.dto.BillMsg;
|
|
import com.diagbot.dto.BillMsg;
|
|
import com.diagbot.dto.IndicationDTO;
|
|
import com.diagbot.dto.IndicationDTO;
|
|
import com.diagbot.dto.RuleBaseDTO;
|
|
import com.diagbot.dto.RuleBaseDTO;
|
|
@@ -17,11 +18,17 @@ import com.diagbot.rule.CommonRule;
|
|
import com.diagbot.rule.GroupRule;
|
|
import com.diagbot.rule.GroupRule;
|
|
import com.diagbot.rule.LisRule;
|
|
import com.diagbot.rule.LisRule;
|
|
import com.diagbot.rule.PacsRule;
|
|
import com.diagbot.rule.PacsRule;
|
|
|
|
+import com.diagbot.util.CoreUtil;
|
|
|
|
+import com.diagbot.util.DateUtil;
|
|
|
|
+import com.diagbot.util.ListUtil;
|
|
|
|
+import com.diagbot.util.ReflectUtil;
|
|
import com.diagbot.util.StringUtil;
|
|
import com.diagbot.util.StringUtil;
|
|
import com.diagbot.vo.RuleVO;
|
|
import com.diagbot.vo.RuleVO;
|
|
|
|
+import com.google.common.collect.Lists;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
+import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -125,6 +132,90 @@ public class OtherTipProcess {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
+ * 处理业务——特殊规则
|
|
|
|
+ *
|
|
|
|
+ * @param wordCrfDTO
|
|
|
|
+ * @param res
|
|
|
|
+ */
|
|
|
|
+ public void processSpecial(WordCrfDTO wordCrfDTO, IndicationDTO res) {
|
|
|
|
+ // 判断VTE评估结果和出血风险结果
|
|
|
|
+ List<Scale> scaleList = wordCrfDTO.getScale();
|
|
|
|
+ // VTE评估结果
|
|
|
|
+ String vteResult = "";
|
|
|
|
+ // VTE出血风险
|
|
|
|
+ String vteBlood = "";
|
|
|
|
+ if (ListUtil.isNotEmpty(scaleList)) {
|
|
|
|
+ for (Scale scale : scaleList) {
|
|
|
|
+ String result = scale.getResult();
|
|
|
|
+ if (StringUtil.isNotBlank(result)) {
|
|
|
|
+ if (result.matches("高危|中危|极高危")) {
|
|
|
|
+ vteResult = result;
|
|
|
|
+ } else if (result.matches("有|无")) {
|
|
|
|
+ vteBlood = result;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ // 是否有药物医嘱
|
|
|
|
+ Boolean drugAdviceFlag = false;
|
|
|
|
+ // 是否有机械医嘱
|
|
|
|
+ Boolean mechanicalAdviceFlag = false;
|
|
|
|
+ List<String> drugNameList = Lists.newArrayList("普通肝素");
|
|
|
|
+ List<String> mechanicalNameList = Lists.newArrayList("普通肝素");
|
|
|
|
+ // VTE评估结果 和 VTE出血风险都有值
|
|
|
|
+ if (StringUtil.isNotBlank(vteResult) && StringUtil.isNotBlank(vteBlood)) {
|
|
|
|
+ // 获取药品医嘱
|
|
|
|
+ drugAdviceFlag = hasAdvice(wordCrfDTO.getDrug(), drugNameList);
|
|
|
|
+ // 获取机械医嘱
|
|
|
|
+ if (!drugAdviceFlag) {
|
|
|
|
+ mechanicalAdviceFlag = hasAdvice(wordCrfDTO.getOtherAdvice(), mechanicalNameList);
|
|
|
|
+ }
|
|
|
|
+ // 无药物医嘱且无机械医嘱,拼接提示语
|
|
|
|
+ if (!drugAdviceFlag && !mechanicalAdviceFlag) {
|
|
|
|
+ String msg = "该患者VTE评估为中/高危,伴有出血风险,建议开机械预防医嘱";
|
|
|
|
+ if (vteBlood.matches("有")) {
|
|
|
|
+
|
|
|
|
+ } else if (vteBlood.matches("无")) {
|
|
|
|
+ msg = "该患者VTE评估为中/高危,无出血风险,建议开药物或机械预防医嘱";
|
|
|
|
+
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /**
|
|
|
|
+ * 是否有效医嘱
|
|
|
|
+ *
|
|
|
|
+ * @param tList
|
|
|
|
+ * @param nameList
|
|
|
|
+ * @param <T>
|
|
|
|
+ * @return
|
|
|
|
+ */
|
|
|
|
+ public <T> Boolean hasAdvice(List<T> tList, List<String> nameList) {
|
|
|
|
+ Boolean hasAdviceFlag = false;
|
|
|
|
+ if (ListUtil.isEmpty(tList) || ListUtil.isEmpty(nameList)) {
|
|
|
|
+ return hasAdviceFlag;
|
|
|
|
+ }
|
|
|
|
+ for (T item : tList) {
|
|
|
|
+ String name = ReflectUtil.getProperty(item, "name");
|
|
|
|
+ if (StringUtil.isNotBlank(name)) {
|
|
|
|
+ if (nameList.contains(name)) {
|
|
|
|
+ // 开单时间
|
|
|
|
+ String dateValue = ReflectUtil.getProperty(item, "dateValue");
|
|
|
|
+ // 当前时间
|
|
|
|
+ String curDate = DateUtil.formatDateTime(new Date());
|
|
|
|
+ int flag = CoreUtil.compareTime(dateValue, curDate, 60L * 24 * 6, true, false);
|
|
|
|
+ if (flag == 1) {
|
|
|
|
+ hasAdviceFlag = true;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return hasAdviceFlag;
|
|
|
|
+ }
|
|
|
|
+
|
|
/**
|
|
/**
|
|
* 获取其他值提醒入参——辅检
|
|
* 获取其他值提醒入参——辅检
|
|
*
|
|
*
|