소스 검색

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

zhangzw 4 년 전
부모
커밋
346e7fadf2

+ 14 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/leavehospital/LEA02901.java

@@ -6,6 +6,7 @@ import com.lantone.qc.kernel.util.RegularUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
@@ -13,7 +14,6 @@ import org.springframework.stereotype.Component;
 
 import java.util.List;
 import java.util.Map;
-
 /**
  * @Description: 出院医嘱记录不规范
  * @author: 胡敬
@@ -26,20 +26,28 @@ public class LEA02901 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
-        if (leaveHospitalDoc == null) {
+        //医嘱信息
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (leaveHospitalDoc == null || doctorAdviceDocs.size() == 0) {
+            return;
+        }
+        //医嘱中无出院带药不触发
+        long count = doctorAdviceDocs.stream().map(DoctorAdviceDoc::getStructureMap)
+                .filter(x -> StringUtil.isNotBlank(x.get("医嘱类型判别")) && x.get("医嘱类型判别").equals("出院带药")).count();
+        if (count == 0) {
             return;
         }
         DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
         if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
             Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
             String dischargeOrder = structureMap.get("出院医嘱");
-            if(StringUtils.isNotEmpty(dischargeOrder)){
+            if (StringUtils.isNotEmpty(dischargeOrder)) {
                 //跟医学部任燕青确认过, 去除括号里的东西
                 dischargeOrder = RegularUtil.ClearBracket(dischargeOrder);
                 if (StringUtil.isNotBlank(dischargeOrder)) {
-                    List<String> words = Lists.newArrayList("qd","bid","tid","qid","qh","q2h","q4h","q6h","q8h",
-                            "qn","q3w","qod","biw","qw","prn","sos","ad","lib","st","stat","hs","am","po","ID","IH","IM",
-                            "IV","OD","OS","OU","ivgtt","Q12H","QN","ONCE");
+                    List<String> words = Lists.newArrayList("qd", "bid", "tid", "qid", "qh", "q2h", "q4h", "q6h", "q8h",
+                            "qn", "q3w", "qod", "biw", "qw", "prn", "sos", "lib", "st", "stat", "hs", "am", "po", "ID", "IH", "IM",
+                            "IV", "OD", "OS", "OU", "ivgtt", "Q12H", "QN", "ONCE");
                     for (String word : words) {
                         if (dischargeOrder.contains(word.toUpperCase()) || dischargeOrder.contains(word.toLowerCase())) {
                             status.set("-1");

+ 41 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/threelevelward/THR03077.java

@@ -91,6 +91,10 @@ public class THR03077 extends QCCatalogue {
                     continue;   //一天内同一抗生素开过多次的抗生素直接过滤
                 }
                 drugName = removeBracket(drugName).replaceAll("[^\u4e00-\u9fa5]", "");
+                //相似度标准词抓取失败,增加暂时处理
+                if (drugName.equals("克林霉素磷酸酯注射液特丽仙")) {
+                    drugName = drugName.replace("特丽仙", "");
+                }
                 String drugStandardWord = similarityUtil.getDrugStandardWord(drugName);
                 if (StringUtil.isNotBlank(drugStandardWord)) {
                     drugName = drugStandardWord;
@@ -291,12 +295,16 @@ public class THR03077 extends QCCatalogue {
             sb = new StringBuffer();
             String behindWord = "";
             String lastBehindWord = "";
+            String keyword = "";
+            String lastKeyword = "";
             String wardDrug = drug.getName();
+            boolean front = false;
+            boolean latter = false;
             int position = content.indexOf(wardDrug);
             int lastPosition = content.lastIndexOf(wardDrug);
             if (position != -1 && lastPosition != -1) {
-                String keyword = content.substring(Math.max(0, position - 10), position);
-                String lastKeyword = content.substring(Math.max(0, lastPosition - 10), lastPosition);
+                keyword = content.substring(Math.max(0, position - 10), position);
+                lastKeyword = content.substring(Math.max(0, lastPosition - 10), lastPosition);
                 if (position != lastPosition) {
                     if (lastKeyword.contains("继续") || lastKeyword.contains("停")) {
                         continue;
@@ -305,6 +313,9 @@ public class THR03077 extends QCCatalogue {
                 if (keyword.contains("继续") || keyword.contains("停")) {
                     continue;
                 }
+                if (frequencyDispose(keyword) || frequencyDispose(lastKeyword)) {
+                    front = true;
+                }
 
                 behindWord = content.substring(position, Math.min(position + 20, content.toCharArray().length));
                 lastBehindWord = content.substring(lastPosition, Math.min(lastPosition + 20, content.toCharArray().length));
@@ -316,6 +327,9 @@ public class THR03077 extends QCCatalogue {
                 if (behindWord.contains("阴性")) {
                     continue;
                 }
+                if (frequencyDispose(behindWord) || frequencyDispose(lastBehindWord)) {
+                    latter = true;
+                }
             }
             wardDrug = removeBracket(wardDrug);
             String drugUsageWard = wardDrug;
@@ -348,7 +362,9 @@ public class THR03077 extends QCCatalogue {
                 }
             }
             if (drug.getFrequency() == null) {
-                concatInfo(dateStr, sb, "频率");
+                if (!front && !latter) {
+                    concatInfo(dateStr, sb, "频率");
+                }
             }
             if (sb.toString().length() > 0) {
                 if (antibioticDateWard.containsKey(wardDrug)) {
@@ -356,6 +372,15 @@ public class THR03077 extends QCCatalogue {
                 } else {
                     antibioticDateWard.put(wardDrug, Lists.newArrayList(sb.toString()));
                 }
+            } else {
+                if (antibioticDateWard.containsKey(wardDrug)) {
+                    for (String wardDate : antibioticDateWard.get(wardDrug)) {
+                        wardDate = wardDate.substring(0, wardDate.indexOf("="));
+                        if (wardDate.equals(dateStr)) {
+                            antibioticDateWard.remove(wardDrug);
+                        }
+                    }
+                }
             }
         }
     }
@@ -375,6 +400,19 @@ public class THR03077 extends QCCatalogue {
         return flag;
     }
 
+    /**
+     * 增加频率的处理
+     *
+     * @param content
+     */
+    public boolean frequencyDispose(String content) {
+        if (StringUtil.isNotBlank(content) &&
+                (content.contains("术前") || content.contains("术后") || content.contains("围手术期"))) {
+            return true;
+        }
+        return false;
+    }
+
     /**
      * 拼接抗生素缺失信息
      *