Browse Source

其他值提醒辅检特殊规则

zhoutg 3 years ago
parent
commit
ee9d3c16c6

+ 29 - 2
src/main/java/com/diagbot/model/ai/process/EntityProcessPacs.java

@@ -6,9 +6,12 @@ import com.diagbot.model.ai.model.EntityEnum;
 import com.diagbot.model.ai.model.Lemma;
 import com.diagbot.model.entity.BodyPart;
 import com.diagbot.model.entity.Modification;
+import com.diagbot.model.entity.PD;
 import com.diagbot.model.entity.Pacs;
+import com.diagbot.model.entity.PacsNum;
 import com.diagbot.model.label.PacsLabel;
 import com.diagbot.util.ListUtil;
+import com.diagbot.util.StringUtil;
 import com.google.common.collect.Lists;
 
 import java.util.ArrayList;
@@ -69,8 +72,6 @@ public class EntityProcessPacs extends EntityProcess {
         }
         pacsLabel.setPacsResults(pacsResults);
 
-
-
         // 辅检诊断
         List<Lemma> pacsDisease = createEntityTree(aiOut, EntityEnum.DIEASE.toString());
         List<Pacs> disList = new ArrayList<>();
@@ -81,5 +82,31 @@ public class EntityProcessPacs extends EntityProcess {
             disList.add(dis);
         }
         pacsLabel.setDisease(disList);
+
+        // 辅检结果添加数值型结构
+        List<PacsNum> pacsNumList = Lists.newArrayList();
+        List<Lemma> vitalLemmas = createEntityTree(aiOut, EntityEnum.SIGN.toString()); // 辅检中的体征结果
+        for (Lemma lemma : vitalLemmas) {
+            if (lemma.isHaveChildren()) {
+                for (Lemma relationLemma : lemma.getRelationLemmas()) {
+                    if (relationLemma.getProperty().equals(EntityEnum.INDEX_VALUE.toString())) { // 体征结果
+                        String value = relationLemma.getText();
+                        if (StringUtil.isNotBlank(value)) {
+                            PacsNum pacsNum = new PacsNum();
+                            pacsNum.setName(lemma.getText());
+                            pacsNum.setStandName(lemma.getText());
+                            PD pd = new PD();
+                            String[] val_unit = new String[2];
+                            val_unit = extract_digit_new(value);
+                            pd.setValue(val_unit[0]);
+                            pd.setUnit(val_unit[1]);
+                            pacsNum.setPd(pd);
+                            pacsNumList.add(pacsNum);
+                        }
+                    }
+                }
+            }
+            pacsLabel.setPacsNumList(pacsNumList);
+        }
     }
 }

+ 13 - 0
src/main/java/com/diagbot/model/entity/PacsNum.java

@@ -0,0 +1,13 @@
+package com.diagbot.model.entity;
+
+import lombok.Data;
+
+/**
+ * @description: 辅检数值型
+ * @author: zhoutg
+ * @date: 2021/9/15 9:31
+ */
+@Data
+public class PacsNum extends General{
+    private PD pd;
+}

+ 2 - 0
src/main/java/com/diagbot/model/label/PacsLabel.java

@@ -3,6 +3,7 @@ package com.diagbot.model.label;
 
 import com.diagbot.biz.push.entity.Item;
 import com.diagbot.model.entity.Pacs;
+import com.diagbot.model.entity.PacsNum;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -24,4 +25,5 @@ public class PacsLabel extends GeneralLabel {
     private List<Pacs> disease = new ArrayList<>(); // 辅检提取的诊断
     private List<Item> res = new ArrayList<>(); // 描述文本 + 诊断
     private List<Item> item = new ArrayList<>(); // 所有的辅检项目
+    private List<PacsNum> pacsNumList = new ArrayList<>(); // 辅检所有的数值项目
 }

+ 72 - 0
src/main/java/com/diagbot/process/OtherTipProcess.java

@@ -14,7 +14,10 @@ import com.diagbot.enums.RedisEnum;
 import com.diagbot.enums.RuleTypeEnum;
 import com.diagbot.enums.TypeEnum;
 import com.diagbot.facade.CommonFacade;
+import com.diagbot.model.entity.PD;
+import com.diagbot.model.entity.PacsNum;
 import com.diagbot.model.label.PacsLabel;
+import com.diagbot.rule.AgeRule;
 import com.diagbot.rule.CommonRule;
 import com.diagbot.rule.GroupRule;
 import com.diagbot.rule.LisRule;
@@ -29,6 +32,7 @@ import com.diagbot.util.StringUtil;
 import com.diagbot.vo.RuleVO;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
 import java.util.Date;
 import java.util.List;
 
@@ -52,6 +56,8 @@ public class OtherTipProcess {
     PacsRule pacsRule;
     @Autowired
     RedisUtil redisUtil;
+    @Autowired
+    AgeRule ageRule;
 
     /**
      * 处理业务——化验
@@ -106,6 +112,72 @@ public class OtherTipProcess {
                 }
             }
         }
+
+        // TODO 后期删除 辅检数值型匹配
+        List<PacsNum> pacsNumList = pacsLabel.getPacsNumList();
+        for (PacsNum pacsNum : pacsNumList) {
+            if ("心率".equals(pacsNum.getStandName())) {
+                PD pd = pacsNum.getPd();
+                if (pd != null && StringUtil.isNotBlank(pd.getValue())) {
+                    double v = Double.parseDouble(pd.getValue());
+                    String content = pacsNum.getStandName() + pd.getValue() + pd.getUnit();
+                    Double ageNum = wordCrfDTO.getAgeNum();
+                    Double min = null, max = null;
+                    String suggest = "";
+                    if (ageNum < 0.0191) {
+                        min = 110D;
+                        max = 170D;
+                        suggest = "年龄0-6天心率正常值为110-170bpm";
+                    } else if (ageNum < 0.16438) {
+                        min = 90D;
+                        max = 160D;
+                        suggest = "年龄7-59天心率正常值为90-160bpm";
+                    } else if (ageNum < 2) {
+                        min = 90D;
+                        max = 150D;
+                        suggest = "年龄2-23月心率正常值为90-150bpm";
+                    } else if (ageNum < 3) {
+                        min = 80D;
+                        max = 140D;
+                        suggest = "年龄2-3岁心率正常值为80-140bpm";
+                    } else if (ageNum < 6) {
+                        min = 80D;
+                        max = 130D;
+                        suggest = "年龄3-5岁心率正常值为80-130bpm";
+                    } else if (ageNum < 11) {
+                        min = 70D;
+                        max = 120D;
+                        suggest = "年龄6-10岁心率正常值为70-120bpm";
+                    } else if (ageNum < 18) {
+                        min = 60D;
+                        max = 120D;
+                        suggest = "年龄11-17岁心率正常值为60-120bpm";
+                    } else if (ageNum <= 150) {
+                        min = 60D;
+                        max = 110D;
+                        suggest = "年龄18-150岁心率正常值为60-110bpm";
+                    }
+                    int flag = compareValue(min, max, v);
+                    if (flag == 0) {
+                        String msg = String.format("该患者%s,%s", content, suggest);
+                        BillMsg billMsg = new BillMsg();
+                        billMsg.setMsg(msg);
+                        billMsg.setContent(content);
+                        otherList.add(billMsg);
+                    }
+                }
+            }
+        }
+    }
+
+    public int compareValue(Double min, Double max, Double v) {
+        if (min == null || max == null || v == null) {
+            return -1;
+        }
+        if (v >= min && v <= max) {
+            return 1;
+        }
+        return 0;
     }
 
     /**