ソースを参照

患者拒绝手术时误判规则完善、外国人看病国籍问题规则新增

cb 6 ヶ月 前
コミット
649e0158e9

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0526.java

@@ -0,0 +1,43 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0526
+ * @Description :国籍信息错误
+ * @Author : 陈斌
+ * @Date: 2024-11-15 13:28
+ */
+@Component
+public class FIRP0526 extends QCCatalogue {
+    private List<String> containList = Arrays.asList("-", "—", "拒", "无", "不详", "未上户口");
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String idNumber = firstpageStructureMap.get(Content.idNumber);//读取到的身份证号码
+            String nationality = firstpageStructureMap.get(Content.nationality);//读取到的国籍
+            if (StringUtil.isNotBlank(idNumber)) {
+                for (String word : containList) {
+                    if (idNumber.equals(word)) {
+                        return;
+                    }
+                }
+                String regex = "\\d{15}|\\d{17}[\\dxX]";
+                if (idNumber.matches(regex) && !nationality.equals("中国")) {
+                    status.set("-1");
+                }
+            }
+        }
+    }
+}

+ 19 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/yiwu/operationdiscussion/OPE0322.java

@@ -4,12 +4,15 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 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.ThreeLevelWardDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
 import java.util.List;
 import java.util.Objects;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @Description: 手术患者无手术记录
@@ -22,20 +25,34 @@ public class OPE0322 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
+        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
         //先判断医嘱里有无手术
         List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
         if (doctorAdviceDocs.size() == 0) {
             return;
         }
-        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
+        // 判断查房记录中是否有患者拒绝手术的内容
+        List<ThreeLevelWardDoc> wardDocs = inputInfo.getThreeLevelWardDocs();
+        boolean isRefused = wardDocs.stream()
+                .map(doc -> doc.getStructureMap().get("病情记录"))
+                .filter(Objects::nonNull)  // 过滤掉空的记录内容
+                .anyMatch(content -> {
+                    Pattern pattern = Pattern.compile("建议患者手术.*拒绝|拒绝.*建议患者手术");
+                    Matcher matcher = pattern.matcher(content);
+                    return matcher.find();
+                });
+        
+
+
         for (DoctorAdviceDoc dad : doctorAdviceDocs) {
             String name = dad.getStructureMap().get("医嘱项目名称");
             if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
                     || name.contains("特殊病人手术使用一次性卫生材料")) {
                 continue;
             }
-            if (name.contains("手术") && cou == 0) {
+            if (!isRefused && name.contains("手术") && cou == 0) {
                 status.set("-1");
+                return;
             }
         }
         /*long cou = inputInfo.getOperationDocs().stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();