Jelajahi Sumber

长兴入院记录\首次病程录初步诊断不完整、主要诊断与出院小结不一致修改逻辑

hujing 5 tahun lalu
induk
melakukan
a8d9ceaacf

+ 73 - 27
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java

@@ -1,50 +1,98 @@
 package com.lantone.qc.kernel.catalogue.behospitalized;
+
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.dbanaly.util.KernelConstants;
-import com.lantone.qc.dbanaly.util.SpecialStorageUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Diag;
-import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
+import com.lantone.qc.pub.model.label.DiagLabel;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.model.label.PresentLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
+import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
 
 /**
  * @ClassName : BEH0011
- * @Description : 入院诊断不完整
- * 初步诊断没有既往史里的慢性疾病
+ * @Description : 初步诊断不完整
+ * 原逻辑 --初步诊断没有既往史里的慢性疾病
+ * 现逻辑 --检查现病史中一般情况之后的疾病名称,既往史中的疾病名称是否都在初步诊断里
  * @Author : 楼辉荣
  * @Date: 2020-03-06 17:28
  */
 @Component
 public class BEH0011 extends QCCatalogue {
-    @Autowired
-    private SpecialStorageUtil specialStorageUtil;
+//    @Autowired
+//    private SpecialStorageUtil specialStorageUtil;
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        if (initialDiagLabel == null || pastLabel == null || presentLabel == null) {
             status.set("0");
             return;
         }
-        Map<String, Map<String, Object>> diagMap = specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP);
-        String initDiagText = CatalogueUtil.removeSpecialChar(inputInfo.getBeHospitalizedDoc().getInitialDiagLabel().getText());
-        List<Diag> diags = inputInfo.getBeHospitalizedDoc().getPastLabel().getDiags().stream().filter(diag -> diag.getNegative() == null).collect(Collectors.toList());
-        if(StringUtils.isNotEmpty(initDiagText)){
+        String presentText = presentLabel.getText();
+        List<Diag> presentDiags = presentLabel.getDiags();
+        List<String> presentPastDiag = new ArrayList<>();
+        /* 取现病史中一般情况之后的疾病名称 */
+        if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            String lastGeneral = generals.get(generals.size() - 1).getName();
+            int lastGeneralIndex = presentText.indexOf(lastGeneral);
+            for (Diag presentDiag : presentDiags) {
+                if (presentDiag.getNegative() != null) {
+                    continue;
+                }
+                /* 现病史中一般情况之后的疾病名称 */
+                if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                    presentPastDiag.add(presentDiag.getHospitalDiagName());
+                }
+            }
+        }
+        /* 取既往史中疾病名称 */
+        List<Diag> pastDiags = pastLabel.getDiags();
+        addDiagHospitalName(presentPastDiag, pastDiags);
+        /* 取初步诊断中疾病名称 */
+        List<String> initDiag = new ArrayList<>();
+        List<Diag> initialDiagDiags = initialDiagLabel.getDiags();
+        addDiagHospitalName(initDiag, initialDiagDiags);
+
+        if (initDiag.containsAll(presentPastDiag)){
+            status.set("0");
+        }
+    }
+
+    private void addDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
+                continue;
+            }
+            presentPastDiag.add(pastDiag.getHospitalDiagName());
+        }
+    }
+    /* 原逻辑
+    Map<String, Map<String, Object>> diagMap = specialStorageUtil.getJsonStringValue(KernelConstants.CONCEPT_DIAG_PROPERTY_MAP);
+    String initDiagText = CatalogueUtil.removeSpecialChar(initialDiagLabel.getText());
+        if (pastLabel.getDiags() != null) {
+            List<Diag> diags = pastLabel.getDiags().stream().filter(diag -> diag.getNegative() == null).collect(Collectors.toList());
             List<String> initDiags = Arrays.asList(initDiagText.split(","));
-            if(diags.size()>0){
-                for (Diag diag:diags) {
+            if (diags.size() > 0) {
+                for (Diag diag : diags) {
                     Map<String, Object> map = (Map<String, Object>) diagMap.get(diag.getName());
-                    if(map != null && map.size() >0){
+                    if (map != null && map.size() > 0) {
                         String chronic = (String) map.get("chronic");//1是慢病
-                        if("1".equals(chronic) && !initDiags.contains(diag.getName())){
-                            if(StringUtils.isEmpty(info.get())){
+                        if ("1".equals(chronic) && !initDiags.contains(diag.getName())) {
+                            if (StringUtils.isEmpty(info.get())) {
                                 info.set(diag.getName());
-                            }else {
+                            } else {
                                 info.set(info.get() + "," + diag.getName());
                             }
                         }
@@ -52,10 +100,8 @@ public class BEH0011 extends QCCatalogue {
                 }
             }
         }
-        if(StringUtils.isEmpty(info.get())){
+        if (StringUtils.isEmpty(info.get())) {
             status.set("0");
         }
-
-
-    }
+     */
 }

+ 35 - 40
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java

@@ -3,8 +3,8 @@ package com.lantone.qc.kernel.catalogue.firstcourserecord;
 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.BeHospitalizedDoc;
 import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
 import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.model.label.PastLabel;
 import com.lantone.qc.pub.model.label.PresentLabel;
@@ -24,59 +24,54 @@ import java.util.List;
 @Component
 public class FIRC0095 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        //        FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
-        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
-        if (beHospitalizedDoc == null) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
             status.set("0");
             return;
         }
