Explorar o código

义乌妇幼新增规则调试问题更新

wangsy %!s(int64=3) %!d(string=hai) anos
pai
achega
3241c9ab88

+ 19 - 9
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03330.java

@@ -13,7 +13,7 @@ import java.util.Date;
 
 /**
  * @ClassName : BEH03330
- * @Description : 入院记录预产期应为末次月经月份加9或减3,日子加8
+ * @Description : 入院记录预产期应为末次月经月份加9或减3,日子加7
  * @Author : wsy
  * @Date: 2022-04-14 17:28
  */
@@ -23,9 +23,9 @@ public class BEH03330 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         /**
-         * 1.查证【首次病程录】>>是否有“预产期”和“末次月经”两个字段,任一不存在则直接返回。
-         * 2.查证【首次病程录】>>【末次月经】字段内容,加280天计算出数值为“预产期”。
-         * 3.查证【首次病程录】>>【预产期】中的内容与计算出的“预产期”转换相同格式后时间一致或大于3天或小于1天则通过,否则提示。
+         * 1.查证【入院记录】,是否有“预产期”和“末次月经”两个字段,任一不存在则直接返回。
+         * 2.查证【入院记录】>>【末次月经】字段内容,加280天计算出数值为“预产期”。
+         * 3.查证【入院记录】>>【预产期】中的内容与计算出的“预产期”转换相同格式后时间一致或大于3天或小于1天则通过,否则提示。
          * */
         status.set("0");
         //获取入院记录
