Browse Source

Merge remote-tracking branch 'origin/master'

rengb 5 years ago
parent
commit
101c74fe66

+ 6 - 1
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0021.java

@@ -4,6 +4,8 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.General;
+import com.lantone.qc.pub.model.entity.GeneralDesc;
 import com.lantone.qc.pub.model.entity.Modification;
 import org.springframework.stereotype.Component;
 
@@ -21,11 +23,14 @@ import java.util.List;
 @Component
 public class BEH0021 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        List<General> gens = inputInfo.getBeHospitalizedDoc().getPresentLabel().getGens();
+        List<GeneralDesc> generals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getGenerals();
         List<Clinical> clinicals = inputInfo.getBeHospitalizedDoc().getPresentLabel().getClinicals();
         if(clinicals.size()>0){
             Clinical clinical = clinicals.get(0);
             Modification modification = clinical.getModification();
-            if(modification == null || (!modification.getName().contains("严重") && !modification.getName().contains("加剧"))){
+            if(modification == null || (!modification.getName().contains("严重") && !modification.getName().contains("加剧")
+                    && !modification.getName().contains("加重"))){
                 info.set(clinical.getName());
             }else {
                 status.set("0");

+ 4 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0023.java

@@ -27,5 +27,9 @@ public class BEH0023 extends QCCatalogue {
         if(lises == null && pacses.size() == 0 && treats.size() == 0 && operations.size() == 0 && medicines.size() == 0){
             status.set("-1");
         }
+        //添加硬规则
+        if(inputInfo.getBeHospitalizedDoc().getPresentLabel().getText().contains("未予以重视")){
+            status.set("0");
+        }
     }
 }

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0024.java

@@ -6,9 +6,11 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Wound;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 外伤史未填写
@@ -30,7 +32,15 @@ public class BEH0024 extends QCCatalogue {
         //硬规则匹配
         if (inputInfo.getBeHospitalizedDoc().getPastLabel().getText().contains("外伤")) {
             status.set("0");
+            return;
         }
+        //台州结构化
+        Map<String, String> structureMap_beh = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if(StringUtils.isNotEmpty(structureMap_beh.get("手术外伤史"))){
+            status.set("0");
+            return;
+        }
+
     }
 
 }

+ 11 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0030.java

@@ -5,8 +5,11 @@ import com.lantone.qc.kernel.util.CatalogueUtil;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.ListUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * @Description: 传染病史未填写
  * @author: rengb
@@ -17,6 +20,14 @@ public class BEH0030 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("结核病"))
+                || StringUtils.isNotEmpty(structureMap.get("病毒性肝炎"))) {
+            status.set("0");
+            return;
+        }
+
         if (ListUtil.isNotEmpty(
                 CatalogueUtil.filterDiagsByNature(
                         inputInfo.getBeHospitalizedDoc().getPastLabel().getDiags(),

+ 9 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0031.java

@@ -8,6 +8,8 @@ import com.lantone.qc.pub.util.ListUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * @Description: 慢病史未填写
  * @author: rengb
@@ -18,6 +20,13 @@ public class BEH0031 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("高血压"))) {
+            status.set("0");
+            return;
+        }
+
         if (ListUtil.isNotEmpty(
                 CatalogueUtil.filterDiagsByNature(
                         inputInfo.getBeHospitalizedDoc().getPastLabel().getDiags(),

+ 10 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0041.java

@@ -4,8 +4,11 @@ import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * @Description: 个人史未填写
  * @author: rengb
@@ -16,6 +19,13 @@ public class BEH0041 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        //以台州为例,个人史细分很多结构化信息,取其一
+        if (StringUtils.isNotEmpty(structureMap.get("出生、生长史"))) {
+            status.set("0");
+            return;
+        }
+
         if (StringUtil.isNotBlank(inputInfo.getBeHospitalizedDoc().getPersonalLabel().getText())) {
             status.set("0");
         }

+ 9 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0047.java

@@ -5,8 +5,11 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Drinking;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * @Description: 饮酒史未描述
  * @author: rengb
@@ -17,6 +20,12 @@ public class BEH0047 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("饮酒"))) {
+            status.set("0");
+            return;
+        }
+
         Drinking drinking = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getDrinking();
         if (drinking != null && StringUtil.isNotBlank(drinking.getName())) {
             status.set("0");

+ 9 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0048.java

@@ -5,8 +5,11 @@ import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Contact;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
+import java.util.Map;
+
 /**
  * @Description: 放射物、毒物、粉尘接触史未描述
  * @author: rengb
@@ -17,6 +20,12 @@ public class BEH0048 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("化学及放射性毒物接触史"))) {
+            status.set("0");
+            return;
+        }
+
         Contact contact = inputInfo.getBeHospitalizedDoc().getPersonalLabel().getContact();
         if (contact != null && StringUtil.isNotBlank(contact.getName())) {
             status.set("0");

+ 8 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0397.java

@@ -7,9 +7,11 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Family;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -23,6 +25,12 @@ public class BEH0397 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("家庭成员健康情况"))) {
+            status.set("0");
+            return;
+        }
+
         List<Family> familyList = Lists.newArrayList();
         List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
         List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();

+ 8 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0398.java

@@ -7,9 +7,11 @@ import com.lantone.qc.pub.model.OutputInfo;
 import com.lantone.qc.pub.model.entity.Family;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
+import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
 import java.util.List;
+import java.util.Map;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
@@ -23,6 +25,12 @@ public class BEH0398 extends QCCatalogue {
 
     @Override
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        Map<String, String> structureMap = inputInfo.getBeHospitalizedDoc().getStructureMap();
+        if (StringUtils.isNotEmpty(structureMap.get("家庭成员健康情况"))) {
+            status.set("0");
+            return;
+        }
+
         List<Family> familyList = Lists.newArrayList();
         List<Family> familiesFl = inputInfo.getBeHospitalizedDoc().getFamilyLabel().getFamilies();
         List<Family> familiesMl = inputInfo.getBeHospitalizedDoc().getMaritalLabel().getFamily();

+ 16 - 14
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0353.java

@@ -3,7 +3,9 @@ package com.lantone.qc.kernel.catalogue.operationdiscussion;
 import com.lantone.qc.kernel.catalogue.QCCatalogue;
 import com.lantone.qc.pub.model.InputInfo;
 import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.operation.OperationDiscussionDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
+import com.lantone.qc.pub.model.label.OperationDiscussionLabel;
 import com.lantone.qc.pub.util.ListUtil;
 import com.lantone.qc.pub.util.StringUtil;
 import org.springframework.stereotype.Component;
@@ -29,21 +31,21 @@ public class OPE0353 extends QCCatalogue {
         boolean isOperativePatient = true;//是手术患者(暂时默认是)
         if (isOperativePatient) {
             List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
-            if (ListUtil.isNotEmpty(operationDocs)) {
-                long count = operationDocs.stream().filter(operationDoc -> {
-                    boolean flag = false;
-                    if (operationDoc.getOperationDiscussionDoc() != null
-                            && operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel() != null
-                            && (StringUtil.isBlank(operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getMeasuresAfterOp())
-                            || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getMeasuresAfterOp().length() < 10)
-                            || StringUtil.isBlank(operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getAttentionAfterOp())
-                            || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getAttentionAfterOp().length() < 10) {
-                        flag = true;
-                    }
-                    return flag;
-                }).count();
-                if (count > 0) {
+            if (ListUtil.isEmpty(operationDocs)) {
+                return;
+            }
+            for (OperationDoc operationDoc : operationDocs) {
+                OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+                if (operationDiscussionDoc == null) {
+                    continue;
+                }
+                OperationDiscussionLabel operationDiscussionLabel = operationDiscussionDoc.getOperationDiscussionLabel();
+                String measuresAfterOp = operationDiscussionLabel.getMeasuresAfterOp();
+                String attentionAfterOp = operationDiscussionLabel.getAttentionAfterOp();
+                if (StringUtil.isBlank(measuresAfterOp) || measuresAfterOp.length() < 10
+                        || StringUtil.isBlank(attentionAfterOp) || attentionAfterOp.length() < 10) {
                     status.set("-1");
+                    return;
                 }
             }
         }

+ 27 - 8
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/OperationAI.java

@@ -4,11 +4,13 @@ import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.lantone.qc.kernel.client.CRFServiceClient;
 import com.lantone.qc.kernel.structure.ai.process.EntityProcessOperationDiscussion;
+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.doc.operation.OperationDiscussionDoc;
 import com.lantone.qc.pub.model.doc.operation.OperationDoc;
 import com.lantone.qc.pub.model.label.OperationDiscussionLabel;
+import com.lantone.qc.pub.util.StringUtil;
 
 import java.util.Arrays;
 import java.util.List;
@@ -42,7 +44,7 @@ public class OperationAI extends ModelAI {
         JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
 
         for (int i = 0; i < operationDocs.size(); i++) {
-            if (midData.get(Content.operation_Discussion + i) == null){
+            if (midData.get(Content.operation_Discussion + i) == null) {
                 continue;
             }
             putOperationDiscussionCrfData(midData.getJSONObject(Content.operation_Discussion + i), inputInfo);
@@ -50,21 +52,38 @@ public class OperationAI extends ModelAI {
     }
 
     /**
-     * 处理查房记录
+     * 处理手术记录
      *
      * @param jsonObject
      * @param inputInfo
      */
     public void putOperationDiscussionCrfData(JSONObject jsonObject, InputInfo inputInfo) {
         JSONObject aiOut = loadEntity(jsonObject, entityRelationObject, outputs, content);
+        String originalText = jsonObject.getString("originalText");
         //使用现病史结构来处理病历特点
         EntityProcessOperationDiscussion entityProcessOperationDiscussion = new EntityProcessOperationDiscussion();
         OperationDiscussionLabel operationDiscussionLabel = entityProcessOperationDiscussion.extractEntity(aiOut);
-        OperationDiscussionDoc operationDiscussionDoc = new OperationDiscussionDoc();
-        operationDiscussionDoc.setOperationDiscussionLabel(operationDiscussionLabel);
-        OperationDoc operationDoc = new OperationDoc();
-        operationDoc.setOperationDiscussionDoc(operationDiscussionDoc);
-        //临床表现
-        inputInfo.getOperationDocs().add(operationDoc);
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        for (OperationDoc operationDoc : operationDocs) {
+            OperationDiscussionDoc operationDiscussionDoc = operationDoc.getOperationDiscussionDoc();
+            String text = operationDiscussionDoc.getText();
+            if (StringUtil.isNotBlank(text) && StringUtil.isNotBlank(originalText) && text.equals(originalText)) {
+                operationDiscussionDoc.setOperationDiscussionLabel(operationDiscussionLabel);
+                break;
+            }
+        }
+    }
+
+    protected void putContent(JSONArray crfContent, String medicalTextType, String text, String sign) {
+        String move_text = CatalogueUtil.removeSpecialChar(text);
+        if (StringUtil.isEmpty(move_text)) {
+            return;
+        }
+        JSONObject detailContent = new JSONObject();
+        detailContent.put("medical_text_type", medicalTextType);
+        detailContent.put("content", move_text);
+        detailContent.put("detail_title", sign);
+        detailContent.put("originalText", text);
+        crfContent.add(detailContent);
     }
 }

+ 5 - 5
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessOperationDiscussion.java

@@ -99,25 +99,25 @@ public class EntityProcessOperationDiscussion extends EntityProcess {
         String subContentIndex = "", title = "";
         for (int i = 0; i < lemmaList.size(); i++) {
             lemma = lemmaList.get(i);
-            if (!titleList.contains(lemma.getProperty()) && i != lemmaList.size() - 1) {
+            if (!titleList.contains(lemma.getProperty())) {
                 continue;
             }
             if (i != lemmaList.size() - 1) {
                 if (start == 0) {
                     start = Integer.parseInt(lemma.getPosition());
-                    title = lemma.getText();//截取的这一段文本的标题
+                    title = lemma.getProperty();//截取的这一段文本的标题
                 } else {
                     //subContent = content.substring(start + title.length(), Integer.parseInt(lemma.getPosition()));
-                    subContentIndex = start + title.length() + "," + Integer.parseInt(lemma.getPosition());
+                    subContentIndex = start + lemma.getText().length() + 1 + "," + Integer.parseInt(lemma.getPosition());
                     putSubContent(titleText, title, subContentIndex);
                     start = Integer.parseInt(lemma.getPosition());
-                    title = lemma.getText();//截取的这一段文本的标题
+                    title = lemma.getProperty();//截取的这一段文本的标题
                 }
             } else {
                 //如果是最后一个Lemma,文本就从start开始取,取到结束
                 //subContent = content.substring((start + lemma.getText().length()));
                 int lastIndex = content.length() - 1;
-                subContentIndex = start + title.length() + "," + lastIndex;
+                subContentIndex = start + lemma.getText().length() + "," + lastIndex;
                 putSubContent(titleText, title, subContentIndex);
             }
         }

+ 1 - 0
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouBeHospitalizedDocTrans.java

@@ -56,6 +56,7 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
             "地址=联系地址",
             "信息来源=病史陈述者",
             "生日=出生日期",
+            "病人出生日期=出生日期",
             "出生地址=户口地址",
             "本人电话=电话",
             "入病房时间=入院日期",

+ 1 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/util/TzXmlUtil.java

@@ -38,7 +38,7 @@ public class TzXmlUtil {
             Document doc = DocumentHelper.parseText(xml);
             List<Element> emrTermElements = doc.getRootElement().element("TermList").elements("EMR-TERM");
             emrTermElements.forEach(emrTermElement -> {
-                if(retMap == null || retMap.get(StringUtil.removeBlank(emrTermElement.attributeValue("ename"))) == null){
+                if(retMap == null || StringUtil.isEmpty(retMap.get(StringUtil.removeBlank(emrTermElement.attributeValue("ename"))))){
                     retMap.put(
                             StringUtil.removeBlank(emrTermElement.attributeValue("ename")),
                             emrTermElement.getStringValue().trim()