-        //DiagLabel initialDiagLabel = firstCourseRecordDoc.getInitialDiagLabel();
-        PresentLabel presentLabel = beHospitalizedDoc.getPresentLabel();
-        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
-        DiagLabel initialDiagLabel = beHospitalizedDoc.getInitialDiagLabel();
-
-        if (initialDiagLabel == null) {
+        PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
+        DiagLabel initialDiagLabel = inputInfo.getBeHospitalizedDoc().getInitialDiagLabel();
+        PastLabel pastLabel = inputInfo.getBeHospitalizedDoc().getPastLabel();
+        if (initialDiagLabel == null || pastLabel == null || presentLabel == null) {
             status.set("0");
             return;
         }
-        List<String> bhDiags = new ArrayList<>();
-        /* 现病史诊断 */
-        if (presentLabel != null && presentLabel.getDiags() != null) {
-            List<Diag> presentDiags = presentLabel.getDiags();
-            copyDiag(presentDiags, bhDiags);
-        }
-        /* 既往史诊断 */
-        if (pastLabel != null && pastLabel.getDiags() != null) {
-            List<Diag> pastDiags = pastLabel.getDiags();
-            copyDiag(pastDiags, bhDiags);
-        }
-        /* 初步诊断 */
-        List<Diag> diags = initialDiagLabel.getDiags();
-        List<String> initDiags = new ArrayList<>();
-        if (diags != null) {
-            copyDiag(diags, initDiags);
+        String presentText = presentLabel.getText();
+        List<Diag> presentDiags = presentLabel.getDiags();
+        List<String> presentPastDiag = new ArrayList<>();
+        /* 取现病史中一般情况之后的疾病名称 */
+        if (StringUtil.isNotBlank(presentText) && presentDiags.size() > 0) {
+            List<GeneralDesc> generals = presentLabel.getGenerals();
+            String lastGeneral = generals.get(generals.size() - 1).getName();
+            int lastGeneralIndex = presentText.indexOf(lastGeneral);
+            for (Diag presentDiag : presentDiags) {
+                if (presentDiag.getNegative() != null) {
+                    continue;
+                }
+                /* 现病史中一般情况之后的疾病名称 */
+                if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
+                    presentPastDiag.add(presentDiag.getHospitalDiagName());
+                }
+            }
         }
+        /* 取既往史中疾病名称 */
+        List<Diag> pastDiags = pastLabel.getDiags();
+        addDiagHospitalName(presentPastDiag, pastDiags);
+        /* 取初步诊断中疾病名称 */
+        List<String> initDiag = new ArrayList<>();
+        List<Diag> initialDiagDiags = initialDiagLabel.getDiags();
+        addDiagHospitalName(initDiag, initialDiagDiags);
 
-        //List<Diag> diags1 = initialDiagLabel1.getDiags();
-        /* 初步诊断包含现病史诊断和既往史诊断 */
-        if (initDiags.containsAll(bhDiags)) {
+        if (initDiag.containsAll(presentPastDiag)){
             status.set("0");
         }
     }
 
-    private void copyDiag(List<Diag> diags, List<String> diagList) {
-        String hospitalDiagName, name;
-        for (Diag diag : diags) {
-            if (diag.getNegative() != null) {
+    private void addDiagHospitalName(List<String> presentPastDiag, List<Diag> pastDiags) {
+        for (Diag pastDiag : pastDiags) {
+            if (pastDiag.getNegative() != null) {
                 continue;
             }
-            hospitalDiagName = diag.getHospitalDiagName();
-            name = diag.getName();
-            if (StringUtil.isNotBlank(hospitalDiagName)) {
-                diagList.add(hospitalDiagName);
-            } else if (StringUtil.isNotBlank(name)) {
-                diagList.add(name);
-            }
+            presentPastDiag.add(pastDiag.getHospitalDiagName());
         }
     }
 }

+ 11 - 7
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0175.java

@@ -1,5 +1,6 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
+import com.google.common.collect.Lists;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
@@ -9,7 +10,6 @@ import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.util.ListUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
 
@@ -21,28 +21,32 @@ import java.util.Map;
  */
 @Component
 public class FIRP0175 extends QCCatalogue {
-    private static String[] strings = {"2型糖尿病"};
+    List<String> diags = Lists.newArrayList("2型糖尿病");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
-                && inputInfo.getLeaveHospitalDoc() != null && inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel() != null) {
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getLeaveHospitalDoc() != null) {
             Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
             //病案首页出院诊断
             List<Map<String, String>> dischargeDiag = (List) firstpageStructureMap.get(Content.dischargeDiag);
             //出院小结诊断
-            List<Diag> leaveDiags = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel().getDiags();
+            List<Diag> leaveDiags = null;
+            if (inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel() != null) {
+                leaveDiags = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel().getDiags();
+            }
             if (ListUtil.isEmpty(dischargeDiag) || ListUtil.isEmpty(leaveDiags)) {
                 return;
             }
             String firstpageleaveDiag = dischargeDiag.get(0).get(Content.diagnoseName);
             String leaveDiag = leaveDiags.get(0).getHospitalDiagName();
             //判断是否有2型糖尿病这种病如果没有,把疾病前的数字去掉
-            if(!Arrays.asList(strings).contains(leaveDiag)){
-                leaveDiag = leaveDiag.replaceAll("^[0-9]","");
+            if (!diags.contains(leaveDiag)) {
+                leaveDiag = leaveDiag.replaceAll("^[0-9]", "");
             }
             if (!CatalogueUtil.compareToken(firstpageleaveDiag, leaveDiag)) {
                 status.set("-1");
             }
+
         }
     }
 }

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/model/label/PresentLabel.java

@@ -29,7 +29,7 @@ public class PresentLabel extends GeneralLabel {
     //一般情况
     private List<General> gens = new ArrayList<>();
     //一般情况描述
-    private List<GeneralDesc> generals;
+    private List<GeneralDesc> generals = new ArrayList<>();
     //诱因
     private List<Cause> causes;
     //疾病信息