Bladeren bron

Merge remote-tracking branch 'origin/dev-1.2' into dev

hujing 5 jaren geleden
bovenliggende
commit
9d477a4938

+ 8 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0003.java

@@ -6,6 +6,7 @@ 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.PD;
+import com.lantone.qc.pub.util.StringUtil;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.stereotype.Component;
 
@@ -21,15 +22,16 @@ import java.util.List;
 @Component
 public class BEH0003 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        if(inputInfo.getBeHospitalizedDoc() == null){
+        if (inputInfo.getBeHospitalizedDoc() == null || inputInfo.getBeHospitalizedDoc().getChiefLabel() == null) {
             status.set("0");
             return;
         }
-        String chief_text = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
-        int chief_text_length = chief_text.replaceAll("[\\p{Punct}\\pP]", "").length();
-        if(chief_text_length<=20)
-        {
-            status.set("0");
+        String chiefText = inputInfo.getBeHospitalizedDoc().getChiefLabel().getText();
+        if (StringUtil.isNotBlank(chiefText)) {
+            int chiefTextLength = chiefText.replaceAll("[\\p{Punct}\\pP]", "").length();
+            if (chiefTextLength <= 20) {
+                status.set("0");
+            }
         }
     }
 }

+ 10 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0011.java

@@ -65,11 +65,13 @@ public class BEH0011 extends QCCatalogue {
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
                             if (presentDiag.getHospitalDiagName().contains("心")
-                                    || presentDiag.getHospitalDiagName().contains("糖")
                                     || presentDiag.getHospitalDiagName().contains("脑萎缩")
                                     || presentDiag.getHospitalDiagName().contains("慢性")
-                                    || presentDiag.getHospitalDiagName().contains("血")) {
-                                presentPastDiags.add(presentDiag.getHospitalDiagName());
+                                    || presentDiag.getHospitalDiagName().contains("血糖")) {
+                                if (!presentDiag.getHospitalDiagName().contains("心脏病")
+                                        && !presentDiag.getHospitalDiagName().contains("低血糖")) {
+                                    presentPastDiags.add(presentDiag.getHospitalDiagName());
+                                }
                             }
                         }
                     }
@@ -123,11 +125,13 @@ public class BEH0011 extends QCCatalogue {
                 continue;
             }
             if (pastDiag.getHospitalDiagName().contains("心")
-                    || pastDiag.getHospitalDiagName().contains("糖")
                     || pastDiag.getHospitalDiagName().contains("脑萎缩")
                     || pastDiag.getHospitalDiagName().contains("慢性")
-                    || pastDiag.getHospitalDiagName().contains("血")) {
-                presentPastDiag.add(pastDiag.getHospitalDiagName());
+                    || pastDiag.getHospitalDiagName().contains("血糖")) {
+                if (!pastDiag.getHospitalDiagName().contains("心脏病")
+                        && !pastDiag.getHospitalDiagName().contains("低血糖")) {
+                    presentPastDiag.add(pastDiag.getHospitalDiagName());
+                }
             }
         }
     }

+ 33 - 45
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0560.java

