瀏覽代碼

Merge remote-tracking branch 'origin/hb/beilun备份' into hb/beilun_20210816

zhanghang 3 年之前
父節點
當前提交
a29493677a
共有 22 個文件被更改,包括 2327 次插入850 次删除
  1. 75 43
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0301.java
  2. 6 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03110.java
  3. 5 1
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI03118.java
  4. 94 30
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03107.java
  5. 154 45
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03111.java
  6. 219 32
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03119.java
  7. 0 70
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03112.java
  8. 0 72
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03114.java
  9. 0 98
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03116.java
  10. 128 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03112.java
  11. 154 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03114.java
  12. 96 13
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03115.java
  13. 206 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03116.java
  14. 184 47
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03117.java
  15. 0 143
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03118.java
  16. 0 91
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03119.java
  17. 155 55
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03120.java
  18. 119 70
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03121.java
  19. 134 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03122.java
  20. 255 0
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03123.java
  21. 82 26
      kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR3113.java
  22. 261 13
      public/src/main/java/com/lantone/qc/pub/Content.java

+ 75 - 43
kernel/src/main/java/com/lantone/qc/kernel/catalogue/clinicalblood/CLI0301.java

@@ -1,17 +1,14 @@
-
 package com.lantone.qc.kernel.catalogue.clinicalblood;
-
 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.ClinicalBloodDoc;
-import com.lantone.qc.pub.model.doc.InformedConsentDoc;
+import com.lantone.qc.pub.model.doc.*;
 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;
 import java.util.Objects;
 
 /**
@@ -24,49 +21,84 @@ import java.util.Objects;
 public class CLI0301 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
+        boolean flag=false;
         List<ClinicalBloodDoc> clinicalBloodDocs = inputInfo.getClinicalBloodDocs();
-        if (ListUtil.isEmpty(clinicalBloodDocs)) {
-            return;
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        /**
+         *是否输血了
+         */
+        //输血记录
+        if(ListUtil.isNotEmpty(clinicalBloodDocs)){
+            flag=true;
         }
-        long cou = inputInfo.getClinicalBloodDocs().stream().map(ClinicalBloodDoc::getStructureMap).filter(Objects::nonNull).count();
-        long count = 0L;
-        List<InformedConsentDoc> informedConsentDocList = inputInfo.getInformedConsentDoc();
-
-        count = informedConsentDocList.stream().filter(
-                informedConsentDoc -> {
-                    boolean flag = false;
-                    if (informedConsentDoc.getStructureMap() != null
-                            && StringUtil.isBlank(informedConsentDoc.getStructureMap().get("标题"))
-                            && Content.BLOODRECORDLIST.contains(informedConsentDoc.getStructureMap().get("标题"))) {
-                        flag = true;
+        //医嘱
+        if(ListUtil.isNotEmpty(doctorAdviceDocs)){
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                Map<String, String> doctorAdviceDocStrMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStrMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        //取临时医嘱
+                        String doctorAsks = doctorAdviceDocStrMap.get(Content.doctorAdviceType);
+                        if (StringUtil.isEmpty(doctorAsks)) {
+                            continue;
+                        }
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            String daItemName = doctorAdviceDocStrMap.get(Content.medicalOrderName);
+                                if(StringUtil.isNotEmpty(daItemName)) {
+                                    if (dateStr(daItemName)) {
+                                        flag = true;
+                                        break;
+                                    }
+                                }
+                        }
                     }
-                    return flag;
                 }
-        ).count();
-
-//        if(informedConsentDoc != null){
-//            int length = 1;
-//            Map<String, String> structureMap = informedConsentDoc.getStructureMap();
-//            for (String str : Content.BLOODRECORDLIST) {
-//                if(structureMap.containsKey(str)){
-//                    String recStr = structureMap.get(str);
-//                    if(StringUtils.isNotEmpty(recStr)){
-//                        if(recStr.contains("},")){
-//                             length = recStr.split("},").length;
-//                        }
-//                        if(length==1){
-//                            count++;
-//                        }else{
-//                            count = count + length;
-//                        }
-//
-//                    }
-//
-//                }
-//            }
-//        }
-        if (count == 0L || (cou != count && cou > count)) {
+            }
+        }
+//判断是否含有知情同意书
+        if(flag) {
             status.set("-1");
+            List<InformedConsentDoc> informedConsentDocList = inputInfo.getInformedConsentDoc();
+            if (ListUtil.isNotEmpty(informedConsentDocList)) {
+                for (InformedConsentDoc informedConsentDoc : informedConsentDocList) {
+                    String str = informedConsentDoc.getStructureMap().get("标题");
+                    if(Content.BLOODRECORDLIST.contains(str)){
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean dateStr(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        String rex1="[\\s\\S]*(?=输)[\\s\\S]{0,5}(?=血)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=输)[\\s\\S]{0,5}(?=红细胞)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=输)[\\s\\S]{0,5}(?=血小板)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=输)[\\s\\S]{0,5}(?=血浆)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=输)[\\s\\S]{0,5}(?=冷沉淀因子)[\\s\\S]*";
+        if( str.matches(rex1)|| str.matches(rex2) || str.matches(rex3)|| str.matches(rex4)|| str.matches(rex5)){
+            return true;
         }
+        return false;
     }
 }

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

@@ -5,10 +5,14 @@ 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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
 import com.lantone.qc.pub.util.DateUtil;
+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;
 
 /**
@@ -22,7 +26,8 @@ public class FIRP03110 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc!=null) {
             Map<String, String> firstPageRecordMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
             String admisDate = firstPageRecordMap.get(Content.dischargeTime);
             String recordTime = firstPageRecordMap.get("创建时间");

+ 5 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/medicalwriting/MEDI03118.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.InformedConsentDoc;
 import com.lantone.qc.pub.util.StringUtil;
+import com.lantone.qc.security.util.ListUtil;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
@@ -20,7 +21,10 @@ public class MEDI03118 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
         List<InformedConsentDoc> informedConsentDocList = inputInfo.getInformedConsentDoc();
-        if (informedConsentDocList == null || informedConsentDocList.size() == 0) {
+        if(ListUtil.isEmpty(informedConsentDocList)){
+            return;
+        }
+        if (informedConsentDocList.size() == 0) {
             return;
         }
 

+ 94 - 30
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03107.java

@@ -6,12 +6,17 @@ 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.operation.*;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 import java.text.ParseException;
 import java.util.*;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @Description: 手术记录次数与手术次数不一致
@@ -24,42 +29,101 @@ public class OPE03107 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
-        long cou = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationRecordDoc).filter(Objects::nonNull).count();
-        //先从病案首页判断手术次数
-        Map<String, Object> structureExtMap = new HashMap<>();
-        if(inputInfo.getFirstPageRecordDoc()!=null){
-            structureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
-        }
-        if(MapUtils.isNotEmpty(structureExtMap) && structureExtMap.get("手术信息") != null && StringUtils.isNotEmpty(structureExtMap.get("手术信息").toString())){
-            String objs = structureExtMap.get("手术信息").toString();
-            List<Map<String,String>> operation = (List<Map<String,String>>) JSONArray.parse(objs);
-            if (operation.size()!=cou) {
-                status.set("-1");
-                return;
+        int opeCount=0;
+        int opePreCount=0;
+        int opeThrCount=0;
+        int opeRecordCount=0;
+        int opeDisCount=0;
+        int opeFormCount=0;
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        List<String> listTime = new ArrayList<>();
+        //手术记录次数
+        if(ListUtil.isNotEmpty(operationDocs)){
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                //手术记录次数
+                if(operationRecordDoc!=null){
+                    opeRecordCount++;
+                }else {
+                    return;
+                }
+                //术前讨论,小结次数
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = operationDoc.getPreoperativeDiscussionDoc();
+                if(preoperativeDiscussionDoc!=null){
+                    opePreCount++;
+                }
+                //术后首程次数
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if(operationDiscussionDoc!=null){
+                    opeDisCount++;
+                }
+                //知情同意书次数
+                OperationInformedConsentDoc operationInformedConsentDoc = operationDoc.getOperationInformedConsentDoc();
+                if(operationInformedConsentDoc!=null){
+                    opeFormCount++;
+                }
             }
+        }else {
             return;
         }
-
-        //无病案首页则从医嘱里判断手术次数
-        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-        if (doctorAdviceDocs.size() == 0) {
-            return;
+        //医嘱判断手术
+        if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> dadStructureMap = dad.getStructureMap();
+                String daStatus = dadStructureMap.get(Content.doctorAdviceState);
+                String adviceType = dadStructureMap.get(Content.doctorAdviceType);
+                //取临时医嘱
+                if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
+                    if (StringUtil.isNotEmpty(daStatus)) {
+                        if (!Content.cancellationOrderList.contains(daStatus)) {
+                            String name = dadStructureMap.get("医嘱处方类型");
+                            List<String> operationList = Content.operationList;
+                            if (StringUtil.isNotEmpty(name)) {
+                                if (operationList.contains(name)) {
+                                    String daName = dadStructureMap.get(Content.medicalOrderName);
+                                    Pattern p = Pattern.compile("[0-9]{1,2}[.|\\-|/][0-9]{1,2}日[0-9]{1,2}[:|\\-|/][0-9]{1,2}");
+                                    Matcher matcher = p.matcher(daName);
+                                    if (matcher.find()) {
+                                        String group = matcher.group(0);
+                                        if (!listTime.contains(group)) {
+                                            listTime.add(group);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
         }
-        long count = 0L;
-        List<String> adviceDocs = new ArrayList<>();
-        for (DoctorAdviceDoc dad : doctorAdviceDocs) {
-            String daPrescriptionType = dad.getStructureMap().get("医嘱处方类型");
-            String adviceType = dad.getStructureMap().get("医嘱类型判别");
-            String da_status = dad.getStructureMap().get("医嘱状态判别");
-            String fileCode = dad.getStructureMap().get("医嘱同组序号");
-            if(StringUtils.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder) && StringUtils.isNotEmpty(daPrescriptionType)  && daPrescriptionType.equals(Content.operationOrder) && (StringUtils.isEmpty(da_status) || (StringUtils.isNotEmpty(da_status) && ! da_status.equals(Content.cancellationOrder)))){
-                if(StringUtils.isNotEmpty(fileCode)){
-                    adviceDocs.add(fileCode);
+        //查房
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        if(ListUtil.isNotEmpty(threeLevelWardDocs)){
+            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+            if(allDoctorWradDocs!=null){
+                for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
+                    String thrName = structureMap.get("查房标题");
+                    if (StringUtil.isNotEmpty(thrName)) {
+                        String substring = thrName.substring(0, 2);
+                        if (substring.equals("术前")){
+                            opeThrCount++;
+                        }
+                    }
                 }
             }
         }
-        count = adviceDocs.stream().distinct().count();
-        if (count!=cou) {
+
+        //获取手术最多的次数
+        opeCount=listTime.size();
+        int max = opeCount>opePreCount?opeCount: opePreCount;
+        max=max>opeThrCount?max:opeThrCount;
+        max=max>opeDisCount?max:opeDisCount;
+        max=max>opeFormCount?max:opeFormCount;
+        if(max==opeRecordCount){
+            return;
+        }else{
             status.set("-1");
             return;
         }

+ 154 - 45
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03111.java

@@ -4,17 +4,19 @@ 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.doc.*;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
 import java.text.ParseException;
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : OPE03111
@@ -28,69 +30,176 @@ public class OPE03111 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
-        boolean match = false;
+        boolean blHz = false;
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        if (firstPageRecordDoc == null) {
-            //病案首页为空判断医嘱
-            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            if(ListUtil.isEmpty(doctorAdviceDocs)){
-                return;
-            }
-            if (doctorAdviceDocs.size() == 0) {
-                return;
+        //是否包含手术记录
+        if(operationDocs==null || operationDocs.size()==0){
+            return;
+        }
+        if(operationDocs!=null) {
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                if (operationRecordDoc == null) {
+                   return;
+                }
             }
+        }
+
+        //判断医嘱是否进行了病理检查
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
             for (DoctorAdviceDoc dad : doctorAdviceDocs) {
                 Map<String, String> dadStructureMap = dad.getStructureMap();
                 String daStatus = dadStructureMap.get(Content.doctorAdviceState);
-                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
-                    String name = dadStructureMap.get(Content.medicalOrderName);
-                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
-                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
-                        continue;
+                String adviceType = dadStructureMap.get(Content.doctorAdviceType);
+                //取临时医嘱
+                if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
+                    if (StringUtil.isNotEmpty(daStatus)) {
+                        if (!Content.cancellationOrderList.contains(daStatus)) {
+                            String name = dadStructureMap.get(Content.medicalOrderName);
+                            if (bLStr(name)) {
+                                blHz = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        //用首页或出院判断是否进行了病理检查
+        if(firstPageRecordDoc!=null){
+            String str = firstPageRecordDoc.getStructureMap().get("病理诊断费");
+            if ( !str.equals("0") && StringUtil.isNotEmpty(str)) {
+                double a = Double.parseDouble(str);
+                if ( a > Content.pathologicalFee) {
+                    blHz=true;
+                }
+            }
+        }
+        //判断手术记录有无标本记录
+        if(blHz) {
+            status.set("-1");
+            if (operationDocs != null ) {
+                //有手术记录的情况下,手术记录中应该出现体现有标本
+                for (OperationDoc operationDoc : operationDocs) {
+                    String specimens = operationDoc.getOperationRecordDoc().getStructureMap().get("术中取病理标本");
+                    if(StringUtil.isNotEmpty(specimens)){
+                        if(specimens.equals("有")){
+                            status.set("0");
+                            return;
+                        }
+                        if(specimens.equals("无")){
+                            status.set("0");
+                            return;
+                        }
                     }
-                    if (name.contains("手术")) {
-                        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                            String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
-                            if (adviceDocName.contains(Content.pathological)) {
-                                status.set("-1");
-                                match =true;
+                    OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                    if (operationRecordDoc != null) {
+                        String str = operationRecordDoc.getStructureMap().get("手术经过及处理");
+                        if (StringUtil.isNotEmpty(str)) {
+                            if (dateStr(str)) {
+                                status.set("0");
+                                return;
                             }
                         }
                     }
                 }
             }
         }
-        if (firstPageRecordDoc != null) {
-            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
-            String pathologyMoneyStr = structureMap.get(Content.pathologyFee);
-            String operationMoneyStr = structureMap.get(Content.operationFee);
-            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
-                return;
+
+    }
+
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        boolean flag=false;
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=流式)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=穿透)[\\s\\S]{0,10}(?=层)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=癌)[\\s\\S]{0,10}(?=浸润)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=分化)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=淋巴结)[\\s\\S]{0,10}(?=转移)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=浸润性)[\\s\\S]{0,10}(?=癌)[\\s\\S]*";
+        String rex6="[\\s\\S]*(?=突破)[\\s\\S]{0,10}(?=层)[\\s\\S]*";
+        List<String> surgeryPathologyList = Content.surgeryPathologyList;
+        for (String surgeryPathology : surgeryPathologyList) {
+            if(str.contains(surgeryPathology)){
+                flag=true;
             }
-            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
-                return;
+        }
+        if(flag || str.matches(rex1)|| str.matches(rex2)
+                ||str.matches(rex3)|| str.matches(rex4)||str.matches(rex5)|| str.matches(rex6)|| str.matches(rex)){
+            return true;
+        }
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
             }
-            double a = Double.parseDouble(pathologyMoneyStr);
-            double b = Double.parseDouble(operationMoneyStr);
-            if (a > Content.pathologicalFee && b > 0) {
-                status.set("-1");
-                match=true;
+        }
+        return false;
+    }
+    private boolean bLStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        List<String> doctorAdvicePathologyList = Content.doctorAdvicePathologyList;
+        for (String doctorAdvicePathology : doctorAdvicePathologyList) {
+            if(str.contains(doctorAdvicePathology)){
+                return true;
             }
         }
-        //判断有无手术记录
-        if(match) {
-            if (operationDocs != null && operationDocs.size() > 0) {
-                //有手术记录的情况下,手术记录中应该出现体现有标本
-                String operationDocsStr = operationDocs.get(0).getOperationRecordDoc().getStructureMap().get(Content.SurgicalProcessTreatment);
-                if (StringUtil.isNotEmpty(operationDocsStr)) {
-                    if (operationDocsStr.contains(Content.specimen)) {
-                        status.set("0");
-                        return;
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    //判断包含冰冻但不属于病理
+    private boolean bdStr(String str) {
+        ArrayList<String> blStrings = new ArrayList<>();
+        String rex1="[\\s\\S]{0,10}(?=冰冻)[\\s\\S]{0,10}";
+        Matcher matcher = Pattern.compile(rex1).matcher(str);
+        while (matcher.find()) {
+            String group = matcher.group();
+            blStrings.add(group);
+        }
+        List<String> notBLList = Content.notBDBLList;
+        if (ListUtil.isNotEmpty(blStrings)) {
+            for (String notBL : notBLList) {
+                for (int i = 0; i < blStrings.size(); i++) {
+                    String cfStr = blStrings.get(i);
+                    if (cfStr.contains(notBL)) {
+                        blStrings.remove(i);
+                        continue;
                     }
                 }
             }
+            if (blStrings.size() > 0) {
+                return true;
+            }
         }
+        return false;
+    }
 
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
     }
 }

+ 219 - 32
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE03119.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.model.doc.ThreeLevelWardDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationInformedConsentDoc;
+import com.lantone.qc.pub.model.doc.*;
+import com.lantone.qc.pub.model.doc.operation.*;
 import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.MapUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.collections.MapUtils;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -15,7 +17,7 @@ import java.text.ParseException;
 import java.util.*;
 
 /**
- * @Description: 使用植入物但手术记录病程记录未记录相关信息
+ * @Description: 使用植入物但手术记录病程记录未记录相关信息
  * @author: cy
  * @time: 2021/05/19 14:45
  */
@@ -25,46 +27,231 @@ public class OPE03119 extends QCCatalogue {
     @Override
     protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
         status.set("0");
-        //先判断有无手术记录
+        //先判断是否进行了手术
+        boolean ssHz=false;
+        boolean zrw=false;
+        boolean cfzrw=false;
+        //是否进行了手术
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-        long operationCount = 0L;
-        if (operationDocs != null && operationDocs.size() > 0) {
-             operationCount = operationDocs.stream().map(i -> i.getOperationInformedConsentDoc()).filter(i ->StringUtils.isNotEmpty(i.getStructureMap().get("使用植入性材料")) && StringUtils.isNotEmpty(i.getStructureMap().get("型号和数量符合要求")) && "true".equals(i.getStructureMap().get("使用植入性材料")) && "true".equals(i.getStructureMap().get("型号和数量符合要求"))).count();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> structureMap = dad.getStructureMap();
+                String daStatus = structureMap.get(Content.doctorAdviceState);
+                String adviceType = structureMap.get(Content.doctorAdviceType);
+                //取临时医嘱
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
+                                //是否为手术患者
+                              String nameSs = structureMap.get("医嘱处方类型");
+                              if(StringUtil.isNotEmpty(nameSs)) {
+                                  List<String> operationList = Content.operationList;
+                                  if (operationList.contains(nameSs)) {
+                                      //手术患者
+                                      ssHz = true;
+                                      break;
+                                  }
+                              }
+                        }
+                    }
+                }
+            }
+        }
+        //是否有手术记录
+        if(operationDocs!=null){
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                if (operationRecordDoc != null) {
+                    ssHz = true;
+                }
+            }
         }
