Bläddra i källkod

规则修改bug

hujing 5 år sedan
förälder
incheckning
1ce44164db

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0172.java

@@ -19,11 +19,12 @@ import java.util.Map;
 @Component
 public class FIRP0172 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
             Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
             List<Map<String, String>> outpatientEmergencyDiag = (List) firstpageStructureMap.get(Content.outpatientEmergencyDiag);
-            if (ListUtil.isNotEmpty(outpatientEmergencyDiag)) {
-                status.set("0");
+            if (ListUtil.isEmpty(outpatientEmergencyDiag)) {
+                status.set("-1");
             }
         }
     }

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

@@ -23,7 +23,7 @@ public class FIRP0174 extends QCCatalogue {
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureExtMap() != null) {
             Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
             List<Map<String, String>> outpatientEmergencyDiag = (List) firstpageStructureMap.get(Content.dischargeDiag);
-            if (ListUtil.isEmpty(outpatientEmergencyDiag)) {
+            if (outpatientEmergencyDiag != null && outpatientEmergencyDiag.size() == 0) {
                 status.set("-1");
             }
         }

+ 8 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0199.java

@@ -18,11 +18,17 @@ import java.util.Map;
 @Component
 public class FIRP0199 extends QCCatalogue {
     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 infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+            if (CatalogueUtil.isEmpty(infantAgeMonths) && CatalogueUtil.isEmpty(infantAgeDays)) {
+                return;
+            }
             String newbornWeight = firstpageStructureMap.get(Content.newbornWeight);
-            if (!CatalogueUtil.isEmpty(newbornWeight)){
-                status.set("0");
+            if (CatalogueUtil.isEmpty(newbornWeight)) {
+                status.set("-1");
             }
         }
     }

+ 8 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0201.java

@@ -18,11 +18,17 @@ import java.util.Map;
 @Component
 public class FIRP0201 extends QCCatalogue {
     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 infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
+            String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
+            if (CatalogueUtil.isEmpty(infantAgeMonths) && CatalogueUtil.isEmpty(infantAgeDays)) {
+                return;
+            }
             String newbornAdmisWeight = firstpageStructureMap.get(Content.newbornAdmisWeight);
-            if (!CatalogueUtil.isEmpty(newbornAdmisWeight)){
-                status.set("0");
+            if (CatalogueUtil.isEmpty(newbornAdmisWeight)){
+                status.set("-1");
             }
         }
     }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0220.java

@@ -18,14 +18,15 @@ import java.util.Map;
 @Component
 public class FIRP0220 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
                 && inputInfo.getBeHospitalizedDoc() != null && inputInfo.getBeHospitalizedDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> beHospitalStructureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
             String firstAdmissionDate = firstpageStructureMap.get(Content.admisTime);
             String admissionDate = beHospitalStructureMap.get(Content.admisDate);
-            if (CatalogueUtil.equalsDate(firstAdmissionDate, admissionDate, "yyyy-MM-ddHH")) {
-                status.set("0");
+            if (!CatalogueUtil.equalsDate(firstAdmissionDate, admissionDate, "yyyy-MM-ddHH:mm")) {
+                status.set("-1");
             }
         }
     }

+ 3 - 2
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0225.java

@@ -18,14 +18,15 @@ import java.util.Map;
 @Component
 public class FIRP0225 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
         if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null
                 && inputInfo.getLeaveHospitalDoc() != null && inputInfo.getLeaveHospitalDoc().getStructureMap() != null) {
             Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             Map<String, String> leaveHospitalStructureMap = inputInfo.getLeaveHospitalDoc().getStructureMap();
             String firstDischargeTime = firstpageStructureMap.get(Content.dischargeTime);//病案首页出院时间
             String dischargeTime = leaveHospitalStructureMap.get(Content.dischargeTime);//出院小结出院时间
-            if (CatalogueUtil.equalsDate(firstDischargeTime, dischargeTime, "yyyy-MM-ddHH")) {
-                status.set("0");
+            if (!CatalogueUtil.equalsDate(firstDischargeTime, dischargeTime, "yyyy-MM-ddHH:mm")) {
+                status.set("-1");
             }
         }
     }

+ 0 - 5
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0239.java

@@ -24,11 +24,6 @@ public class FIRP0239 extends QCCatalogue {
             String reHospitalization = firstpageStructureMap.get(Content.reHospitalization).toString();
             if (CatalogueUtil.isEmpty(reHospitalization)) {
                 status.set("-1");
-            } else {
-                if (reHospitalization.contains("有") &&
-                        CatalogueUtil.isEmpty(reHospitalization.substring(reHospitalization.indexOf("目的:")))) {
-                    status.set("-1");
-                }
             }
         }
     }

+ 38 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0257.java

