瀏覽代碼

1.修改禅道bug
2.添加规则

hujing 5 年之前
父節點
當前提交
9c646c45c7

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0058.java

@@ -56,7 +56,8 @@ public class BEH0058 extends QCCatalogue {
             return;
         }
         if (StringUtil.isNotBlank(maritalText)) {
-            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生","0子0女","详见原病历");
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女"
+                    , "0-0-0-0", "详见原病历");
             for (String word : words) {
                 if (maritalText.contains(word)) {
                     status.set("0");

+ 65 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH02902.java

@@ -0,0 +1,65 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+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.entity.PD;
+import com.lantone.qc.pub.model.entity.Pacs;
+import com.lantone.qc.pub.model.label.PacsLabel;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : BEH02902
+ * @Description : 辅助检查未注明地点
+ * @Author : 胡敬
+ * @Date: 2020-05-28 09:56
+ */
+@Component
+public class BEH02902 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
+            return;
+        }
+
+        PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
+        if (pacsLabel == null || StringUtil.isBlank(pacsLabel.getText())) {
+            status.set("0");
+            return;
+        }
+        boolean findPlace = false;
+        String pacsText = pacsLabel.getText();
+        List<Pacs> pacses = pacsLabel.getPacses();
+        for (Pacs pacs : pacses) {
+            /* 时间为入院检查的时间,模型输出处理后结构为 name为空,pd不为空 */
+            if (pacs.getName() == null && pacs.getPd() != null) {
+                /* 模型先找到时间实体,找到后再从这个时间实体开始,往前往后找 */
+                PD pd = pacs.getPd();
+                String name = pd.getName();
+                int timeIndex = pacsText.indexOf(name);
+                String beforeTimeText = pacsText.substring(Math.max(timeIndex - 5, 0), timeIndex);
+                String afterTimeText = pacsText.substring(timeIndex + name.length(), timeIndex + name.length() + 10);
+                if (beforeTimeText.contains("院") || afterTimeText.contains("院")) {
+                    findPlace = true;
+                    break;
+                }
+            }
+        }
+
+        /* 如果模型没找到时间实体,则直接取辅助检查前20个字,判断有没有院字 */
+        if (!findPlace) {
+            String prefixText = pacsText.substring(0, Math.min(20, pacsText.length()));
+            if (prefixText.contains("院")) {
+                findPlace = true;
+            }
+        }
+
+        if (findPlace) {
+            status.set("0");
+        }
+    }
+}

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0376.java

