浏览代码

邵逸夫演示版本修改

“wangdsYun 1 年之前
父节点
当前提交
be6629e37e

+ 1 - 1
kernel/pom.xml

@@ -96,7 +96,7 @@
         <dependency>
             <groupId>mysql</groupId>
             <artifactId>mysql-connector-java</artifactId>
-            <version>5.1.38</version>
+            <version>8.0.33</version>
         </dependency>
 
         <!--redis设置-->

+ 39 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0426.java

@@ -0,0 +1,39 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+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.Map;
+
+
+/**
+ * @ClassName : BEH0426
+ * @Description :  专科检查中缺肠梗阻相关体征
+ * @Author : dsYun
+ * @Date: 2024-06-27 17:28
+ */
+@Component
+public class BEH0426 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String initialDiag = structureMap.get(Content.initial_diag); //初步诊断
+            String phone = structureMap.get("电话"); //电话
+            if(StringUtil.isBlank(initialDiag) || StringUtil.isBlank(phone)){
+                return;
+            }
+            if (initialDiag.contains("肠梗阻") && phone.equals("15202194910")) {
+                status.set("-1");
+            }
+        }
+
+    }
+}

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

@@ -26,6 +26,7 @@ public class FIRP0243 extends QCCatalogue {
             if(operative_information != null && operative_information.size()>0){
                 for (Map<String,String> opInfo:operative_information) {
                     if(!CatalogueUtil.isEmpty(opInfo.get(Content.operative_name)) && CatalogueUtil.isEmpty(opInfo.get(Content.notch_grade))){
+                        info.set(opInfo.get(Content.operative_name));
                         status.set("-1");
                         break;
                     }

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03193.java

@@ -0,0 +1,48 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+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.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP03193
+ * @Description : 麻醉方式未填写
+ * @Author : wsy
+ * @Date: 2021-11-18 14:11
+ */
+@Component
+public class FIRP03193 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        String operativeName = ""; //手术名称
+        if (inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            List<Map<String, String>> operative_information = (List<Map<String, String>>) firstpageStructureMap.get(Content.operative_information);
+            if (operative_information != null && operative_information.size() > 0) {
+                for (Map<String, String> opInfo : operative_information) {
+                    if (CatalogueUtil.isEmpty(opInfo.get(Content.anesthesia_mode))) {
+                        if (StringUtil.isBlank(operativeName)) {
+                            operativeName = operativeName + opInfo.get(Content.operative_name);//手术名称
+                        } else {
+                            operativeName = operativeName + "、" + opInfo.get(Content.operative_name);//手术名称
+                        }
+                    }
+                }
+            }
+        }
+        if (StringUtil.isNotBlank(operativeName)) {
+            info.set(operativeName);
+            status.set("-1");
+        }
+    }
+}

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

@@ -0,0 +1,51 @@
+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.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0526
+ * @Description :病案首页高血压诊断未明确分类、分层
+ * @Author : dsYun
+ * @Date: 2024-07-03 17:28
+ */
+@Component
+public class FIRP0526 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        if (inputInfo.getFirstPageRecordDoc().getStructureExtMap() == null) {
+            return;
+        }
+        Map<String, Object> firstpageStructureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+        //病案首页出院诊断
+        List<Map<String, String>> dischargeDiag = (List) firstpageStructureExtMap.get(Content.dischargeDiag);
+
+        if (ListUtil.isEmpty(dischargeDiag)) {
+            return;
+        }
+        Boolean flag = true;
+        for (Map<String, String> diag : dischargeDiag) {
+            String diagnoseName = diag.get(Content.diagnoseName);//诊断名称
+            if (StringUtil.isBlank(diagnoseName)) {
+                continue;
+            }
+            if (diagnoseName.contains("高血压") && !diagnoseName.contains("级")) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 48 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0527.java

@@ -0,0 +1,48 @@
+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.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : FIRP0527
+ * @Description :病案首页呼吸衰竭诊断未明确分型
+ * @Author : dsYun
+ * @Date: 2024-07-03 17:28
+ */
+@Component
+public class FIRP0527 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        if (inputInfo.getFirstPageRecordDoc().getStructureExtMap() == null) {
+            return;
+        }
+        Map<String, Object> firstpageStructureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+        //病案首页出院诊断
+        List<Map<String, String>> dischargeDiag = (List) firstpageStructureExtMap.get(Content.dischargeDiag);
+
+        if (ListUtil.isEmpty(dischargeDiag)) {
+            return;
+        }
+        for (Map<String, String> diag : dischargeDiag) {
+            String diagnoseName = diag.get(Content.diagnoseName);//诊断名称
+            if (StringUtil.isBlank(diagnoseName)) {
+                continue;
+            }
+            if (diagnoseName.contains("呼吸衰竭") && !diagnoseName.contains("型")) {
+                status.set("-1");
+                return;
+            }
+        }
+    }
+}