-        Boolean flag = false;
-        Boolean modelFlag = false;
-        Boolean numFlag = false;
-        List<ThreeLevelWardDoc> threeLevelWardDocList = inputInfo.getThreeLevelWardDocs();
-        if (ListUtil.isNotEmpty(threeLevelWardDocList)) {
-            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocList.get(0).getAllDoctorWradDocs();
-            for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
-                String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
-                //判断病程记录是否记录植入物
-                    for (String plant : Content.IMPLANTSLIST) {
-                        if (illness.contains(plant)) {
-                            flag = true;
+        /**********手术是否使用了植入物**/
+        //查房
+        if (ListUtil.isNotEmpty(threeLevelWardDocs) && ssHz) {
+            ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
+            //所有查房记录
+            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+            if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    String pathographyStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                    if (StringUtil.isNotEmpty(pathographyStr)) {
+                        if (zrwStr(pathographyStr)) {
+                            zrw=true;
                             break;
                         }
                     }
-
-                    for (String model : Content.MODELIST) {
-                        if(illness.contains(model)){
-                            modelFlag = true;
-                            break;
+                }
+            }
+        }
+        //手术记录
+        if(ListUtil.isNotEmpty(operationDocs) && ssHz){
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                if(operationRecordDoc!=null){
+                    String key = getKeyByHospitalId();
+                    String str = operationRecordDoc.getStructureMap().get(key);
+                    if(StringUtil.isNotEmpty(str)){
+                        if(str.contains("提醒")){
+                            String clStr = clStr(str);
+                            if(StringUtil.isNotEmpty(clStr)){
+                                if(zrwStr(clStr)){
+                                    zrw=true;
+                                    break;
+                                }
+                            }
+                        }else {
+                            if(zrwStr(str)){
+                                zrw=true;
+                                break;
+                            }
                         }
                     }
-
-                    for (String number : Content.NUMBERLIST) {
-                        if(illness.contains(number)){
-                            numFlag = true;
+                }
+                OperationInformedConsentDoc operationInformedConsentDoc = operationDoc.getOperationInformedConsentDoc();
+                if(operationInformedConsentDoc!=null){
+                    String str = operationInformedConsentDoc.getStructureMap().get("使用植入性材料");
+                    if(StringUtil.isNotEmpty(str)) {
+                        if (str.equals("true")) {
+                            zrw = true;
                             break;
                         }
                     }
-                 }
+                }
+            }
+        }
+        List<InformedConsentDoc> informedConsentDoc = inputInfo.getInformedConsentDoc();
+        //知情同意书
+        if (ListUtil.isNotEmpty(informedConsentDoc)) {
+            for (InformedConsentDoc consentDoc : informedConsentDoc) {
+                if ("手术植入材料收费知情同意书".equals(consentDoc.getStructureMap().get("标题"))) {
+                    zrw = true;
+                    break;
+                }
             }
-        if(operationCount <= 0 && flag == false && modelFlag == false  && numFlag == false){
+        }
+
+        /****病程记录和手术记录***/
+        if(zrw&&ssHz){
             status.set("-1");
-            return;
+            //查房
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
+                //所有查房记录
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                        String pathographyStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                        if (StringUtil.isNotEmpty(pathographyStr)) {
+                            if (zrwStr(pathographyStr)) {
+                                cfzrw=true;
+                            }
+                        }
+                    }
+                }
+            }
+            //手术记录
+            if(ListUtil.isNotEmpty(operationDocs) && cfzrw){
+                for (OperationDoc operationDoc : operationDocs) {
+                    OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                    if(operationRecordDoc!=null){
+                        String key = getKeyByHospitalId();
+                        String str = operationRecordDoc.getStructureMap().get(key);
+                        if(StringUtil.isNotEmpty(str)){
+                            if(str.contains("提醒")){
+                                String clStr = clStr(str);
+                                if(StringUtil.isNotEmpty(clStr)){
+                                    if(zrwStr(clStr)){
+                                            status.set("0");
+                                            return;
+                                    }
+                                }
+                            }else {
+                                if(zrwStr(str)){
+                                        status.set("0");
+                                        return;
+                                }
+                            }
+                        }
+                        String strzr = operationRecordDoc.getStructureMap().get("植入物名称");
+                        if(StringUtil.isNotEmpty(strzr)){
+                            if(zrwStr(str)){
+                                status.set("0");
+                                return;
+                            }
+                        }
+                    }
+                    OperationInformedConsentDoc operationInformedConsentDoc = operationDoc.getOperationInformedConsentDoc();
+                    if(operationInformedConsentDoc!=null){
+                        String str = operationInformedConsentDoc.getStructureMap().get("使用植入性材料");
+                        if(StringUtil.isNotEmpty(str)) {
+                            if (str.equals("true")) {
+                                status.set("0");
+                                return;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+    //植入物
+    private boolean zrwStr(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        boolean flag=false;
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        String rex1="[\\s\\S]*(?=人工)[\\s\\S]{0,10}(?=体)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=人工)[\\s\\S]{0,10}(?=关节)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=生物)[\\s\\S]{0,5}(?=膜)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=机械)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=起搏)[\\s\\S]{0,6}(?=器)[\\s\\S]*";
+        String rex6="[\\s\\S]*(?=粒子)[\\s\\S]{0,5}(?=植入)[\\s\\S]*";
+        //植入物集合
+        List<String> theImplantsList = Content.theImplantsList;
+        for (String theImplants : theImplantsList) {
+            if(str.contains(theImplants)){
+                flag=true;
+            }
+        }
+        if(flag || str.matches(rex1)|| str.matches(rex2)|| str.matches(rex3)|| str.matches(rex4)|| str.matches(rex5)|| str.matches(rex6)){
+            return true;
+        }
+        return false;
+    }
+
+    //处理手术记录中含特殊话语情况
+    private String clStr(String str){
+        String newStr="";
+        if(str.contains("提醒")){
+            int i = str.indexOf("提醒");
+            newStr = str.substring(0,i);
+        }
+        return newStr;
+    }
+    private String getKeyByHospitalId() {
+        switch (Content.hospital_Id)
+        {
+            case "3":
+                return "手术经过";
+            default:
+                return "手术经过及处理";
         }
     }
 }

+ 0 - 70
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03112.java

@@ -1,70 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.PacsDoc;
-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 : THE03112
- * @Description :  医嘱存在MR,报告单未记录
- * @Author : zh
- * @Date: 2021-04-06 17:06
- */
-@Component
-public class THE03112 extends QCCatalogue {
-    @Override
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        int ctNum = 0;
-        int bcNum = 0;
-        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
-        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
-            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
-                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
-                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
-                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
-                    //ct取临时医嘱
-                    String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
-                    if (StringUtil.isNotEmpty(doctorAsks)) {
-                        if (Content.statOrder.equals(doctorAsks)) {
-                            //取医嘱项目名称
-                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
-                            if (daItemName.contains("磁共振") || daItemName.contains("MR")) {
-                                if (!daItemName.contains("IMRT") && !daItemName.contains("mrs评分")) {
-                                    ctNum++;
-                                    continue;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
-            if(ListUtil.isNotEmpty(pacsDocs)){
-                if(pacsDocs.size()>0) {
-                    for (PacsDoc pacsDoc : pacsDocs) {
-                        String pacsDocStr = pacsDoc.getStructureMap().get(Content.reportName);
-                        if (StringUtil.isNotEmpty(pacsDocStr) ) {
-                            if( pacsDocStr.contains("MR")||pacsDocStr.contains("磁共振")) {
-                                bcNum++;
-                                continue;
-                            }
-                        }
-                    }
-                }
-            }
-            if ((ctNum != bcNum)&&(ctNum>bcNum)) {
-                status.set("-1");
-            }
-        }
-    }
-}

+ 0 - 72
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03114.java

@@ -1,72 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.PacsDoc;
-import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
-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 : THE03114
- * @Description :接受CT情况下报告单缺少CT报告
- * @Author : zh
- * @Date: 2021-04-06 17:06
- */
-@Component
-public class THE03114 extends QCCatalogue {
-    @Override
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        int ctNum = 0;
-        int bcNum = 0;
-        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
-        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
-            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
-                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
-                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
-                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
-                    //ct取临时医嘱
-                    String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
-                    if (StringUtil.isNotEmpty(doctorAsks)) {
-                        if (Content.statOrder.equals(doctorAsks)) {
-                            //取医嘱项目名称
-                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
-                            if (daItemName.contains("CT") || daItemName.contains("X线")) {
-                                if ((!daItemName.contains("ATCH") && !daItemName.contains("TCT") && !daItemName.contains("HCT") && !daItemName.contains("OCT") && !daItemName.contains("NCT") && !daItemName.contains("LCT") && !daItemName.contains("ACT")) || (daItemName.contains("停"))) {
-                                    //都不包含为CT
-                                    ctNum++;
-                                    continue;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
-            if(ListUtil.isNotEmpty(pacsDocs)){
-                if(pacsDocs.size()>0) {
-                    for (PacsDoc pacsDoc : pacsDocs) {
-                        String pacsDocStr = pacsDoc.getStructureMap().get(Content.reportName);
-                        if (StringUtil.isNotEmpty(pacsDocStr) ) {
-                            if( pacsDocStr.contains("CT")||pacsDocStr.contains("X线")) {
-                                bcNum++;
-                            }
-                        }
-                    }
-                }
-            }
-            if ((ctNum != bcNum)&&(ctNum>bcNum)) {
-                status.set("-1");
-            }
-
-        }
-    }
-}

+ 0 - 98
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THE03116.java

@@ -1,98 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-import com.google.common.collect.Maps;
-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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.LisDoc;
-import com.lantone.qc.pub.model.doc.PacsDoc;
-import com.lantone.qc.pub.util.ListUtil;
-import com.lantone.qc.pub.util.StringUtil;
-import org.springframework.stereotype.Component;
-
-import java.text.ParseException;
-import java.util.List;
-import java.util.Map;
-
-/**
- * @ClassName : THE03116
- * @Description: 病理检查缺少病理检查报告单
- * @author: zh
- * @time: 2021/04/06 11:22
- */
-
-@Component
-public class THE03116 extends QCCatalogue {
-    @Override
-    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
-        status.set("0");
-        boolean match = false;
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
-        if (firstPageRecordDoc == null) {
-            //病案首页为空判断医嘱
-            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            if (ListUtil.isEmpty(doctorAdviceDocs)) {
-                return;
-            }
-            if (doctorAdviceDocs.size() == 0) {
-                return;
-            }
-            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
-                Map<String, String> structureMap = dad.getStructureMap();
-                String daStatus = structureMap.get(Content.doctorAdviceState);
-                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
-                    String name = structureMap.get(Content.medicalOrderName);
-                    if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
-                            || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
-                        continue;
-                    }
-                    if (name.contains("手术")) {
-                        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                            String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
-                            if (adviceDocName.contains(Content.pathological)) {
-                                status.set("-1");
-                                match = true;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-        if (firstPageRecordDoc != null) {
-            Map<String, String> firstPageRecordDocStructureMap = firstPageRecordDoc.getStructureMap();
-            String pathologyMoneyStr = firstPageRecordDocStructureMap.get(Content.pathologyFee);
-            String operationMoneyStr = firstPageRecordDocStructureMap.get(Content.operationFee);
-            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
-                return;
-            }
-            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
-                return;
-            }
-            double a = Double.parseDouble(pathologyMoneyStr);
-            double b = Double.parseDouble(operationMoneyStr);
-            if (a > Content.pathologicalFee && b > 0) {
-                status.set("-1");
-                match = true;
-            }
-        }
-        if (match) {
-            if (ListUtil.isNotEmpty(pacsDocs)) {
-                for (PacsDoc pacsDoc : pacsDocs) {
-                    Map<String, String> pacsDocStructureMap = pacsDoc.getStructureMap();
-                    String pacsDocStr = pacsDocStructureMap.get(Content.reportName);
-                    if (StringUtil.isNotEmpty(pacsDocStr)) {
-                        if (pacsDocStr.contains(Content.pathological)) {
-                            status.set("0");
-                            return;
-                        }
-                    }
-                }
-            }
-        }
-    }
-
-}

+ 128 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03112.java

@@ -0,0 +1,128 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THE03112
+ * @Description :  医嘱存在MR,报告单未记录
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THR03112 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean flag = false;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        //ct取临时医嘱
+                        String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            //取医嘱项目名称
+                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                            String nameSs = doctorAdviceDocStructureMap.get("医嘱处方类型");
+                            if (StringUtil.isNotEmpty(daItemName) && StringUtil.isNotEmpty(nameSs)) {
+                                if (dateStr(daItemName) && nameSs.equals("检查")) {
+                                    flag = true;
+                                    status.set("-1");
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if(flag) {
+            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+            if (ListUtil.isNotEmpty(pacsDocs)) {
+                for (PacsDoc pacsDoc : pacsDocs) {
+                    Map<String, String> structureMap = pacsDoc.getStructureMap();
+                    String str = structureMap.get("检查所见");
+                    String str1 = structureMap.get("临床诊断");
+                    String str2 = structureMap.get("报告名称");
+                    String str3 = structureMap.get("观察记录");
+                    String str4 = structureMap.get("检查结果诊断");
+                    if (dateStrBg(str) || dateStrBg(str1) || dateStrBg(str2) || dateStrBg(str3) || dateStrBg(str4)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean dateStr(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        if (str.contains("MR") || str.contains("磁共振")||str.contains("核磁")) {
+            List<String> notMRList = Content.notMRList;
+            for (String list : notMRList) {
+                if(!str.contains(list)){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    private boolean dateStrBg(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        boolean MrCf=false;
+        boolean jsj=false;
+        ArrayList<String> cfStrings = new ArrayList<>();
+        String rex2="[\\s\\S]{0,5}(?=MR)[\\s\\S]{1,10}";
+        //需要判断同时存在MR和MRS等情况的发生
+        if(str.contains("MR")) {
+            Matcher matcher = Pattern.compile(rex2).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                cfStrings.add(group);
+            }
+            List<String> notMRList = Content.notMRList;
+            if (ListUtil.isNotEmpty(cfStrings)) {
+                for (String notCT : notMRList) {
+                    for (int i = 0; i < cfStrings.size(); i++) {
+                        String cfStr = cfStrings.get(i);
+                        if(cfStr.contains(notCT)){
+                            cfStrings.remove(i);
+                            continue;
+                        }
+                    }
+                }
+                if(cfStrings.size()>0){
+                    MrCf=true;
+                }
+            }
+
+        }
+        if ( str.contains("磁共振")||str.contains("核磁")) {
+            jsj= true;
+        }
+        if(jsj||MrCf){
+            return true;
+        }
+        return false;
+    }
+}

+ 154 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03114.java

@@ -0,0 +1,154 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THE03114
+ * @Description :医嘱存在CT,无CT检查报告单
+ * @Author : zh
+ * @Date: 2021-04-06 17:06
+ */
+@Component
+public class THR03114 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean flag = false;
+        List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
+        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
+                Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        //ct取临时医嘱
+                        String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            //取医嘱项目名称
+                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                            String nameSs = doctorAdviceDocStructureMap.get("医嘱处方类型");
+                            if (StringUtil.isNotEmpty(daItemName)&&StringUtil.isNotEmpty(nameSs)) {
+                                if (dateStr(daItemName)&&(nameSs.equals("检查")||nameSs.equals("LAB"))) {
+                                    flag = true;
+                                    status.set("-1");
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        if(flag) {
+            List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+            if (ListUtil.isNotEmpty(pacsDocs)) {
+                for (PacsDoc pacsDoc : pacsDocs) {
+                    Map<String, String> structureMap = pacsDoc.getStructureMap();
+                    String str = structureMap.get("检查所见");
+                    String str1 = structureMap.get("临床诊断");
+                    String str2 = structureMap.get("报告名称");
+                    String str3 = structureMap.get("观察记录");
+                    String str4 = structureMap.get("检查结果诊断");
+                    if (dateStrBg(str) || dateStrBg(str1) || dateStrBg(str2) || dateStrBg(str3) || dateStrBg(str4)) {
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=线断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=计算机)[\\s\\S]{0,10}(?=断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        if (str.contains("CT") || str.matches(rex)||str.matches(rex1)) {
+            List<String> notCTList = Content.notCTList;
+            for (String list : notCTList) {
+                if(!str.contains(list)){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+
+    private boolean dateStrBg(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        boolean ctCf=false;
+        boolean jsj=false;
+        ArrayList<String> cfStrings = new ArrayList<>();
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=线断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=计算机)[\\s\\S]{0,10}(?=断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex2="[\\s\\S]{0,5}(?=CT)[\\s\\S]{1,10}";
+        //需要判断同时存在mr和IMRT等情况的发生
+        if(str.contains("CT")) {
+            Matcher matcher = Pattern.compile(rex2).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                cfStrings.add(group);
+            }
+            List<String> notCTList = Content.notCTList;
+            if (ListUtil.isNotEmpty(cfStrings)) {
+                for (String notCT : notCTList) {
+                    for (int i = 0; i < cfStrings.size(); i++) {
+                        String cfStr = cfStrings.get(i);
+                        if(cfStr.contains(notCT)){
+                            cfStrings.remove(i);
+                            continue;
+                        }
+                    }
+                }
+                if(cfStrings.size()>0){
+                    ctCf=true;
+                }
+            }
+
+        }
+        if ( str.matches(rex)||str.matches(rex1)) {
+            jsj= true;
+        }
+        if(jsj||ctCf){
+            return true;
+        }
+        return false;
+    }
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
+
+}

+ 96 - 13
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03115.java

@@ -11,8 +11,11 @@ import com.lantone.qc.pub.util.MapUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : THR03115
@@ -25,29 +28,32 @@ public class THR03115 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        int ctNum=0;
-        int bcNum=0;
+        boolean flag=false;
         List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
         if(ListUtil.isNotEmpty(doctorAdviceDocsList)) {
             for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
                 Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
                 String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
-                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
                     //ct取临时医嘱
                     String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
                     if (Content.statOrder.equals(doctorAsks)) {
                         //取医嘱项目名称
                         String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
-                        if (daItemName.contains("CT") || daItemName.contains("X线")) {
-                            if ((!daItemName.contains("ATCH") && !daItemName.contains("TCT") && !daItemName.contains("HCT") && !daItemName.contains("OCT") && !daItemName.contains("NCT") && !daItemName.contains("LCT") && !daItemName.contains("ACT")) || (daItemName.contains("停"))) {
-                                //都不包含为CT
-                                ctNum++;
-                                continue;
-                            }
+                        String nameSs = doctorAdviceDocStructureMap.get("医嘱处方类型");
+                        if (StringUtil.isNotEmpty(daItemName) && StringUtil.isNotEmpty(nameSs)) {
+                                if (dateStr(daItemName) && (nameSs.equals("检查")||nameSs.equals("LAB"))) {
+                                    flag = true;
+                                    status.set("-1");
+                                }
                         }
                     }
+                    }
                 }
             }
+        }
+        if(flag) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
                 List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
@@ -56,17 +62,94 @@ public class THR03115 extends QCCatalogue {
                         Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
                         String records = structureMap.get(Content.illnessRecords);
                         if (StringUtil.isNotEmpty(records)) {
-                            if (records.contains("CT") || records.contains("X线")) {
-                                bcNum++;
+                            if (dateStrCf(records)) {
+                                status.set("0");
+                                return;
                             }
                         }
                     }
                 }
             }
-            if((ctNum != bcNum)&&(ctNum>bcNum)){
-                status.set("-1");
+        }
+    }
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=线断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=计算机)[\\s\\S]{0,10}(?=断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        if (str.contains("CT") || str.matches(rex)||str.matches(rex1)) {
+            if(str.contains("CT")){
+                List<String> notCTList = Content.notCTList;
+                for (String list : notCTList) {
+                    if(str.contains(list)){
+                        return false;
+                    }
+                }
             }
+            return true;
         }
+        return false;
     }
 
+    private boolean dateStrCf(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        boolean ctCf=false;
+        boolean jsj=false;
+        ArrayList<String> cfStrings = new ArrayList<>();
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=线断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=计算机)[\\s\\S]{0,10}(?=断层)[\\s\\S]{0,10}(?=扫)[\\s\\S]*";
+        String rex2="[\\s\\S]{0,5}(?=CT)[\\s\\S]{0,10}";
+        //需要判断同时存在CT和OCT等情况的发生
+        if(str.contains("CT")) {
+            Matcher matcher = Pattern.compile(rex2).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                cfStrings.add(group);
+            }
+            List<String> notCTList = Content.notCTList;
+              if (ListUtil.isNotEmpty(cfStrings)) {
+                  for (String notCT : notCTList) {
+                      for (int i = 0; i < cfStrings.size(); i++) {
+                          String cfStr = cfStrings.get(i);
+                          if(cfStr.contains(notCT)){
+                              cfStrings.remove(i);
+                              continue;
+                          }
+                      }
+                  }
+                  if(cfStrings.size()>0){
+                      ctCf=true;
+                  }
+            }
+        }
+        if ( str.matches(rex)||str.matches(rex1)) {
+            jsj= true;
+        }
+        if(jsj||ctCf){
+            return true;
+        }
+        return false;
+    }
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
 }

+ 206 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03116.java

@@ -0,0 +1,206 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+import com.google.common.collect.Maps;
+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.*;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.ParseException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THE03116
+ * @Description: 病理检查缺少病理检查报告单
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+
+@Component
+public class THR03116 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
+        status.set("0");
+        boolean flag = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        //去医嘱
+        if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                Map<String, String> dadStructureMap = dad.getStructureMap();
+                String daStatus = dadStructureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        String adviceType = dadStructureMap.get(Content.doctorAdviceType);
+                        //取临时医嘱
+                        if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
+                            String name = dadStructureMap.get(Content.medicalOrderName);
+                            if (exStr(name)) {
+                                flag = true;
+                                break;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+        //用首页判断是否进行了病理检查
+        if(firstPageRecordDoc!=null){
+            String str = firstPageRecordDoc.getStructureMap().get("病理诊断费");
+            if ( !str.equals("0") && StringUtil.isNotEmpty(str)) {
+                double a = Double.parseDouble(str);
+                if ( a > Content.pathologicalFee) {
+                    flag=true;
+                }
+            }
+        }
+        //手术记录
+        if(ListUtil.isNotEmpty(operationDocs)){
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                if(operationRecordDoc!=null) {
+                    String str = operationRecordDoc.getStructureMap().get("手术经过及处理");
+                    if (StringUtil.isNotEmpty(str)) {
+                        if (ssBlStr(str)) {
+                            flag = true;
+                        }
+                    }
+                }
+            }
+        }
+        if (flag) {
+            status.set("-1");
+            if (ListUtil.isNotEmpty(pacsDocs)) {
+                for (PacsDoc pacsDoc : pacsDocs) {
+                    Map<String, String> structureMap = pacsDoc.getStructureMap();
+                    String str = structureMap.get("检查所见");
+                    String str1 = structureMap.get("临床诊断");
+                    String str2 = structureMap.get("报告名称");
+                    String str3 = structureMap.get("观察记录");
+                    String str4 = structureMap.get("检查结果诊断");
+                    if(dateStr(str)||dateStr(str1)||dateStr(str2)||dateStr(str3)||dateStr(str4)){
+                        status.set("0");
+                        return;
+                    }
+                }
+            }
+        }
+    }
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        boolean flag=false;
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=流式)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=穿透)[\\s\\S]{0,7}(?=层)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=癌)[\\s\\S]{0,7}(?=浸润)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=分化)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=淋巴结)[\\s\\S]{0,7}(?=转移)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=浸润性)[\\s\\S]{0,7}(?=癌)[\\s\\S]*";
+        String rex6="[\\s\\S]*(?=突破)[\\s\\S]{0,7}(?=层)[\\s\\S]*";
+        List<String> reportCardPathologyList = Content.reportCardPathologyList;
+        for (String reportCardPathology : reportCardPathologyList) {
+            if(string.contains(reportCardPathology)){
+                flag=true;
+            }
+        }
+        if(flag || str.matches(rex1)|| str.matches(rex2)
+                ||str.matches(rex3)|| str.matches(rex4)||str.matches(rex5)|| str.matches(rex6)|| str.matches(rex)){
+            return true;
+        }
+        return false;
+    }
+    private boolean ssBlStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        List<String> surgeryPathologyTwoList = Content.surgeryPathologyTwoList;
+        for (String surgeryPathologyTwo : surgeryPathologyTwoList) {
+            if(string.contains(surgeryPathologyTwo)){
+                return true;
+            }
+        }
+        String str = Str(string);
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    private boolean exStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        List<String> doctorAdvicePathologyList = Content.doctorAdvicePathologyList;
+        for (String doctorAdvicePathology : doctorAdvicePathologyList) {
+            if(string.contains(doctorAdvicePathology)){
+                return true;
+            }
+        }
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
+    //判断包含冰冻但不属于病理
+    private boolean bdStr(String str) {
+        ArrayList<String> blStrings = new ArrayList<>();
+        String rex1="[\\s\\S]{0,10}(?=冰冻)[\\s\\S]{0,10}";
+        Matcher matcher = Pattern.compile(rex1).matcher(str);
+        while (matcher.find()) {
+            String group = matcher.group();
+            blStrings.add(group);
+        }
+        List<String> notBLList = Content.notBDBLList;
+        if (ListUtil.isNotEmpty(blStrings)) {
+            for (String notBL : notBLList) {
+                for (int i = 0; i < blStrings.size(); i++) {
+                    String cfStr = blStrings.get(i);
+                    if (cfStr.contains(notBL)) {
+                        blStrings.remove(i);
+                        continue;
+                    }
+                }
+            }
+            if (blStrings.size() > 0) {
+                return true;
+            }
+        }
+        return false;
+    }
+}

+ 184 - 47
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03117.java

@@ -4,17 +4,19 @@ 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.PacsDoc;
-import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.*;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import io.netty.util.internal.ObjectUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : THR03117
@@ -27,58 +29,59 @@ public class THR03117 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        boolean match = false;
+        boolean flag = false;
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
         List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
-        if(firstPageRecordDoc==null){
-            //病案首页为空判断医嘱
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        //判断医嘱
             List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            if(ListUtil.isEmpty(doctorAdviceDocs)){
-                return;
-            }
-            if (doctorAdviceDocs.size() == 0) {
-                return;
-            }
-            for (DoctorAdviceDoc dad : doctorAdviceDocs) {
-                Map<String, String> dadStructureMap = dad.getStructureMap();
-                String daStatus = dadStructureMap.get(Content.doctorAdviceState);
-                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
-                String name = dadStructureMap.get(Content.medicalOrderName);
-                if (name.contains("非手术") || name.contains("手术室") || (name.contains("手术") && name.contains("取消")) || (name.contains("暂停") && name.contains("手术")) || name.contains("静脉穿刺置管术") || name.startsWith("停") || name.contains("前一次")
-                        || name.contains("特殊病人手术使用一次性卫生材料") || name.contains("人免疫缺陷病毒抗体检测免费")) {
-                    continue;
-                }
-                if (name.contains("手术")) {
-                    for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                        String adviceDocName = doctorAdviceDoc.getStructureMap().get(Content.medicalOrderName);
-                        if (adviceDocName.contains(Content.pathological)) {
-                            status.set("-1");
-                            //查房记录查找病理报告
-                            match=true;
+            //去医嘱
+            if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+                for (DoctorAdviceDoc dad : doctorAdviceDocs) {
+                    Map<String, String> dadStructureMap = dad.getStructureMap();
+                    String daStatus = dadStructureMap.get(Content.doctorAdviceState);
+                    if (StringUtil.isNotEmpty(daStatus)) {
+                        if (!Content.cancellationOrderList.contains(daStatus)) {
+                            String adviceType = dadStructureMap.get(Content.doctorAdviceType);
+                            //取临时医嘱
+                            if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
+                                String name = dadStructureMap.get(Content.medicalOrderName);
+                                if (exStr(name)) {
+                                    flag = true;
+                                    break;
+                                }
+                            }
                         }
                     }
-                    }
                 }
             }
-        }
-        if(firstPageRecordDoc!=null) {
-            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
-            String pathologyMoneyStr = structureMap.get(Content.pathologyFee);
-            String operationMoneyStr = structureMap.get(Content.operationFee);
-            if (StringUtil.isEmpty(pathologyMoneyStr) || StringUtil.isEmpty(operationMoneyStr)) {
-                return;
-            }
-            if ((pathologyMoneyStr.equals("0") || operationMoneyStr.equals("0"))) {
-                return;
+        //用首页判断是否进行了病理检查
+        if(firstPageRecordDoc!=null){
+            String str = firstPageRecordDoc.getStructureMap().get("病理诊断费");
+            if ( !str.equals("0") && StringUtil.isNotEmpty(str)) {
+                double a = Double.parseDouble(str);
+                if (  a > Content.pathologicalFee) {
+                    flag=true;
+                }
             }
-            double a = Double.parseDouble(pathologyMoneyStr);
-            double b = Double.parseDouble(operationMoneyStr);
-            if (a > Content.pathologicalFee && b > 0) {
-                status.set("-1");
-                match=true;
+        }
+        //手术记录
+        if(ListUtil.isNotEmpty(operationDocs)){
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
+                if(operationRecordDoc!=null){
+                    String str = operationRecordDoc.getStructureMap().get("手术经过及处理");
+                    if (StringUtil.isNotEmpty(str)) {
+                        if (ssBlStr(str)) {
+                            flag = true;
+                        }
+                    }
+                }
             }
         }
-        if(match) {
+        //病程记录是否记录
+        if(flag) {
+            status.set("-1");
             if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
                 ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
                 //所有查房记录
@@ -89,7 +92,7 @@ public class THR03117 extends QCCatalogue {
                 for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
                     String pathographyStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
                     if (StringUtil.isNotEmpty(pathographyStr)) {
-                        if (pathographyStr.contains(Content.pathologicalReport)) {
+                        if (dateStr(pathographyStr)) {
                             status.set("0");
                             return;
                         }
@@ -98,4 +101,138 @@ public class THR03117 extends QCCatalogue {
             }
         }
     }
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        boolean flag=false;
+        String str = Str(string);
+        String rex="[\\s\\S]*(?=流式)[\\s\\S]*";
+        String rex1="[\\s\\S]*(?=穿透)[\\s\\S]{0,7}(?=层)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=癌)[\\s\\S]{0,7}(?=浸润)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=分化)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=淋巴结)[\\s\\S]{0,7}(?=转移)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=浸润性)[\\s\\S]{0,7}(?=癌)[\\s\\S]*";
+        String rex6="[\\s\\S]*(?=突破)[\\s\\S]{0,7}(?=层)[\\s\\S]*";
+        String rex7="[\\s\\S]{0,10}(?=病理)[\\s\\S]{0,10}";
+        List<String> cfPathologyList = Content.cfPathologyList;
+        for (String cfPathology : cfPathologyList) {
+            if(string.contains(cfPathology)){
+                flag=true;
+            }
+
+        }
+        if( flag ||str.matches(rex1)|| str.matches(rex2)
+                ||str.matches(rex3)|| str.matches(rex4)||str.matches(rex5)|| str.matches(rex6)|| str.matches(rex)){
+            return true;
+        }
+        ArrayList<String> blStrings = new ArrayList<>();
+        if(str.contains("病理")){
+            Matcher matcher = Pattern.compile(rex7).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                blStrings.add(group);
+            }
+            List<String> notCTList = Content.notBLList;
+            if (ListUtil.isNotEmpty(blStrings)) {
+                for (String notCT : notCTList) {
+                    for (int i = 0; i < blStrings.size(); i++) {
+                        String cfStr = blStrings.get(i);
+                        if(cfStr.contains(notCT)){
+                            blStrings.remove(i);
+                            continue;
+                        }
+                    }
+                }
+                if(blStrings.size()>0){
+                    return true;
+                }
+            }
+        }
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    private boolean ssBlStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        List<String> surgeryPathologyTwoList = Content.surgeryPathologyTwoList;
+        for (String surgeryPathologyTwo : surgeryPathologyTwoList) {
+            if(string.contains(surgeryPathologyTwo)){
+                return true;
+            }
+        }
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    private boolean exStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        List<String> doctorAdvicePathologyList = Content.doctorAdvicePathologyList;
+        for (String doctorAdvicePathology : doctorAdvicePathologyList) {
+            if(string.contains(doctorAdvicePathology)){
+                return true;
+            }
+        }
+        if(str.contains("冰冻")){
+            if(bdStr(str)){
+                return true;
+            }
+        }
+        return false;
+    }
+    //判断包含冰冻但不属于病理
+    private boolean bdStr(String str) {
+        ArrayList<String> blStrings = new ArrayList<>();
+        String rex1="[\\s\\S]{0,10}(?=冰冻)[\\s\\S]{0,10}";
+            Matcher matcher = Pattern.compile(rex1).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                blStrings.add(group);
+            }
+            List<String> notBLList = Content.notBDBLList;
+            if (ListUtil.isNotEmpty(blStrings)) {
+                for (String notBL : notBLList) {
+                    for (int i = 0; i < blStrings.size(); i++) {
+                        String cfStr = blStrings.get(i);
+                        if (cfStr.contains(notBL)) {
+                            blStrings.remove(i);
+                            continue;
+                        }
+                    }
+                }
+                if (blStrings.size() > 0) {
+                    return true;
+                }
+            }
+            return false;
+    }
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
 }

+ 0 - 143
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03118.java

@@ -1,143 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-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.*;
-import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
-import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
-import com.lantone.qc.pub.model.doc.operation.OperationDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
-import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
-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;
-import java.util.Objects;
-import java.util.stream.Collectors;
-
-/**
- * @ClassName : THR03118
- * @Description: 报告单或病程记录缺少细菌培养记录
- * @author: zh
- * @time: 2021/04/06 11:22
- */
-@Component
-public class THR03118 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        /**
-         * 【指标十】细菌培养检查记录符合率(MER-ME-03)
-         * 1、判断医嘱中是否含有细菌培养
-         * 2、判断病程记录中是否存在细菌培养记录(除了入院记录和首次病程录都属于病程记录)
-         * 3、判断化验报告单中是否记录细菌培养
-         */
-        status.set("0");
-        //医嘱中细菌培养的数量
-        int allNum = 0;
-        //病程记录中细菌培养的数量
-        int docNum = 0;
-        //报告单中细菌培养的数量
-        int reportNum = 0;
-        List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
-        if (ListUtil.isEmpty(doctorAdviceDocList)) {
-            return;
-        }
-        for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocList) {
-            Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
-            String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
-            if (Content.statOrder.equals(doctorAsks)) {
-                String doctorAsksName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
-                if (StringUtil.isNotEmpty(doctorAsksName)) {
-                    if (doctorAsksName.contains(Content.bacterialCulture)) {
-                        allNum++;
-                    }
-                }
-            }
-        }
-        /******************************************查房记录********************************************************/
-        List<ThreeLevelWardDoc> allDoctorWradDocs = inputInfo.getThreeLevelWardDocs().get(0).getAllDoctorWradDocs();
-        if (ListUtil.isNotEmpty(allDoctorWradDocs) && allDoctorWradDocs.size() > 0) {
-            for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
-                String allDoctorStr = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
-                if (allDoctorStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-        }
-
-        /******************************************术后首程********************************************************/
-        if (inputInfo.getOperationDocs().size() > 0) {
-            List<String> recordList = inputInfo.getOperationDocs().stream().map(OperationDoc::getOperationDiscussionDoc).filter(Objects::nonNull)
-                    .map(OperationDiscussionDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("手术简要经过")))
-                    .map(i -> i.get("手术简要经过")).collect(Collectors.toList());
-            for (String recordStr : recordList) {
-                if (recordStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-        }
-        /******************************************转入转出********************************************************/
-        if (inputInfo.getTransferRecordDocs() != null) {
-            TransferRecordDoc transferRecordDocs = inputInfo.getTransferRecordDocs();
-            List<String> intoRecordDList = transferRecordDocs.getTransferIntoDocs()
-                    .stream().map(TransferIntoDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
-                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
-            for (String recordStr : intoRecordDList) {
-                if (recordStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-            intoRecordDList = transferRecordDocs.getTransferOutDocs()
-                    .stream().map(TransferOutDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
-                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
-            for (String recordStr : intoRecordDList) {
-                if (recordStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-        }
-        /******************************************阶段小结********************************************************/
-        if (inputInfo.getStagesSummaryDocs().size() > 0) {
-            List<String> intoRecordList = inputInfo.getStagesSummaryDocs().stream().map(StagesSummaryDoc::getStructureMap)
-                    .filter(i -> StringUtil.isNotBlank(i.get("病历内容")))
-                    .map(i -> i.get("病历内容")).collect(Collectors.toList());
-            for (String recordStr : intoRecordList) {
-                if (recordStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-        }
-
-        /******************************************会诊申请********************************************************/
-        if (inputInfo.getConsultationDocs().size() > 0) {
-            List<String> recordList = inputInfo.getConsultationDocs().stream().map(ConsultationDoc::getConsultationApplicationDoc).filter(Objects::nonNull)
-                    .map(ConsultationApplicationDoc::getStructureMap).filter(i -> StringUtil.isNotBlank(i.get("会诊目的")))
-                    .map(i -> i.get("会诊目的")).collect(Collectors.toList());
-            for (String recordStr : recordList) {
-                if (recordStr.contains(Content.bacterialCulture)) {
-                    docNum++;
-                }
-            }
-        }
-
-        List<LisDoc> lisDocs = inputInfo.getLisDocs();
-        if (ListUtil.isNotEmpty(lisDocs)) {
-            for (LisDoc lisDoc : lisDocs) {
-                String lisDocStr = lisDoc.getStructureMap().get(Content.reportName);
-                if (StringUtil.isNotEmpty(lisDocStr) && lisDocStr.contains(Content.bacterialCulture)) {
-                    reportNum++;
-                }
-            }
-        }
-
-        if ((allNum != docNum && allNum > docNum) || (allNum != reportNum && allNum > reportNum)) {
-            status.set("-1");
-        }
-    }
-}

+ 0 - 91
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03119.java

@@ -1,91 +0,0 @@
-package com.lantone.qc.kernel.catalogue.threelevelward;
-
-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.*;
-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 : THR03119
- * @Description: 有抗菌药物使用病程无记录
- * @author: zh
- * @time: 2021/04/06 11:22
- */
-@Component
-public class THR03119 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        /**
-         * 【指标十一】抗菌药物使用记录符合率(MER-D&T-01)
-         * 1、判断病案首页中是否存在抗菌药物费用
-         * 2、判断医嘱中是否存在抗菌药物的使用
-         * 3、若存在抗菌药物费用或者医嘱中存在抗菌药物,查询病程记录,没有记录提示规则
-         */
-        status.set("0");
-        boolean flag = false;
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        List<String> antimicrobialDrugList = Content.antimicrobialDrugList;
-        if (firstPageRecordDoc != null) {
-            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
-            String antimicrobialAgents = structureMap.get("抗菌药物费用");
-            if (StringUtil.isNotEmpty(antimicrobialAgents) && antimicrobialAgents.equals("0")) {
-                double b = Double.parseDouble(antimicrobialAgents);
-                if (b > 0) {
-                    flag = true;
-                }
-            }
-        }
-
-        if (!flag) {
-            //查医嘱
-            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                Map<String, String> structureMap = doctorAdviceDoc.getStructureMap();
-                String daStatus = structureMap.get(Content.doctorAdviceState);
-                if (StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))) {
-                    String adviceType = structureMap.get(Content.doctorAdviceType);
-                    //取长期和临时医嘱
-                    if (adviceType.equals(Content.statOrder) || adviceType.equals(Content.standingOrder)) {
-                        String daItemName = structureMap.get(Content.medicalOrderName);
-                        for (String antimicrobialDrug : antimicrobialDrugList) {
-                            if (daItemName.contains(antimicrobialDrug)) {
-                                flag = true;
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-        if (flag) {
-            status.set("-1");
-            List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
-            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
-                ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
-                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
-                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
-                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
-                        Map<String, String> wradDocStructureMap = allDoctorWradDoc.getStructureMap();
-                        String illnessRecords = wradDocStructureMap.get(Content.illnessRecords);
-                        if (StringUtil.isNotEmpty(illnessRecords)) {
-                            for (String antimicrobial : antimicrobialDrugList) {
-                                if (illnessRecords.contains(antimicrobial)) {
-                                    status.set("0");
-                                    return;
-                                }
-                            }
-                        }
-                    }
-                }
-            }
-        }
-
-
-    }
-}

+ 155 - 55
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03120.java

@@ -1,12 +1,11 @@
 package com.lantone.qc.kernel.catalogue.threelevelward;
-
 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.*;
+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.stereotype.Component;
@@ -15,90 +14,191 @@ import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : THR03120
- * @Description: 病程记录未记录恶性肿瘤化学治疗相关信息
- * @author: zh
+ * @Description: 病程记录未记录恶性肿瘤放射治疗相关信息
+ * @author: wangsy
  * @time: 2021/04/19 11:22
  */
 @Component
 public class THR03120 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        /**
-         * 【指标十二】恶性肿瘤化学治疗记录符合率(MER-D&T-02)
-         * 1、首先判断是否为恶性肿瘤患者
-         * 2、再进一步从医嘱判断是否为化学治疗患者
-         * 3、在病程记录中查找是否存在治疗记录
-         */
+
         status.set("0");
         boolean flag = false;
+        boolean bool = false;
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        if (firstPageRecordDoc == null) {
-            return;
-        }
-
-        Map<String, Object> structureMap = firstPageRecordDoc.getStructureExtMap();
-        List<Map<String, String>> dischargeDiag = (List) structureMap.get(Content.dischargeDiag);
-        if (ListUtil.isEmpty(dischargeDiag)) {
-            return;
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        List<String> radiotherapyDrugList = Content.radiotherapyDrugList;
+        //首页判断出院诊断
+        if (firstPageRecordDoc != null) {
+            Map<String, Object> structureExtMap = firstPageRecordDoc.getStructureExtMap();
+            List<Map<String,String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
+            if(ListUtil.isNotEmpty(dischargeDiag)){
+                for (Map<String, String> diagMap : dischargeDiag) {
+                    if(StringUtil.isNotBlank(diagMap.get("诊断名称"))){
+                        if(exStr(diagMap.get("诊断名称"))){
+                            flag=true;
+                        }
+                    }
+                    if(StringUtil.isNotBlank(diagMap.get("诊断编码"))){
+                        if(diagMap.get("诊断编码").toUpperCase().startsWith("C")){
+                            flag=true;
+                        }
+                    }
+                }
+            }
         }
-
-        for (Map<String, String> diagMap : dischargeDiag) {
-            if (StringUtil.isBlank(diagMap.get("诊断名称")) || StringUtil.isBlank(diagMap.get("诊断编码"))) {
-                continue;
+        //出院小结判断入院诊断,出院诊断
+        if(leaveHospitalDoc!=null){
+            Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+            //入院诊断
+            String str = structureMap.get("入院诊断");
+            if(StringUtil.isNotEmpty(str)){
+                if(exStr(str)){
+                    flag=true;
+                }
             }
-            if (diagMap.get("诊断名称").contains("恶性肿瘤") && diagMap.get("诊断编码").toUpperCase().startsWith("C")) {
-                //初步判断为一个恶性肿瘤患者
-                flag = true;
-                break;
+            //出院诊断
+            String str1 = structureMap.get("出院诊断");
+            if(exStr(str1)){
+                flag=true;
             }
         }
-        List<String> chemotherapyDrugList = new ArrayList<>();
-        if (flag) {
-            //进一步去医嘱中判断是否为恶性肿瘤化学治疗患者
-            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            if (ListUtil.isEmpty(doctorAdviceDocs)) {
-                return;
+        //是否有化疗知情同意书
+        List<InformedConsentDoc> informedConsentDoc = inputInfo.getInformedConsentDoc();
+        if (ListUtil.isNotEmpty(informedConsentDoc)) {
+            for (InformedConsentDoc consentDoc : informedConsentDoc) {
+                if(consentDoc.getStructureMap()!=null) {
+                    if (StringUtil.isNotEmpty(consentDoc.getStructureMap().get("标题"))) {
+                        if ("化疗知情同意书".equals(consentDoc.getStructureMap().get("标题")) || "放疗记录单".equals(consentDoc.getStructureMap().get("标题"))) {
+                            flag = true;
+                        }
+                    }
+                }
             }
+        }
 
-            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                Map<String, String> doctorAdviceDocStrMap = doctorAdviceDoc.getStructureMap();
-                String daStatus = doctorAdviceDocStrMap.get(Content.doctorAdviceState);
-                if (StringUtil.isEmpty(daStatus) || (StringUtil.isNotEmpty(daStatus) && !daStatus.equals(Content.cancellationOrder))) {
-                    //取临时医嘱
-                    String doctorAsks = doctorAdviceDocStrMap.get(Content.doctorAdviceType);
-                    if (StringUtil.isEmpty(doctorAsks)) {
-                        continue;
-                    }
-                    if (Content.statOrder.equals(doctorAsks)) {
-                        String daItemName = doctorAdviceDocStrMap.get(Content.medicalOrderName);
-                        if (Arrays.asList(Content.chemotherapyDrugList).contains(daItemName)) {
-                            chemotherapyDrugList.add(daItemName);
+        if (flag) {
+            //进一步去医嘱中判断是否为恶性肿瘤放射治疗患者
+            if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+                for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                    Map<String, String> doctorAdviceDocStrMap = doctorAdviceDoc.getStructureMap();
+                    String daStatus = doctorAdviceDocStrMap.get(Content.doctorAdviceState);
+                    if (StringUtil.isNotEmpty(daStatus)) {
+                        if (!Content.cancellationOrderList.contains(daStatus)) {
+                            //取临时医嘱
+                            String doctorAsks = doctorAdviceDocStrMap.get(Content.doctorAdviceType);
+                            if (StringUtil.isEmpty(doctorAsks)) {
+                                continue;
+                            }
+                            if (Content.statOrder.equals(doctorAsks) || Content.standingOrder.equals(daStatus)) {
+                                String daItemName = doctorAdviceDocStrMap.get(Content.medicalOrderName);
+                                if (dateStr(daItemName)) {
+                                    bool = true;
+                                    break;
+                                }
+                            }
                         }
                     }
+            }
+            }
+            //查房
+            if(ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                    if(dateStr(illness)){
+                        bool=true;
+                        break;
+                    }
                 }
             }
         }
-
-        if (ListUtil.isNotEmpty(chemotherapyDrugList)) {
-            for (String chemotherapyDrug : chemotherapyDrugList) {
-                //为一个恶性肿瘤化学治疗患者
+        if (bool) {
+                //为一个恶性肿瘤放射治疗患者
                 status.set("-1");
-                List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
                 if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
                     List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
                     for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
                         String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
                         //判断病程记录是否记录
-                        //病程记录中若是含有疗程两字并且含有化疗药物则为记录
-                        if (illness.contains(chemotherapyDrug) && (illness.contains("疗程") || illness.contains("化疗") || illness.contains("化学治疗"))) {
+                        if (dateStr(illness)) {
                             status.set("0");
                             return;
                         }
                     }
-                }
             }
         }
     }
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=放射)[\\s\\S]{0,6}(?=治疗)[\\s\\S]*";
+        if(str.contains("放疗") || str.contains("伽马刀") || str.contains("γ刀") || str.contains("粒子植入") || str.contains("立体定向放射") ||
+                str.matches(rex1) ||str.contains("三维适形调强放疗")  ||str.contains("SRT") ||str.contains("靶区勾画")){
+            return true;
+        }
+        return false;
+    }
+    //判断恶性肿瘤
+    private boolean exStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=恶性)[\\s\\S]{0,10}(?=瘤)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=新辅)[\\s\\S]{0,10}(?=治疗)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=解救)[\\s\\S]{0,10}(?=治疗)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=恶性)[\\s\\S]{0,10}(?=肿瘤)[\\s\\S]{0,10}(?=全身)[\\s\\S]{0,10}(?=治疗)[\\s\\S]*";
+        String rex5="(?<=CA)\\d";
+        Pattern rex5_ = Pattern.compile(rex5, Pattern.CASE_INSENSITIVE);
+        String rex6="(?<=can)\\d";
+        Pattern rex6_ = Pattern.compile(rex6, Pattern.CASE_INSENSITIVE);
+        if(str.contains("肉瘤") || str.contains("淋巴瘤") || str.contains("白血病") || str.contains("癌") || str.contains("canser") ||
+                str.matches(rex1) ||str.matches(rex2) ||str.matches(rex3) ||str.matches(rex4)||rex5_.matcher(str).matches()||rex6_.matcher(str).matches()){
+            return true;
+        }
+        return false;
+    }
+    //化学治疗
+    private boolean exStrTwo(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=化)[\\s\\S]{0,10}(?=疗)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=放)[\\s\\S]{0,10}(?=疗)[\\s\\S]*";
+        if(str.contains("伽马刀") || str.contains("γ刀") || str.contains("粒子植入") || str.contains("立体定向放射") || str.contains("三维适形调强放疗")
+                || str.matches(rex1) ||  str.matches(rex2) ||str.contains("IMRT") ||str.contains("SRT") || str.contains("靶区勾画")
+                ||  str.contains("腹腔灌注")
+                || str.contains("热疗")){
+            return true;
+        }
+        return false;
+    }
+
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
 }

+ 119 - 70
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03121.java

@@ -4,101 +4,150 @@ 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.DoctorAdviceDoc;
-import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
-import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+import com.lantone.qc.pub.model.doc.*;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationApplicationDoc;
+import com.lantone.qc.pub.model.doc.consultation.ConsultationDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferIntoDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferOutDoc;
+import com.lantone.qc.pub.model.doc.transferrecord.TransferRecordDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
-import java.util.ArrayList;
-import java.util.Arrays;
+
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 /**
- * @ClassName : THR03121
- * @Description: 病程记录未记录恶性肿瘤放射治疗相关信息
- * @author: wangsy
- * @time: 2021/04/19 11:22
+ * @ClassName : THR03118
+ * @Description: 报告单或病程记录缺少细菌培养记录
+ * @author: zh
+ * @time: 2021/04/06 11:22
  */
 @Component
 public class THR03121 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        /**
-         * 【指标十三】恶性肿瘤放射治疗记录符合率(MER-D & T-03)
-         * 1、首先判断是否为恶性肿瘤患者
-         * 2、再进一步从医嘱判断是否为放射治疗患者
-         * 3、在病程记录中查找是否存在治疗记录
-         */
         status.set("0");
         boolean flag = false;
-        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
-        if (firstPageRecordDoc == null) {
-            return;
-        }
-
-        Map<String, Object> structureMap = firstPageRecordDoc.getStructureExtMap();
-        List<Map<String, String>> dischargeDiag = (List) structureMap.get(Content.dischargeDiag);
-        if (ListUtil.isEmpty(dischargeDiag)) {
-            return;
-        }
-
-        for (Map<String, String> diagMap : dischargeDiag) {
-            if (StringUtil.isBlank(diagMap.get("诊断名称")) || StringUtil.isBlank(diagMap.get("诊断编码"))) {
-                continue;
-            }
-            if (diagMap.get("诊断名称").contains("恶性肿瘤") && diagMap.get("诊断编码").toUpperCase().startsWith("C")) {
-                //初步判断为一个恶性肿瘤患者
-                flag = true;
-                break;
+        boolean coolCf = false;
+        boolean coolBg = false;
+        List<DoctorAdviceDoc> doctorAdviceDocList = inputInfo.getDoctorAdviceDocs();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        //是否进行过细菌培养
+        //医嘱判断
+        if (ListUtil.isNotEmpty(doctorAdviceDocList)) {
+       xj: for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocList) {
+            Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
+            String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                  if (StringUtil.isNotEmpty(daStatus)) {
+                if (!Content.cancellationOrderList.contains(daStatus)) {
+            String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+            if (Content.statOrder.equals(doctorAsks)) {
+                String doctorAsksName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                if (StringUtil.isNotEmpty(doctorAsksName)) {
+                    if (dateStr(doctorAsksName)) {
+                        flag=true;
+                        break xj;
+                            }
+                        }
+                    }
+                }
             }
+           }
         }
-        List<String> chemotherapyDrugList = new ArrayList<>();
-        if (flag) {
-            //进一步去医嘱中判断是否为恶性肿瘤放射治疗患者
-            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
-            if (ListUtil.isEmpty(doctorAdviceDocs)) {
-                return;
+        //查房记录
+        if(ListUtil.isNotEmpty(threeLevelWardDocs)) {
+            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+            for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                if(dateStr(illness)){
+                    flag=true;
+                    break;
+                }
             }
-
-            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
-                Map<String, String> doctorAdviceDocStrMap = doctorAdviceDoc.getStructureMap();
-                String daStatus = doctorAdviceDocStrMap.get(Content.doctorAdviceState);
-                if (StringUtil.isEmpty(daStatus) || (StringUtil.isNotEmpty(daStatus) && !daStatus.equals(Content.cancellationOrder))) {
-                    //取临时医嘱
-                    String doctorAsks = doctorAdviceDocStrMap.get(Content.doctorAdviceType);
-                    if (StringUtil.isEmpty(doctorAsks)) {
-                        continue;
-                    }
-                    if (Content.statOrder.equals(doctorAsks)) {
-                        String daItemName = doctorAdviceDocStrMap.get(Content.medicalOrderName);
-                        if (Arrays.asList(Content.radiotherapyDrugList).contains(daItemName)) {
-                            chemotherapyDrugList.add(daItemName);
-                        }
+        }
+        List<LisDoc> lisDocs = inputInfo.getLisDocs();
+        //报告单
+        if (ListUtil.isNotEmpty(lisDocs)) {
+            for (LisDoc lisDoc : lisDocs) {
+                String lisDocStr = lisDoc.getStructureMap().get(Content.reportName);
+                if (StringUtil.isNotEmpty(lisDocStr)) {
+                    if (dateStr(lisDocStr)) {
+                        flag = true;
+                        break;
                     }
                 }
             }
         }
-
-        if (ListUtil.isNotEmpty(chemotherapyDrugList)) {
-            for (String chemotherapyDrug : chemotherapyDrugList) {
-                //为一个恶性肿瘤放射治疗患者
-                status.set("-1");
-                List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
-                if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
-                    List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
-                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
-                        String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
-                        //判断病程记录是否记录
-                        //病程记录中若是含有疗程两字并且含有放射药物则为记录
-                        if (illness.contains(chemotherapyDrug) && (illness.contains("疗程") || illness.contains("放疗") || illness.contains("放射治疗"))) {
-                            status.set("0");
-                            return;
+/**
+ * 使用过细菌培养 是否有记录
+ */
+        if(flag) {
+            status.set("-1");
+            //查房
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                    if (dateStr(illness)) {
+                        coolCf = true;
+                        break;
+                    }
+                }
+            }
+            //报告
+            if (ListUtil.isNotEmpty(lisDocs)) {
+                for (LisDoc lisDoc : lisDocs) {
+                    String lisDocStr = lisDoc.getStructureMap().get(Content.reportName);
+                    if (StringUtil.isNotEmpty(lisDocStr)) {
+                        if (dateStr(lisDocStr)) {
+                            coolBg = true;
+                            break;
                         }
                     }
                 }
             }
+            if(coolCf||coolBg){
+                status.set("0");
+                return;
+            }
+        }
+
+
+    }
+    private boolean dateStr(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        String rex1="[\\s\\S]*(?=痰)[\\s\\S]{0,10}(?=培养)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=尿)[\\s\\S]{0,10}(?=培养)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=细菌)[\\s\\S]{0,10}(?=培养)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=咽)[\\s\\S]{0,10}(?=拭子)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=血)[\\s\\S]{0,10}(?=培养)[\\s\\S]*";
+        String rex6="[\\s\\S]*(?=菌培养)[\\s\\S]*";
+        String rex7="[\\s\\S]*(?=骨髓)[\\s\\S]{0,10}(?=培养)[\\s\\S]*";
+        if (str.contains("粪便培养") || str.matches(rex1)|| str.matches(rex2)|| str.matches(rex3)
+                || str.matches(rex4) || str.matches(rex5) || str.matches(rex6) ||str.matches(rex7)) {
+            return true;
         }
+        return false;
     }
 }

+ 134 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03122.java

@@ -0,0 +1,134 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.*;
+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 : THR03119
+ * @Description: 有抗菌药物使用病程无记录
+ * @author: zh
+ * @time: 2021/04/06 11:22
+ */
+@Component
+public class THR03122 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean flag = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        List<String> antimicrobialDrugList = Content.antimicrobialDrugList;
+        List<String> cfAntibacterialList = Content.cfAntibacterialList;
+        String drugAllergy = "";
+        String drugAllergyStr="";
+        //判断是否有抗菌药物的使用
+        //首页费用
+        if (firstPageRecordDoc != null) {
+            Map<String, String> structureMap = firstPageRecordDoc.getStructureMap();
+            String antimicrobialAgents = structureMap.get("抗菌药物费用");
+            if (StringUtil.isNotEmpty(antimicrobialAgents) && antimicrobialAgents.equals("0")) {
+                double b = Double.parseDouble(antimicrobialAgents);
+                if (b > 0) {
+                    flag = true;
+                }
+            }
+            drugAllergy = structureMap.get("过敏药物")+drugAllergy;
+            drugAllergyStr = structureMap.get("药物过敏")+drugAllergyStr;
+        }
+            //查医嘱
+            List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+            for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                Map<String, String> structureMap = doctorAdviceDoc.getStructureMap();
+                String daStatus = structureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        String adviceType = structureMap.get(Content.doctorAdviceType);
+                        String drugType = structureMap.get(Content.drugType);
+                        //取长期和临时医嘱
+                        if (adviceType.equals(Content.statOrder) || adviceType.equals(Content.standingOrder)) {
+                            //取医嘱药品类型为抗生素的医嘱
+                            if (StringUtil.isNotEmpty(drugType)) {
+                                if(drugType.equals("抗生素")) {
+                                    String daItemName = structureMap.get(Content.medicalOrderName);
+                                    for (String antimicrobialDrug : antimicrobialDrugList) {
+                                        if (daItemName.contains(antimicrobialDrug)) {
+                                            //排除过敏药物的情况
+                                            if ((StringUtil.isEmpty(drugAllergy) || drugAllergy.equals("")) && (StringUtil.isEmpty(drugAllergyStr) || drugAllergyStr.equals(""))) {
+                                                flag = true;
+                                                break;
+                                            }
+                                            if (!drugAllergy.contains(antimicrobialDrug) && !drugAllergyStr.contains(antimicrobialDrug)) {
+                                                flag = true;
+                                                break;
+                                            }
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            //查房记录
+        if(ListUtil.isNotEmpty(threeLevelWardDocs)) {
+            List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+            for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                for (String antimicrobialDrug : antimicrobialDrugList) {
+                    if (illness.contains(antimicrobialDrug)) {
+                        if((StringUtil.isEmpty(drugAllergy)||drugAllergy.equals(""))&&(StringUtil.isEmpty(drugAllergyStr)||drugAllergyStr.equals(""))){
+                            flag = true;
+                            break;
+                        }
+                        if(!drugAllergy.contains(antimicrobialDrug)&&!drugAllergyStr.contains(antimicrobialDrug)){
+                            flag=true;
+                            break;
+                        }
+                    }
+                }
+                for (String cfAntibacterial : cfAntibacterialList) {
+                    if(illness.contains(cfAntibacterial)){
+                        flag = true;
+                        break;
+                    }
+                }
+            }
+        }
+        //使用过抗菌药物,是否有记录
+        if (flag) {
+            status.set("-1");
+            if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                ThreeLevelWardDoc threeLevelWardDoc = threeLevelWardDocs.get(0);
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDoc.getAllDoctorWradDocs();
+                if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
+                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                        Map<String, String> wradDocStructureMap = allDoctorWradDoc.getStructureMap();
+                        String illnessRecords = wradDocStructureMap.get(Content.illnessRecords);
+                        if (StringUtil.isNotEmpty(illnessRecords)) {
+                            for (String antimicrobial : antimicrobialDrugList) {
+                                if (illnessRecords.contains(antimicrobial)) {
+                                    status.set("0");
+                                    return;
+                                }
+                            }
+                            for (String cfAntibacterial : cfAntibacterialList) {
+                                if(illnessRecords.contains(cfAntibacterial)){
+                                    status.set("0");
+                                    return;
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}

+ 255 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR03123.java

@@ -0,0 +1,255 @@
+package com.lantone.qc.kernel.catalogue.threelevelward;
+
+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.*;
+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.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.*;
+import java.util.regex.Pattern;
+
+/**
+ * @ClassName : THR03120
+ * @Description: 病程记录未记录恶性肿瘤化学治疗相关信息
+ * @author: zh
+ * @time: 2021/04/19 11:22
+ */
+@Component
+public class THR03123 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        boolean flag = false;
+        boolean bool = false;
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
+        List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
+        LeaveHospitalDoc leaveHospitalDoc = inputInfo.getLeaveHospitalDoc();
+        List<String> chemotherapyList = Content.chemotherapyDrugList;
+        //首页判断出院诊断
+        if (firstPageRecordDoc != null) {
+            Map<String, Object> structureExtMap = firstPageRecordDoc.getStructureExtMap();
+            List<Map<String,String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
+            if(ListUtil.isNotEmpty(dischargeDiag)){
+                for (Map<String, String> diagMap : dischargeDiag) {
+                    if(StringUtil.isNotBlank(diagMap.get("诊断名称"))){
+                        if(exStr(diagMap.get("诊断名称"))){
+                            flag=true;
+                        }
+                    }
+                    if(StringUtil.isNotBlank(diagMap.get("诊断编码"))){
+                        if(diagMap.get("诊断编码").toUpperCase().startsWith("C")){
+                            flag=true;
+                        }
+                    }
+                }
+            }
+        }
+        //出院小结判断入院诊断,出院诊断
+        if(leaveHospitalDoc!=null){
+            Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+            //入院诊断
+            String str = structureMap.get("入院诊断");
+            if(StringUtil.isNotEmpty(str)){
+                if(exStr(str)){
+                    flag=true;
+                }
+            }
+            //出院诊断
+            String str1 = structureMap.get("出院诊断");
+            if(exStr(str1)){
+                flag=true;
+            }
+        }
+        //是否有化疗知情同意书
+        List<InformedConsentDoc> informedConsentDoc = inputInfo.getInformedConsentDoc();
+        if (ListUtil.isNotEmpty(informedConsentDoc)) {
+            for (InformedConsentDoc consentDoc : informedConsentDoc) {
+                if(consentDoc.getStructureMap()!=null) {
+                    if (StringUtil.isNotEmpty(consentDoc.getStructureMap().get("标题"))) {
+                        if ("化疗知情同意书".equals(consentDoc.getStructureMap().get("标题")) || "放疗记录单".equals(consentDoc.getStructureMap().get("标题"))) {
+                            flag = true;
+                        }
+                    }
+                }
+            }
+        }
+        /**
+         * 进一步判断是否使用过化学药物
+         */
+        if (flag) {
+            //医嘱中判断是否使用过化学药物
+            if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
+                for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocs) {
+                    Map<String, String> doctorAdviceDocStrMap = doctorAdviceDoc.getStructureMap();
+                    String daStatus = doctorAdviceDocStrMap.get(Content.doctorAdviceState);
+                    if (StringUtil.isNotEmpty(daStatus)) {
+                        if (!Content.cancellationOrderList.contains(daStatus)) {
+                            //取临时医嘱
+                            String doctorAsks = doctorAdviceDocStrMap.get(Content.doctorAdviceType);
+                            if (StringUtil.isEmpty(doctorAsks)) {
+                                continue;
+                            }
+                            if (Content.statOrder.equals(doctorAsks) || Content.standingOrder.equals(daStatus)) {
+                                String daItemName = doctorAdviceDocStrMap.get(Content.medicalOrderName);
+                                for (String chemotherapy : chemotherapyList) {
+                                    if (daItemName.contains(chemotherapy)) {
+                                        bool = true;
+                                        break;
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+            //查房
+            if(ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                cf:for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                    String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                    for (String chemotherapy : chemotherapyList) {
+                        if (illness.contains(chemotherapy)) {
+                            bool=true;
+                            break cf;
+                        }
+                    }
+                    if(dateStr(illness)){
+                        bool=true;
+                        break cf;
+                    }
+                }
+            }
+            //知情同意书
+            if (ListUtil.isNotEmpty(informedConsentDoc)) {
+                for (InformedConsentDoc consentDoc : informedConsentDoc) {
+                    if ("化疗知情同意书".equals(consentDoc.getStructureMap().get("标题"))) {
+                        bool = true;
+                    }
+                }
+            }
+            //出院小结判断入院诊断,出院诊断
+            if(leaveHospitalDoc!=null){
+                Map<String, String> structureMap = leaveHospitalDoc.getStructureMap();
+                //入院诊断
+                String str = structureMap.get("入院诊断");
+                if(StringUtil.isNotEmpty(str)){
+                    if(dateStr(str)){
+                        bool=true;
+                    }
+                }
+                //出院诊断
+                String str1 = structureMap.get("出院诊断");
+                if(dateStr(str1)){
+                    bool=true;
+                }
+            }
+            //首页诊断
+            if (firstPageRecordDoc != null) {
+                Map<String, Object> structureExtMap = firstPageRecordDoc.getStructureExtMap();
+                List<Map<String,String>> dischargeDiag = (List) structureExtMap.get(Content.dischargeDiag);
+                if(ListUtil.isNotEmpty(dischargeDiag)){
+                    for (Map<String, String> diagMap : dischargeDiag) {
+                        if(StringUtil.isNotBlank(diagMap.get("诊断名称"))){
+                            if(dateStr(diagMap.get("诊断名称"))){
+                                bool=true;
+                            }
+                        }
+                    }
+                }
+            }
+        }
+           if(bool){
+                    //为一个恶性肿瘤化学治疗患者
+                    status.set("-1");
+                    if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
+                        List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
+                        for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                            String illness = allDoctorWradDoc.getStructureMap().get(Content.illnessRecords);
+                            for (String chemotherapyDrug : chemotherapyList) {
+                                if(illness.contains(chemotherapyDrug)){
+                                    status.set("0");
+                                    return;
+                                }
+                            }
+                            //判断病程记录是否记录
+                            if (dateStr(illness)) {
+                                status.set("0");
+                                return;
+                      }
+                 }
+            }
+        }
+    }
+    private boolean dateStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=化)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=新辅)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=解救)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=恶性)[\\s\\S]{0,6}(?=肿瘤)[\\s\\S]{0,6}(?=全身)[\\s\\S]{0,6}(?=治疗)[\\s\\S]*";
+        if(str.matches(rex1) ||  str.matches(rex2)||  str.matches(rex3)||  str.matches(rex4) ){
+            return true;
+        }
+        return false;
+    }
+    //判断恶性肿瘤
+    private boolean exStr(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=恶性)[\\s\\S]{0,6}(?=瘤)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=新辅)[\\s\\S]{0,6}(?=治疗)[\\s\\S]*";
+        String rex3="[\\s\\S]*(?=解救)[\\s\\S]{0,6}(?=治疗)[\\s\\S]*";
+        String rex4="[\\s\\S]*(?=恶性)[\\s\\S]{0,6}(?=肿瘤)[\\s\\S]{0,10}(?=全身)[\\s\\S]{0,6}(?=治疗)[\\s\\S]*";
+        String rex5="[\\s\\S]*(?=化)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        if(str.contains("肉瘤") || str.contains("淋巴瘤") || str.contains("白血病") || str.contains("癌") || str.contains("canser") ||
+                str.matches(rex1) ||str.matches(rex2) ||str.matches(rex3) ||str.matches(rex4)||str.contains("can")||str.contains("CA")||str.matches(rex5)){
+            return true;
+        }
+        return false;
+    }
+    //药物治疗
+    private boolean exStrTwo(String string){
+        if(StringUtil.isEmpty(string)){
+            return false;
+        }
+        String str = Str(string);
+        String rex1="[\\s\\S]*(?=化)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        String rex2="[\\s\\S]*(?=放)[\\s\\S]{0,6}(?=疗)[\\s\\S]*";
+        if(str.contains("伽马刀") || str.contains("γ刀") || str.contains("粒子植入") || str.contains("立体定向放射") || str.contains("三维适形调强放疗")
+                || str.matches(rex1) ||  str.matches(rex2) ||str.contains("IMRT") ||str.contains("SRT") || str.contains("靶区勾画")
+                ||  str.contains("腹腔灌注")
+                || str.contains("热疗")){
+            return true;
+        }
+        return false;
+    }
+    private String Str(String str){
+        str = str.replaceAll("\\*", "\\\\*");
+        str = str.replaceAll("\\)", "\\\\)");
+        str = str.replaceAll("\\.", "\\\\.");
+        str = str.replaceAll("\\?", "\\\\?");
+        str = str.replaceAll("\\+", "\\\\+");
+        str = str.replaceAll("\\$", "\\\\$");
+        str = str.replaceAll("\\^", "\\\\^");
+        str = str.replaceAll("\\[", "\\\\[");
+        str = str.replaceAll("\\]", "\\\\]");
+        str = str.replaceAll("\\(", "\\\\(");
+        str = str.replaceAll("\\{", "\\\\{");
+        str = str.replaceAll("\\}", "\\\\}");
+        str = str.replaceAll("\\|", "\\\\|");
+        str = str.replaceAll("\\/", "\\\\/");
+        return str;
+    }
+
+}

+ 82 - 26
kernel/src/main/java/com/lantone/qc/kernel/catalogue/threelevelward/THR3113.java

@@ -5,13 +5,17 @@ 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.DoctorAdviceDoc;
+import com.lantone.qc.pub.model.doc.PacsDoc;
 import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
 
 /**
  * @ClassName : THR3113
@@ -24,51 +28,103 @@ public class THR3113 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        int ctNum=0;
-        int bcNum=0;
+        boolean flag = false;
         List<DoctorAdviceDoc> doctorAdviceDocsList = inputInfo.getDoctorAdviceDocs();
-        if(ListUtil.isNotEmpty(doctorAdviceDocsList)) {
+        if (ListUtil.isNotEmpty(doctorAdviceDocsList)) {
             for (DoctorAdviceDoc doctorAdviceDoc : doctorAdviceDocsList) {
                 Map<String, String> doctorAdviceDocStructureMap = doctorAdviceDoc.getStructureMap();
-               String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
-                if(StringUtil.isEmpty(daStatus) || (!daStatus.equals(Content.cancellationOrder) && StringUtil.isNotEmpty(daStatus))){
-                //ct取临时医嘱
-                String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
-                if (StringUtil.isNotEmpty(doctorAsks)) {
-                    if (Content.statOrder.equals(doctorAsks)) {
-                        //取医嘱项目名称
-                        String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
-                        if (daItemName.contains("磁共振") || daItemName.contains("MR")) {
-                            if (!daItemName.contains("IMRT") && !daItemName.contains("mrs评分")) {
-                                ctNum++;
-                                continue;
+                String daStatus = doctorAdviceDocStructureMap.get(Content.doctorAdviceState);
+                if (StringUtil.isNotEmpty(daStatus)) {
+                    if (!Content.cancellationOrderList.contains(daStatus)) {
+                        //ct取临时医嘱
+                        String doctorAsks = doctorAdviceDocStructureMap.get(Content.doctorAdviceType);
+                        if (Content.statOrder.equals(doctorAsks)) {
+                            //取医嘱项目名称
+                            String daItemName = doctorAdviceDocStructureMap.get(Content.medicalOrderName);
+                            String nameSs = doctorAdviceDocStructureMap.get("医嘱处方类型");
+                            if (StringUtil.isNotEmpty(daItemName) && StringUtil.isNotEmpty(nameSs)) {
+                                if (dateStr(daItemName) && nameSs.equals("检查")) {
+                                    flag = true;
+                                    status.set("-1");
+                                }
                             }
                         }
                     }
-                    }
                 }
             }
+        }
+        if(flag) {
             List<ThreeLevelWardDoc> threeLevelWardDocs = inputInfo.getThreeLevelWardDocs();
             if (ListUtil.isNotEmpty(threeLevelWardDocs)) {
                 List<ThreeLevelWardDoc> allDoctorWradDocs = threeLevelWardDocs.get(0).getAllDoctorWradDocs();
                 if (ListUtil.isNotEmpty(allDoctorWradDocs)) {
-                    if (allDoctorWradDocs.size() > 0) {
-                        for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
-                            Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
-                            String records = structureMap.get(Content.illnessRecords);
-                            if (StringUtil.isNotEmpty(records)) {
-                                if (records.contains("MR") || records.contains("磁共振")) {
-                                    bcNum++;
-                                }
+                    for (ThreeLevelWardDoc allDoctorWradDoc : allDoctorWradDocs) {
+                        Map<String, String> structureMap = allDoctorWradDoc.getStructureMap();
+                        String records = structureMap.get(Content.illnessRecords);
+                        if (StringUtil.isNotEmpty(records)) {
+                            if (dateStrBg(records)) {
+                                status.set("0");
+                                return;
                             }
                         }
                     }
                 }
             }
-            if((ctNum != bcNum)&&(ctNum>bcNum)){
-                status.set("-1");
+        }
+    }
+    private boolean dateStr(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        if (str.contains("MR") || str.contains("磁共振")||str.contains("核磁")) {
+            List<String> notMRList = Content.notMRList;
+            for (String list : notMRList) {
+                if(!str.contains(list)){
+                    return true;
+                }
+            }
+        }
+        return false;
+    }
+    private boolean dateStrBg(String str){
+        if(StringUtil.isEmpty(str)){
+            return false;
+        }
+        boolean MrCf=false;
+        boolean jsj=false;
+        ArrayList<String> cfStrings = new ArrayList<>();
+        String rex2="[\\s\\S]{0,5}(?=MR)[\\s\\S]{1,10}";
+        //需要判断同时存在MR和MRS等情况的发生
+        if(str.contains("MR")) {
+            Matcher matcher = Pattern.compile(rex2).matcher(str);
+            while (matcher.find()) {
+                String group = matcher.group();
+                cfStrings.add(group);
+            }
+            List<String> notMRList = Content.notMRList;
+            if (ListUtil.isNotEmpty(cfStrings)) {
+                for (String notCT : notMRList) {
+                    for (int i = 0; i < cfStrings.size(); i++) {
+                        String cfStr = cfStrings.get(i);
+                        if(cfStr.contains(notCT)){
+                            cfStrings.remove(i);
+                            continue;
+                        }
+                    }
+                }
+                if(cfStrings.size()>0){
+                    MrCf=true;
+                }
             }
+
+        }
+        if ( str.contains("磁共振")||str.contains("核磁")) {
+            jsj= true;
+        }
+        if(jsj||MrCf){
+            return true;
         }
+        return false;
     }
 
 }

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

@@ -341,32 +341,277 @@ public class Content {
     public static final String operationFee= "手术费";
     public static final String pathologyFee= "病理诊断费";
     public static final String bacterialCulture= "细菌培养";
+    public static final String drugType= "药品类型";
     //判断
-    public static final String cancellationOrder= "作废";
     public static final String pathological= "病理";
     public static final String pathologicalReport= "病理报告";
     public static final String specimen= "标本";
+    //医嘱状态
+    public static List<String> cancellationOrderList= Arrays.asList(
+            "作废", "删除", "取消"
+    );
+    //医嘱中处方类型判断是否为手术
+    public static List<String> operationList= Arrays.asList(
+            "手术"
+    );
+    //非CT情况
+    public static List<String> notCTList= Arrays.asList(
+            "ACTH", "TCT", "HCT","OCT","NCT","LCT","ACT","PET"
+    );
+    //含冰冻非病理情况
+    public static List<String> notBDBLList= Arrays.asList(
+            "冰冻血浆", "冰冻红细胞", "冰冻血小板"
+    );
+    //含病理非病理情况
+    public static List<String> notBLList= Arrays.asList(
+            "病理性", "病理征"
+    );
+    //非MR情况
+    public static List<String> notMRList= Arrays.asList(
+            "IMRT", "mrs评分","PET"
+    );
+    //植入物
+    public static List<String> theImplantsList= Arrays.asList(
+            "植入","心脏支架","假体","螺钉","融合器","钢板","内固定物","钛网","弹簧圈","硅胶","神经鞘管"
+    );
+    //手术病理检查存在手术记录中无病理相关记录中手术病理
+    public static List<String> surgeryPathologyList= Arrays.asList(
+            "病理","免疫组化","原位癌","送检","标本","病切","石蜡","切片","病检"
+    );
+    //病理检查缺少病理检查报告单中手术病理
+    public static List<String> surgeryPathologyTwoList= Arrays.asList(
+            "病理","免疫组化","送检","标本","病切","石蜡","切片","病检"
+    );
+    //医嘱病理
+    public static List<String>  doctorAdvicePathologyList= Arrays.asList(
+            "病检","石蜡","标本","病切","蜡块","切片","流式细胞术","送检","免疫组化","病理"
+    );
+    //报告单病理
+    public static List<String>  reportCardPathologyList= Arrays.asList(
+            "病理","免疫组化","原位癌","送检","石蜡","冰冻","标本","病切","切片","病检"
+    );
+    //查房病理
+    public static List<String>  cfPathologyList= Arrays.asList(
+            "免疫组化","原位癌","标本","病切","病检"
+    );
+    //查房抗菌
+    public static List<String>  cfAntibacterialList= Arrays.asList(
+            "抗菌","抗生素","消炎","抗感染","抗炎","预防感染"
+    );
     //抗菌药物目录
     public static List<String> antimicrobialDrugList = Arrays.asList(
-            "呋喃妥因", "呋喃唑酮", "盐酸小檗碱", "大蒜素", "鱼腥草素钠", "磺胺嘧啶", "甲氧苄啶", "复方磺胺甲恶唑",
-            "磺胺嘧啶银", "磺胺嘧啶锌", "盐酸四环素", "盐酸土霉素", "盐酸多西环素", "盐酸米诺环素", "盐酸美他环素", "硫酸庆大霉素", "硫酸链霉素"
+            "多西环素","二维四环素甲氧苄啶","复方四环素","复方四环素泼尼松","胍甲环素","美他环素","米诺环素","四环素","替加环素","土霉素","琥珀氯霉素","甲砜霉素","甲砜霉素甘氨酸酯","氯霉素",
+            "棕榈氯霉素","棕榈氯霉素(B型)","阿洛西林","阿莫西林","氨苄西林","氨苄西林丙磺舒","巴氨西林","呋苄西林","呋布西林","磺苄西林","仑氨西林","美洛西林","哌拉西林","双氯青霉素","羧苄西林",
+            "苄星青霉素","普鲁卡因青霉素","青霉素","青霉素V","青霉素V钾","苯唑西林","氟氯西林","氯唑西林","萘夫西林","舒巴坦","阿莫西林氟氯西林","阿莫西林克拉维酸","阿莫西林舒巴坦","阿莫西林舒巴坦匹酸",
+            "阿莫西林双氯西林","氨苄西林氯唑西林","氨苄西林舒巴坦","美洛西林舒巴坦","哌拉西林舒巴坦","哌拉西林他唑巴坦","舒他西林","舒他西林甲苯磺酸盐","替卡西林克拉维酸","头孢氨苄","头孢氨苄甲氧苄啶",
+            "头孢拉定","头孢硫脒","头孢羟氨苄","头孢羟氨苄甲氧苄啶","头孢羟氢苄","头孢噻吩","头孢替唑","头孢西酮","头孢唑林","五水头孢唑林","复方头孢克洛","克洛己新","头孢丙烯","头孢呋辛","头孢呋辛酯",
+            "头孢克洛","头孢克洛Ⅱ","头孢美唑","头孢孟多酯","头孢尼西","头孢替安","头孢西丁","氟氧头孢","拉氧头孢","头孢泊肟匹酯","头孢泊肟酯","头孢布烯","头孢地尼","头孢地嗪","头孢甲肟","头孢卡品",
+            "头孢克肟","头孢米诺","头孢哌酮","头孢哌酮舒巴坦","头孢哌酮他唑巴坦","头孢匹胺","头孢曲松","头孢曲松他唑巴坦","头孢噻肟","头孢噻肟舒巴坦","头孢他啶","头孢他啶他唑巴坦","头孢他美酯",
+            "头孢特仑新戊酯","头孢妥仑匹酯","头孢唑肟","头孢曲松舒巴坦","头孢吡肟","头孢匹罗","氨曲南","比阿培南","厄他培南","法罗培南","美罗培南","帕尼培南倍他米隆","亚胺培南西司他丁","头孢噻利",
+            "甲氧苄啶","磷酸素钠甲氧苄啶","磺胺二甲嘧啶","小儿复方磺胺二甲嘧啶","复方磺胺嘧啶","磺胺甲恶唑","磺胺嘧啶","磺胺索嘧啶","磺胺对甲氧嘧啶","磺胺多辛","磺胺间甲氧嘧啶","磺胺林","颠茄黄苄啶",
+            "复方磺胺对甲氧嘧啶","复方磺胺甲噁唑","复方磺胺间甲氧嘧啶","磺啶冰黄","联磺甲氧苄啶","小儿复方磺胺甲噁唑","小儿复方磺胺嘧啶","小儿双磺甲氧苄啶","小儿双嘧啶","阿奇霉素","阿奇霉素Ⅱ",
+            "阿奇霉素枸橼酸二氢钠","阿奇霉素磷酸二氢钠","阿奇霉素氯化钠","阿奇霉素葡萄糖","地红霉素","红霉素","琥乙红霉素","环酯红霉素","吉他霉素","交沙霉素","克拉霉素","罗红霉素","罗红霉素Ⅱ",
+            "螺旋霉素","麦白霉素","美欧卡霉素","依托红霉素","乙酰吉他霉素","乙酰螺旋霉素","乙酰麦迪霉素","克林霉素","克林霉素氯化钠","克林霉素葡萄糖","克林霉素磷酸酯","克林霉素棕榈酸酯","林可霉素",
+            "林可霉素氯化钠","林可霉素葡萄糖","链霉素","阿米卡星","阿米卡星氯化钠","丁胺卡那霉素","复方庆大霉素普鲁卡因","复方庆大霉素普鲁卡因维生素B12","核糖霉素","卡那霉素","奈替米星","奈替米星葡萄糖",
+            "庆大霉素","庆大霉素甲氧苄啶","庆大霉素氯化钠","庆大霉素碳酸铋","庆大霉素硝酸铋","妥布霉素","妥布霉素氯化钠","西索米星","西索米星氯化钠","小儿庆大霉素","小诺霉素","依替米星","依替米星氯化钠",
+            "异帕米星","安妥沙星","巴洛沙星","氟罗沙星","氟罗沙星甘露醇","氟罗沙星葡萄糖","氟哌酸","谷氨酸诺氟沙星","谷氨酸诺氟沙星氯化钠","环丙沙星","环丙沙星氯化钠","环丙沙星葡萄糖","吉米沙星",
+            "加替沙星","加替沙星氯化钠","加替沙星葡萄糖","芦氟沙星","洛美沙星","洛美沙星氯化钠","洛美沙星葡萄糖","莫西沙星","莫西沙星氯化钠","诺氟沙星","诺氟沙星葡萄糖","帕珠沙星","帕珠沙星氯化钠",
+            "培氟沙星","培氟沙星葡萄糖","普卢利沙星","司氟沙星","司帕沙星","托氟沙星","氧氟沙星","氧氟沙星甘露醇","氧氟沙星氯化钠","氧氟沙星葡萄糖","依诺沙星","左氧氟沙星","左氧氟沙星氯化钠",
+            "左氧氟沙星葡萄糖","吡哌酸","萘啶酸","罗红霉素氨溴索","庆大霉素二氧化锆","去甲万古霉素","替考拉宁","万古霉素","多粘菌素","多粘菌素B","夫西地酸","奥硝唑","奥硝唑氯化钠","奥硝唑葡萄糖",
+            "苯酰甲硝唑","甲硝唑","甲硝唑芬布芬","甲硝唑呋喃唑酮","甲硝唑氯化钠","甲硝唑氯己定","甲硝唑葡萄糖","甲硝唑葡萄糖氯化钠","甲硝唑维B6","咪唑酸乙酯","人工牛黄甲硝唑","替硝唑","替硝唑氯化钠",
+            "替硝唑葡萄糖","左奥硝唑","左奥硝唑氯化钠","二维呋喃唑酮","呋喃妥因","呋喃唑酮","复方雪胆呋喃唑酮","达托霉素","大观霉素","复方磷霉素","抗敌素","利奈唑胺","利奈唑胺葡萄糖","磷霉素","磷霉素氨丁三醇",
+            "磷霉素钙甲氧苄啶","黏菌素","乌洛托品","粘菌素","鱼腥草素","大蒜素","两性霉素B","咪康唑","酮康唑","伏立康唑","氟康唑","氟康唑氯化钠","氟康唑葡萄糖","伊曲康唑","制霉素","氟胞嘧啶",
+            "氟胞嘧啶氯化钠","卡泊芬净","米卡芬净","对氨基水杨酸钙","对氨基水杨酸钠","卷曲霉素","利福布汀","利福定","利福霉素","利福霉素钠氯化钠","利福喷丁","利福平","利福平(Ⅱ)","环丝氨酸",
+            "对氨基水杨酸异烟肼","帕司烟肼(对氨基水杨酸异烟肼)","帕司烟肼","异烟肼","异烟肼氯化钠","异烟肼维B6","异烟腙","丙硫异烟胺","氨硫脲","吡嗪酰胺","母牛分枝杆菌","乙胺丁醇","烟肼丁醇",
+            "乙胺吡嗪利福异烟","乙胺吡嗪利福异烟(Ⅱ)","乙胺吡嗪利福异烟Ⅱ","乙胺利福异烟","异福(利福平异烟肼)","异福","异福酰胺","氨苯砜","醋氨苯砜","氯法齐明","头孢他定","利福昔明","特比萘芬"
     );
     // 化疗药物目录
     public static List<String> chemotherapyDrugList = Arrays.asList(
-            "盐酸表柔比星", "盐酸吡柔比星", "环磷酰胺", "卡铂注射液", "奥沙利铂", "阿糖胞苷", "盐酸吉西他滨", "甲氨蝶呤",
-            "盐酸伊立替康", "紫杉醇注射液", "培美曲塞二钠", "高三尖杉酯碱注射液", "硫酸长春地辛", "多西他赛注射液", "曲普瑞林", "盐酸博来霉素", "地西他滨",
-            "盐酸伊立替康注射液", "盐酸托泊替康", "氟尿嘧啶", "达卡巴嗪", "醋酸戈舍瑞林缓释植入剂", "顺铂注射液"
+            "苯丁酸氮芥","氮芥","复方环磷酰胺","甘磷酰芥","环磷酰胺","美法仑","硝卡芥","异环磷酰胺","白消安","福莫司汀","卡莫司汀","洛莫司汀","尼莫司汀","司莫司汀","达卡巴嗪",
+            "氮甲","二溴甘露醇","塞替派","替莫唑胺","氨基蝶呤","甲氨蝶呤","雷替曲塞","培美曲塞","氟达拉滨","复方氨基嘌呤","克拉屈滨","硫鸟嘌呤","巯嘌呤","阿糖胞苷","地西他滨",
+            "氟尿嘧啶","氟尿嘧啶氯化钠","氟尿嘧啶葡萄糖","氟脲苷","复方氟尿嘧啶","吉西他滨","卡莫氟","卡培他滨","尿嘧啶替加氟","去氧氟尿苷","替吉奥","替加氟","替加氟氯化钠","长春地辛",
+            "长春碱","长春瑞滨","长春新碱","替尼泊苷","依托泊苷","托泊替康","伊立替康","多西他赛","紫杉醇","紫杉醇(白蛋白结合型)","斑蝥酸钠","斑蝥酸钠维生素B6","草乌甲素","高三尖杉酯碱",
+            "高三尖杉酯碱氯化钠","甲基斑蝥胺","榄香烯","羟基喜树碱","羟基喜树碱氯化钠","羟喜树碱","去甲斑蝥素","去甲斑蝥酸钠","去甲斑蝥酸钠氯化钠","三尖杉酯碱","放线菌素D","新福菌素",
+            "阿霉素","阿柔比星","吡柔比星","表柔比星","多柔比星","米托蒽醌","柔红霉素","米托蒽醌葡萄糖","盐酸米托蒽醌葡萄糖","伊达比星","博来霉素","平阳霉素","丝裂霉素","奥沙利铂","奥沙利铂甘露醇",
+            "卡铂","洛铂","奈达铂","顺铂","顺铂氯化钠","丙卡巴肼","贝伐珠单抗","利妥昔单抗","曲妥珠单抗","西妥昔单抗","英夫利昔单抗","重组抗CD25人源化单克隆抗体","甘氨双唑","马蔺子素",
+            "达沙替尼","厄洛替尼","吉非替尼","尼洛替尼","舒尼替尼","索拉非尼","伊马替尼","埃克替尼","A群链球菌","安吖啶","博安霉素","雌莫司汀","红色诺卡氏菌细胞壁骨架","甲异靛","六甲蜜胺",
+            "绿脓杆菌","氯氧喹","门冬酰胺酶","尿多酸肽","培门冬酶","硼替佐米","羟基脲","去水卫矛醇","拓扑替康","小牛脾提取物","血卟啉","亚砷酸(三氧化二砷)","亚砷酸氯化钠","因卡膦酸二钠",
+            "重组改构人肿瘤坏死因子","重组人5型腺病毒","重组人p53腺病毒","重组人血管内皮抑制素","左旋门冬酰胺酶","甘氨双唑钠","尼妥珠单抗","阿帕替尼","阿比特龙","阿法替尼","阿那曲唑","阿昔替尼",
+            "阿扎胞苷","阿扎司琼","安多霖","安罗替尼","安替可","氨磷汀","巴利昔单抗","斑蝥素","贝伐珠","比卡鲁胺","单磷酸阿糖腺苷","氟他胺","氟维司群","戈舍瑞林","格拉司琼","华蟾素","金葡素",
+            "聚乙二醇化重组人粒细胞刺激因子","克唑替尼","拉帕替尼","来那度胺","来曲唑","芦可替尼","美司钠","培美曲塞二钠","培唑帕尼","苹果酸舒尼替尼","瑞戈非尼","塞瑞替尼","他莫昔芬","托瑞米芬",
+            "托烷司琼","西达本胺","伊布替尼","伊沙佐米","依维莫司","依西美坦","重组人白介素","紫杉醇脂质体","左亚叶酸钙","亮丙瑞林",
+            "硫唑嘌呤","紫杉醇注射液","紫杉醇(脂质体)","紫杉醇(白蛋白结合型)","帕妥珠单抗","吡咯替尼","奥拉帕利","尼拉帕利","奥希替尼","阿来替尼","卡瑞利珠单抗","信迪利单抗","特瑞普利单抗",
+            "度伐利尤单抗","曲普瑞林","三氧化二砷","甲磺酸伊马替尼胶囊","甲磺酸伊马替尼片","注射用恩美曲妥珠单抗","帕妥珠单抗注射液","贝伐珠单抗注射液","马来酸吡咯替尼片","奥拉帕利片","甲苯磺酸尼拉帕利胶囊",
+            "达沙替尼片","盐酸安罗替尼胶囊","吉非替尼片","马来酸阿法替尼片","甲磺酸奥希替尼片","克唑替尼胶囊","盐酸阿来替尼胶囊","西妥昔单抗注射液","甲苯磺酸索拉非尼片","瑞戈非尼片",
+            "注射用卡瑞利珠单抗","信迪利单抗注射液","特瑞普利单抗注射液","度伐利尤单抗注射液","贝伐","替雷利珠单抗注射液","替雷利珠"
+    );
+    //恶性肿瘤疾病
+    public static List<String> TumorDiseaseList = Arrays.asList(
+            "动态未定肿瘤","恶性肿瘤","转移性肿瘤","溃疡恶变","息肉恶变","恶性瘤细胞","小细胞型恶性肿瘤","巨细胞型恶性肿瘤","梭形细胞型恶性肿瘤","转移性梭形细胞型恶性肿瘤","原位癌","癌",
+            "转移性癌","上皮内癌","恶性上皮瘤","大细胞癌","转移性大细胞癌","大细胞神经内分泌癌","转移性大细胞神经内分泌癌","具有杆状显型大细胞癌","玻璃状细胞癌","未分化型癌","转移性未分化癌",
+            "癌,间变","多形性癌","转移性多形性癌","多形性肉瘤样癌","巨细胞和梭型细胞癌","巨细胞癌","转移性巨细胞癌","梭形细胞癌","转移性梭形细胞癌","假肉瘤性癌","转移性假肉瘤性癌","肉瘤样癌",
+            "转移性肉瘤样癌","多角细胞癌","转移性多角细胞癌","破骨细胞样巨细胞癌","微小瘤","小细胞癌","转移性小细胞癌","小细胞神经内分泌癌","圆形细胞癌","储备细胞癌","燕麦细胞癌","小细胞癌,梭形细胞",
+            "小细胞癌,中间细胞","小细胞-大细胞癌","转移性小细胞-腺癌","小细胞-腺癌","小细胞-鳞状细胞癌","混合小细胞癌","非小细胞癌","转移性非小细胞癌","乳头状瘤","乳头状原位癌","乳头状癌",
+            "转移性乳头状癌","疣状乳头状瘤","疣状癌","转移性疣状癌","疣状鳞状细胞癌","鳞状细胞乳头状瘤","乳头状鳞状细胞原位癌","乳头状鳞状细胞癌","转移性乳头状鳞状细胞癌","内翻性乳头状瘤",
+            "内翻性乳头状瘤癌变","转移性内翻性乳头状瘤癌变","乳头状瘤病","鳞状细胞原位癌","鳞状细胞癌","转移性鳞状细胞癌","角化性鳞状细胞癌","转移性角化性鳞状细胞癌","角化性大细胞鳞状细胞癌",
+            "非角化性大细胞鳞状细胞癌","转移性非角化性大细胞鳞状细胞癌","非角化性小细胞鳞状细胞癌","梭形细胞鳞状细胞癌","腺样鳞状细胞癌","转移性腺样鳞状细胞癌","鳞状细胞原位癌,伴可疑间质侵袭",
+            "微小侵袭性鳞状细胞癌","鳞状上皮内肿瘤,3级","宫颈上皮内肿瘤,Ⅲ级","阴道上皮内肿瘤,Ⅲ级","外阴上皮内肿瘤,Ⅲ级","肛门上皮内肿瘤,Ⅲ级","鳞状细胞癌,伴角质形成","凯拉增殖性红斑","鲍恩病",
+            "淋巴上皮癌","转移性淋巴上皮癌","淋巴上皮瘤样癌","基底样鳞状细胞癌","鳞状细胞癌,明细胞型","基底细胞瘤","基底细胞癌","转移性基底细胞癌","多中心性基底细胞癌","硬斑性基底细胞癌",
+            "纤维上皮性基底细胞癌","基底鳞状细胞癌","转移性基底鳞状细胞癌","异型癌","转移性异型癌","雅达逊表皮内上皮瘤","基底细胞癌,结节性","转移性基底细胞癌,结节性","腺样基底癌","转移性腺样基底癌",
+            "毛发上皮瘤","毛囊瘤","毛根鞘瘤","毛根鞘瘤,交界性","毛鞘癌","转移性毛根鞘癌","毛发瘤","增生性毛鞘囊肿","增生性毛鞘囊肿恶变","毛基质瘤","毛基质癌","移行细胞乳头状瘤",
+            "膀胱上皮乳头状瘤","移行细胞原位癌","移行细胞癌","转移性移行细胞癌","膀胱息肉","施奈德乳头状瘤","翻转型移行细胞乳头状瘤","施奈德癌","梭形细胞移行细胞癌","基底细胞样癌","转移性基底细胞样腺癌",
+            "泄殖腔源性癌","潜在低度恶性乳头状尿路上皮肿瘤","非侵袭性乳头状移行细胞癌","乳头状移行细胞癌","转移性乳头状移行细胞癌","非浸润性乳头状尿路上皮癌","微乳头状移行细胞癌","转移性微乳头状移行细胞癌",
+            "腺瘤","支气管腺瘤","原位腺癌","腺癌","转移性腺癌","非典型腺瘤","硬腺癌","转移性硬腺癌","皮革状胃","表面扩散性腺癌","肠型腺癌","弥漫型癌","单形性腺瘤","基底细胞腺瘤","基底细胞腺癌",
+            "腺状上皮内肿瘤,3级","前列腺上皮内肿瘤,3级","胰岛细胞腺瘤","胰岛细胞瘤","胰岛细胞癌","转移性胰岛细胞癌","胰岛素瘤","恶性胰岛素瘤","转移性胰岛素瘤","恶性高血糖素瘤","转移性高血糖素瘤",
+            "胃泌素瘤","恶性胃泌素瘤","转移性胃泌素瘤","混合性导管-内分泌癌","混合性胰岛细胞和外分泌腺癌","胰腺瘤","恶性胰腺瘤","转移性胰腺瘤","生长抑素瘤","恶性生长抑素瘤","转移性生长抑素瘤",
+            "肠高血糖素瘤","恶性肠高血糖素瘤","转移性肠高血糖素瘤","胆管腺瘤","胆管原位癌","胆管癌","转移性胆管癌","胆管囊腺瘤","胆管囊腺癌","克拉特斯金瘤","肝细胞腺瘤","肝细胞癌","转移性肝细胞癌",
+            "纤维板状肝细胞癌","硬癌性肝细胞癌","肝细胞癌,梭型细胞变体","肝细胞癌,明细胞型","多形型肝细胞癌","混合性肝细胞癌和胆管癌","转移性混合性肝细胞癌和胆管癌","小梁性腺瘤","小梁性腺癌",
+            "胚胎性腺瘤","外分泌性皮肤圆柱瘤","腺样囊性癌","转移性腺样囊性癌","筛状原位癌","筛状癌","转移性筛状癌","微小囊性腺瘤","泌乳腺瘤","腺瘤样息肉","腺瘤样息肉内原位腺癌","腺瘤样息肉内腺癌",
+            "管状腺瘤内的原位腺癌","腺瘤样息肉,癌变","腺瘤样息肉内的原位癌","管状腺瘤内的腺癌","管状腺瘤","管状腺瘤内原位癌","管状腺癌","转移性管状腺癌","扁平腺瘤","锯齿状腺瘤","壁细胞癌","肛门腺腺癌",
+            "结肠腺瘤样息肉病","结肠腺瘤样息肉病内腺癌","家族性结肠息肉病","家族性息肉病,癌变","腺瘤病","腺瘤病癌变","多发性腺瘤样息肉","多发性腺瘤样息肉内腺癌","实体型导管原位癌","实性癌",
+            "转移性实性癌","单纯癌","转移性单纯癌","阑尾类癌","恶性类癌","转移性类癌","嗜银细胞瘤","神经内分泌肿瘤","嗜银性类癌","恶性嗜银性类癌","肠嗜铬样细胞类癌","恶性肠嗜铬样细胞类癌","杯形细胞类癌",
+            "黏液性类癌","复合性类癌","混合性类癌和腺癌","混合性腺神经内分泌癌","混合性腺鳞癌和神经内分泌癌","管状类癌","腺类癌瘤","神经内分泌癌","转移性神经内分泌癌","梅克尔细胞癌",
+            "原发性皮肤神经内分泌癌","APUD瘤","非典型类癌性瘤","转移性非典型类癌性瘤","肺腺瘤病","细支气管-肺泡腺癌","转移性细支气管-肺泡腺癌","肺泡腺瘤","肺泡腺癌","转移性肺泡腺癌",
+            "细支气管肺泡癌,非黏蛋白性","细支气管肺泡癌,黏蛋白性","细支气管肺泡癌,黏蛋白性和非黏蛋白性","腺癌,伴混合性亚型","乳头状腺瘤","乳头状腺癌","转移性乳头状腺癌","绒毛状腺瘤","绒毛状腺瘤内原位腺癌",
+            "绒毛状腺瘤内腺癌","绒毛状腺癌","转移性绒毛状腺癌","管状绒毛状腺瘤","管状绒毛状腺瘤内原位腺癌","管状绒毛状腺瘤内腺癌","绒毛腺性腺瘤","管状绒毛状腺癌","腺状乳头状瘤病","嫌色细胞腺瘤","嫌色细胞癌",
+            "转移性嫌色细胞癌","催乳素瘤","垂体腺瘤","侵袭性垂体腺瘤","垂体癌","嗜酸细胞腺瘤","嗜酸细胞癌","转移性嗜酸细胞癌","混合性嗜酸-嗜碱细胞腺瘤","混合性嗜酸-嗜碱细胞癌","转移性混合性嗜酸-嗜碱细胞癌",
+            "嗜酸性腺瘤","嗜酸性腺癌","转移性嗜酸性腺癌","嗜碱细胞腺瘤","嗜碱细胞癌","转移性嗜碱细胞癌","黏液样细胞腺癌","透明细胞腺瘤","透明细胞腺癌","转移性透明细胞腺癌","中肾样型透明细胞癌","肾上腺样瘤",
+            "肾细胞癌","转移性肾细胞癌","乳头状肾细胞癌","明细胞腺纤维瘤","交界恶性明细胞腺纤维瘤","富脂质癌","富糖原癌","囊性相关肾细胞癌","嫌色细胞型肾细胞癌","肉瘤样肾细胞癌","集合管癌","颗粒细胞癌",
+            "转移性颗粒细胞癌","主细胞腺瘤","水样明细胞腺瘤","水样明细胞腺癌","转移性水样明细胞腺癌","混合细胞腺瘤","混合细胞腺癌","转移性混合细胞腺癌","混合性管状腺癌和黏液腺癌",
+            "混合性宫内膜样腺癌和黏液性腺癌","混合性宫内膜样腺癌和透明细胞癌","脂肪腺瘤","后肾腺瘤","滤泡性腺瘤","非典型滤泡性腺瘤","滤泡性腺癌","转移性滤泡性腺癌","高分化滤泡性腺癌",
+            "小梁性滤泡性腺癌","胎儿腺瘤","胎儿腺癌","微滤泡性腺瘤","胶样腺瘤","巨滤泡性腺瘤","微侵袭性滤泡性腺癌","透明小梁性腺瘤","岛回癌","乳头状滤泡性腺癌","转移性乳头状滤泡性腺癌",
+            "乳头状微小癌","转移性乳头状微小癌","嗜酸细胞乳头状癌","包膜性乳头状癌","柱状细胞乳头状癌","髓样癌,伴淀粉样基质","混合性髓样-滤泡性癌","混合性髓样-乳头状癌","无包膜硬化性癌",
+            "多发性内分泌腺瘤","多发性内分泌腺瘤,1型","多发性内分泌腺瘤,2a型","多发性内分泌腺瘤,2b型","球旁细胞瘤","肾上腺皮质腺瘤","肾上腺皮质腺癌","转移性肾上腺皮质细胞癌",
+            "肾上腺皮质腺瘤,致密细胞","肾上腺皮质腺瘤,富色素变异","肾上腺皮质腺瘤,明细胞","肾上腺皮质腺瘤,小球细胞","肾上腺皮质腺瘤,混合细胞","子宫内膜样腺瘤","交界恶性子宫内膜样腺瘤",
+            "子宫内膜样腺癌","转移性子宫内膜样腺癌","子宫内膜样腺纤维瘤","交界恶性子宫内膜样腺纤维瘤","恶性子宫内膜样腺纤维瘤","转移性子宫内膜样腺纤维瘤","分泌变异性子宫内膜样腺癌",
+            "纤毛细胞变异性子宫内膜样腺癌","宫颈内膜型腺癌","皮肤附属器腺瘤","皮肤附属器癌","毛囊周纤维瘤","汗管纤维腺瘤","汗腺腺瘤","汗腺瘤","汗腺腺癌","转移性汗腺腺癌","顶泌性腺瘤",
+            "顶泌性腺癌","透明细胞汗腺腺瘤","外分泌性汗腺腺瘤","汗腺囊瘤","乳头状汗腺腺瘤","乳头状汗管腺瘤","汗管瘤","外分泌性乳头状腺瘤","侵袭性指[趾]乳头状腺瘤","外分泌性乳头状腺癌",
+            "汗腺汗孔瘤","汗孔癌","皮脂腺腺瘤","皮脂腺腺癌","外分泌性腺癌","耵聍腺瘤","耵聍腺癌","黏液表皮样瘤","黏液表皮样癌","转移性黏液表皮样癌","囊腺瘤","囊腺癌","转移性囊腺癌",
+            "浆液性囊腺瘤","浆液性囊腺癌","转移性浆液性囊腺癌","交界性浆液性囊腺瘤","交界恶性浆液性囊腺瘤","交界转移性浆液性囊腺瘤","交界性浆液性肿瘤","明细胞囊腺瘤","交界恶性明细胞囊性瘤",
+            "乳头状囊腺瘤","乳头状囊腺癌","转移性乳头状囊腺癌","交界恶性乳头状囊腺瘤","实性假乳头状瘤","实性假乳头状癌","转移性实性假乳头状癌","乳头状囊性瘤","导管内乳头状黏液腺瘤",
+            "导管内乳头状黏液瘤伴有发育不良","导管内乳头状黏液癌,非侵袭性","导管内乳头状黏液癌,侵袭性","房室结囊性瘤","乳头状浆液性囊腺瘤","乳头状浆液性囊腺癌","转移性乳头状浆液性囊腺癌",
+            "浆液性表面乳头状瘤","浆液性表面乳头状癌","交界恶性乳头状浆液性囊腺瘤","交界恶性表面乳头状浆液性囊腺瘤","黏液性囊腺瘤","黏液性囊腺瘤伴有中度发育不良","黏液性囊腺癌",
+            "转移性黏液性囊腺癌","交界性粘液性囊腺瘤","假黏液性腺癌","乳头状黏液性囊腺瘤","乳头状黏液性囊腺癌","转移性乳头状黏液性囊腺癌","交界粘液性肿瘤","交界恶性黏液性囊腺瘤",
+            "交界恶性乳头状黏液性囊腺瘤","黏液腺瘤","黏液腺癌","转移性黏液腺癌","乳头状黏液腺癌","腹膜假黏液瘤","产黏液性腺癌","宫颈内型黏液腺癌","印戒细胞癌","转移性印戒细胞癌",
+            "克鲁肯贝格瘤","导管内癌","浸润性导管癌","转移性导管癌","导管腺癌","非浸润性粉刺癌","粉刺癌","转移性粉刺癌","乳房幼年型癌","导管内乳头状瘤","导管内乳头状癌","导管内乳头状腺癌伴侵袭",
+            "非浸润性导管内乳头状癌","囊内乳头状腺瘤","非浸润性囊内癌","囊内癌","转移性囊内癌","导管内乳头状瘤病","乳头的腺瘤 ","导管内微乳头状癌","囊性分泌亢进性癌","实性乳头状癌","髓样癌","转移性髓样癌",
+            "髓样癌伴淀粉样间质","髓样癌伴淋巴样间质","非典型性髓样癌","促结缔组织增生型导管癌","小叶原位癌","浸润性小叶癌","转移性小叶浸润性癌","浸润性小管癌","导管内癌和小叶原位癌","浸润性导管和小叶癌",
+            "浸润性导管和黏液癌","转移性浸润性导管和粘液癌","浸润性导管和筛状癌","浸润性导管和管状癌","浸润性导管和胶样癌","浸润性导管癌和微乳头状癌","浸润性小叶癌和其他类型癌","多形性低度腺癌","炎性癌",
+            "转移性炎性癌","乳房佩吉特病","转移性乳房佩吉特病","乳房佩吉特病和浸润性导管癌","转移性乳房佩吉特病和浸润性导管癌","乳房外佩吉特病","转移性乳房外佩吉特病","乳房佩吉特病和导管内癌",
+            "转移性乳房佩吉特病和导管内癌","腺泡细胞腺瘤","腺泡细胞瘤","腺泡细胞癌","转移性腺泡细胞癌","腺泡细胞囊腺癌","腺鳞癌","转移性腺鳞癌","腺淋巴瘤","上皮-肌上皮癌","转移性上皮-肌上皮癌",
+            "腺棘皮癌","转移性腺棘皮癌","腺癌,伴鳞状化生","腺癌,伴软骨和骨化生","腺癌,伴梭形细胞化生","腺癌,伴顶泌性汗腺化生","腺癌,伴神经内分泌分化","化生性癌","上皮/间叶混合性化生性癌","肝样腺癌",
+            "胸腺瘤","恶性胸腺瘤","转移性胸腺瘤","化生型胸腺瘤","胸腺瘤,A型","恶性胸腺瘤,A型","胸腺瘤,AB型","恶性胸腺瘤,AB型","胸腺瘤,B1型","恶性胸腺瘤,B1型","胸腺瘤,B2型","恶性胸腺瘤,B2型",
+            "胸腺瘤,B3型","恶性胸腺瘤,B3型","转移性恶性胸腺瘤,B3型","胸腺瘤,C型","异位错构瘤性胸腺瘤","梭形上皮性瘤,伴胸腺样成分","癌,表现出胸腺样成分","性索-性腺间质瘤","卵巢间质瘤",
+            "性索-性腺间质瘤,不完全分化","性索-性腺间质瘤,混合形式","混合性颗粒细胞瘤","间质瘤,伴小性索成分","泡膜细胞瘤","恶性泡膜细胞瘤","转移性泡膜细胞瘤","黄体化泡膜细胞瘤","硬化性间质瘤","黄体瘤",
+            "卵泡细胞瘤","恶性卵泡细胞瘤","转移性卵泡细胞瘤","卵泡细胞-膜细胞瘤","幼年型卵泡细胞瘤","性索瘤伴环状小管","男性母细胞瘤","恶性男性母细胞瘤","转移性男性母细胞瘤","塞尔托利-莱迪细胞瘤",
+            "塞尔托利-莱迪细胞瘤,中分化","塞尔托利-莱迪细胞瘤,低分化","两性母细胞瘤","塞尔托利-莱迪细胞瘤,网状","塞尔托利-莱迪细胞瘤,中分化,伴异种成分","塞尔托利-莱迪细胞瘤,低分化,伴异种成分",
+            "塞尔托利细胞瘤","塞尔托利细胞癌","塞托利细胞瘤,伴脂质贮积","莱迪细胞瘤","恶性莱迪细胞瘤","转移性莱迪细胞瘤","卵巢门细胞瘤","卵巢脂质细胞瘤","肾上腺剩余瘤","节旁体瘤","恶性节旁体瘤",
+            "转移性节旁体瘤","交感神经节旁体瘤","副交感神经节旁体瘤","神经节细胞性节旁体瘤","颈静脉血管球瘤","主动脉体瘤","颈动脉体瘤","化学感受器瘤","恶性化学感受器瘤","转移性化学感受器瘤",
+            "肾上腺外节旁体瘤","恶性肾上腺外节旁体瘤","嗜铬细胞瘤","恶性嗜铬细胞瘤","转移性嗜铬细胞瘤","嗜铬母细胞瘤","血管球肉瘤","血管球瘤","交界性血管球瘤","血管球性血管瘤","血管球肌瘤","血管肌周细胞瘤",
+            "血管周上皮样细胞分化肿瘤","色素痣","原位黑色素瘤","恶性黑色素瘤","转移性黑色素瘤","毛痣","结节性黑色素瘤","气球细胞痣","气球细胞黑色素瘤","晕样痣","退行性恶性黑色素瘤","鼻纤维性丘疹","神经痣",
+            "巨细胞痣","发育不良痣","脑膜黑色素细胞瘤","无色素痣","无色素性黑色素瘤","交界痣","交界痣内恶性黑色素瘤","癌前黑素沉着病","癌前黑素沉着病内恶性黑色素瘤","哈奇森黑素雀斑",
+            "哈奇森黑素雀斑内恶性黑色素瘤","表面扩散性黑色素瘤","恶性肢端着色斑性黑色素瘤","恶性促结缔组织增生性黑色素瘤","皮内痣","复合痣","巨大色素痣","巨大色素痣内恶性黑色素瘤",
+            "先天性痣内增生型皮肤损害","上皮样细胞和梭形细胞痣","混合性上皮样和梭状细胞黑色素瘤","上皮样细胞痣","上皮样细胞黑色素瘤","梭形细胞痣","梭形细胞黑色素瘤","梭形细胞黑色素瘤,A型",
+            "梭形细胞黑色素瘤,B型","蓝痣","恶性蓝痣","雅达松蓝痣","细胞性蓝痣","巨蓝痣","肉瘤","转移性肉瘤","肉瘤病","梭形细胞肉瘤","转移性梭形细胞肉瘤","巨细胞肉瘤(除外骨 M9250/3)",
+            "转移性巨细胞肉瘤","小细胞肉瘤","上皮样细胞肉瘤","未分化肉瘤","促结缔组织增生性小圆细胞瘤","转移性促结缔组织增生性小圆细胞瘤","纤维瘤","细胞性纤维瘤","纤维肉瘤","转移性纤维肉瘤",
+            "真皮纤维瘤","骨纤维瘤","纤维黏液瘤","黏液炎性纤维母细胞肿瘤","纤维黏液肉瘤","骨膜纤维瘤","骨膜纤维肉瘤","筋膜纤维瘤","掌(跖)纤维瘤病","筋膜纤维肉瘤","婴儿性纤维肉瘤","孤立性纤维性瘤",
+            "孤立性纤维性肿瘤","恶性孤立性纤维性瘤","转移性恶性孤立性纤维性瘤","交界性孤立性纤维性瘤","孤立性纤维性瘤,恶性","弹力纤维瘤","硬纤维瘤","侵蚀性纤维瘤病","腹部纤维瘤病","骨韧带状瘤",
+            "促结缔组织增生性纤维瘤","肌纤维瘤","肌纤维瘤病","先天性全身性纤维瘤病","肌纤维母细胞瘤","炎性肌纤维母细胞瘤","肌纤维母细胞肉瘤","血管肌纤维母细胞瘤","支气管周肌纤维母细胞性瘤",
+            "纤维组织细胞瘤","非典型性纤维组织细胞瘤","恶性纤维组织细胞瘤","转移性纤维组织细胞瘤","纤维黄色瘤","组织细胞瘤","皮肤纤维瘤","皮肤纤维肉瘤","硬化性血管瘤","色素沉着性隆凸性皮肤纤维肉瘤",
+            "巨细胞纤维母细胞瘤","丛状纤维组织细胞性瘤","血管瘤样纤维组织细胞瘤","黏液瘤","低级别黏液性肿瘤","黏液肉瘤","转移性黏液肉瘤","肌内黏液瘤","血管黏液瘤","脂肪瘤","非典型脂肪瘤","脂肪肉瘤",
+            "转移性脂肪肉瘤","纤维脂肪肉瘤","纤维脂肪瘤","高分化型脂肪肉瘤","软纤维瘤","黏液脂肪瘤","黏液样脂肪肉瘤","纤维黏液脂肪瘤","圆细胞脂肪肉瘤","多形性脂肪瘤","多形性脂肪肉瘤","混合型脂肪肉瘤",
+            "肌内脂肪瘤","浸润性脂肪瘤","梭形细胞脂肪瘤","梭型细胞脂肪肉瘤","去分化型脂肪肉瘤","血管肌脂肪瘤","血管肌脂肪瘤,恶变","血管脂肪瘤","软骨样脂肪瘤","骨髓脂肪瘤","蛰伏脂瘤","脂肪母细胞瘤病",
+            "脂肪母细胞瘤","平滑肌瘤","平滑肌瘤病","平滑肌肉瘤","转移性平滑肌肉瘤","血管平滑肌瘤病","上皮样平滑肌瘤","上皮样平滑肌肉瘤","平滑肌母细胞瘤","细胞性平滑肌瘤","奇异性平滑肌瘤","血管肌瘤",
+            "血管肌肉瘤","肌瘤","黏液样平滑肌肉瘤","平滑肌肿瘤","横纹肌瘤","横纹肌肉瘤","转移性横纹肌肉瘤","多形型横纹肌肉瘤","混合型横纹肌肉瘤","胎儿横纹肌瘤","成人横纹肌瘤","生殖器横纹肌瘤",
+            "胚胎型横纹肌肉瘤","转移性胚胎性横纹肌肉瘤","葡萄样肉瘤","梭形细胞横纹肌肉瘤","小泡型横纹肌肉瘤","横纹肌肉瘤伴神经节分化","子宫内膜间质结节","子宫内膜间质肉瘤","转移性子宫内膜间质肉瘤",
+            "淋巴管内性间质异位症","腺肌瘤","非典型性息肉样腺肌瘤","腺肉瘤","转移性腺肉瘤","癌性纤维瘤","转移性癌性纤维瘤","间质性瘤","间质性肉瘤","转移性间质性肉瘤","胃肠道间质性瘤,潜在恶性未肯定",
+            "恶性胃肠道间质性瘤","转移性胃肠道间质性瘤","胃肠道间质肉瘤","多形性腺瘤","恶性混合瘤","转移性混合瘤","软骨样汗管瘤","涎腺型混合瘤","多形性腺瘤内癌","苗勒混合瘤","中胚层混合瘤","转移性中胚层混合瘤",
+            "囊性部分分化性肾母细胞瘤","恶性囊性肾瘤","转移性囊性肾瘤","中胚层性肾瘤","肾母细胞瘤","转移性肾母细胞瘤","杆状肉瘤","肾明细胞肉瘤","转移性肾明细胞肉瘤","肾源性腺纤维瘤","肾髓性间质细胞瘤",
+            "骨化性肾瘤","肝母细胞瘤","转移性肝母细胞瘤","胰母细胞瘤","转移性胰母细胞瘤","肺母细胞瘤","转移性肺母细胞瘤","胸膜肺母细胞瘤","涎母细胞瘤","癌肉瘤","转移性癌肉瘤","胚胎性癌肉瘤","肌上皮瘤",
+            "肌上皮性癌","转移性肌上皮样癌","腺肌上皮瘤","间叶瘤","恶性间叶瘤","转移性间叶瘤","混合性间叶瘤","胚胎性肉瘤","转移性胚胎性肉瘤","布伦纳瘤","交界恶性布伦纳瘤","恶性布伦纳瘤",
+            "转移性恶性布伦纳瘤","纤维腺瘤","小管内纤维腺瘤","小管周纤维腺瘤","腺纤维瘤","腺纤维瘤,癌变","乳头状腺纤维瘤","浆液性腺纤维瘤","交界恶性浆液性腺纤维瘤","浆液性腺癌性纤维瘤",
+            "交界恶性浆液性囊性腺纤维瘤","黏液性腺纤维瘤","交界性黏液性腺纤维瘤","巨大纤维腺瘤","叶状囊肉瘤","恶性叶状囊肉瘤","转移性叶状囊肉瘤","幼年型纤维腺瘤","滑膜肉瘤","转移性滑膜肉瘤",
+            "梭形细胞滑膜肉瘤","上皮样细胞滑膜肉瘤","双相分化滑膜肉瘤","透明细胞肉瘤(除外肾的M8964/3)","转移性透明细胞肉瘤","恶性间皮瘤","转移性间皮瘤","恶性纤维性间皮瘤","恶性上皮样间皮瘤",
+            "恶性双相分化间皮瘤","腺瘤样瘤","囊性间皮瘤","无性细胞瘤","转移性无性细胞瘤","精原细胞瘤","转移性精原细胞瘤","间变精原细胞瘤","精母细胞性精原细胞瘤","转移性精母细胞性精原细胞瘤",
+            "生殖细胞瘤","转移性生殖细胞瘤","非精原细胞瘤样生殖细胞瘤","胚胎性癌","转移性胚胎性癌","内胚窦瘤","转移性内胚窦瘤","睾丸母细胞瘤","多胚瘤","性腺母细胞瘤","畸胎瘤","恶性畸胎瘤",
+            "转移性畸胎瘤","畸胎癌","未分化恶性畸胎瘤","中分化恶性畸胎瘤","皮样囊肿","皮样囊肿恶变","畸胎瘤伴恶性变","混合性生殖细胞瘤","转移性混合性生殖细胞瘤","混合型畸胎瘤和精原细胞瘤",
+            "卵巢甲状腺肿","恶性卵巢甲状腺肿","转移性恶性卵巢甲状腺肿","甲状腺肿性类癌","葡萄胎","侵袭性葡萄胎","绒毛膜癌","转移性绒毛膜癌","绒毛膜癌伴畸胎瘤","滋养细胞恶性畸胎瘤","部分性葡萄胎",
+            "胎盘部位滋养细胞瘤","上皮样滋养层肿瘤","中肾性瘤","恶性中肾瘤","转移性中肾瘤","血管瘤","血管肉瘤","转移性血管肉瘤","海绵状血管瘤","海绵状痣","静脉血管瘤","葡萄状血管瘤","动静脉血管瘤",
+            "库普弗细胞肉瘤","上皮样血管瘤","组织细胞样血管瘤","血管内皮瘤","恶性血管内皮瘤","转移性血管内皮瘤","毛细血管瘤","丛状血管瘤","肌内血管瘤","上皮样血管内皮瘤","恶性上皮样血管内皮瘤",
+            "血管内支气管肺泡瘤","血管内乳头状血管内皮瘤","梭形细胞血管内皮瘤","卡波西肉瘤","血管角质瘤","疣性角化性血管瘤","血管外皮细胞瘤","恶性血管外皮细胞瘤","转移性血管外皮细胞瘤",
+            "血管纤维瘤","巨细胞血管纤维瘤","成血管细胞瘤","淋巴管瘤","淋巴管肉瘤","转移性淋巴管肉瘤","毛细淋巴管瘤","海绵状淋巴管瘤","囊性淋巴管瘤","淋巴管肌瘤","淋巴管肌瘤病","血管淋巴管瘤",
+            "骨瘤","骨肉瘤","转移性骨肉瘤","成软骨细胞性骨肉瘤","成纤维细胞性骨肉瘤","转移性成纤维细胞性骨肉瘤","毛细血管扩张性骨肉瘤","骨佩吉特病骨肉瘤","小细胞骨肉瘤","中心骨肉瘤",
+            "骨内高分化骨肉瘤","骨旁骨肉瘤","骨样骨瘤","骨膜外骨肉瘤","骨膜骨肉瘤","高等级表面骨肉瘤","皮质内骨肉瘤","成骨细胞瘤","侵袭性成骨细胞瘤","骨软骨瘤","骨软骨瘤病","骨软骨瘤恶变",
+            "奇异性骨旁骨软骨瘤样增生","软骨瘤","软骨瘤病","软骨肉瘤","转移性软骨肉瘤","软骨黏液肉瘤","近皮质软骨瘤","近皮质软骨肉瘤","滑膜软骨瘤病","成软骨细胞瘤","恶性成软骨细胞瘤",
+            "转移性成软骨细胞瘤","黏液样软骨肉瘤","转移性黏液性软骨肉瘤","间质性软骨肉瘤","转移性间质性软骨肉瘤","软骨黏液样纤维瘤","明细胞软骨肉瘤","去分化软骨肉瘤","骨巨细胞瘤","恶性骨巨细胞瘤",
+            "转移性骨巨细胞瘤","软组织巨细胞瘤","恶性软组织巨细胞瘤","转移性软组织巨细胞瘤","腱鞘巨细胞瘤","弥漫性腱鞘巨细胞瘤","尤因肉瘤","转移性尤因肉瘤","长骨釉质瘤","转移性长骨釉质瘤","骨化性纤维瘤",
+            "纤维骨瘤","牙源性瘤","恶性牙源性瘤","转移性牙源性瘤","牙本质瘤","牙骨质瘤","牙骨质化性纤维瘤","巨形牙骨质瘤","牙瘤","混合性牙瘤","复合性牙瘤","成釉细胞纤维牙瘤","成釉细胞牙肉瘤",
+            "转移性成釉细胞牙肉瘤","腺瘤样牙源性瘤","腺性成釉细胞瘤","钙化性牙源性囊肿","牙源性形骸细胞瘤","成釉细胞瘤","恶性成釉细胞瘤","转移性成釉细胞瘤","牙成釉细胞瘤","鳞状牙源性瘤","牙源性黏液瘤",
+            "中心牙源性纤维瘤","周围牙源性纤维瘤","成釉细胞纤维瘤","成釉细胞纤维肉瘤","钙化上皮性牙源性瘤","牙源性明细胞瘤","牙源性癌肉瘤","颅咽管瘤","釉质上皮瘤样颅咽管瘤","乳头状颅咽管瘤",
+            "松果体瘤","松果体细胞瘤","成松果体细胞瘤","转移性成松果体细胞瘤","黑变病神经外胚瘤","周围性神经外胚瘤","转移性周围性神经外胚瘤","阿斯金瘤","脊索瘤","转移性脊索瘤","软骨样脊索瘤",
+            "去分化脊索瘤","旁脊索瘤","神经胶质瘤","转移性神经胶质瘤","大脑神经胶质瘤病","混合性神经胶质瘤","室管膜下神经胶质瘤","室管膜下巨细胞星形细胞瘤","弥漫性中线胶质瘤","脉络丛乳头状瘤",
+            "非典型性脉络丛乳头状瘤","恶性脉络丛乳头状瘤","转移性脉络丛乳头状瘤","室管膜瘤","转移性室管膜瘤","间变室管膜瘤","成室管膜细胞瘤","乳头状室管膜瘤","黏液乳头状室管膜瘤","星形细胞瘤",
+            "转移性星形细胞瘤","间变性星形细胞瘤","转移性间变性星形细胞瘤","原浆性星形细胞瘤","大圆细胞性星形细胞瘤","促结缔组织增生性婴儿星形细胞瘤","纤维性星形细胞瘤","毛细胞性星形细胞瘤,交界恶性",
+            "毛细胞性星形细胞瘤","幼年型星形细胞瘤","成胶质细胞瘤","转移性成胶质细胞瘤","极性成胶质细胞瘤","多形性黄色星形细胞瘤","成星形细胞瘤","成神经胶质细胞瘤","转移性成(神经)胶质细胞瘤",
+            "巨细胞成(神经)胶质细胞瘤","神经胶质纤维瘤","神经胶质肉瘤","原始极性成胶质细胞瘤","脊索状神经胶质瘤","少突神经胶质细胞瘤","转移性少突神经胶质细胞瘤","间变型少突神经胶质细胞瘤",
+            "成少突神经胶质细胞瘤","成神经管细胞瘤","转移性成神经管细胞瘤","促结缔组织增生性成神经管细胞瘤","成髓样肌细胞瘤","原始神经外胚瘤","转移性原始神经外胚瘤","大细胞髓母细胞瘤",
+            "转移性大细胞髓母细胞瘤","小脑肉瘤","转移性小脑肉瘤","畸形细胞性肉瘤","神经节瘤","神经节神经母细胞瘤","转移性神经节神经母细胞瘤","神经节瘤病","神经节细胞瘤","成神经细胞瘤",
+            "转移性成神经细胞瘤","髓上皮瘤","转移性髓上皮瘤","畸胎样髓上皮瘤","神经上皮瘤","转移性神经上皮瘤","海绵状成神经细胞瘤","神经节神经胶质瘤","神经细胞瘤","神经细胞瘤(中央型)",
+            "中枢神经细胞瘤,恶性","中枢神经细胞瘤","帕西尼瘤","非典型性胚胎样/杆状瘤","乳头状胶质神经元肿瘤","成视网膜细胞瘤","转移性视网膜母细胞瘤","已分化成视网膜细胞瘤","未分化成视网膜细胞瘤",
+            "视网膜母细胞瘤,弥漫性","视网膜母细胞瘤,自然消退","嗅神经源性瘤","转移性嗅神经源性瘤","感觉神经细胞瘤","成感觉神经细胞瘤","转移性成感觉神经细胞瘤","感觉神经上皮瘤","脑(脊)膜瘤",
+            "脑(脊)膜瘤病","恶性脑膜瘤","转移性脑膜瘤","恶性脊膜瘤","转移性脊膜瘤","脑膜性脑(脊)膜瘤","纤维性脑(脊)膜瘤","沙粒体性脑(脊)膜瘤","血管瘤性脑(脊)膜瘤","成血管细胞性脑(脊)膜瘤",
+            "血管外皮细胞性脑(脊)膜瘤","移行细胞性脑(脊)膜瘤","乳头状脑(脊)膜瘤","透明细胞脑(脊)膜瘤","非典型脑膜瘤","脑(脊)膜肉瘤病","神经纤维瘤","神经纤维瘤病","神经纤维肉瘤","转移性神经纤维肉瘤",
+            "环层小体神经纤维瘤","黑变病神经纤维瘤","丛状神经纤维瘤","神经鞘瘤","神经鞘瘤病","恶性神经鞘瘤","转移性神经鞘瘤","恶性蝾螈瘤","神经鞘黏液瘤","神经瘤","神经束瘤","恶性神经束瘤","转移性神经束瘤",
+            "颗粒细胞瘤","恶性颗粒细胞瘤","转移性颗粒细胞瘤","颗粒细胞肌母细胞瘤","软组织腺泡状肉瘤","转移性软组织腺泡状肉瘤","鞍区颗粒细胞瘤","恶性淋巴瘤","T-细胞淋巴瘤","B-细胞淋巴瘤","非霍奇金淋巴瘤",
+            "淋巴肉瘤","网状细胞肉瘤","小神经胶质细胞瘤","弥漫性淋巴瘤","复合性霍奇金和非霍奇金淋巴瘤","原发性皮肤毛囊中心淋巴瘤","霍奇金病","霍奇金淋巴瘤,富淋巴细胞性","混合细胞型霍奇金病",
+            "混合细胞型霍奇金病,经典型","淋巴细胞减少型霍奇金病","淋巴细胞减少型霍奇金病,经典型","淋巴细胞减少型霍奇金病,弥漫性纤维化","淋巴细胞减少型霍奇金病,弥漫性纤维化,经典型","网状淋巴细胞减少型霍奇金病",
+            "网状淋巴细胞减少型霍奇金病,经典型","淋巴细胞为主型霍奇金病","弥漫性淋巴细胞为主型霍奇金病","结节性淋巴细胞为主型霍奇金病","霍奇金副肉芽肿","霍奇金肉芽肿","霍奇金肉瘤",
+            "结节硬化型霍奇金病","结节硬化富细胞相霍奇金病","结节硬化淋巴细胞为主型霍奇金病","结节硬化混合细胞性霍奇金病","结节硬化淋巴细胞减少性霍奇金病","弥漫性小细胞型淋巴瘤","小淋巴细胞性淋巴瘤",
+            "淋巴浆细胞性淋巴瘤","弥漫性小核裂细胞性淋巴瘤","恶性淋巴瘤,淋巴细胞性,中分化,弥漫性","中心细胞性淋巴瘤","小细胞和大细胞混合型弥漫性恶性淋巴瘤","弥漫性中心母细胞-中心细胞性恶性淋巴瘤",
+            "恶性淋巴瘤性息肉病","原发渗出性淋巴瘤","纵隔大B细胞淋巴瘤","胸腺大B细胞淋巴瘤","大细胞淋巴瘤","弥漫性大细胞淋巴瘤","血管内大B细胞淋巴瘤","弥漫大B细胞淋巴瘤","T细胞组织细胞丰富型大B细胞淋巴瘤",
+            "间变性大B细胞淋巴瘤","弥漫性大细胞核裂淋巴瘤","弥漫性大细胞无核裂淋巴瘤","弥漫性中心母细胞性淋巴瘤","免疫母细胞性淋巴瘤","浆母细胞淋巴瘤","恶性淋巴瘤,大B细胞,弥漫性,免疫母细胞性",
+            "原淋巴细胞性淋巴瘤","弥漫性小细胞无核裂淋巴瘤","伯基特淋巴瘤","伯基特淋巴瘤NOS","脾缘区B细胞淋巴瘤","脾边缘带淋巴瘤","滤泡性淋巴瘤","混合细胞型滤泡性淋巴肉瘤","滤泡性中心母细胞-中心细胞性淋巴瘤",
+            "结节性淋巴细胞性高分化淋巴瘤","结节性淋巴细胞性中分化淋巴瘤","小核裂细胞滤泡性淋巴瘤","结节性淋巴细胞性低分化淋巴瘤","中心母细胞性滤泡性淋巴瘤","滤泡性大细胞淋巴瘤","边缘区B细胞淋巴瘤",
+            "结内边缘带B细胞淋巴瘤","结外边缘带B细胞淋巴瘤","与黏膜有关的淋巴样组织淋巴瘤","与支气管有关的淋巴样组织淋巴瘤","与皮肤有关的淋巴样组织淋巴瘤","蕈样真菌病","塞扎里病","外周T细胞淋巴瘤",
+            "大细胞外周T-细胞淋巴瘤","间变大细胞T-细胞淋巴瘤,ALK阴性","T-区恶性淋巴瘤","淋巴上皮样淋巴瘤","伦纳特淋巴瘤","外周T-细胞淋巴瘤,AILD","血管免疫母细胞性T细胞淋巴瘤","血管免疫母细胞性淋巴瘤",
+            "外周T细胞淋巴瘤,多形性小细胞","外周T细胞淋巴瘤,多形性中等细胞和大细胞","皮下脂膜炎样T细胞淋巴瘤","皮肤淋巴瘤","肉芽肿性皮肤松弛症","皮肤T细胞淋巴瘤","单核细胞样B细胞淋巴瘤","血管内皮瘤病",
+            "血管中心性T-细胞淋巴瘤","恶性网状细胞增多症","大细胞(ki-1+)淋巴瘤","间变性大细胞淋巴瘤,ALK阳性","间变性大细胞淋巴瘤","肝脾T细胞淋巴瘤","肝脾γ-δ细胞淋巴瘤","肠T细胞淋巴瘤",
+            "与肠病相关的T-细胞淋巴瘤","原发皮肤CD30+T细胞淋巴瘤","原发皮肤间变性大细胞淋巴瘤","自然杀伤/T细胞淋巴瘤","恶性组织细胞增多症","急性分化性进行性组织细胞增多症","急性婴儿期网状内皮细胞增多症",
+            "真性组织细胞淋巴瘤","全身EBV阳性T细胞淋巴增生疾病,童年","EB病毒相关性NK细胞增生症","种痘样水疱病样淋巴瘤","原发皮肤γδ-T细胞淋巴瘤","前体细胞淋巴母细胞性淋巴瘤","淋巴母细胞瘤",
+            "前体B细胞淋巴母细胞性淋巴瘤","前体T细胞淋巴母细胞性淋巴瘤","浆细胞瘤","孤立性骨髓瘤","浆细胞肉瘤","骨的孤立性浆细胞瘤","多发性骨髓瘤","多发性浆细胞骨髓瘤","骨髓瘤病","浆细胞白血病",
+            "髓外浆细胞瘤","ALK阳性大B细胞淋巴瘤","起源于HHV8相关多中心性Castleman病的大B细胞淋巴瘤","肥大细胞瘤","肥大细胞肉瘤","恶性肥大细胞增多症","恶性组织细胞增生症","朗格汉斯细胞组织细胞增生症",
+            "朗格汉斯细胞组织细胞增生症,单病灶","朗格汉斯细胞组织细胞增生症,多病灶","朗格汉斯细胞组织细胞增生症,播散性","组织细胞肉瘤","朗格汉斯细胞肉瘤","交错树突细胞肉瘤","小结滤泡树突细胞瘤",
+            "小结树突细胞肉瘤","纤维母细胞网状细胞肿瘤","免疫增生性疾病","瓦尔登斯特伦巨球蛋白血症","淋巴浆细胞淋巴瘤","沃尔丹斯特伦巨球蛋白血症","重链病","免疫增生性小肠病","单克隆丙种球蛋白病",
+            "血管中心性免疫增生性损害","血管中心性免疫增生性病变,恶性","血管免疫母细胞淋巴结病","T-γ淋巴组织增生性疾病","免疫球蛋白沉积病","免疫球蛋白沉积病,恶性","白血病","急性白血病","未分化细胞白血病",
+            "干细胞白血病","亚急性白血病","慢性白血病","非白血性白血病","急性混合细胞性白血病","混合表型急性白血病,伴t(9;22)(q34;q11.2);BCR-ABL1","混合表型急性白血病,伴t(v;11q23); MLL重排",
+            "混合表型急性白血病,伴B/髓样","混合表型急性白血病,伴T/髓样","B淋巴母细胞白血病/淋巴瘤,NOS","B淋巴母细胞白血病/淋巴瘤,t(9;22)(q34;q11.2);BCR-ABL1",
+            "B淋巴母细胞白血病/淋巴瘤,t(v;11q23); MLL 重排","B淋巴母细胞白血病/淋巴瘤,t(12;21)(p13;q22); TEL-AML1(ETV6-RUNX1)","B淋巴母细胞白血病/淋巴瘤,超二倍性",
+            "B淋巴母细胞白血病/淋巴瘤,亚二倍性(亚二倍性ALL)","B淋巴母细胞白血病/淋巴瘤,t(5;14)(q31;q32);IL3-IGH","B淋巴母细胞白血病/淋巴瘤,t(1;19)(q23;p13.3);E2A-PBX1(TCF3-PBX1)",
+            "淋巴样白血病","淋巴细胞性白血病","急性淋巴细胞性白血病","急性淋巴细胞性白血病,L1型","急性淋巴细胞性白血病,L2型","急性淋巴细胞性白血病,L3型","慢性粒细胞性白血病,急淋变",
+            "亚急性淋巴细胞性白血病","慢性淋巴细胞性白血病","非白血性淋巴细胞性白血病","幼淋巴细胞白血病","伯基特细胞白血病","成人T细胞白血病","浆细胞性白血病","T-细胞大颗粒淋巴细胞白血病",
+            "T细胞大颗粒淋巴细胞白血病","幼淋巴细胞白血病","幼淋巴细胞白血病,B细胞型","B-前淋巴细胞性白血病","幼淋巴细胞白血病,T细胞型","前体细胞淋巴细胞白血病","前体B细胞淋巴细胞白血病",
+            "前体T细胞淋巴细胞白血病","红白血病","急性红细胞增多症","慢性红细胞增多症","海尔迈尔-舍纳病","淋巴肉瘤细胞白血病","髓系白血病","急性髓系白血病","亚急性髓系白血病","慢性髓系白血病",
+            "慢性髓系白血病,急性发作","慢性中幼粒细胞性白血病","非白血性髓系白血病","急性髓系白血病,t(6;9)(p23;q34);DEK-NUP214","急性早幼粒细胞性白血病","复发性急性早幼粒细胞性白血病",
+            "急性粒单核细胞白血病","慢性粒单核细胞白血病","嗜碱细胞白血病","急性髓系白血病,伴异常骨髓嗜酸粒细胞","急性髓系白血病,最低分化","急性髓系白血病,不伴成熟","急性髓系白血病,伴成熟",
+            "慢性髓系白血病,BCR/ABL阳性","非典型性慢性髓系白血病,BCR/ABL阴性","嗜酸细胞白血病","单核细胞白血病","组织细胞白血病","急性单核细胞白血病","亚急性单核细胞白血病","慢性单核细胞白血病",
+            "慢性单核细胞白血病,急性加重","非白血性单核细胞白血病","急性髓系白血病,伴有多谱系发育不良","急性髓系白血病,t(8;21)(q22;q22);RUNX1-RUNX1T1","急性髓样白血病,11q23异常",
+            "髓样白血病伴唐氏综合征","肥大细胞白血病","急性原巨核细胞白血病","急性髓系白血病(巨核母细胞性),t(1;22)(p13;q13); RBM15-MKL1","髓样肉瘤","急性全骨髓增殖症","急性骨髓纤维化",
+            "多毛细胞白血病","白血病性网状内皮细胞增殖","幼年粒单核细胞白血病","侵袭性NK细胞白血病","真性红细胞增多症","慢性骨髓增殖性疾病","骨髓纤维化伴髓样化生","巨核细胞性骨髓硬化","特发性血小板增多症",
+            "慢性中性粒细胞白血病","慢性嗜酸性细胞白血病","髓样和淋巴样肿瘤,伴PDGFRA重排","髓样肿瘤伴PDGFRB重排","髓样和淋巴样肿瘤,FGFR1","淋巴组织增生性疾病","淋巴增生性疾病,恶性","难治性贫血",
+            "难治性贫血,单系病态造血","难治性贫血,伴环形铁粒幼细胞","难治性贫血,多系病态造血","难治性贫血,伴原始细胞增多","骨髓增生异常综合征"
     );
     // 放疗药物目录
     public static List<String> radiotherapyDrugList = Arrays.asList(
-            "艾迪注射液", "康艾注射液", "康莱特注射液", "鸦胆子油乳注射液", "榄香烯乳注射液", "香菇多糖", "胎盘多肽注射液", "甘露聚糖肽注射液",
-            "脾多肽注射液", "E巨和粒", "欣粒生", "特尔津", "日达仙注射剂", "益比奥", "特比澳", "胸腺五肽", "古拉定","天晴甘美", "易善复", "己糖神经节苷脂钠",
-            "核糖核酸II", "参芪扶正注射液", "甘露醇注射液", "兰索拉唑", "奥西康", "卡络磺钠注射液", "维生素K1注射液", "氨甲苯酸注射液", "酚磺乙胺注射液",
-            "盐酸甲氧氯普胺注", "甲磺酸托烷司琼注射液", "伊班膦酸钠注射液", "唑来膦酸", "盐酸氨溴索注射液","氨茶碱注射液", "孟鲁司特钠片", "阿托伐他汀钙片",
-            "阿卡波糖片", "盐酸二甲双胍片", "瑞格列奈片", "格列齐特片","拉米夫定片","耐信","益血生胶囊","地榆升白片", "鲨肝醇片", "复方皂矾丸", "加巴喷丁胶囊",
-            "塞来昔布胶囊", "氨酚曲马多片", "盐酸羟考酮缓释片","硫酸吗啡缓释片", "盐酸吗啡片","复方甲氧那明胶囊","醋酸甲地孕酮分散","枸橼酸托瑞米芬片","标准桃金娘油肠溶",
-            "甲氧氯普胺片","多潘立酮片"
+            "放射性胶体金[198Au]","来昔决南钐[153Sm]","氯化锶[89Sr]","锶[89Sr]二氯化锶","碘[125I]密封籽源","胶体磷[32P]酸铬","磷[32P]酸钠","钯[103Pd]种籽"
     );
+
+    /**
+     * 抢救药物  维护修改
+     */
+
+    public static List<String> RESCUEDRUGLIST = Arrays.asList(
+            "尼可刹米","可拉明","盐酸洛贝林","山梗菜碱","肾上腺素","阿拉明", "重酒石酸间羟胺", "多巴胺", "利血平", "25%硫酸镁注射液", "垂体后叶素","注射用血凝酶", "阿托品","氯解磷定注射液","盐酸纳洛酮","异丙嗪", "非那更","地西泮", "安定","20%甘露醇");
+
     /**
      *   临床用血
      */
@@ -390,4 +635,7 @@ public class Content {
      */
     public static List<String> NUMBERLIST = Arrays.asList(
             "枚","支","块","个");
+
+
 }
+