Browse Source

查体规则校验

zhoutg 4 năm trước cách đây
mục cha
commit
ee0be9f705

+ 30 - 28
src/main/java/com/diagbot/facade/TestFacade.java

@@ -124,35 +124,37 @@ public class TestFacade {
                     //     diag.add(diagItem);
                     //     indicationPushVO.setDiag(diag);
                     //     break;
-                    case "6" : // 服用药品
-                        StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
-                        symptom.append(bean.getNeoName()).append("。");
-                        indicationPushVO.setSymptom(symptom.toString());
+                    // case "6" : // 服用药品
+                    //     StringBuffer symptom = new StringBuffer("发病来,神志清,精神可,胃纳一般,睡眠可,二便无殊。一直服用");
+                    //     symptom.append(bean.getNeoName()).append("。");
+                    //     indicationPushVO.setSymptom(symptom.toString());
+                    //     break;
+                    case "12": // 体征
+                        StringBuffer sbVital = new StringBuffer();
+                        String[] vitalArr = bean.getNeoName().split(",");
+                        if (vitalArr.length > 1) {
+                            if ("收缩压".equals(vitalArr[0]) || "舒张压".equals(vitalArr[0])) {
+                                if ("收缩压".equals(vitalArr[0])) {
+                                    sbVital.append("血压");
+                                    sbVital.append(getValue(vitalArr) + "/100mmHg");
+                                    indicationPushVO.setVital(sbVital.toString());
+                                } else if ("舒张压".equals(vitalArr[0])) {
+                                    sbVital.append("血压");
+                                    sbVital.append("100/" + getValue(vitalArr) + "mmHg");
+                                    indicationPushVO.setVital(sbVital.toString());
+                                }
+                            } else {
+                                // 其他数值类型
+                                sbVital.append(vitalArr[0]);
+                                sbVital.append(getValue(vitalArr));
+                                sbVital.append(vitalArr[3]);
+                                indicationPushVO.setVital(sbVital.toString());
+                            }
+                        } else {
+                            sbVital.append(vitalArr[0]);
+                            indicationPushVO.setVital(sbVital.toString());
+                        }
                         break;
-                    // case "12" : // 体征
-                    //     String[] vitalArr = bean.getNeoName().split(",");
-                    //     StringBuffer sbVital = new StringBuffer();
-                    //     if ("体温".equals(vitalArr[0])) {
-                    //         sbVital.append("体温");
-                    //         sbVital.append(getValue(vitalArr));
-                    //         sbVital.append(vitalArr[3]);
-                    //         indicationPushVO.setVital(sbVital.toString());
-                    //     }
-                        // else if ("收缩压".equals(vitalArr[0]) || "舒张压".equals(vitalArr[0])){
-                        //     if ("收缩压".equals(vitalArr[0])) {
-                        //         sbVital.append("血压");
-                        //         sbVital.append(getValue(vitalArr) + "/100mmHg");
-                        //         indicationPushVO.setVital(sbVital.toString());
-                        //     } else if ("舒张压".equals(vitalArr[0])) {
-                        //         sbVital.append("血压");
-                        //         sbVital.append("100/" + getValue(vitalArr) + "mmHg");
-                        //         indicationPushVO.setVital(sbVital.toString());
-                        //     }
-                        // }
-                        // else {
-                        //     continue;
-                        // }
-                        // break;
                     default:
                         continue;
                 }

+ 1 - 1
src/main/java/com/diagbot/model/ai/BeHospitalizedAI.java