@@ -5,8 +5,12 @@ 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.entity.Diag;
+import com.lantone.qc.pub.util.ListUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -19,11 +23,42 @@ import java.util.Map;
 public class FIRP0257 extends QCCatalogue {
     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();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.o_i))){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureExtMap() != null
+                && inputInfo.getLeaveHospitalDoc() != null && inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel() != null) {
+            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            List<Map<String, String>> outpatientEmergencyDiagList = (List) firstpageStructureMap.get(Content.outpatientEmergencyDiag);
+            List<Diag> dischargeDiags = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel().getDiags();
+            if (ListUtil.isEmpty(outpatientEmergencyDiagList) || ListUtil.isEmpty(dischargeDiags)) {
+                return;
+            }
+            List<String> firstpageDischargeDiag = getFirstpageDischargeDiag(outpatientEmergencyDiagList);
+            List<String> dischargeDiag = getDischargeDiag(dischargeDiags);
+            String situation = ""; //符合情况
+            if (ListUtil.equals(firstpageDischargeDiag,dischargeDiag)){
+                situation = "符合";
+            } else {
+                situation = "不符合";
+            }
+            String o_i = firstpageStructureMap.get(Content.o_i).toString();
+            if (!CatalogueUtil.isEmpty(o_i) && !CatalogueUtil.compareToken(o_i,situation)) {
                 status.set("-1");
             }
         }
     }
+
+    private List<String> getDischargeDiag(List<Diag> dischargeDiags) {
+        List<String> dischargeDiagList = new ArrayList<>();
+        for (Diag diag : dischargeDiags) {
+            dischargeDiagList.add(diag.getHospitalDiagName());
+        }
+        return dischargeDiagList;
+    }
+
+    private List<String> getFirstpageDischargeDiag(List<Map<String, String>> outpatientEmergencyDiagList) {
+        List<String> firstpageDischargeDiag = new ArrayList<>();
+        for (Map<String, String> outpatientEmergencyDiag : outpatientEmergencyDiagList) {
+            firstpageDischargeDiag.add(outpatientEmergencyDiag.get(Content.diagnoseName));
+        }
+        return firstpageDischargeDiag;
+    }
 }

+ 38 - 3
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0259.java

@@ -5,8 +5,12 @@ 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.entity.Diag;
+import com.lantone.qc.pub.util.ListUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -19,11 +23,42 @@ import java.util.Map;
 public class FIRP0259 extends QCCatalogue {
     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();
-            if (CatalogueUtil.isEmpty(firstpageStructureMap.get(Content.i_o))){
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureExtMap() != null
+                && inputInfo.getLeaveHospitalDoc() != null && inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel() != null) {
+            Map<String, Object> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+            List<Map<String, String>> outpatientEmergencyDiagList = (List) firstpageStructureMap.get(Content.outpatientEmergencyDiag);
+            List<Diag> dischargeDiags = inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel().getDiags();
+            if (ListUtil.isEmpty(outpatientEmergencyDiagList) || ListUtil.isEmpty(dischargeDiags)) {
+                return;
+            }
+            List<String> firstpageDischargeDiag = getFirstpageDischargeDiag(outpatientEmergencyDiagList);
+            List<String> dischargeDiag = getDischargeDiag(dischargeDiags);
+            String situation = ""; //符合情况
+            if (ListUtil.equals(firstpageDischargeDiag, dischargeDiag)) {
+                situation = "符合";
+            } else {
+                situation = "不符合";
+            }
+            String i_o = firstpageStructureMap.get(Content.i_o).toString();
+            if (!CatalogueUtil.isEmpty(i_o) && !CatalogueUtil.compareToken(i_o, situation)) {
                 status.set("-1");
             }
         }
     }
+
+    private List<String> getDischargeDiag(List<Diag> dischargeDiags) {
+        List<String> dischargeDiagList = new ArrayList<>();
+        for (Diag diag : dischargeDiags) {
+            dischargeDiagList.add(diag.getHospitalDiagName());
+        }
+        return dischargeDiagList;
+    }
+
+    private List<String> getFirstpageDischargeDiag(List<Map<String, String>> outpatientEmergencyDiagList) {
+        List<String> firstpageDischargeDiag = new ArrayList<>();
+        for (Map<String, String> outpatientEmergencyDiag : outpatientEmergencyDiagList) {
+            firstpageDischargeDiag.add(outpatientEmergencyDiag.get(Content.diagnoseName));
+        }
+        return firstpageDischargeDiag;
+    }
 }

+ 19 - 2
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/LeaveHospitalAI.java

@@ -7,11 +7,13 @@ import com.lantone.qc.kernel.structure.ai.process.EntityProcessLeaveHospital;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.doc.LeaveHospitalDoc;
+import com.lantone.qc.pub.model.label.DiagLabel;
 import com.lantone.qc.pub.model.label.LeaveHospitalLabel;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.Arrays;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @ClassName : DischargeAI
