Sfoglia il codice sorgente

义乌妇幼新增规则上传

wangsy 3 anni fa
parent
commit
c80bbebd0a

+ 4 - 4
dbanaly/src/main/resources/application-debug.yml

@@ -5,7 +5,7 @@ spring:
     druid:
       lantone:
         driver-class-name: com.mysql.jdbc.Driver
-        url: jdbc:mysql://192.168.2.237:3306/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
+        url: jdbc:mysql://192.168.2.237:3307/qc?useUnicode=true&characterEncoding=utf8&useSSL=false
         username: root
         password: lantone
         initial-size: 8
@@ -30,9 +30,9 @@ spring:
     database:
       cache: 10 # cache索引
       token: 10 # Token索引
-    host: 192.168.2.236  #Redis服务器地址
-    port: 6379 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
-    password: lantone # Redis服务器连接密码(默认为空)
+    host: 192.168.2.237  #Redis服务器地址
+    port: 63791 # Redis服务器连接端口(本地环境端口6378,其他环境端口是6379)
+    password: emrais # Redis服务器连接密码(默认为空)
     lettuce:
       pool:
         max-active: 8 # 连接池最大连接数(使用负值表示没有限制)

+ 3 - 8
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03335.java

@@ -32,13 +32,11 @@ public class BEH03335 extends QCCatalogue {
         /**
          * 1.查证【入院记录】>>【初步诊断】或【补充诊断】或【修正诊断】中是否有诊断能匹配【妊娠合并子宫瘢痕/妊娠合并子宫疤痕/剖宫产瘢痕妊娠/子宫瘢痕处妊娠/剖宫产史的妊娠/妊娠合并宫颈瘢痕】中任一疾病名称,或能匹配正则【pdzz--是否妊娠合并子宫瘢痕的正则】,有则继续。
          *
-         * 2.查证【入院记录】>>【体格检查/体查/专科检查/体检/腹部检查】中,是否有切口愈合情况描述,通过能否匹配正则【pdzz--是否有切口愈合情况描述的正则】判定(病历举例:“腹部切口愈合良好”“切口*愈合”“腹*刀口*愈合”“腹*见*手术切口”“腹*见*术*疤痕”“腹*术*瘢痕”),否则提示。
+         * 2.查证【入院记录】>>【体格检查/体查/专科检查/体检/腹部检查】中,是否有切口愈合情况描述,通过能否匹配正则【pdzz--是否有切口愈合情况描述的正则】判定(病历举例:“腹部切口愈合良好”“切口*愈合”“腹*刀口*愈合”“腹*见*手术切口”“腹*见*术*疤痕”“腹*术*瘢痕”),否则提示。
          *
          * */
         status.set("0");
         List<String> diagListWords = Content.JBLB_RZZGBH;
-        //切口愈合情况描述
-        List<String> diagListQkWords = Content.JBLB_RZZGBH;
         //获取入院记录
         BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
         if (beHospitalizedDoc == null) {
@@ -89,11 +87,8 @@ public class BEH03335 extends QCCatalogue {
         //获取体格检查
         VitalLabel vitalLabel = beHospitalizedDoc.getVitalLabel();
         if (vitalLabel != null) {
-            for (String word : diagListQkWords) {
-                if (vitalLabel.getText().contains(word) && vitalLabel.getText().matches(QKRex)) {
-                    flag = false;
-                    break;
-                }
+            if (vitalLabel.getText().matches(QKRex)) {
+                flag = false;
             }
         }
         if (flag) {

+ 78 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC03311.java

@@ -0,0 +1,78 @@
+package com.lantone.qc.kernel.catalogue.firstcourserecord;
+
+import com.google.common.collect.Lists;
+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.FirstCourseRecordDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+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;
+
+/**
+ * @ClassName : FIRC03311
+ * @Description :  首次病程录性别和诊断不符(异位妊娠)
+ * @Author : wsy
+ * @Date: 2022-04-15 15:51
+ */
+@Component
+public class FIRC03311 extends QCCatalogue {
+
+    private List<String> icdCodeList = Lists.newArrayList("男", "男性", "1", "1男", "1男性", "1.男");
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 1.查证【首次病程录】,有则继续
+         * 2.查证【首次病程录】>>【初步诊断】或【补充诊断】或【修正诊断】,中是否有诊断能匹配【异位妊娠-疾病列表】中任一疾病名称,或能匹配正则【pdzz--是否异位妊娠的正则】,有则继续。
+         * 3.查证【首次病程录】>>【性别】字段内容, 字段内容为【男#男性#1#1男#1男性#1.男#1.男性】任一,则提示。
+         *
+         *  */
+        status.set("0");
+        //异位妊娠-疾病列表
+        List<String> diagListWords = Content.JBLB_YWRS;
+        //获取首次病程记录
+        FirstCourseRecordDoc firstCourseRecordDoc = inputInfo.getFirstCourseRecordDoc();
+        if (firstCourseRecordDoc == null) {
+            return;
+        }
+        //匹配疾病正则
+        String rex = Content.PDZZ_YWRS;
+        //创建存储能匹配疾病的集合
+        List<String> diagList = new ArrayList<>();
+        //获取首次病程记录中诊断
+        //初步诊断
+        String initialDiagText = firstCourseRecordDoc.getStructureMap().get("初步诊断");
+        //补充诊断
+        String suppleDiagText = firstCourseRecordDoc.getStructureMap().get("补充诊断");
+        //修正诊断
+        String revisedDiagText = firstCourseRecordDoc.getStructureMap().get("修正诊断");
+        if (StringUtil.isNotBlank(initialDiagText) && diagListWords.contains(initialDiagText) && initialDiagText.matches(rex)) {
+            diagList.add(initialDiagText);
+        }
+        if (StringUtil.isNotBlank(suppleDiagText) && diagListWords.contains(suppleDiagText) && suppleDiagText.matches(rex)) {
+            diagList.add(suppleDiagText);
+        }
+        if (StringUtil.isNotBlank(revisedDiagText) && diagListWords.contains(revisedDiagText) && revisedDiagText.matches(rex)) {
+            diagList.add(revisedDiagText);
+        }
+        //如果疾病集合为空则直接返回
+        if (ListUtil.isEmpty(diagList)) {
+            return;
+        }
+        //性别
+        String gender = firstCourseRecordDoc.getStructureMap().get(Content.gender);
+
+        if (icdCodeList.contains(gender)) {
+            status.set("-1");
+            return;
+        }
+
+    }
+}

+ 78 - 11
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP0199.java

@@ -1,12 +1,19 @@
 package com.lantone.qc.kernel.catalogue.firstpagerecord;
 
+import com.alibaba.fastjson.JSONArray;
+import com.google.common.collect.Lists;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.Content;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.doc.MedicalRecordInfoDoc;
 import com.lantone.qc.pub.util.StringUtil;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Component;
 
+import java.util.List;
 import java.util.Map;
 
 /**
@@ -15,24 +22,84 @@ import java.util.Map;
  * @Author : 胡敬
  * @Date: 2020-03-14 16:30
  */
+@Slf4j
 @Component
 public class FIRP0199 extends QCCatalogue {
+    private List<String> icdCodeList = Lists.newArrayList("Z37.0", "Z37.2", "Z37.3", "Z37.5", "Z37.6");
+
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         *判断“新生儿出生体重”是否填写(以下任一满足)
+         * 1.查证【住院信息表】或【病案首页的(出院科室/出院科别)】是否为包含(产科/新生儿科)任一字段存在时,“新生儿出生体重”必填
+         * 2.查证病历内是否存在包含【新生儿评分/分娩记录/剖宫产】文书时,“新生儿出生体重”必填。
+         * 3.【病案首页】>>(年龄不足一周岁的)【年龄】为小于等于28天的,“新生儿出生体重”必填。
+         * 4.【病案首页】主要诊断或其他诊断编码中包含有(Z37.0/Z37.2/Z37.3/Z37.5/Z37.6)任一编码为开头时,“新生儿出生体重”必填。
+         *
+         * */
         status.set("0");
-        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
-            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
-            /*
-            String infantAgeMonths = firstpageStructureMap.get(Content.newbornAgeMonths);
-            String infantAgeDays = firstpageStructureMap.get(Content.newbornAgeDays);
-            if (CatalogueUtil.isEmpty(infantAgeMonths) && CatalogueUtil.isEmpty(infantAgeDays)) {
-                return;
+        //科室
+        String behDeptName = "";
+        //获取病案首页
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        //获取住院信息
+        MedicalRecordInfoDoc medicalRecordInfoDoc = inputInfo.getMedicalRecordInfoDoc();
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+        //新生儿出生体重
+        String newbornWeight = firstpageStructureMap.get(Content.newbornWeight);
+        //出院科别
+        String outDept = firstpageStructureMap.get(Content.outDept);
+        //年龄
+        String age = firstpageStructureMap.get(Content.age);
+        if (StringUtil.isNotBlank(newbornWeight)) {
+            return;
+        }
+        if (StringUtil.isNotBlank(outDept) && (outDept.contains("产科") || outDept.contains("新生儿科"))) {
+            status.set("-1");
+            return;
+        }
+
+        if (age.contains("天")) {
+            try {
+                int day = Integer.parseInt(age.replace("天", ""));
+                if (day <= 28) {
+                    status.set("-1");
+                    return;
+                }
+            } catch (Exception e) {
+                log.error("FIRP0199 类型转换错误" + e.getMessage(), e);
             }
+        }
 
-             */
-            String newbornWeight = firstpageStructureMap.get(Content.newbornWeight);
-            if (StringUtil.isBlank(newbornWeight)) {
-                status.set("-1");
+        String hospitalDiagnosis = firstpageStructureMap.get("出院诊断");
+        if (StringUtil.isNotEmpty(hospitalDiagnosis)) {
+            List<Map<String, String>> diagnosisMapList = (List<Map<String, String>>) JSONArray.parse(hospitalDiagnosis);
+            for (Map<String, String> diagnosisMap : diagnosisMapList) {
+                String diagnosisIcd = diagnosisMap.get("诊断编码");
+                if (StringUtil.isNotEmpty(diagnosisIcd)) {
+                    for (String icdCode : icdCodeList) {
+                        if (diagnosisIcd.startsWith(icdCode)) {
+                            status.set("-1");
+                            Map<String, Object> structureExtMap = inputInfo.getFirstPageRecordDoc().getStructureExtMap();
+                            String xmlId = CatalogueUtil.getXmlId(structureExtMap, Content.newbornWeight);
+                            id.set(xmlId);
+                            return;
+                        }
+                    }
+                }
             }
         }
+
+        if (medicalRecordInfoDoc != null) {
+            //住院科室名称
+            behDeptName = medicalRecordInfoDoc.getStructureMap().get("beh_dept_name");
+        }
+        if (StringUtil.isNotBlank(behDeptName) && (behDeptName.contains("产科") || behDeptName.contains("新生儿科"))) {
+            status.set("-1");
+            return;
+        }
+
     }
 }

+ 52 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03238.java

@@ -0,0 +1,52 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.google.common.collect.Lists;
+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.FirstCourseRecordDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.stereotype.Component;
+
+import java.util.List;
+
+/**
+ * @ClassName : FIRP03238
+ * @Description :  血型填写不在值域范围内
+ * @Author : wsy
+ * @Date: 2022-04-15 15:51
+ */
+@Component
+public class FIRP03238 extends QCCatalogue {
+
+    private List<String> bloodTypeList = Lists.newArrayList("A型", "B型", "O型", "AB型", "不详", "未查", "A", "B", "O", "AB", "1", "2", "3", "4", "5", "6");
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 1.查证【病案首页】,有则继续
+         * 2.查证【病案首页】>>【血型】字段内容为空则返回,内容为“-”,不为(A型/B型/O型/AB型/不详/未查/A/B/O/AB/1/2/3/4/5/6)内任一则触发规则。
+         *
+         *  */
+        status.set("0");
+        //获取病案首页
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        //血型
+        String bloodType = firstPageRecordDoc.getStructureMap().get(Content.bloodType);
+        if (StringUtil.isBlank(bloodType)) {
+            return;
+        }
+
+        if (bloodType.equals("-") || !bloodTypeList.contains(bloodType)) {
+            status.set("-1");
+            return;
+        }
+
+    }
+}

+ 56 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03310.java

@@ -0,0 +1,56 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.alibaba.fastjson.JSONArray;
+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.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.entity.Operation;
+import com.lantone.qc.pub.model.label.PastLabel;
+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;
+
+/**
+ * @ClassName : FIRP03310
+ * @Description :新生儿出生体重和分娩记录内不一致
+ * @Author : wsy
+ * @Date: 2022-04-15 15:51
+ */
+@Component
+public class FIRP03310 extends QCCatalogue {
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         *病案首页和分娩记录任一为空则通过
+         * 1.获取病案首页结构化数据"新生儿出生体重",若为空或“—”则返回。
+         * 2.查证【分娩记录】,获取新生儿>>体重(或新生儿体重)或体重*克,取阿拉伯数字与首页【新生儿出生体重】对比,不一致则提示。
+         *
+         * */
+        status.set("0");
+        String newbornWeight = "";
+        //获取病案首页
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        //获取分娩记录
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureMap() != null) {
+            Map<String, String> firstpageStructureMap = inputInfo.getFirstPageRecordDoc().getStructureMap();
+            newbornWeight = firstpageStructureMap.get(Content.newbornWeight);
+        }
+        
+        if (StringUtil.isBlank(newbornWeight) || newbornWeight.contains("-")) {
+            return;
+        }
+
+        //2.查证【分娩记录】,获取新生儿>>体重(或新生儿体重)或体重*克,取阿拉伯数字与首页【新生儿出生体重】对比,不一致则提示。
+
+    }
+}

+ 73 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstpagerecord/FIRP03312.java

@@ -0,0 +1,73 @@
+package com.lantone.qc.kernel.catalogue.firstpagerecord;
+
+import com.google.common.collect.Lists;
+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.FirstPageRecordDoc;
+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;
+
+/**
+ * @ClassName : FIRP03312
+ * @Description :  病案首页性别和诊断不符(异位妊娠)
+ * @Author : wsy
+ * @Date: 2022-04-15 15:51
+ */
+@Component
+public class FIRP03312 extends QCCatalogue {
+
+    private List<String> icdCodeList = Lists.newArrayList("男", "男性", "1", "1男", "1男性", "1.男");
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        /**
+         * 1.查证【病案首页】,有则继续
+         * 2.查证【病案首页】>>【出院诊断】或【门急诊诊断】或【门(急)诊诊断】或【门诊诊断】中是否有诊断能匹配【异位妊娠-疾病列表】中任一疾病名称,或能匹配正则【pdzz--是否异位妊娠的正则】,有则继续。
+         * 3.查证【病案首页】>>【性别】字段内容, 字段内容为【男#男性#1#1男#1男性#1.男】任一,则提示。
+         *
+         *  */
+        status.set("0");
+        //异位妊娠-疾病列表
+        List<String> diagListWords = Content.JBLB_YWRS;
+        //获取病案首页
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        if (firstPageRecordDoc == null) {
+            return;
+        }
+        //匹配疾病正则
+        String rex = Content.PDZZ_YWRS;
+        //创建存储能匹配疾病的集合
+        List<String> diagList = new ArrayList<>();
+        //获取病案首页疾病并判断
+        //获取出院诊断
+        List<Map<String, String>> leaveDiagList = (List) firstPageRecordDoc.getStructureExtMap().get(Content.operative_information);
+        if (leaveDiagList != null && leaveDiagList.size() != 0) {
+            leaveDiagList.stream().filter(diagMap -> StringUtil.isNotEmpty(diagMap.get("诊断名称")) && (diagListWords.contains(diagMap.get("诊断名称")) || diagMap.get("诊断名称").matches(rex))).forEach(diagMap ->
+                    diagList.add(diagMap.get("诊断名称")));
+        }
+        //门急诊诊断
+        String outpatientEmergencyDiag = firstPageRecordDoc.getStructureMap().get(Content.outpatientEmergencyDiag);
+        if (StringUtil.isNotBlank(outpatientEmergencyDiag) && diagListWords.contains(outpatientEmergencyDiag) && outpatientEmergencyDiag.matches(rex)) {
+            diagList.add(outpatientEmergencyDiag);
+        }
+        //如果疾病集合为空则直接返回
+        if (ListUtil.isEmpty(diagList)) {
+            return;
+        }
+        //性别
+        String gender = firstPageRecordDoc.getStructureMap().get(Content.gender);
+
+        if (icdCodeList.contains(gender)) {
+            status.set("-1");
+            return;
+        }
+
+    }
+}

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

