فهرست منبع

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

zhangzw 4 سال پیش
والد
کامیت
bc9d14d7e6

+ 20 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH0034.java

@@ -24,7 +24,7 @@ public class BEH0034 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             return;
         }
         PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
@@ -36,19 +36,35 @@ public class BEH0034 extends QCCatalogue {
                 operations.stream()
                         .filter(i ->
                                 i != null && StringUtil.isNotBlank(i.getName()) && i.getNegative() == null
-                                        && !"手术史".equals(i.getName())  && !"手术".equals(i.getName()) && !"手术治疗".equals(i.getName())
+                                        && !"手术史".equals(i.getName()) && !"手术".equals(i.getName()) && !"手术治疗".equals(i.getName())
                         )
                         .map(i -> i.getName())
                         .distinct()
                         .collect(Collectors.toList()),
-                pastLabel.getText().replace("“","\"").replace("”","\"")
+                pastLabel.getText().replace("“", "\"").replace("”", "\"")
         );
         if (ListUtil.isNotEmpty(wtOperationNames)) {
-            status.set("-1");
+            String pastLabelText = pastLabel.getText();
             for (String wtOperationName : wtOperationNames) {
+                if (isASMark(pastLabelText, wtOperationName)) {
+                    continue;
+                }
+                status.set("-1");
                 info.set(info.get() + wtOperationName + " ");
             }
         }
     }
 