@@ -23,7 +25,7 @@ public class LeaveHospitalAI extends ModelAI {
     /**
      *
      */
-    public static List<String> medicalTextType = Arrays.asList("DischargeQA_cx");
+    public static List<String> medicalTextType = Arrays.asList("DischargeQA_cx", "Diagnoses_cx");
     public static String entityRelationObject = "entity_relation_object";
     public static String outputs = "outputs";
     public static String content = "content";
@@ -34,9 +36,18 @@ public class LeaveHospitalAI extends ModelAI {
         if (leaveHospitalDoc != null && StringUtils.isNotEmpty(leaveHospitalDoc.getText())) {
             //出院小结全部文本
             putContent(crfContent, medicalTextType.get(0), leaveHospitalDoc.getText(), Content.discharge);
+            Map<String, String> leaveHospitalStructureMap = leaveHospitalDoc.getStructureMap();
+            if (leaveHospitalStructureMap != null && leaveHospitalStructureMap.get(Content.dischargeDiag) != null) {
+                putContent(crfContent, medicalTextType.get(1), leaveHospitalStructureMap.get(Content.dischargeDiag), Content.dischargeDiag);
+            }
 
             JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
-            putDischargeCrfData(midData.getJSONObject(Content.discharge), inputInfo);//出院小结
+            if (midData.containsKey(Content.discharge)) {
+                putDischargeCrfData(midData.getJSONObject(Content.discharge), inputInfo);//出院小结
+            }
+            if (midData.containsKey(Content.dischargeDiag)) {
+                putDischargeCrfData(midData.getJSONObject(Content.dischargeDiag), inputInfo);//出院诊断
+            }
         }
     }
 
@@ -51,6 +62,12 @@ public class LeaveHospitalAI extends ModelAI {
         //使用现病史结构来处理病历特点
         EntityProcessLeaveHospital entityProcessLeaveHospital = new EntityProcessLeaveHospital();
         LeaveHospitalLabel leaveHospitalLabel = entityProcessLeaveHospital.extractEntity(aiOut);
+        if (inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel() == null) {
+            DiagLabel diagLabel = new DiagLabel();
+            diagLabel.setDiags(leaveHospitalLabel.getDiags());
+        } else {
+            inputInfo.getLeaveHospitalDoc().getLeaveDiagLabel().setDiags(leaveHospitalLabel.getDiags());
+        }
         //临床表现
         inputInfo.getLeaveHospitalDoc().setLeaveHospitalLabel(leaveHospitalLabel);
     }

+ 10 - 1
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessLeaveHospital.java

@@ -5,9 +5,9 @@ import com.lantone.qc.kernel.structure.ai.model.EntityEnum;
 import com.lantone.qc.kernel.structure.ai.model.Lemma;
 import com.lantone.qc.pub.model.entity.BetterFinding;
 import com.lantone.qc.pub.model.entity.Chief;
+import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.entity.DoctorAdvice;
 import com.lantone.qc.pub.model.entity.Notes;
-import com.lantone.qc.pub.model.entity.Outcome;
 import com.lantone.qc.pub.model.entity.OutcomeCure;
 import com.lantone.qc.pub.model.entity.OutcomeToBetter;
 import com.lantone.qc.pub.model.entity.PositiveFinding;
@@ -57,6 +57,15 @@ public class EntityProcessLeaveHospital extends EntityProcess {
                 }
             }
         }
+        //出院诊断
+        List<Lemma> diagLemmas = createEntityTree(aiOut, EntityEnum.DIEASE.toString());
+        List<Diag> diags = new ArrayList<>();
+        for (Lemma lemma : diagLemmas) {
+            Diag diag = new Diag();
+            diag.setName(lemma.getText());
+            diags.add(diag);
+        }
+        leaveHospitalLabel.setDiags(diags);
         String content = aiOut.getString("content");
         String doctorAdviceContent = content.substring(keyWordForDoctorAdvicesesStart, minPart);
         doctorAdvice.setName(doctorAdviceContent);

+ 1 - 1
public/src/main/java/com/lantone/qc/pub/Content.java

@@ -161,7 +161,7 @@ public class Content {
     public static final String medical_classification = "病历分型";
 //    public static final String inStatus = "入院病情";
 
-    public static final String outpatientEmergencyDiag = "门诊诊断";
+    public static final String outpatientEmergencyDiag = "门急诊诊断";
     public static final String diagCode = "诊断编码";
     public static final String diagnoseName = "诊断名称";
     public static final String inStatus = "入院情况";

+ 2 - 0
public/src/main/java/com/lantone/qc/pub/model/label/LeaveHospitalLabel.java

@@ -2,6 +2,7 @@ package com.lantone.qc.pub.model.label;
 
 import com.lantone.qc.pub.model.entity.BetterFinding;
 import com.lantone.qc.pub.model.entity.Chief;
+import com.lantone.qc.pub.model.entity.Diag;
 import com.lantone.qc.pub.model.entity.DoctorAdvice;
 import com.lantone.qc.pub.model.entity.Notes;
 import com.lantone.qc.pub.model.entity.Outcome;
@@ -26,6 +27,7 @@ public class LeaveHospitalLabel {
     List<Chief> chiefs = new ArrayList<>();   //主诉
     List<Notes> noteses = new ArrayList<>();   //注意事项
     DoctorAdvice doctorAdvices;   //医嘱信息
+    List<Diag> diags = new ArrayList<>();   //出院诊断
     List<BetterFinding> betterFindings = new ArrayList<>();   //好转表现
     List<OutcomeToBetter> outcomeToBetters = new ArrayList<>();   //转归情况-好转
     List<OutcomeCure> outcomeCures = new ArrayList<>();   //转归情况-治愈