@@ -33,7 +33,7 @@ public class FIRP03329 extends QCCatalogue {
         List<String> diagListWords = Content.JBLB_HYLS;
         //阴道或外阴(会阴)裂伤相关手术
         List<String> diagOpListWords = Content.OP_HYLS;
-        //获取出院小结
+        //获取病案首页
         FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
         if (firstPageRecordDoc == null) {
             return;

+ 1 - 1
kernel/src/main/resources/bootstrap.yml

@@ -12,7 +12,7 @@ spring:
       charset: UTF-8
       enabled: true
   profiles:
-    active: dev
+    active: debug
 
 qc:
   hospital_id: 1,2,3,4,5,6,7,8,10,13,15,20,34,36

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

@@ -728,10 +728,10 @@ public class Content {
     /**
      * pdzz--既往史是否有子宫瘢痕相关手术史正则
      */
-    public static String PDZZ_ZGBHOP = "(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?" +
+    public static String PDZZ_ZGBHOP = ".*(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?" +
             "[^。,;。,;未否无没不非]{0,10}(?:(?:曾行|行|做了|做过|有)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:剖宫产|剖腹产)|" +
             "(?:子宫|宫体)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:瘤|肿块|肿物)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?" +
-            "[^。,;。,;未否无没不非]{0,10}(?:摘除|切除))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t]))))";
+            "[^。,;。,;未否无没不非]{0,10}(?:摘除|切除))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t])))).*";
 
     /**
      * 胎膜早破--疾病列表
@@ -763,9 +763,9 @@ public class Content {
     /**
      * pdzz--阴道或外阴(会阴)裂伤
      */
-    public static String PDZZ_HYLS = "(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;" +
+    public static String PDZZ_HYLS = ".*(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;" +
             "未否无没不非]{0,10}(?:(?:会阴|外阴|阴道)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:裂伤|破裂|挫裂|撕裂))" +
-            "(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t]))))";
+            "(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t])))).*";
 
 
     /**
@@ -779,18 +779,18 @@ public class Content {
     /**
      * pdzz--阴道或外阴(会阴)裂伤相关手术
      */
-    public static String PDZZ_HYLSOP = "(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}" +
+    public static String PDZZ_HYLSOP = ".*(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}" +
             "(?:(?:会阴|外阴|阴道)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:裂伤|破裂|挫裂|撕裂)[^。,;。,;未否无没不非]{0,10}" +
             "(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:术|缝合术|缝合)|(?:会阴|外阴|阴道)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?" +
-            "[^。,;。,;未否无没不非]{0,10}(?:缝合))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t]))))";
+            "[^。,;。,;未否无没不非]{0,10}(?:缝合))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t])))).*";
 
     /**
      * pdzz--是否有切口愈合情况描述的正则
      */
-    public static String PDZZ_QKYHQKMS = "(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}" +
+    public static String PDZZ_QKYHQKMS = ".*(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}" +
             "(?:(?:会阴|外阴|阴道)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:裂伤|破裂|挫裂|撕裂)[^。,;。,;未否无没不非]{0,10}" +
             "(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:术|缝合术|缝合)|(?:会阴|外阴|阴道)[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?" +
-            "[^。,;。,;未否无没不非]{0,10}(?:缝合))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t]))))";
+            "[^。,;。,;未否无没不非]{0,10}(?:缝合))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t])))).*";
 
     /**
      * 孕产次-疾病列表
@@ -801,6 +801,23 @@ public class Content {
             "产7次", "产8次", "产9次", "产10次"
     );
 
+    /**
+     * 异位妊娠-疾病列表
+     */
+    public static List<String> JBLB_YWRS = Arrays.asList("腹腔妊娠", "大网膜妊娠", "输卵管妊娠", "宫内外复合妊娠", "输卵管伞端妊娠破裂", "输卵管复合妊娠", "输卵管妊娠流产", "输卵管妊娠破裂",
+            "输卵管残端妊娠破裂", "输卵管壶腹部妊娠", "输卵管壶腹部妊娠流产", "输卵管壶腹部妊娠破裂", "输卵管间质部妊娠", "输卵管间质部妊娠流产", "输卵管间质部妊娠破裂", "输卵管伞部妊娠", "输卵管伞部妊娠流产",
+            "输卵管伞端妊娠破裂", "输卵管峡部妊娠", "输卵管峡部妊娠流产", "输卵管峡部妊娠破裂", "陈旧性输卵管妊娠", "卵巢妊娠", "卵巢妊娠破裂", "异位妊娠,其他的", "子宫下段妊娠", "宫颈妊娠", "子宫瘢痕处妊娠",
+            "阔韧带妊娠", "残角子宫妊娠", "残角子宫妊娠破裂", "宫颈妊娠", "宫内外复合妊娠", "阔韧带妊娠", "子宫瘢痕处妊娠", "子宫壁妊娠", "子宫角妊娠", "异位妊娠", "持续性异位妊娠", "输卵管妊娠合并宫内孕", "输卵管伞部妊娠破裂",
+            "子宫颈妊娠", "剖宫产瘢痕妊娠", "韧带内妊娠"
+    );
+    /**
+     * pdzz--是否异位妊娠的正则
+     */
+    public static String PDZZ_YWRS = ".*(?<!([未否无没不非]|排除)[^。,;。,;]{0,20})[^。,;。,;未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;" +
+            "未否无没不非]{0,10}(?:(?:子宫下段|子宫颈|输卵管|卵巢|残角子宫|宫颈|宫内外|阔韧带|子宫瘢痕处|子宫壁|子宫角|异位)[^。,;。,;" +
+            "未否无没不非]{0,10}(未知|未明|淹没|没药|不对称|非对称)?[^。,;。,;未否无没不非]{0,10}(?:妊娠))(?!([^。,;。,;]{0,3}([::\\t](否|无|从不|从未|未发现|未见|未诉|没有)|" +
+            "(否|无|从不|从未|未发现|未见|未诉|没有)(\\\\b|[。,;。,;\\f\\n\\r\\t])))).*";
+
 
     /**
      * 获取时间正则