@@ -21,59 +21,48 @@ import java.util.List;
 public class BEH0560 extends QCCatalogue {
     public void start(InputInfo inputInfo, OutputInfo outputInfo) {
         status.set("0");
-        if (inputInfo.getBeHospitalizedDoc() == null) {
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (beHospitalizedDoc == null || beHospitalizedDoc.getChiefLabel() == null) {
             return;
         }
-        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
-        if(beHospitalizedDoc != null){
-
-//            int cnt = 0;
-            String chief_txt = beHospitalizedDoc.getChiefLabel().getText();
-            if(chief_txt.contains("检查") || chief_txt.contains("术后") || chief_txt.contains("药物") || chief_txt.contains("发现")){
-                status.set("0");
-                return;
-            }
-            List<Clinical> clinicals_chief = beHospitalizedDoc.getChiefLabel().getClinicals();
-            List<Clinical> clinicals_present = beHospitalizedDoc.getPresentLabel().getClinicals();
-            List<String> chief_symp = new ArrayList<>();
-            if(clinicals_chief != null && clinicals_chief.size()>0){
-                for (Clinical clinical:clinicals_present) {
-                    if (clinical.getNegative()==null) {
-                        if (chief_symp.indexOf(clinical.getName()) == -1) {
-                            chief_symp.add(clinical.getName());
-                        }
-                    }
-                    else {
-                        continue;
+        String chiefTxt = beHospitalizedDoc.getChiefLabel().getText();
+        if (chiefTxt.contains("检查") || chiefTxt.contains("术后") || chiefTxt.contains("药物") || chiefTxt.contains("发现")) {
+            status.set("0");
+            return;
+        }
+        List<Clinical> clinicalsChief = beHospitalizedDoc.getChiefLabel().getClinicals();
+        List<Clinical> clinicalsPresent = beHospitalizedDoc.getPresentLabel().getClinicals();
+        List<String> chiefSymp = new ArrayList<>();
+        if (clinicalsChief != null && clinicalsChief.size() > 0) {
+            for (Clinical clinical : clinicalsPresent) {
+                if (clinical.getNegative() == null) {
+                    if (chiefSymp.indexOf(clinical.getName()) == -1) {
+                        chiefSymp.add(clinical.getName());
                     }
                 }
             }
-//            String chief_txt = beHospitalizedDoc.getChiefLabel().getText();
-//            String present_txt = beHospitalizedDoc.getPresentLabel().getText();
-
-//            String present_chief_txt = present_txt.split("伴")[0];
-
-            List<String> present_symp = new ArrayList<>();
-
-            for (Clinical clinical:clinicals_present) {
-                if (clinical.getNegative()==null) {
-                    if (present_symp.indexOf(clinical.getName()) == -1) {
-                        present_symp.add(clinical.getName());
-                    }
-                }
-                else {
-                    continue;
+        }
+        /*
+        String chief_txt = beHospitalizedDoc.getChiefLabel().getText();
+        String present_txt = beHospitalizedDoc.getPresentLabel
+        String present_chief_txt = present_txt.split("伴")[0];
+         */
+        List<String> presentSymp = new ArrayList<>();
+        for (Clinical clinical : clinicalsPresent) {
+            if (clinical.getNegative() == null) {
+                if (presentSymp.indexOf(clinical.getName()) == -1) {
+                    presentSymp.add(clinical.getName());
                 }
             }
-            if(chief_symp.size()>0 && present_symp.size()>0){
-                for (String cli:chief_symp
-                     ) {
-                    if(!present_symp.contains(cli)){
-                        status.set("-1");
-                        return;
-                    }
+        }
+        if (chiefSymp.size() > 0 && presentSymp.size() > 0) {
+            for (String cli : chiefSymp) {
+                if (!presentSymp.contains(cli)) {
+                    status.set("-1");
+                    return;
                 }
             }
+        }
             /*for (String symp:present_symp) {
                 if (present_chief_txt.contains(symp) && !chief_txt.contains(symp)) {
                     cnt += 1;
@@ -83,6 +72,5 @@ public class BEH0560 extends QCCatalogue {
             if(cnt>0){
                 status.set("-1");
             }*/
-        }
     }
 }

+ 32 - 32
kernel/src/main/java/com/lantone/qc/kernel/catalogue/deathcasediscuss/DEAC0103.java

@@ -1,33 +1,33 @@
-package com.lantone.qc.kernel.catalogue.deathcasediscuss;
-
-import com.lantone.qc.kernel.catalogue.QCCatalogue;
-import com.lantone.qc.kernel.util.CatalogueUtil;
-import com.lantone.qc.pub.model.InputInfo;
-import com.lantone.qc.pub.model.OutputInfo;
-import org.springframework.stereotype.Component;
-
-import java.util.Map;
-
-/**
- * @ClassName : DEAC0103
- * @Description : 死亡病例讨论记录中无病情演变
- * @Author : 胡敬
- * @Date: 2020-03-19 10:20
- */
-@Component
-public class DEAC0103 extends QCCatalogue {
-    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
-        status.set("0");
-        if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null) {
-            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
-            String discussionContent = deathCaseDiscussStructureMap.get("讨论内容");
-            if (CatalogueUtil.isEmpty(discussionContent)) {
-                return;
-            }
-            if (!discussionContent.contains("加重") && !discussionContent.contains("恶化")
-                    && !discussionContent.contains("好转")) {
-                status.set("-1");
-            }
-        }
-    }
+package com.lantone.qc.kernel.catalogue.deathcasediscuss;
+
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.util.CatalogueUtil;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import org.springframework.stereotype.Component;
+
+import java.util.Map;
+
+/**
+ * @ClassName : DEAC0103
+ * @Description : 死亡病例讨论记录中无病情演变
+ * @Author : 胡敬
+ * @Date: 2020-03-19 10:20
+ */
+@Component
+public class DEAC0103 extends QCCatalogue {
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status.set("0");
+        if (inputInfo.getDeathCaseDiscussDoc() != null && inputInfo.getDeathCaseDiscussDoc().getStructureMap() != null) {
+            Map<String, String> deathCaseDiscussStructureMap = inputInfo.getDeathCaseDiscussDoc().getStructureMap();
+            String discussionContent = deathCaseDiscussStructureMap.get("讨论内容");
+            if (CatalogueUtil.isEmpty(discussionContent)) {
+                return;
+            }
+            if (!discussionContent.contains("加重") && !discussionContent.contains("恶化")
+                    && !discussionContent.contains("好转") && !discussionContent.contains("效果不佳")) {
+                status.set("-1");
+            }
+        }
+    }
 }

+ 10 - 6
kernel/src/main/java/com/lantone/qc/kernel/catalogue/firstcourserecord/FIRC0095.java

@@ -62,11 +62,13 @@ public class FIRC0095 extends QCCatalogue {
                         /* 现病史中一般情况之后的疾病名称 */
                         if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
                             if (presentDiag.getHospitalDiagName().contains("心")
-                                    || presentDiag.getHospitalDiagName().contains("糖")
                                     || presentDiag.getHospitalDiagName().contains("脑萎缩")
                                     || presentDiag.getHospitalDiagName().contains("慢性")
-                                    || presentDiag.getHospitalDiagName().contains("血")) {
-                                presentPastDiags.add(presentDiag.getHospitalDiagName());
+                                    || presentDiag.getHospitalDiagName().contains("血糖")) {
+                                if (!presentDiag.getHospitalDiagName().contains("心脏病")
+                                        && !presentDiag.getHospitalDiagName().contains("低血糖")) {
+                                    presentPastDiags.add(presentDiag.getHospitalDiagName());
+                                }
                             }
                         }
                     }
@@ -120,11 +122,13 @@ public class FIRC0095 extends QCCatalogue {
                 continue;
             }
             if (pastDiag.getHospitalDiagName().contains("心")
-                    || pastDiag.getHospitalDiagName().contains("糖")
                     || pastDiag.getHospitalDiagName().contains("脑萎缩")
                     || pastDiag.getHospitalDiagName().contains("慢性")
-                    || pastDiag.getHospitalDiagName().contains("血")) {
-                presentPastDiag.add(pastDiag.getHospitalDiagName());
+                    || pastDiag.getHospitalDiagName().contains("血糖")) {
+                if (!pastDiag.getHospitalDiagName().contains("心脏病")
+                        && !pastDiag.getHospitalDiagName().contains("低血糖")) {
+                    presentPastDiag.add(pastDiag.getHospitalDiagName());
+                }
             }
         }
     }

+ 100 - 80
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/BeHospitalizedAI.java

@@ -64,129 +64,131 @@ public class BeHospitalizedAI extends ModelAI {
         JSONArray crfContent = new JSONArray();
         BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
         if (beHospitalizedDoc != null) {
-            String chief_text = beHospitalizedDoc.getChiefLabel().getText();
-            String personal_text = beHospitalizedDoc.getPersonalLabel().getText();
-            String family_text = beHospitalizedDoc.getFamilyLabel().getText();
-            String past_text = beHospitalizedDoc.getPastLabel().getText();
-            String present_text = beHospitalizedDoc.getPresentLabel().getText();
-            String pacs_text = beHospitalizedDoc.getPacsLabel().getText();
-            String initial_diag_text = beHospitalizedDoc.getInitialDiagLabel().getText();   //初步诊断
-            String revised_diag_text = beHospitalizedDoc.getRevisedDiagLabel().getText();   //修正诊断
-            String supple_diag_text = beHospitalizedDoc.getSuppleDiagLabel().getText();    //补充诊断
-            //月经史
-            String menstrual_text = beHospitalizedDoc.getMenstrualLabel().getText();
-            //婚育史
-            String marital_text = beHospitalizedDoc.getMaritalLabel().getText();
-            //一般体格检查
-            String vital_text = beHospitalizedDoc.getVitalLabel().getText();
-            //专科体格检查
-            String vitalSpecial_text = beHospitalizedDoc.getVitalLabelSpecial().getText();
-            if (beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
-                if (StringUtil.isNotBlank(chief_text)) {
-                    chief_text = "主诉:" + StringUtil.removeBlank(chief_text);//主诉入参 文本前需加 “主诉:”
-                    /* 2020-06-08修改主诉模型为现病史模型 */
-                    putContent(crfContent, medicalTextType.get(7), chief_text, Content.chief);  //主诉
+            /* 主诉 */
+            if (beHospitalizedDoc.getChiefLabel() != null && beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
+                String chiefText = beHospitalizedDoc.getChiefLabel().getText();
+                if (StringUtil.isNotBlank(chiefText)) {
+                    chiefText = "主诉:" + StringUtil.removeBlank(chiefText);//主诉入参 文本前需加 "主诉:"
+                    putContent(crfContent, medicalTextType.get(7), chiefText, Content.chief);/* 2020-06-08修改主诉模型为现病史模型 */
                 }
             }
-            if (beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(7), present_text, Content.present);//现病史
+            /* 现病史 */
+            if (beHospitalizedDoc.getPresentLabel() != null && beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
+                String presentText = beHospitalizedDoc.getPresentLabel().getText();
+                putContent(crfContent, medicalTextType.get(7), presentText, Content.present);
             }
-            if (beHospitalizedDoc.getVitalLabelSpecial().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(3), vitalSpecial_text, Content.special_exam);//专科检查
+            /* 既往史 */
+            if (beHospitalizedDoc.getPastLabel() != null && beHospitalizedDoc.getPastLabel().isCrfLabel()) {
+                String pastText = beHospitalizedDoc.getPastLabel().getText();
+                putContent(crfContent, medicalTextType.get(1), pastText, Content.past);
             }
-            if (beHospitalizedDoc.getPastLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(1), past_text, Content.past);//既往史
-            }
-            if (beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(1), family_text, Content.family);//家族史
+            /* 月经史文本需从个人史截取一部分文本拼接 */
+            String concatMenstrual = "";
+            /* 个人史 */
+            if (beHospitalizedDoc.getPersonalLabel() != null && beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
+                String personalText = beHospitalizedDoc.getPersonalLabel().getText();
+                putContent(crfContent, medicalTextType.get(2), personalText, Content.personal);
+                concatMenstrual = getConcatMenstrual(concatMenstrual, personalText);
             }
-            if (beHospitalizedDoc.getVitalLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(4), vital_text, Content.phys_exam);//存放一般查体
+            /* 婚育史 */
+            if (beHospitalizedDoc.getMaritalLabel() != null && beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
+                String maritalText = beHospitalizedDoc.getMaritalLabel().getText();
+                putContent(crfContent, medicalTextType.get(2), maritalText, Content.marriage);
             }
-            if (beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(2), personal_text, Content.personal);//个人史
+            /* 月经史 */
+            if (beHospitalizedDoc.getMenstrualLabel() != null && beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
+                String menstrualText = beHospitalizedDoc.getMenstrualLabel().getText();
+                putContent(crfContent, medicalTextType.get(2), concatMenstrual, menstrualText, Content.menses);
             }
-            //月经史
-            String concatMenstrual = "";
-            if (personal_text != null) {
-                if (personal_text.length() > 30) {
-                    concatMenstrual = personal_text.substring(personal_text.length() - 30);
-                } else {
-                    concatMenstrual = personal_text;
-                }
+            /* 家族史 */
+            if (beHospitalizedDoc.getFamilyLabel() != null && beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
+                String familyText = beHospitalizedDoc.getFamilyLabel().getText();
+                putContent(crfContent, medicalTextType.get(1), familyText, Content.family);
             }
-            if (beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(2), concatMenstrual, menstrual_text, Content.menses);//月经史
+            /* 辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改) */
+            if (beHospitalizedDoc.getPacsLabel() != null && beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
+                String pacsText = beHospitalizedDoc.getPacsLabel().getText();
+                putContent(crfContent, medicalTextType.get(3), pacsText, Content.pacs);
             }
-            if (beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(2), marital_text, Content.marriage);//婚育史
+            /* 专科检查(专科体格检查) */
+            if (beHospitalizedDoc.getVitalLabelSpecial() != null && beHospitalizedDoc.getVitalLabelSpecial().isCrfLabel()) {
+                String vitalSpecialText = beHospitalizedDoc.getVitalLabelSpecial().getText();
+                putContent(crfContent, medicalTextType.get(3), vitalSpecialText, Content.special_exam);
             }
-            if (beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
-                putContent(crfContent, medicalTextType.get(3), pacs_text, Content.pacs);//辅助检查(暂用主诉现病史模型,之后会新训练单独模型再做修改)
+            /* 一般体格检查(存放一般查体) */
+            if (beHospitalizedDoc.getVitalLabel() != null && beHospitalizedDoc.getVitalLabel().isCrfLabel()) {
+                String vitalText = beHospitalizedDoc.getVitalLabel().getText();
+                putContent(crfContent, medicalTextType.get(4), vitalText, Content.phys_exam);
             }
-            if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
-                if (StringUtil.isNotBlank(initial_diag_text)) {
+            /* 初步诊断 */
+            if (beHospitalizedDoc.getInitialDiagLabel() != null && beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
+                String initialDiagText = beHospitalizedDoc.getInitialDiagLabel().getText();
+                if (StringUtil.isNotBlank(initialDiagText)) {
                     /*initial_diag_text = CatalogueUtil.removeBetweenWordSpace(initial_diag_text);*/
-                    putContent(crfContent, medicalTextType.get(6), initial_diag_text, Content.initial_diag);//初步诊断
+                    putContent(crfContent, medicalTextType.get(6), initialDiagText, Content.initial_diag);
                 }
             }
-            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
-                //修正诊断
+            /* 修正诊断 */
+            if (beHospitalizedDoc.getRevisedDiagLabel() != null && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
+                String revisedDiagText = beHospitalizedDoc.getRevisedDiagLabel().getText();
                 /*if (CatalogueUtil.numberExist(initial_diag_text)) {
                     revised_diag_text = CatalogueUtil.removeBetweenWordSpace(revised_diag_text);
                 }*/
-                putContent(crfContent, medicalTextType.get(6), revised_diag_text, Content.revised_diag);
+                putContent(crfContent, medicalTextType.get(6), revisedDiagText, Content.revised_diag);
             }
-            if (StringUtils.isNotEmpty(supple_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
-                //补充诊断
+            /* 补充诊断 */
+            if (beHospitalizedDoc.getSuppleDiagLabel() != null && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
+                String suppleDiagText = beHospitalizedDoc.getSuppleDiagLabel().getText();
                 /*if (CatalogueUtil.numberExist(initial_diag_text)) {
                     supple_diag_text = CatalogueUtil.removeBetweenWordSpace(supple_diag_text);
                 }*/
-                putContent(crfContent, medicalTextType.get(6), supple_diag_text, Content.supple_diag);
+                putContent(crfContent, medicalTextType.get(6), suppleDiagText, Content.supple_diag);
             }
+
             JSONObject midData = loadAI(inputInfo.isUseCrfCache(), inputInfo.getMedicalRecordInfoDoc().getStructureMap().get("behospitalCode"), crfContent, crfServiceClient);
-            //处理主诉
-            if (beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
+
+            /* 处理主诉 */
+            if (beHospitalizedDoc.getChiefLabel() != null && beHospitalizedDoc.getChiefLabel().isCrfLabel()) {
                 putChiefCrfData(midData.getJSONObject(Content.chief), inputInfo);
             }
-            //处理现病史
-            if (beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
+            /* 处理现病史 */
+            if (beHospitalizedDoc.getPresentLabel() != null && beHospitalizedDoc.getPresentLabel().isCrfLabel()) {
                 putPresentCrfData(midData.getJSONObject(Content.present), inputInfo);
             }
-            //处理既往史
-            if (beHospitalizedDoc.getPastLabel().isCrfLabel()) {
+            /* 处理既往史 */
+            if (beHospitalizedDoc.getPastLabel() != null && beHospitalizedDoc.getPastLabel().isCrfLabel()) {
                 putPastCrfData(midData.getJSONObject(Content.past), inputInfo);
             }
-            //处理个人史
-            if (beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
+            /* 处理个人史 */
+            if (beHospitalizedDoc.getPersonalLabel() != null && beHospitalizedDoc.getPersonalLabel().isCrfLabel()) {
                 putPersonalCrfData(midData.getJSONObject(Content.personal), inputInfo);
             }
-            //处理月经史
-            if (beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
+            /* 处理月经史 */
+            if (beHospitalizedDoc.getMenstrualLabel() != null && beHospitalizedDoc.getMenstrualLabel().isCrfLabel()) {
                 putMensesCrfData(midData.getJSONObject(Content.menses), inputInfo);
             }
-            //处理家族史
-            if (beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
+            /* 处理家族史 */
+            if (beHospitalizedDoc.getFamilyLabel() != null && beHospitalizedDoc.getFamilyLabel().isCrfLabel()) {
                 putFamilyCrfData(midData.getJSONObject(Content.family), inputInfo);
             }
-            //处理婚育史
-            if (beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
+            /* 处理婚育史 */
+            if (beHospitalizedDoc.getMaritalLabel() != null && beHospitalizedDoc.getMaritalLabel().isCrfLabel()) {
                 putMaritalCrfData(midData.getJSONObject(Content.marriage), inputInfo);
             }
-            //处理初步诊断
-            if (beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
+            /* 处理初步诊断 */
+            if (beHospitalizedDoc.getInitialDiagLabel() != null && beHospitalizedDoc.getInitialDiagLabel().isCrfLabel()) {
                 putInitialDiagCrfData(midData.getJSONObject(Content.initial_diag), inputInfo);
             }
-            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
-                //处理修正诊断
+            /* 处理修正诊断 */
+            if (beHospitalizedDoc.getRevisedDiagLabel() != null && beHospitalizedDoc.getRevisedDiagLabel().isCrfLabel()) {
                 putRevisedDiagCrfData(midData.getJSONObject(Content.revised_diag), inputInfo);
             }
-            if (StringUtils.isNotEmpty(revised_diag_text) && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
-                //处理补充诊断
+            /* 处理补充诊断 */
+            if (beHospitalizedDoc.getSuppleDiagLabel() != null && beHospitalizedDoc.getSuppleDiagLabel().isCrfLabel()) {
                 putSuppleDiagCrfData(midData.getJSONObject(Content.supple_diag), inputInfo);
             }
-            //处理辅助检查
-            if (beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
+            /* 处理辅助检查 */
+            if (beHospitalizedDoc.getPacsLabel() != null && beHospitalizedDoc.getPacsLabel().isCrfLabel()) {
                 putPacsCrfData(midData.getJSONObject(Content.pacs), inputInfo);
             }
         }
@@ -489,4 +491,22 @@ public class BeHospitalizedAI extends ModelAI {
         List<Vital> vitals = entityProcessVital.extractEntity(aiOut);
         return vitals;
     }
+
+    /**
+     * 从个人史取最后30个字,拼接到月经史
+     *
+     * @param concatMenstrual
+     * @param personalText
+     * @return
+     */
+    private String getConcatMenstrual(String concatMenstrual, String personalText) {
+        if (personalText != null) {
+            if (personalText.length() > 30) {
+                concatMenstrual = personalText.substring(personalText.length() - 30);
+            } else {
+                concatMenstrual = personalText;
+            }
+        }
+        return concatMenstrual;
+    }
 }

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

@@ -14,9 +14,11 @@ import com.lantone.qc.pub.model.label.PresentLabel;
 import com.lantone.qc.pub.model.label.VitalLabel;
 import com.lantone.qc.pub.model.label.VitalLabelSpecial;
 import com.lantone.qc.pub.model.vo.MedrecVo;
+import com.lantone.qc.pub.util.StringUtil;
 import com.lantone.qc.trans.ModelDocTrans;
 import com.lantone.qc.trans.comsis.OrdinaryAssistant;
 import com.lantone.qc.dbanaly.facade.taizhou.TzXmlUtil;
+import org.apache.commons.beanutils.BeanUtils;
 import org.apache.commons.lang3.StringUtils;
 
 import java.util.List;
@@ -107,54 +109,81 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
         ChiefLabel chiefLabel = new ChiefLabel();
         chiefLabel.setText(structureMap.get("主诉"));
         beHospitalizedDoc.setChiefLabel(chiefLabel);
+        if (StringUtil.isBlank(structureMap.get("主诉"))) {
+            beHospitalizedDoc.setChiefLabel(null);
+        }
         //        structureMap.remove("主诉");
 
         // 走模型
         PresentLabel presentLabel = new PresentLabel();
         presentLabel.setText(structureMap.get("现病史"));
         beHospitalizedDoc.setPresentLabel(presentLabel);
+        if (StringUtil.isBlank(structureMap.get("现病史"))) {
+            beHospitalizedDoc.setPresentLabel(null);
+        }
         //        structureMap.remove("现病史");
 
         PastLabel pastLabel = new PastLabel();
         pastLabel.setCrfLabel(false);
         pastLabel.setText(structureMap.get("既往史"));
         beHospitalizedDoc.setPastLabel(pastLabel);
+        if (StringUtil.isBlank(structureMap.get("既往史"))) {
+            beHospitalizedDoc.setPastLabel(null);
+        }
         //        structureMap.remove("既往史");
 
         PersonalLabel personalLabel = new PersonalLabel();
         personalLabel.setCrfLabel(false);
         personalLabel.setText(structureMap.get("个人史"));
         beHospitalizedDoc.setPersonalLabel(personalLabel);
+        if (StringUtil.isBlank(structureMap.get("个人史"))) {
+            beHospitalizedDoc.setPersonalLabel(null);
+        }
         //        structureMap.remove("个人史");
 
         MaritalLabel maritalLabel = new MaritalLabel();
         maritalLabel.setCrfLabel(false);
         maritalLabel.setText("婚育史: " + structureMap.get("婚育史"));
         beHospitalizedDoc.setMaritalLabel(maritalLabel);
+        if (StringUtil.isBlank(structureMap.get("婚育史"))) {
+            beHospitalizedDoc.setMaritalLabel(null);
+        }
         //        structureMap.remove("婚育史");
 
         MenstrualLabel menstrualLabel = new MenstrualLabel();
         menstrualLabel.setCrfLabel(false);
         menstrualLabel.setText("月经史:" + structureMap.get("月经史"));
         beHospitalizedDoc.setMenstrualLabel(menstrualLabel);
+        if (StringUtil.isBlank(structureMap.get("月经史"))) {
+            beHospitalizedDoc.setMenstrualLabel(null);
+        }
         //        structureMap.remove("月经史");
 
         FamilyLabel familyLabel = new FamilyLabel();
         familyLabel.setCrfLabel(false);
         familyLabel.setText(structureMap.get("家族史"));
         beHospitalizedDoc.setFamilyLabel(familyLabel);
+        if (StringUtil.isBlank(structureMap.get("家族史"))) {
+            beHospitalizedDoc.setFamilyLabel(null);
+        }
         //        structureMap.remove("家族史");
 
         VitalLabel vitalLabel = new VitalLabel();
         vitalLabel.setCrfLabel(false);
         vitalLabel.setText(structureMap.get("体格检查"));
         beHospitalizedDoc.setVitalLabel(vitalLabel);
+        if (StringUtil.isBlank(structureMap.get("体格检查"))) {
+            beHospitalizedDoc.setVitalLabel(null);
+        }
         //        structureMap.remove("体格检查");
 
         VitalLabelSpecial vitalLabelSpecial = new VitalLabelSpecial();
         vitalLabelSpecial.setCrfLabel(false);
         vitalLabelSpecial.setText(structureMap.get("专科体格检查"));
         beHospitalizedDoc.setVitalLabelSpecial(vitalLabelSpecial);
+        if (StringUtil.isBlank(structureMap.get("专科体格检查"))) {
+            beHospitalizedDoc.setVitalLabelSpecial(null);
+        }
         //        structureMap.remove("专科体格检查");
 
         // 走模型
@@ -162,24 +191,36 @@ public class TaiZhouBeHospitalizedDocTrans extends ModelDocTrans {
         pacsLabel.setCrfLabel(false);
         pacsLabel.setText(structureMap.get("辅助检查"));
         beHospitalizedDoc.setPacsLabel(pacsLabel);
+        if (StringUtil.isBlank(structureMap.get("辅助检查"))) {
+            beHospitalizedDoc.setPacsLabel(null);
+        }
         //        structureMap.remove("辅助检查");
 
         // 走模型
         DiagLabel initialDiagLabel = new DiagLabel();
         initialDiagLabel.setText(structureMap.get("初步诊断"));
         beHospitalizedDoc.setInitialDiagLabel(initialDiagLabel);
+        if (StringUtil.isBlank(structureMap.get("初步诊断"))) {
+            beHospitalizedDoc.setInitialDiagLabel(null);
+        }
         //        structureMap.remove("初步诊断");
 
         // 走模型
         DiagLabel revisedDiagLabel = new DiagLabel();
         revisedDiagLabel.setText(structureMap.get("修正诊断"));
         beHospitalizedDoc.setRevisedDiagLabel(revisedDiagLabel);
+        if (StringUtil.isBlank(structureMap.get("修正诊断"))) {
+            beHospitalizedDoc.setRevisedDiagLabel(null);
+        }
         //        structureMap.remove("修正诊断");
 
         // 走模型
         DiagLabel suppleDiagLabel = new DiagLabel();
         suppleDiagLabel.setText(structureMap.get("补充诊断"));
         beHospitalizedDoc.setSuppleDiagLabel(suppleDiagLabel);
+        if (StringUtil.isBlank(structureMap.get("补充诊断"))) {
+            beHospitalizedDoc.setSuppleDiagLabel(null);
+        }
         //        structureMap.remove("补充诊断");
 
         beHospitalizedDoc.setStructureMap(structureMap);

+ 3 - 1
trans/src/main/java/com/lantone/qc/trans/taizhou/TaiZhouDeathCaseDiscussDocTrans.java

@@ -39,7 +39,9 @@ public class TaiZhouDeathCaseDiscussDocTrans extends ModelDocTrans {
             "讨论意见=讨论内容",
             "现病史- 发病情况=入院情况",
             "医生=记录医师",
-            "本人姓名=姓名"
+            "本人姓名=姓名",
+            "事件日期=讨论时间",
+            "当前诊断=死亡诊断"
     );
 
 }

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

@@ -149,6 +149,7 @@ public class TaiZhouOperationDocTrans extends ModelDocTrans {
     private List<String> operationRecord_keyContrasts = Lists.newArrayList(
             "结束时间=手术结束时间",
             "开始时间=手术开始时间",
+            "医生=手术医师",
             "手术医师=主刀医师",
             "助手=一助",
             "本人姓名=姓名"