Pārlūkot izejas kodu

Merge remote-tracking branch 'origin/dev-shaoyf' into dev-shaoyf

zhoutg 5 gadi atpakaļ
vecāks
revīzija
47a025b6ac

+ 22 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0014.java

@@ -5,8 +5,10 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Cause;
 import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.label.PresentLabel;
 import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -38,6 +40,10 @@ public class BEH0014 extends QCCatalogue {
             }
         }*/
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        if (presentLabel == null) {
+            status.set("0");
+            return;
+        }
         List<Clinical> clinicals = presentLabel.getClinicals();
         if (ListUtil.isNotEmpty(clinicals)) {
             for (Clinical clinical : clinicals) {
@@ -56,11 +62,26 @@ public class BEH0014 extends QCCatalogue {
             present = present.replaceAll("[\"“”]","");
             if (present.contains("体检") || present.contains("发现") || present.contains("检查") || present.contains("因")
                     || present.contains("确诊") || present.contains("诊断") || present.contains("复查") || present.contains("术后")
-                    || present.contains("药物") || present.contains("误服") || present.contains("月经")) {
+                    || present.contains("药物") || present.contains("误服") || present.contains("查") || present.contains("撞") || present.contains("伤") || present.contains("月经")) {
                 status.set("0");
                 return;
             }
+            //模型在现病史前30个字里能提出来疾病,那也可以算有诱因
+            List<Diag> presentDiags = presentLabel.getDiags();
+            if (presentDiags.size() > 0) {
+                for (Diag diag : presentDiags) {
+                    String hospitalDiagName = diag.getHospitalDiagName();
+                    if (StringUtil.isBlank(hospitalDiagName)) {
+                        continue;
+                    }
+                    if (present.contains(hospitalDiagName)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
         }
+
         List<Cause> causes = presentLabel.getCauses();
         if (causes != null && causes.size() > 0) {
             status.set("0");

+ 1 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0248.java

@@ -28,7 +28,7 @@ public class FIRP0248 extends QCCatalogue {
             boolean match = false;
 
             String fpRescueNumStr = firstpageStructureMap.get("病人抢救次数");
-            if (StringUtil.isBlank(fpRescueNumStr)) {
+            if (StringUtil.isBlank(fpRescueNumStr) || "-".equals(fpRescueNumStr)) {
                 return;
             }
             if (StringUtil.isNotBlank(fpRescueNumStr) && CatalogueUtil.numbersOnly(fpRescueNumStr)) {

+ 42 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA02987.java

@@ -11,10 +11,9 @@ import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : LEA02987
@@ -56,9 +55,24 @@ public class LEA02987 extends QCCatalogue {
         }
 
         String infoStr = "";
+        List<String> notContainsDrugs = new ArrayList<>();
         for (String drug:drugs) {
             if (!dischargeOrder.contains(drug)){
-                infoStr = CatalogueUtil.concatInfo(infoStr,drug);
+                notContainsDrugs.add(drug);
+            }
+        }
+
+        //没有包含的药品再次查看商品名或化学名在出院医嘱书写
+        for (String drug : notContainsDrugs) {
+            Set<String> splitDrugs = getRegexWords(drug, "[((][^()()]+[))]");
+            boolean isFind = false;
+            for (String sd : splitDrugs) {
+                if (dischargeOrder.contains(sd)){
+                    isFind = true;
+                }
+            }
+            if (!isFind) {
+                infoStr = CatalogueUtil.concatInfo(infoStr, drug);
             }
         }
         if (StringUtil.isNotBlank(infoStr)){
@@ -66,4 +80,27 @@ public class LEA02987 extends QCCatalogue {
             info.set(infoStr);
         }
     }
+
+
+    private Set<String> getRegexWords(String word, String regex) {
+        Set<String> ret = new HashSet<>();
+        if (StringUtil.isNotBlank(word) && StringUtil.isNotBlank(regex)) {
+            Pattern pattern = Pattern.compile(regex);
+            Matcher matcher = pattern.matcher(word);
+            if (matcher.find()) {
+                ret.add(matcher.group().replaceAll("[(())]", ""));
+                int startIndex = matcher.start();
+                int endIndex = matcher.end();
+                if (startIndex > 0) {
+                    ret.add(word.substring(0, startIndex));
+                }
+                if (endIndex <= word.length()) {
+                    ret.addAll(getRegexWords(word.substring(endIndex), regex));
+                }
+            } else {
+                ret.add(word);
+            }
+        }
+        return ret;
+    }
 }