@@ -37,6 +37,16 @@ public class BEH03330 extends QCCatalogue {
         String eDOC = beHospitalizedDoc.getStructureMap().get("预产期");
         //末次月经
         String lastMP = beHospitalizedDoc.getStructureMap().get("末次月经");
+        //现病史
+        String present = beHospitalizedDoc.getStructureMap().get("现病史");
+        if (StringUtil.isNotBlank(present)) {
+            if (StringUtil.isBlank(eDOC) && present.contains("预产期")) {
+                eDOC = present.substring(present.indexOf("预产期"), present.indexOf("预产期") + 13).replace("预产期", "");
+            }
+            if (StringUtil.isBlank(lastMP) && present.contains("末次月经")) {
+                lastMP = present.substring(present.indexOf("末次月经"), present.indexOf("末次月经") + 14).replace("末次月经", "");
+            }
+        }
         if (StringUtil.isBlank(eDOC) || StringUtil.isBlank(lastMP)) {
             return;
         }
@@ -46,7 +56,7 @@ public class BEH03330 extends QCCatalogue {
             return;
         }
         try {
-            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");//定义格式
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义格式
             Calendar c = Calendar.getInstance();
 
             //添加末次月经时间
@@ -56,14 +66,14 @@ public class BEH03330 extends QCCatalogue {
             Date afterDate = StringUtil.parseDateTime(after);//日期转成Date格式
 
             c.setTime(lastMPDate);
-            c.add(Calendar.DATE,281);//给末次月经时间加281天
-            String before =sdf.format(c.getTime());
+            c.add(Calendar.DATE, 281);//给末次月经时间加281天
+            String before = sdf.format(c.getTime());
             Date beforeDate = StringUtil.parseDateTime(before);
 
             //判断预产期是否在正确的区间里
-            if (eDOCDate.after(afterDate) && eDOCDate.before(beforeDate) ){
+            if ((eDOCDate.after(afterDate) && eDOCDate.before(beforeDate)) || eDOCDate.equals(afterDate) || eDOCDate.equals(beforeDate)) {
                 return;
-            }else {
+            } else {
                 status.set("-1");
                 return;
             }

+ 16 - 4
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH03336.java

@@ -32,11 +32,13 @@ public class BEH03336 extends QCCatalogue {
         /**
          * 1.查证【入院记录】>>【初步诊断】或【补充诊断】或【修正诊断】中是否有【妊娠合并子宫瘢痕/妊娠合并子宫疤痕/剖宫产瘢痕妊娠/子宫瘢痕处妊娠/剖宫产史的妊娠/妊娠合并宫颈瘢痕】中任一疾病名称,或能匹配正则【pdzz--是否妊娠合并子宫瘢痕的正则】,有则继续。
          *
-         * 2.查证【入院记录】>>【既往史】中,是否有【子宫瘢痕相关病史描述】,通过能否匹配正则【pdzz--既往史是否有子宫瘢痕相关手术史正则】判定(病历举例:“曾行剖宫产”“剖宫产”“剖腹产”“子宫*术”“子宫*切”“子宫*摘除”“子宫*疤痕”“子宫*瘢痕”),否则提示。
-         *
+         * 2.查证【入院记录】>>【既往史】中,是否有【子宫瘢痕相关手术史】,通过能否匹配正则【pdzz--既往史是否有子宫瘢痕相关手术史正则】判定(病历举例:“曾行剖宫产”“剖宫产”“剖腹产”“子宫*术”“子宫*切”“子宫*摘除”“子宫*疤痕”“子宫*瘢痕”),否则提示。
          * */
         status.set("0");
+        //是否妊娠合并子宫瘢痕--疾病列表
         List<String> diagListWords = Content.JBLB_RZZGBH;
+        //子宫瘢痕相关手术史
+        List<String> OPListWords = Content.JBLB_ZGBHOP;
         //获取入院记录
         BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
         if (beHospitalizedDoc == null) {
@@ -45,7 +47,7 @@ public class BEH03336 extends QCCatalogue {
         //匹配[pdzz--是否妊娠合并子宫瘢痕的正则]
         String rex = Content.PDZZ_RZZGBH;
         //匹配[pdzz--既往史是否有子宫瘢痕相关手术史正则]
-        String QKRex = Content.PDZZ_ZGBHOP;
+        String OPRex = Content.PDZZ_ZGBHOP;
         //创建存储能匹配疾病的集合
         List<String> diagList = new ArrayList<>();
         //入院记录不为空,获取其诊断信息
@@ -91,8 +93,18 @@ public class BEH03336 extends QCCatalogue {
         }
         String text = pastLabel.getText();
         if (StringUtil.isNotBlank(text)) {
+            if (text.matches(OPRex)) {
+                return;
+            }
             for (String diag : diagList) {
-                if (StringUtil.isNotBlank(text) && (text.contains(diag) || text.contains("子宫下段剖宫产术"))) {
+                String[] split = diag.split(" ");
+                for (String diagCollectName : split) {
+                    OPListWords.add(diagCollectName);
+                }
+            }
+
+            for (String word : OPListWords) {
+                if (text.contains(word)) {
                     flag = false;
                     break;
                 }

+ 32 - 18
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC03331.java

@@ -8,6 +8,8 @@ import com.lantone.qc.pub.util.DateUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
 
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
 import java.util.Date;
 
 
@@ -23,9 +25,9 @@ public class FIRC03331 extends QCCatalogue {
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         /**
-         * 1.查证【首次病程录】>>是否有“预产期”和“末次月经”两个字段,任一不存在则直接返回。
-         * 2.查证【首次病程录】>>【末次月经月份】字段内容,字段内容:月+9(月+9大于12则月-3)记为:A【末次月经日】字段内容:日+7(日+7大于30则返回月份,月改记为:A+1,日:日+7-30)记为:B
-         * 3.查证【首次病程录】>>【预产期】中的内容与A(月)B(日)对比,内容一致则通过,否则提示
+         *1.查证【首次病程录】>>是否有“预产期”和“末次月经”两个字段,任一不存在则直接返回。
+         * 2.查证【首次病程录】>>【末次月经】字段内容,加280天计算出数值为“预产期”。
+         * 3.查证【首次病程录】>>【预产期】中的内容与计算出的“预产期”转换相同格式后时间一致或大于3天或小于1天则通过,否则提示。
          * */
         status.set("0");
         //获取首次病程录
@@ -37,6 +39,16 @@ public class FIRC03331 extends QCCatalogue {
         String eDOC = firstCourseRecordDoc.getStructureMap().get("预产期");
         //末次月经
         String lastMP = firstCourseRecordDoc.getStructureMap().get("末次月经");
+        //病例特点
+        String firstCourseChief = firstCourseRecordDoc.getStructureMap().get("病例特点");
+        if (StringUtil.isNotBlank(firstCourseChief)) {
+            if (StringUtil.isBlank(eDOC) && firstCourseChief.contains("预产期")) {
+                eDOC = firstCourseChief.substring(firstCourseChief.indexOf("预产期"), firstCourseChief.indexOf("预产期") + 13).replace("预产期", "");
+            }
+            if (StringUtil.isBlank(lastMP) && firstCourseChief.contains("末次月经")) {
+                lastMP = firstCourseChief.substring(firstCourseChief.indexOf("末次月经"), firstCourseChief.indexOf("末次月经") + 14).replace("末次月经", "");
+            }
+        }
         if (StringUtil.isBlank(eDOC) || StringUtil.isBlank(lastMP)) {
             return;
         }
@@ -46,22 +58,24 @@ public class FIRC03331 extends QCCatalogue {
             return;
         }
         try {
-            //预产期月份
-            int eDOCMonth = DateUtil.getMonth(eDOCDate);
-            //预产期日
-            int eDOCDay = DateUtil.getDay(eDOCDate);
-            //末次月经月份
-            int lastMPMonth = DateUtil.getMonth(lastMPDate);
-            //末次月经日
-            int lastMPDay = DateUtil.getDay(lastMPDate);
+            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//定义格式
+            Calendar c = Calendar.getInstance();
 
-            int lastMPMonthNum = lastMPMonth + 9 > 12 ? lastMPMonth - 3 : lastMPMonth + 9;
-            int lastMPDayNum = lastMPDay + 7;
-            if (lastMPDayNum > 30) {
-                lastMPMonthNum = lastMPMonthNum + 1;
-                lastMPDayNum = lastMPDayNum - 30;
-            }
-            if (eDOCMonth != lastMPMonthNum || eDOCDay != lastMPDayNum) {
+            //添加末次月经时间
+            c.setTime(lastMPDate);
+            c.add(Calendar.DATE, 277); //给末次月经时间加277天
+            String after = sdf.format(c.getTime());
+            Date afterDate = StringUtil.parseDateTime(after);//日期转成Date格式
+
+            c.setTime(lastMPDate);
+            c.add(Calendar.DATE, 281);//给末次月经时间加281天
+            String before = sdf.format(c.getTime());
+            Date beforeDate = StringUtil.parseDateTime(before);
+
+            //判断预产期是否在正确的区间里
+            if ((eDOCDate.after(afterDate) && eDOCDate.before(beforeDate)) || eDOCDate.equals(afterDate) || eDOCDate.equals(beforeDate)) {
+                return;
+            } else {
                 status.set("-1");
                 return;
             }

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

@@ -719,7 +719,7 @@ public class Content {
     /**
      * 子宫瘢痕相关手术史
      */
-    public static List<String> JBLB_ZGBHOP = Arrays.asList("古典式剖宫产", "低位子宫下段剖宫产", "剖宫产术,子宫下段横切口", "剖宫产术,子宫下段直切口", "腹膜外剖宫产", "腹腔妊娠剖宫产术",
+    public static List<String> JBLB_ZGBHOP = Arrays.asList("剖宫产", "宫腔镜", "古典式剖宫产", "低位子宫下段剖宫产", "剖宫产术,子宫下段横切口", "剖宫产术,子宫下段直切口", "腹膜外剖宫产", "腹腔妊娠剖宫产术",
             "子宫切开终止妊娠", "腹腔镜下子宫切开的治疗性流产", "腹腔镜子宫切开终止妊娠", "其他特指类型的剖宫产", "子宫切开术", "子宫切开探查术", "子宫切开异物取出术", "腹腔镜下子宫切开异物取出术",
             "腹腔镜子宫切开术", "子宫角部分切除术", "子宫角楔形切除术", "子宫内膜病损烧灼术", "宫腔镜下子宫电凝止血术", "子宫肌瘤切除术", "子宫内膜病损破坏术", "子宫内膜病损切除术", "子宫病损破坏术",
             "子宫病损射频消融术", "子宫病损切除术", "经阴道子宫病损切除术", "腹腔镜子宫内膜病损烧灼术", "腹腔镜子宫病损电凝术", "腹腔镜子宫病损射频消融术", "腹腔镜子宫病损激光切除术", "腹腔镜子宫病损切除术",