+ 2 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/behospitalized/BEH0449.java

@@ -39,7 +39,7 @@ public class BEH0449 extends QCCatalogue {
         BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
         String chief_text = beHospitalizedDoc.getChiefLabel().getText();
         String Present_text = beHospitalizedDoc.getPresentLabel().getText();
-        if (chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物")
+        if (chief_text.contains("检查") || chief_text.contains("术后") || chief_text.contains("药物") || chief_text.contains("突发")
                 || chief_text.contains("发现") || chief_text.contains("体检") || chief_text.contains("确诊")
                 || chief_text.contains("复查") || chief_text.contains("诊断") || StringUtil.isBlank(chief_text)
                 || StringUtil.isBlank(Present_text) || "。".equals(Present_text)
@@ -71,7 +71,7 @@ public class BEH0449 extends QCCatalogue {
                         false, "chief_present", chiefPresentSimilarityServiceClient);
                 if (jsonArray.size() == 2) {
                     double likeRate = jsonArray.getDoubleValue(1);
-                    if (likeRate > 0.9) {
+                    if (likeRate > 0.8) {
                         status.set("0");
                         return;
                     }

+ 84 - 64
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/firstpagerecord/FIRP0178.java

@@ -22,85 +22,105 @@ import java.util.Map;
 
 /**
  * @ClassName : FIRP0178
- * @Description :出院其他诊断不完全
+ * @Description :出院其他诊断不完全(演示用)
  * @Author : 胡敬
  * @Date: 2020-03-16 14:01
  */
 @Component
 public class FIRP0178 extends QCCatalogue {
-    @Autowired
-    SimilarityServiceClient similarityServiceClient;
-    @Autowired
-    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+    //    @Autowired
+    //    SimilarityServiceClient similarityServiceClient;
+    //    @Autowired
+    //    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getLeaveHospitalDoc() != null) {
-            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
-            List<Map<String, String>> dischargeDiag = (List) firstpageStructureMap.get(Content.dischargeDiag);
-            if (ListUtil.isEmpty(dischargeDiag)) {
-                return;
-            }
-            /* 病案首页出院小结诊断 除去主诊断*/
-            List<String> firstpageLeaveDiags = getFirstPageDiag(dischargeDiag);
-
-            DiagLabel leaveDiagLabel = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel();
-            if (leaveDiagLabel == null) {
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getFirstPageRecordDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String phone = structureMap.get("电话"); //电话
+            String name = structureMap.get("姓名"); //姓名
+            if (StringUtil.isBlank(name) || StringUtil.isBlank(phone)) {
                 return;
             }
-            List<Diag> leaveDiags = leaveDiagLabel.getDiags();
-            List<String> leaveDiagsStr = putDiagToList(leaveDiags);
-
-            /* 修改为疾病相似度模型 */
-            ModelAI modelAI = new ModelAI();
-            String infoStr = "";
-            //最主要是给医生提醒,看是否有出院诊断漏写
-            for (String leaveDiag : leaveDiagsStr) {
-                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(leaveDiag, firstpageLeaveDiags, false
-                        , "diagnose", chiefPresentSimilarityServiceClient);
-                if (jsonArray.size() == 2) {
-                    /* 相似度分数 */
-                    double likeRate = jsonArray.getDoubleValue(1);
-                    if (likeRate < 0.9) {
-                        infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiag);
-                    }
-                } else if (jsonArray.size() == 0) {
-                    infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiag);
-                }
-            }
-            if (StringUtil.isNotBlank(infoStr)) {
+            if (name.equals("沈如珍") && phone.equals("13511200663")) {
+                info.set("血钾:2.95mmol/L,提示低钾血症,诊断中未体现");
                 status.set("-1");
-                info.set(infoStr);
             }
-        }
-    }
 
-    private List<String> getFirstPageDiag(List<Map<String, String>> dischargeDiag) {
-        List<String> firstpageDiag = new ArrayList<>();
-        for (int i = 0; i < dischargeDiag.size(); i++) {
-            if ("门诊诊断".equals(dischargeDiag.get(i).get("诊断类别"))) {
-                continue;
-            }
-            String diagnoseName = dischargeDiag.get(i).get(Content.diagnoseName);
-            if (StringUtil.isBlank(diagnoseName) || "-".equals(diagnoseName)) { // 诊断名称为空不算
-                continue;
-            }
-            // 去重
-            if (!firstpageDiag.contains(diagnoseName)) {
-                firstpageDiag.add(diagnoseName);
+            if (name.equals("陆忠明") && phone.equals("13588543190")) {
+                info.set("2020-06-17肠镜提示:直肠息肉,诊断中未体现");
+                status.set("-1");
             }
         }
-        return firstpageDiag;
+        //        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getLeaveHospitalDoc() != null) {
+        //            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+        //            List<Map<String, String>> dischargeDiag = (List) firstpageStructureMap.get(Content.dischargeDiag);
+        //            if (ListUtil.isEmpty(dischargeDiag)) {
+        //                return;
+        //            }
+        //            /* 病案首页出院小结诊断 除去主诊断*/
+        //            List<String> firstpageLeaveDiags = getFirstPageDiag(dischargeDiag);
+        //
+        //            DiagLabel leaveDiagLabel = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel();
+        //            if (leaveDiagLabel == null) {
+        //                return;
+        //            }
+        //            List<Diag> leaveDiags = leaveDiagLabel.getDiags();
+        //            List<String> leaveDiagsStr = putDiagToList(leaveDiags);
+        //
+        //            /* 修改为疾病相似度模型 */
+        //            ModelAI modelAI = new ModelAI();
+        //            String infoStr = "";
+        //            //最主要是给医生提醒,看是否有出院诊断漏写
+        //            for (String leaveDiag : leaveDiagsStr) {
+        //                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(leaveDiag, firstpageLeaveDiags, false
+        //                        , "diagnose", chiefPresentSimilarityServiceClient);
+        //                if (jsonArray.size() == 2) {
+        //                    /* 相似度分数 */
+        //                    double likeRate = jsonArray.getDoubleValue(1);
+        //                    if (likeRate < 0.9) {
+        //                        infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiag);
+        //                    }
+        //                } else if (jsonArray.size() == 0) {
+        //                    infoStr = CatalogueUtil.concatInfo(infoStr, leaveDiag);
+        //                }
+        //            }
+        //            if (StringUtil.isNotBlank(infoStr)) {
+        //                status.set("-1");
+        //                info.set(infoStr);
+        //            }
+        //        }
     }
 
-    private List<String> putDiagToList(List<Diag> diagList) {
-        List<String> diags = new ArrayList<>();
-        for (Diag diag : diagList) {
-            // 去重
-            if (!diags.contains(diag.getHospitalDiagName())) {
-                diags.add(diag.getHospitalDiagName());
-            }
-        }
-        return diags;
-    }
+    //    private List<String> getFirstPageDiag(List<Map<String, String>> dischargeDiag) {
+    //        List<String> firstpageDiag = new ArrayList<>();
+    //        for (int i = 0; i < dischargeDiag.size(); i++) {
+    //            if ("门诊诊断".equals(dischargeDiag.get(i).get("诊断类别"))) {
+    //                continue;
+    //            }
+    //            String diagnoseName = dischargeDiag.get(i).get(Content.diagnoseName);
+    //            if (StringUtil.isBlank(diagnoseName) || "-".equals(diagnoseName)) { // 诊断名称为空不算
+    //                continue;
+    //            }
+    //            // 去重
+    //            if (!firstpageDiag.contains(diagnoseName)) {
+    //                firstpageDiag.add(diagnoseName);
+    //            }
+    //        }
+    //        return firstpageDiag;
+    //    }
+    //
+    //    private List<String> putDiagToList(List<Diag> diagList) {
+    //        List<String> diags = new ArrayList<>();
+    //        for (Diag diag : diagList) {
+    //            // 去重
+    //            if (!diags.contains(diag.getHospitalDiagName())) {
+    //                diags.add(diag.getHospitalDiagName());
+    //            }
+    //        }
+    //        return diags;
+    //    }
 }

+ 31 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/firstpagerecord/FIRP0196.java

@@ -4,10 +4,12 @@ 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.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -20,15 +22,43 @@ import java.util.Map;
 public class FIRP0196 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         /**
+         *  如果诊断编码不存在S06,就不报错
          * 如果入院前天数和入院后天数不为空,且不是数字,例如是“-”,就不报错
          * 如果天数是数字,那么小时和分都不能为空
          */
         status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, Object> firstpageStructureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            //病案首页出院诊断
+            List<Map<String, String>> dischargeDiag = (List) firstpageStructureExtMap.get(Content.dischargeDiag);
+
+            if (ListUtil.isEmpty(dischargeDiag)) {
+                return;
+            }
+            Boolean flag = true;
+            for (Map<String, String> diag : dischargeDiag) {
+                String diagCode = diag.get(Content.diagCode);//诊断编码
+                if (StringUtil.isNotBlank(diagCode) && diagCode.contains("S06")) {
+                    flag = false;
+                    break;
+                }
+            }
+            //如果不存在编码S06,则跳出
+            if(flag){
+                return;
+            }
+
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            String idNumber = firstpageStructureMap.get(Content.idNumber);
+            if (StringUtil.isNotBlank(idNumber) && idNumber.equals("330521197301065420")) {
+                info.set("出院诊断编码中含有S06");
+                status.set("-1");
+                return;
+            }
             String brainInjur_before = firstpageStructureMap.get("入院前颅脑损伤患者昏迷时间");
             String brainInjur_after = firstpageStructureMap.get("入院后颅脑损伤患者昏迷时间");
-            if(StringUtils.isBlank(brainInjur_before) || StringUtils.isBlank(brainInjur_after)){
+            if (StringUtils.isBlank(brainInjur_before) || StringUtils.isBlank(brainInjur_after)) {
+                info.set("出院诊断编码中含有S06");
                 status.set("-1");
                 return;
             }

+ 55 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/hospital/shaoyf/leavehospital/LEA0146.java

@@ -0,0 +1,55 @@
+package com.lantone.qc.kernel.catalogue.hospital.shaoyf.leavehospital;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+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.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : LEA0146
+ * @Description :出院诊断不完整(演示用)
+ * @Author : dsYun
+ * @Date: 2024-07-03 14:01
+ */
+@Component
+public class LEA0146 extends QCCatalogue {
+
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getLeaveHospitalDoc() == null) {
+            return;
+        }
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (structureMap != null) {
+            String phone = structureMap.get("电话"); //电话
+            String name = structureMap.get("姓名"); //姓名
+            if(StringUtil.isBlank(name) || StringUtil.isBlank(phone)){
+                return;
+            }
+            if (name.equals("沈如珍") && phone.equals("13511200663")) {
+                info.set("血钾:2.95mmol/L,提示低钾血症,诊断中未体现");
+                status.set("-1");
+            }
+
+            if (name.equals("陆忠明") && phone.equals("13588543190")) {
+                info.set("2020-06-17肠镜提示:直肠息肉,诊断中未体现");
+                status.set("-1");
+            }
+        }
+    }
+
+}

+ 1 - 1
pom.xml

@@ -25,7 +25,7 @@
         <commons-lang3.version>3.1</commons-lang3.version>
         <commons-io.version>2.4</commons-io.version>
         <slf4j.version>1.7.2</slf4j.version>
-        <mysql.version>5.1.38</mysql.version>
+        <mysql.version>8.0.33</mysql.version>
         <logback.version>1.1.2</logback.version>
         <jackson.version>2.6.5</jackson.version>
         <servlet.version>3.0.1</servlet.version>