+    private boolean isASMark(String pastLabelText, String wtOperationName) {
+        String operName = wtOperationName.replace("手术", "");
+        int index = pastLabelText.indexOf(operName);
+        if (index != -1) {
+            String substring = pastLabelText.substring(index + operName.toCharArray().length, index + operName.toCharArray().length + 1);
+            if (substring.equals("\"") || substring.equals("”")) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }

+ 5 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/behospitalized/BEH0414.java

@@ -46,10 +46,14 @@ public class BEH0414 extends QCCatalogue {
             if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
                 admissAge = admissionAge.substring(0, admissionAge.indexOf("岁"));
             }
+            String firstadmissAge = "";
+            if (StringUtil.isNotBlank(firstAdmissionAge) && firstAdmissionAge.contains("岁")) {
+                firstadmissAge = firstAdmissionAge.substring(0, firstAdmissionAge.indexOf("岁"));
+            }
             // int firstAdmissionAgeNum = removalUnit(firstAdmissionAge);
             // int admissionAgeNum = removalUnit(admissionAge);
             // 只比较年龄前的数值
-            if (!admissAge.equals(firstAdmissionAge)) {
+            if (!admissAge.equals(firstadmissAge)) {
                 status.set("-1");
                 return;
             }

+ 16 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/consultation/CON0528.java

@@ -1,13 +1,17 @@
 package com.lantone.qc.kernel.catalogue.beilun.consultation;
 
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.util.DateUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
 import java.util.List;
+import java.util.Map;
 import java.util.Objects;
 
 /**
@@ -25,6 +29,18 @@ public class CON0528 extends QCCatalogue {
         if (consultationDocs.size() == 0) {
             return;
         }
+        for (ConsultationDoc con : consultationDocs) {
+            if (con.getConsultationResultsDoc() != null) {
+                Map<String, String> structureMap = con.getConsultationResultsDoc().getStructureMap();
+                String applyDate = structureMap.get("申请日期");
+                if (StringUtil.isNotBlank(applyDate) && !"申请日期".equals(applyDate)) {
+                    if (!CatalogueUtil.compareTime(StringUtil.parseDateTime(applyDate), StringUtil.parseDateTime(DateUtil.nowString()),
+                            Long.valueOf(24 * 60))) {//如果接收未超过24小时,规则不判断
+                        return;
+                    }
+                }
+            }
+        }
         long consultationRecordCount = consultationDocs
                 .stream().map(ConsultationDoc::getConsultationRecordDoc).filter(Objects::nonNull).count();
 

+ 5 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/firstpagerecord/FIRP0161.java

@@ -46,10 +46,14 @@ public class FIRP0161 extends QCCatalogue {
             if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
                 admissAge = admissionAge.substring(0, admissionAge.indexOf("岁"));
             }
+            String firstadmissAge = "";
+            if (StringUtil.isNotBlank(firstAdmissionAge) && firstAdmissionAge.contains("岁")) {
+                firstadmissAge = firstAdmissionAge.substring(0, firstAdmissionAge.indexOf("岁"));
+            }
             // int firstAdmissionAgeNum = removalUnit(firstAdmissionAge);
             // int admissionAgeNum = removalUnit(admissionAge);
             // 只比较年龄前的数值
-            if (!admissAge.equals(firstAdmissionAge)) {
+            if (!admissAge.equals(firstadmissAge)) {
                 status.set("-1");
                 return;
             }

+ 14 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/preoperativediscussion/PRE0328.java

@@ -4,6 +4,7 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.DoctorAdviceDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
@@ -11,11 +12,7 @@ import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 
 /**
  * @Description: 手术患者无术前讨论记录
@@ -33,6 +30,7 @@ public class PRE0328 extends QCCatalogue {
          * 3:如果手术记录次数(第一次手术的日期内有其他手术不算次数) 大于 术前讨论、术前小结次数,则出错
          */
         status.set("0");
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         if (operationDocs == null || operationDocs.size() == 0) {
             return;
@@ -64,12 +62,23 @@ public class PRE0328 extends QCCatalogue {
                 j++;
             }
         }
+        //医嘱中包含“冠状动脉造影术”,且无术前讨论.则报规则
+        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+            Map<String,String> doctorAdviceStructuerMap = doctorAdviceDoc.getStructureMap();
+            String advicename = doctorAdviceStructuerMap.get("医嘱项目名称");
+            if(StringUtil.isNotBlank(advicename) && advicename.contains("冠状动脉造影术") &&  j==0){
+                status.set("-1");
+                info.set("手术记录不一致");
+            }
+        }
         /* 如果入院时间-手术开始时间小于30分钟,则术前讨论、术前小结次数+1*/
         if (emergencyOperation) {
             if (j == 0) {
                 j++;
             }
         }
+
+
         if (i > 0 && i > j) {
             status.set("-1");
             info.set("手术记录不一致");

+ 3 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/threelevelward/THR03076.java

@@ -194,6 +194,9 @@ public class THR03076 extends QCCatalogue {
                             adDateStr = DateUtil.formatDateTime(adDate);
                             if (wardUsage.size() > 0 && !sb.toString().contains(drugKey + "(" + adDateStr + ")")) {
                                 infoAppend(sb, ai.getKey(), adDateStr);
+                            }
+                            if(wardUsage.size() == 0){
+                                sb = null;
                                 break;
                             }
                         }

+ 14 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/beilun/threelevelward/THR03077.java

@@ -276,6 +276,8 @@ public class THR03077 extends QCCatalogue {
         }
     }
 
+    List<String> usageWords = Lists.newArrayList("WB", "wb");
+
     /**
      * 收集各模块药品信息
      *
@@ -314,6 +316,7 @@ public class THR03077 extends QCCatalogue {
                 }
             }
             wardDrug = removeBracket(wardDrug);
+            String drugUsageWard = wardDrug;
             String drugStandardWord = similarityUtil.getDrugStandardWord(wardDrug);
             if (StringUtil.isNotBlank(drugStandardWord)) {
                 wardDrug = drugStandardWord;
@@ -321,7 +324,18 @@ public class THR03077 extends QCCatalogue {
             if (drug.getConsumption() == null) {
                 concatInfo(dateStr, sb, "用量");
             }
+            int index = content.indexOf(drugUsageWard);
+            String drugContent = content.substring(Math.max(0, index));
+            boolean isUsage = true;
             if (drug.getUsageWardRound() == null) {
+                for (String word : usageWords) {
+                    if (drugContent.contains(word)) {
+                        isUsage = false;
+                        break;
+                    }
+                }
+            }
+            if (isUsage) {
                 concatInfo(dateStr, sb, "用法");
             }
             if (drug.getFrequency() == null) {

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/beilun/util/BeiLunBeHospitalizedHtmlAnalysis.java

@@ -61,7 +61,7 @@ public class BeiLunBeHospitalizedHtmlAnalysis implements BeiLunHtmlAnalysis {
         //诊断 table解析
         String disTableElementId = null;
         Element disTableElement = null;
-        String[] disTableElementIds = {"table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_37", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1", "table7_2_0_0_1_1_2_0_1_4_5_6_7", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3_1_2","table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3"};
+        String[] disTableElementIds = {"table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_37", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1", "table7_2_0_0_1_1_2_0_1_4_5_6_7", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3_1_2", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3_1_2_27", "table7_2_0_0_1_1_2_0_1_4_5_6_7_0_1_5_2_3_1"};
         for (String eid : disTableElementIds) {
             disTableElement = doc.getElementById(eid);
             if (disTableElement != null) {