@@ -252,7 +252,7 @@ public class BeHospitalizedAI extends ModelAI {
             if (StringUtil.isNotBlank(wordCrfDTO.getDiagLabel().getText())) {
                 putInitialDiagCrfData(midData.getJSONObject(Content.initial_diag), wordCrfDTO);
             }
-            // 查体数据
+            //处理查体数据
             if (StringUtil.isNotBlank(wordCrfDTO.getVitalLabel().getText())) {
                 putInitialVitalCrfData(midData.getJSONObject(Content.phys_exam), wordCrfDTO);
             }

+ 36 - 36
src/main/java/com/diagbot/model/ai/process/EntityProcessVital.java

@@ -64,48 +64,48 @@ public class EntityProcessVital extends EntityProcess {
             vitals.add(vital);
         }
         vitalLabel.setVitals(vitals);
-        try{
-        //临床表现
-        List<Lemma> clinicLemmas = createEntityTree(outputs, EntityEnum.CLINICAL_FEATURE.toString());
-        for (Lemma lemma : clinicLemmas) {
-            Clinical clinical = new Clinical();
-            clinical.setName(lemma.getText());
-            clinical.setStandName(lemma.getText());
+        try {
+            //临床表现
+            List<Lemma> clinicLemmas = createEntityTree(outputs, EntityEnum.CLINICAL_FEATURE.toString());
+            for (Lemma lemma : clinicLemmas) {
+                Clinical clinical = new Clinical();
+                clinical.setName(lemma.getText());
+                clinical.setStandName(lemma.getText());
 
-            List<PD> timestamp = new LinkedList<>();
-            for (Lemma relationLemma : lemma.getRelationLemmas()) {
-                if (relationLemma.getProperty().equals(EntityEnum.NEGATIVE.toString())) {
-                    clinical.setNegative(findNegative(lemma));
-                }
-                clinical.setModification(findT(lemma, new Modification(), EntityEnum.MODIFICATION.toString()));//修饰
-                clinical.setBodyPart(findT(lemma, new BodyPart(), EntityEnum.BODY.toString()));//部位
-                clinical.setTrend(findT(lemma, new Trend(), EntityEnum.TREND.toString()));//趋势
-                clinical.setCause(findT(lemma, new Cause(), EntityEnum.CAUSE.toString()));//诱因
-                clinical.setProperty(findT(lemma, new Property(), EntityEnum.PROPERTY.toString()));//性质
-                clinical.setDegree(findT(lemma, new Degree(), EntityEnum.DEGREE.toString()));//程度
-                clinical.setAggravate(findT(lemma, new Aggravate(), EntityEnum.AGGRAVATE.toString()));//加重因素
-                clinical.setRelief(findT(lemma, new Relief(), EntityEnum.RELIEF.toString()));//缓解因素
-                if (relationLemma.getProperty().equals(EntityEnum.TIME.toString())) {
-                    String[] time_split = relationLemma.getText().split(",");
-                    for (String time : time_split) {
-                        PD pd = new PD();
-                        String[] val_unit = new String[2];
-                        if (time.trim().length() > 0) {
-                            val_unit = extract_digit(time);
+                List<PD> timestamp = new LinkedList<>();
+                for (Lemma relationLemma : lemma.getRelationLemmas()) {
+                    if (relationLemma.getProperty().equals(EntityEnum.NEGATIVE.toString())) {
+                        clinical.setNegative(findNegative(lemma));
+                    }
+                    clinical.setModification(findT(lemma, new Modification(), EntityEnum.MODIFICATION.toString()));//修饰
+                    clinical.setBodyPart(findT(lemma, new BodyPart(), EntityEnum.BODY.toString()));//部位
+                    clinical.setTrend(findT(lemma, new Trend(), EntityEnum.TREND.toString()));//趋势
+                    clinical.setCause(findT(lemma, new Cause(), EntityEnum.CAUSE.toString()));//诱因
+                    clinical.setProperty(findT(lemma, new Property(), EntityEnum.PROPERTY.toString()));//性质
+                    clinical.setDegree(findT(lemma, new Degree(), EntityEnum.DEGREE.toString()));//程度
+                    clinical.setAggravate(findT(lemma, new Aggravate(), EntityEnum.AGGRAVATE.toString()));//加重因素
+                    clinical.setRelief(findT(lemma, new Relief(), EntityEnum.RELIEF.toString()));//缓解因素
+                    if (relationLemma.getProperty().equals(EntityEnum.TIME.toString())) {
+                        String[] time_split = relationLemma.getText().split(",");
+                        for (String time : time_split) {
+                            PD pd = new PD();
+                            String[] val_unit = new String[2];
+                            if (time.trim().length() > 0) {
+                                val_unit = extract_digit(time);
+                            }
+                            pd.setValue(val_unit[0]);
+                            pd.setUnit(val_unit[1]);
+                            pd.setName(time);
+                            timestamp.add(pd);
                         }
-                        pd.setValue(val_unit[0]);
-                        pd.setUnit(val_unit[1]);
-                        pd.setName(time);
-                        timestamp.add(pd);
                     }
                 }
+                clinical.setTimestamp(timestamp);
+                vitalLabel.add(vitalLabel.getClinicals(), clinical);
             }
-            clinical.setTimestamp(timestamp);
-            vitalLabel.add(vitalLabel.getClinicals(), clinical);
-        }
         } catch (Exception e) {
-                e.printStackTrace();
-            }
+            e.printStackTrace();
+        }
         return vitalLabel;
     }
 }

+ 1 - 1
src/main/java/com/diagbot/process/BillProcess.java

@@ -166,7 +166,7 @@ public class BillProcess {
             LisRule.compareLisWithBill(wordCrfDTO.getLis(), bill, billMsgList, NeoEnum.lis.getName());
 
             // 体征
-            VitalRule.compareVitalWithBill(vitals, bill, billMsgList, NeoEnum.vitals.getName());
+            VitalRule.compareVitalWithBill(wordCrfDTO.getVitalLabel(), bill, billMsgList, NeoEnum.vitals.getName());
 
             // 辅检
             PacsRule.comparePacsWithBill(bill.getPacs(), wordCrfDTO.getPacs(), bill, billMsgList, NeoEnum.pacs.getName());

+ 11 - 11
src/main/java/com/diagbot/rule/VitalRule.java

@@ -3,7 +3,7 @@ package com.diagbot.rule;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.BillNeoMaxDTO;
 import com.diagbot.dto.NodeNeoDTO;
-import com.diagbot.model.entity.Vital;
+import com.diagbot.model.label.VitalLabel;
 import com.diagbot.util.CoreUtil;
 import com.diagbot.util.ListUtil;
 
@@ -20,21 +20,21 @@ public class VitalRule {
     /**
      * 比较体征
      *
-     * @param inputLis
+     * @param vitalLabel
      * @param billNeoMaxDTO
+     * @param billMsgList
+     * @param type 类型
      * @return
      */
-    public static void compareVitalWithBill(List<Vital> inputLis, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
+    public static void compareVitalWithBill(VitalLabel vitalLabel, BillNeoMaxDTO billNeoMaxDTO, List<BillMsg> billMsgList, String type) {
         List<NodeNeoDTO> neoList = billNeoMaxDTO.getVitals();
-        if(ListUtil.isNotEmpty(neoList) && ListUtil.isNotEmpty(inputLis)){
+        if(ListUtil.isNotEmpty(neoList)){
             for (NodeNeoDTO neo : neoList) {
-                for (Vital vit : inputLis) {
-                    Map<String, Object> map = CoreUtil.compareVital(neo, vit);
-                    if ((Boolean) map.get("flag") == true) {
-                        BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(),
-                                billNeoMaxDTO.getOrderStandName(), (String) map.get("msg"), type);
-                        billMsgList.add(commonBillMsg);
-                    }
+                Map<String, Object> map = CoreUtil.compareVital(neo, vitalLabel);
+                if ((Boolean) map.get("flag") == true) {
+                    BillMsg commonBillMsg = CoreUtil.getCommonBillMsg(billNeoMaxDTO.getOrderName(),
+                            billNeoMaxDTO.getOrderStandName(), (String) map.get("msg"), type);
+                    billMsgList.add(commonBillMsg);
                 }
             }
         }

+ 32 - 20
src/main/java/com/diagbot/util/CoreUtil.java

@@ -3,8 +3,10 @@ package com.diagbot.util;
 import com.diagbot.biz.push.entity.Lis;
 import com.diagbot.dto.BillMsg;
 import com.diagbot.dto.NodeNeoDTO;
+import com.diagbot.model.entity.Clinical;
 import com.diagbot.model.entity.Usual;
 import com.diagbot.model.entity.Vital;
+import com.diagbot.model.label.VitalLabel;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 
@@ -324,38 +326,48 @@ public class CoreUtil {
      * 比较查体是否匹配
      *
      * @param nodeNeoDTO
-     * @param vital
+     * @param vitalLabel
      * @return
      */
-    public static Map<String, Object> compareVital(NodeNeoDTO nodeNeoDTO, Vital vital) {
+    public static Map<String, Object> compareVital(NodeNeoDTO nodeNeoDTO, VitalLabel vitalLabel) {
         Map<String, Object> map = new LinkedHashMap<>();
+        List<Vital> vitalList = vitalLabel.getVitals(); // 体征数据
+        List<Clinical> clinicals = vitalLabel.getClinicals(); // 体征临床表现
         boolean flag = false;
-        if (nodeNeoDTO == null || vital == null) {
+        if (nodeNeoDTO == null) {
             map.put("flag", flag);
             return map;
         }
-        try {
-            // 比较数值
-            List<Usual> usualList = vital.getUsualList();
-            if (nodeNeoDTO.getName().equals(vital.getStandName()) && vital.getPd() != null
-                    && StringUtil.isNotBlank(vital.getPd().getValue())) {
-                flag = compareNum(nodeNeoDTO, Double.parseDouble(vital.getPd().getValue()));
-                if (flag) {
-                    map.put("msg", vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+        if (nodeNeoDTO.getMax() == null && nodeNeoDTO.getMin() == null) {
+            // 体征名称比较(例如:喉头水肿)
+            for (Clinical clinical : clinicals) {
+                if (nodeNeoDTO.getName().contains(clinical.getStandName())) {
+                    map.put("msg", clinical.getName());
+                    flag = true;
                 }
-            } else if (ListUtil.isNotEmpty(usualList)) {
-                for (Usual usual : usualList) {
-                    if (nodeNeoDTO.getName().equals(usual.getStandName())) {
-                        flag = compareNum(nodeNeoDTO, Double.parseDouble(usual.getValue()));
-                        if (flag) {
-                            map.put("msg", vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
-                            break;
+            }
+        } else {
+            // 体征数值比较(例如:体温,血压)
+            for (Vital vital : vitalList) {
+                List<Usual> usualList = vital.getUsualList();
+                if (nodeNeoDTO.getName().equals(vital.getStandName()) && vital.getPd() != null
+                        && StringUtil.isNotBlank(vital.getPd().getValue())) {
+                    flag = compareNum(nodeNeoDTO, Double.parseDouble(vital.getPd().getValue()));
+                    if (flag) {
+                        map.put("msg", vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+                    }
+                } else if (ListUtil.isNotEmpty(usualList)) {
+                    for (Usual usual : usualList) {
+                        if (nodeNeoDTO.getName().equals(usual.getStandName())) {
+                            flag = compareNum(nodeNeoDTO, Double.parseDouble(usual.getValue()));
+                            if (flag) {
+                                map.put("msg", vital.getName() + subZeroAndDot(String.valueOf(vital.getPd().getValue())));
+                                break;
+                            }
                         }
                     }
                 }
             }
-        } catch (Exception e) {
-            log.error("【开单合理性比较体征出错】" + e.getMessage());
         }
 
         map.put("flag", flag);