Browse Source

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

zhoutg 5 years atrás
parent
commit
c8b60a903c

+ 56 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02980.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -33,6 +34,9 @@ public class BEH02980 extends QCCatalogue {
     @Autowired
     ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
 
+    private List<String> containList = Arrays.asList("脑萎缩", "慢性", "纤颤", "高血压", "糖尿", "冠状", "冠心病", "支架", "起搏器", "房颤", "风湿");
+    private List<String> filterList = Arrays.asList("心脏病", "低血糖", "急性", ";");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
@@ -41,10 +45,42 @@ public class BEH02980 extends QCCatalogue {
 
         List<String> pos_diags = new ArrayList<>();
         List<String> neg_diags = new ArrayList<>();
-
+        //现病史需要取一般情况之后疾病
         if (presentLabel != null) {
-            extract_diags(presentLabel.getDiags(), pos_diags, neg_diags);
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            if (generals.size() > 0) {
+                String presentText = presentLabel.getText();
+                List<Diag> presentDiags = presentLabel.getDiags();
+                /* 取现病史中一般情况之后的疾病名称 */
+                if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+                    String lastGeneral = generals.get(generals.size() - 1).getName();
+                    int lastGeneralIndex = presentText.indexOf(lastGeneral);
+                    for (Diag presentDiag : presentDiags) {
+                        if (presentDiag.getNegative() != null || presentDiag.getHospitalDiagName().contains("否认")) {
+                            continue;
+                        }
+                        /* 现病史中一般情况之后的疾病名称 */
+                        if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                            if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
+                                String dgname = presentDiag.getHospitalDiagName();
+                                if (presentDiag.getNegative()==null) {
+                                    if (!pos_diags.contains(dgname)) {
+                                        pos_diags.add(dgname);
+                                    }
+                                }
+                                else {
+                                    if (!neg_diags.contains(dgname)) {
+                                        neg_diags.add(dgname);
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
+
+
         if (pastLabel != null) {
             extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
         } else {
@@ -132,4 +168,22 @@ public class BEH02980 extends QCCatalogue {
         return dgs;
     }
 
+    private boolean isContains(String diagName) {
+        for (String c : containList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private boolean isFilter(String diagName) {
+        for (String c : filterList) {
+            if (diagName.contains(c)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
 }

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0563.java

@@ -4,6 +4,7 @@ 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.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -31,8 +32,9 @@ public class CLI0563 extends QCCatalogue {
                 if(cliBStructureMap.containsKey("输注开始")){
                     if(!StringUtils.isEmpty(cliBStructureMap.get("输注开始"))){
                         try {
-                            Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注开始"));
-                        } catch (ParseException e) {
+                            //Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注开始"));
+                            Date date_in = StringUtil.parseDateTime(cliBStructureMap.get("输注开始"));
+                        } catch (Exception e) {
                             status.set("-1");
                             break;
                         }

+ 4 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0565.java

@@ -4,6 +4,7 @@ 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.ClinicalBloodDoc;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -31,8 +32,9 @@ public class CLI0565 extends QCCatalogue {
                 if(cliBStructureMap.containsKey("输注结束")){
                     if(!StringUtils.isEmpty(cliBStructureMap.get("输注结束"))){
                         try {
-                            Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注结束"));
-                        } catch (ParseException e) {
+                            //Date date_in = new SimpleDateFormat(FORMAT_LONC_CN_MI).parse(cliBStructureMap.get("输注结束"));
+                            Date date_in = StringUtil.parseDateTime(cliBStructureMap.get("输注结束"));
+                        } catch (Exception e) {
                             status.set("-1");
                             break;
                         }

+ 5 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0108.java

@@ -5,6 +5,7 @@ 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.model.doc.DeathRecordDoc;
 import org.springframework.stereotype.Component;
 
 import java.util.Map;
@@ -19,6 +20,7 @@ import java.util.Map;
 public class DEAC0108 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, String> FirstPageStructure = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String outWay = FirstPageStructure.get(Content.outWay);
@@ -26,8 +28,9 @@ public class DEAC0108 extends QCCatalogue {
             if (CatalogueUtil.isEmpty(outWay) || !outWay.contains("死亡")) {
                 return;
             }
-            if ((inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)
-            && outWay.contains("死亡")){
+            if (((inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)
+            && outWay.contains("死亡")) || ((inputInfo.getDeathCaseDiscussDoc() == null || inputInfo.getDeathCaseDiscussDoc().getStructureMap().size() == 0)
+            && deathRecordDoc != null)){
                 status.set("-1");
             }
         }

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

@@ -47,8 +47,8 @@ public class LEA02987 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String type = adviceDocStructureMap.get("医嘱处方类型");
-            if (StringUtil.isNotBlank(type) && type.contains("药")) {
+            String type = adviceDocStructureMap.get("医嘱类型判别");
+            if (StringUtil.isNotBlank(type) && type.equals("出院带药")) {
                 if (StringUtil.isNotBlank(name)) {
                     drugs.add(name);
                 }

+ 53 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA03029.java

@@ -0,0 +1,53 @@
+package com.lantone.qc.kernel.catalogue.leavehospital;
+
+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.LeaveHospitalDoc;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author rgb
+ * 出院小结无F以上医师签名
+ * @date 2020/4/7
+ * @time 21:42
+ */
+@Component
+public class LEA03029 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        if (leaveHospitalDoc == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+        String doctorName = structureMap.get("医师签名");
+        String shPerson = structureMap.get("审核人");
+        String regex = "\\s+";
+        List<String> docNames = new ArrayList<>();
+        if (StringUtil.isNotBlank(doctorName)) {
+            docNames.addAll(Arrays.asList(doctorName.split(regex)));
+        }
+        if (StringUtil.isNotBlank(shPerson)) {
+            docNames.addAll(Arrays.asList(shPerson.split(regex)));
+        }
+        String professor = null;
+        for (String docName : docNames) {
+            professor = CatalogueUtil.getProfessor(docName);
+            if (StringUtil.isNotBlank(professor) && professor.contains("主任")) {
+                status.set("0");
+                break;
+            }
+        }
+    }
+
+}

+ 46 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/leavehospital/LEA03030.java

@@ -0,0 +1,46 @@
+package com.lantone.qc.kernel.catalogue.leavehospital;
+
+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.DeathRecordDoc;
+import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @Description: 出院小结入院诊断与入院记录初步诊断不一致
+ * @author: 胡敬
+ * @time: 2020/3/27 15:15
+ */
+@Component
+public class LEA03030 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        if (leaveHospitalDoc == null) {
+            return;
+        }
+        DeathRecordDoc deathRecordDoc = inputInfo.getDeathRecordDoc();
+        if (deathRecordDoc == null || deathRecordDoc.getText() == null) {
+            if (inputInfo.getBeHospitalizedDoc() != null) {
+                DiagLabel beHospitalizedLabel = leaveHospitalDoc.getBeHospitalizedLabel();
+                DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+                if (beHospitalizedLabel != null && initialDiagLabel != null) {
+                    //出院记录入院诊断
+                    List<Diag> beHospitalizedDiags = beHospitalizedLabel.getDiags();
+                    //入院记录初步诊断
+                    List<Diag> initialDiags = initialDiagLabel.getDiags();
+                    if (!ListUtil.equals(beHospitalizedDiags, initialDiags)) {
+                        status.set("-1");
+                    }
+                }
+            }
+        }
+    }
+}

+ 54 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0326.java

@@ -0,0 +1,54 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : OPE0326
+ * @Description : 无术后首程
+ * @Author : kwz
+ * @Date: 2020-05-30 17:07
+ */
+@Component
+public class OPE0326 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //先判断有无手术记录
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        long count_oper =0;
+        long count_discuss =0;
+        if(operationDocs != null && operationDocs.size()>0){
+            count_oper = operationDocs.stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();
+
+            count_discuss = operationDocs.stream().map(i -> i.getOperationDiscussionDoc()).filter(i -> i != null).count();
+            if(count_oper>0 && count_discuss ==0){
+                status.set("-1");
+            }
+        }
+            /*List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (operationDocs.size() == 0 || operationDocs == null) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+                if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("患方签名"))) {
+                    status.set("-1");
+                    return;
+                }
+            }*/
+
+
+    }
+}

+ 51 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0348.java

@@ -0,0 +1,51 @@
+package com.lantone.qc.kernel.catalogue.operationdiscussion;
+
+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.operation.OperationDoc;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : OPE0348
+ * @Description : 无手术知情同意书
+ * @Author : kwz
+ * @Date: 2020-05-30 17:07
+ */
+@Component
+public class OPE0348 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        //先判断有无手术记录
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        long count_oper =0;
+        long count_info =0;
+        if(operationDocs != null && operationDocs.size()>0){
+            count_oper = operationDocs.stream().map(i -> i.getOperationRecordDoc()).filter(i -> i != null).count();
+
+            count_info = operationDocs.stream().map(i -> i.getOperationInformedConsentDoc()).filter(i -> i != null).count();
+            if(count_oper>0 && count_info ==0){
+                status.set("-1");
+            }
+        }
+            /*List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+            if (operationDocs.size() == 0 || operationDocs == null) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                Map<String, String> operationDiscussionStructureMap = operationDiscussionDoc.getStructureMap();
+                if (CatalogueUtil.isEmpty(operationDiscussionStructureMap.get("患方签名"))) {
+                    status.set("-1");
+                    return;
+                }
+            }*/
+
+
+    }
+}

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02985.java

@@ -17,6 +17,7 @@ import java.util.Map;
 /**
  * @ClassName : THR02985
  * @Description : 医嘱有抗生素使用病程无记录
+ * 药品类型(0.普药 1.抗生素 2.激素)
  * @Author : 胡敬
  * @Date: 2020-06-23 10:04
  */
@@ -33,9 +34,9 @@ public class THR02985 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String drugCategory = adviceDocStructureMap.get("医嘱药品类别");
+            String drugCategory = adviceDocStructureMap.get("药品类型");
             String startDateStr = adviceDocStructureMap.get("医嘱开始时间");
-            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("抗生素")) {
+            if (StringUtil.isNotBlank(drugCategory) && drugCategory.equals("1")) {
                 if (StringUtil.isNotBlank(name)) {
                     doctorAdviceDrugMap.put(StringUtil.parseDateTime(startDateStr), name);
                 }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR02986.java

@@ -17,6 +17,7 @@ import java.util.Map;
 /**
  * @ClassName : THR02986
  * @Description : 医嘱有激素使用病程无记录
+ * 药品类型(0.普药 1.抗生素 2.激素)
  * @Author : 胡敬
  * @Date: 2020-06-23 10:43
  */
@@ -33,9 +34,9 @@ public class THR02986 extends QCCatalogue {
         for (DoctorAdviceDoc adviceDoc : doctorAdviceDocs) {
             Map<String, String> adviceDocStructureMap = adviceDoc.getStructureMap();
             String name = adviceDocStructureMap.get("医嘱项目名称");
-            String drugCategory = adviceDocStructureMap.get("医嘱药品类别");
+            String drugCategory = adviceDocStructureMap.get("药品类型");
             String startDateStr = adviceDocStructureMap.get("医嘱开始时间");
-            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("激素")) {
+            if (StringUtil.isNotBlank(drugCategory) && drugCategory.contains("2")) {
                 if (StringUtil.isNotBlank(name)) {
                     doctorAdviceDrugMap.put(StringUtil.parseDateTime(startDateStr), name);
                 }

+ 3 - 3
kernel/src/main/resources/application.yml

@@ -18,13 +18,13 @@ qc:
   hospital_id: 1,2,3
 
 CRF:
-  url: http://192.168.3.150:3456/api/mr_info_ex/entity_predict
+  url: http://192.168.2.234:3456/api/mr_info_ex/entity_predict
 
 Similarity:
-  url: http://192.168.3.150:3456/api/mr_info_ex/similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/similarity
 
 ChiefPresentSimilarity:
-  url: http://192.168.3.150:3456/api/mr_info_ex/chief_present_similarity
+  url: http://192.168.2.234:3456/api/mr_info_ex/chief_present_similarity
 
 logging:          # 日志
   config: classpath:logback-spring.xml

+ 2 - 1
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfClinicalBloodDocTrans.java

@@ -44,7 +44,8 @@ public class ShaoyfClinicalBloodDocTrans extends ModelDocTrans {
             "开始时间=输注开始",
             "医生=记录医师",
             "结束时间=输注结束",
-            "输血原因=输血目的",
+            "输血原因=输注原因",
+            "记录时间=病历日期",
             "事件日期=病历日期",
             "内容=输注后效果评价"
     );

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfDeathCaseDiscussDocTrans.java

@@ -37,7 +37,7 @@ public class ShaoyfDeathCaseDiscussDocTrans extends ModelDocTrans {
             "主持人=讨论主持人",
             "死亡日期=死亡时间",
             "讨论意见=讨论内容",
-            "事件日期=讨论日期",
+            "事件日期=记录时间",
             "现病史- 发病情况=入院情况",
             "医生=记录医师",
             "本人姓名=姓名"

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/shaoyf/ShaoyfLeaveHospitalDocTrans.java

@@ -30,6 +30,7 @@ public class ShaoyfLeaveHospitalDocTrans extends ModelDocTrans {
         structureMap.put("入院情况", structureMap.get("入院病情"));
         structureMap.put("出院时间", structureMap.get("出院日期"));
         ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "医师签名");
+        ShaoyfOrdinaryAssistant.techTitleDocRemove(structureMap, "审核人");
         LeaveHospitalDoc leaveHospitalDoc = new LeaveHospitalDoc();
         leaveHospitalDoc.setStructureMap(structureMap);
         leaveHospitalDoc.setPageData((Map) structureMap);