@@ -52,7 +52,8 @@ public class BEH0376 extends QCCatalogue {
         }
         String maritalText = maritalLabel.getText();
         if (StringUtil.isNotBlank(maritalText)) {
-            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生","0子0女","详见原病历");
+            List<String> words = Lists.newArrayList("未婚", "未育", "未婚育", "未生育", "未生", "0子0女"
+                    , "0-0-0-0", "详见原病历");
             for (String word : words) {
                 if (maritalText.contains(word)) {
                     status.set("0");

+ 21 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0490.java

@@ -3,7 +3,6 @@ package com.lantone.qc.kernel.catalogue.behospitalized;
 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.entity.PD;
 import com.lantone.qc.pub.model.entity.Pacs;
 import com.lantone.qc.pub.model.label.PacsLabel;
 import com.lantone.qc.pub.util.StringUtil;
@@ -13,32 +12,37 @@ import java.util.List;
 
 
 /**
- * @ClassName : BEH0490
+ * @ClassName : BEH0491
  * @Description : 实验室检查未注明时间和地点
  * @Author : 胡敬
  * @Date: 2020-06-03 13:34
  */
 @Component
-public class BEH0490 extends QCCatalogue {
+public class BEH0491 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
         if (inputInfo.getBeHospitalizedDoc() == null) {
+            status.set("0");
             return;
         }
 
         PacsLabel pacsLabel = inputInfo.getBeHospitalizedDoc().getPacsLabel();
         if (pacsLabel == null || StringUtil.isBlank(pacsLabel.getText())) {
+            status.set("0");
             return;
         }
 
         String pacsText = pacsLabel.getText();
         List<Pacs> pacses = pacsLabel.getPacses();
+        boolean findTime = false, findPlace = false;
         for (Pacs pacs : pacses) {
-            if (pacs.getName() == null && pacs.getPd() == null) {
-                status.set("-1");
-                return;
-            } else {
+            /* 时间为入院检查的时间,模型输出处理后结构为 name为空,pd不为空 */
+            if (pacs.getName() == null && pacs.getPd() != null) {
+                findTime = true;
+                break;
+            }
+            /*
+            else {
                 PD pd = pacs.getPd();
                 if (pd == null) {
                     continue;
@@ -52,6 +56,15 @@ public class BEH0490 extends QCCatalogue {
                     return;
                 }
             }
+             */
+        }
+        String prefixText = pacsText.substring(0, Math.min(10, pacsText.length()));
+        if (prefixText.contains("院")) {
+            findPlace = true;
+        }
+
+        if (findTime || findPlace) {
+            status.set("0");
         }
     }
 }

+ 21 - 23
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0300.java

@@ -23,37 +23,35 @@ import java.util.regex.Pattern;
 @Component
 public class CLI0300 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("-1");
+        status.set("0");
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
-        if(ListUtil.isEmpty(clinicalBloodDocs)){
-            status.set("0");
+        if (ListUtil.isEmpty(clinicalBloodDocs)) {
             return;
         }
-        if(clinicalBloodDocs != null && clinicalBloodDocs.size()>0){
-            for (ClinicalBloodDoc cliB:clinicalBloodDocs) {
-                Map<String, String> cliBStructureMap = cliB.getStructureMap();
-                String infusionReason;
-                //台州
-                if(StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))){
-                    infusionReason = cliBStructureMap.get("输血检验指标");
-                }else {
-                    infusionReason = cliBStructureMap.get("输注原因");
+        for (ClinicalBloodDoc cliB : clinicalBloodDocs) {
+            Map<String, String> cliBStructureMap = cliB.getStructureMap();
+            String infusionReason;
+            //台州
+            if (StringUtils.isNotEmpty(cliBStructureMap.get("输血检验指标"))) {
+                infusionReason = cliBStructureMap.get("输血检验指标");
+            } else {
+                infusionReason = cliBStructureMap.get("输注原因");
+            }
+            if (StringUtils.isNotEmpty(infusionReason)) {
+                if (infusionReason.contains("白蛋白") || infusionReason.contains("凝血酶原复合物")) {
+                    continue;
                 }
-                if(StringUtils.isNotEmpty(infusionReason)){
-                    Pattern compile = Pattern.compile("([\\d]+[.\\d+]*)([a-zA-Z]+)(/[a-zA-Z]+)*");
-                    Matcher matcher = compile.matcher(infusionReason);
-                    if (matcher.find(0)){
-                        if (null!=matcher.group(1)) {
-                            Double val = Double.parseDouble(matcher.group(1));
-                            if (val <= 60.0) {
-                                status.set("0");
-                            }
+                Pattern compile = Pattern.compile("([\\d]+[.\\d+]*)([a-zA-Z]+)(/[a-zA-Z]+)*");
+                Matcher matcher = compile.matcher(infusionReason);
+                if (matcher.find(0)) {
+                    if (null != matcher.group(1)) {
+                        double val = Double.parseDouble(matcher.group(1));
+                        if (val > 60.0) {
+                            status.set("-1");
                         }
                     }
                 }
             }
-        } else {
-            status.set("0");
         }
     }
 }

+ 8 - 11
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0569.java

@@ -5,6 +5,7 @@ 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.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -37,19 +38,15 @@ public class CLI0569 extends QCCatalogue {
                 }
                 if (cliBStructureMap.containsKey("输注种类、血型、数量")) {
                     String bloodType = cliBStructureMap.get("输注种类、血型、数量");
-                    if (StringUtils.isEmpty(bloodType)) {
-                        status.set("-1");
-                        break;
-                    } else {
-                        if (bloodType.contains("白蛋白")) {
-                            status.set("0");
-                            continue;
-                        }
+                    if (StringUtils.isNotEmpty(bloodType) &&
+                            (bloodType.contains("白蛋白") || bloodType.contains("凝血酶原复合物"))) {
+                        continue;
                     }
                     Pattern compile = Pattern.compile("[a-zA-Z]+型");
-                    Matcher matcher = compile.matcher(cliBStructureMap.get("输注种类、血型、数量"));
-                    if (matcher.find()) {
-                        status.set("0");
+                    Matcher matcher = compile.matcher(StringUtil.removeBlank(cliBStructureMap.get("输注种类、血型、数量")));
+                    if (!matcher.find()) {
+                        status.set("-1");
+                        return;
                     }
                 }
             }

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0134.java

@@ -5,6 +5,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ward.AttendingDoctorWardDoc;
 import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -33,7 +34,7 @@ public class THR0134 extends QCCatalogue {
             return;
         }
 
-        if (firstAttendLabel.getDiags().size() != 0) {
+        if (firstAttendLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstAttendLabel.getDiagText())) {
             status.set("0");
         }
 

+ 2 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR0139.java

@@ -5,6 +5,7 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.doc.ward.DirectorDoctorWardDoc;
 import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -33,7 +34,7 @@ public class THR0139 extends QCCatalogue {
             return;
         }
 
-        if (firstDirectLabel.getDiags().size() != 0) {
+        if (firstDirectLabel.getDiags().size() != 0 || StringUtil.isNotBlank(firstDirectLabel.getDiagText())) {
             status.set("0");
         }
     }

+ 8 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessThreeLevelWard.java

@@ -55,6 +55,14 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
             addDiag(threeLevelWardLabel, diagBasisSplit, diagLemmas);
         }
 
+        //诊断文本
+        if (titleText.get(EntityEnum.TITLE_FOR_DIAG.toString()) != null){
+            List<String> diagList = titleText.get(EntityEnum.TITLE_FOR_DIAG.toString());
+            String text = textJoin(content, diagList);
+            //诊断文本
+            threeLevelWardLabel.setDiagText(text);
+        }
+
         //鉴别诊断
         if (titleText.get(EntityEnum.TITLE_FOR_DIFF.toString()) != null) {
             List<String> diffDiagList = titleText.get(EntityEnum.TITLE_FOR_DIFF.toString());

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

@@ -30,6 +30,7 @@ public class ThreeLevelWardLabel {
     List<Diag> diffDiag = new ArrayList<>();   //鉴别诊断
     String diagBasisText;   //诊断依据文本
     String diffDiagText;    //鉴别诊断文本
+    String diagText;    //诊断文本
     List<Diag> diags = new ArrayList<>();   //补充诊断/初步诊断/修正诊断
     String dischargeMode;  //离院方式
     List<TreatmentPlan> treatmentPlans = new ArrayList<>();   //诊疗计划

+ 2 - 2
trans/src/main/java/com/lantone/qc/trans/changx/ChangxThreeLevelWardDocTrans.java

@@ -105,7 +105,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
         String content = structureMap.get("病情记录");
         //标题有代字
         DirectorDoctorWardDoc directorDoctorWardDoc = null;
-        if ((StringUtils.isNotEmpty(subTitle(title)) && title.contains("主任")) || findDirector(title, content)) {
+        if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主任")) || findDirector(title, content)) {
             directorDoctorWardDoc = new DirectorDoctorWardDoc();
             directorDoctorWardDoc.setStructureMap(structureMap);
             directorDoctorWardDoc.setPageData((Map) structureMap);
@@ -123,7 +123,7 @@ public class ChangxThreeLevelWardDocTrans extends ModelDocTrans {
         String content = structureMap.get("病情记录");
         AttendingDoctorWardDoc attendingDoctorWardDoc = null;
         //标题有代字
-        if ((StringUtils.isNotEmpty(subTitle(title)) && title.contains("主治")) || findAttend(title, content)) {
+        if ((StringUtils.isNotEmpty(subTitle(title)) && subTitle(title).contains("主治")) || findAttend(title, content)) {
             attendingDoctorWardDoc = new AttendingDoctorWardDoc();
             attendingDoctorWardDoc.setStructureMap(structureMap);
             attendingDoctorWardDoc.setPageData((Map) structureMap);