Sfoglia il codice sorgente

术后首次病程记录CRF处理、规则添加,修改三级查房AI处理BUG

hujing 5 anni fa
parent
commit
fef215a2b1

+ 43 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0350.java

@@ -0,0 +1,43 @@
+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.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.text.ParseException;
+import java.util.List;
+
+/**
+ * @Description: 术后首次病程记录未记录术中所见
+ * @author: 胡敬
+ * @time: 2020/3/24 13:28
+ */
+public class OPE0350 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status = "0";
+        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().getOperativeFindings())
+                            || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getOperativeFindings().length() < 30)) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status = "-1";
+                }
+            }
+        }
+    }
+
+}

+ 41 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0351.java

@@ -0,0 +1,41 @@
+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.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.util.List;
+
+/**
+ * @Description: 术后首次病程记录未记录患者生命体征
+ * @author: 胡敬
+ * @time: 2020/3/24 13:28
+ */
+public class OPE0351 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status = "0";
+        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
+                            && operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getVitals().size() == 0) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status = "-1";
+                }
+            }
+        }
+    }
+
+}

+ 42 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0352.java

@@ -0,0 +1,42 @@
+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.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.util.List;
+
+/**
+ * @Description: 术后首次病程记录未记录术后风险
+ * @author: 胡敬
+ * @time: 2020/3/24 13:28
+ */
+public class OPE0352 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status = "0";
+        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().getRiskAfterOp())
+                            || operationDoc.getOperationDiscussionDoc().getOperationDiscussionLabel().getRiskAfterOp().length() < 10)) {
+                        flag = true;
+                    }
+                    return true;
+                }).count();
+                if (count > 0) {
+                    status = "-1";
+                }
+            }
+        }
+    }
+
+}

+ 44 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/operationdiscussion/OPE0353.java

@@ -0,0 +1,44 @@
+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.OperationDoc;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+
+import java.util.List;
+
+/**
+ * @Description: 术后首次病程记录未记录处理及注意事项
+ * @author: 胡敬
+ * @time: 2020/3/24 13:28
+ */
+public class OPE0353 extends QCCatalogue {
+    @Override
+    protected void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        status = "0";
+        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 true;
+                }).count();
+                if (count > 0) {
+                    status = "-1";
+                }
+            }
+        }
+    }
+
+}

+ 2 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/AIAnalyze.java

@@ -15,6 +15,7 @@ public class AIAnalyze {
     FirstCourseRecordAI firstCourseRecordAI = new FirstCourseRecordAI();
     LeaveHospitalAI leaveHospitalAI = new LeaveHospitalAI();
     ThreeLevelWardAI threeLevelWardAI = new ThreeLevelWardAI();
+    OperationAI operationAI = new OperationAI();
 
     public AIAnalyze(CRFServiceClient crfService) {
         this.crfServiceClient = crfService;
@@ -25,6 +26,7 @@ public class AIAnalyze {
         firstCourseRecordAI.medrec(inputInfo, crfServiceClient);
         leaveHospitalAI.medrec(inputInfo, crfServiceClient);
         threeLevelWardAI.medrec(inputInfo, crfServiceClient);
+        operationAI.medrec(inputInfo, crfServiceClient);
     }
 
 

+ 73 - 0
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/OperationAI.java

@@ -0,0 +1,73 @@
+package com.lantone.qc.kernel.structure.ai;
+
+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.structure.ai.process.EntityProcessThreeLevelWard;
+import com.lantone.qc.pub.Content;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.doc.ThreeLevelWardDoc;
+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.model.label.ThreeLevelWardLabel;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * @ClassName : OperationAI
+ * @Description :
+ * @Author : 胡敬
+ * @Date: 2020-03-24 09:52
+ */
+public class OperationAI extends ModelAI {
+    /**
+     *
+     */
+    public static List<String> medicalTextType = Arrays.asList("CourseAfterOperation");
+    public static String entityRelationObject = "entity_relation_object";
+    public static String outputs = "outputs";
+    public static String content = "content";
+
+    public void medrec(InputInfo inputInfo, CRFServiceClient crfServiceClient) {
+        JSONArray crfContent = new JSONArray();
+        List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
+        for (int i = 0; i < operationDocs.size(); i++) {
+            if (operationDocs.get(i).getOperationDiscussionDoc() == null) {
+                continue;
+            }
+            OperationDiscussionDoc operationDiscussionDoc = operationDocs.get(i).getOperationDiscussionDoc();
+            putContent(crfContent, medicalTextType.get(0), operationDiscussionDoc.getText(), Content.operation_Discussion + i);
+        }
+
+        JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
+
+        for (int i = 0; i < operationDocs.size(); i++) {
+            if (midData.get(Content.operation_Discussion + i) == null){
+                continue;
+            }
+            putOperationDiscussionCrfData(midData.getJSONObject(Content.operation_Discussion + i), inputInfo);
+        }
+    }
+
+    /**
+     * 处理查房记录
+     *
+     * @param jsonObject
+     * @param inputInfo
+     */
+    public void putOperationDiscussionCrfData(JSONObject jsonObject, InputInfo inputInfo) {
+        JSONObject aiOut = loadEntity(jsonObject, entityRelationObject, outputs, content);
+        //使用现病史结构来处理病历特点
+        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);
+    }
+}

+ 3 - 1
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/model/EntityEnum.java

@@ -24,7 +24,9 @@ public enum EntityEnum {
     CURE_AIM("治疗目的"), OTHER("其他"), OUTERCOURTYARD("外院"), NURSINGLEVEL("护理级别"), CHIEF("主诉"), NOTES("注意事项"),
     KEY_WORD_FOR_DOCTOR_ADVICES("出院医嘱标题"), DOCTORADVICE("医嘱"), KEY_WORD_FOR_PART("大标题"), OUTCOME("转归情况"),
     PHYSICAL_EXAMINATION("查体"),TITLE_FOR_SIGN("查体标题"),TITLE_FOR_DIAG("诊断标题"),TITLE_FOR_DIAG_BASIS("诊断依据标题"),
-    TITLE_FOR_DIFF("鉴别诊断标题"),TITLE_FOR_TREAT("诊疗计划标题"),TITLE("其他标题"), TREATMENT_PLAN("诊疗计划");
+    TITLE_FOR_DIFF("鉴别诊断标题"),TITLE_FOR_TREAT("诊疗计划标题"),TITLE("标题"), TREATMENT_PLAN("诊疗计划"),
+    TITLE_OF_OPERATIVE_FINDINGS("手术经过标题"),TITLE_OF_MEASURES_AFTER_OP("术后处理措施标题"),
+    TITLE_OF_RISK_AFTER_OP("术后风险标题"),TITLE_OF_ATTENTION_AFTER_OP("术后注意事项标题"),VITAL("生命体征");
 
     private String value;
 

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

@@ -0,0 +1,137 @@
+package com.lantone.qc.kernel.structure.ai.process;
+
+import com.alibaba.fastjson.JSONObject;
+import com.lantone.qc.kernel.structure.ai.model.EntityEnum;
+import com.lantone.qc.kernel.structure.ai.model.Lemma;
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.Vital;
+import com.lantone.qc.pub.model.label.OperationDiscussionLabel;
+import com.lantone.qc.pub.model.label.ThreeLevelWardLabel;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @ClassName : EntityProcessOperationDiscussion
+ * @Description : 术后首次病程及谈话记录
+ * @Author : 胡敬
+ * @Date: 2020-03-24 10:48
+ */
+public class EntityProcessOperationDiscussion extends EntityProcess {
+    private List<String> titleList = Arrays.asList(
+            EntityEnum.TITLE.toString(),
+            EntityEnum.TITLE_OF_OPERATIVE_FINDINGS.toString(),
+            EntityEnum.TITLE_OF_MEASURES_AFTER_OP.toString(),
+            EntityEnum.TITLE_OF_RISK_AFTER_OP.toString(),
+            EntityEnum.TITLE_OF_ATTENTION_AFTER_OP.toString());
+
+    public OperationDiscussionLabel extractEntity(JSONObject aiOut) {
+        OperationDiscussionLabel operationDiscussionLabel = new OperationDiscussionLabel();
+        String content = aiOut.getString("content");
+
+        Map<String, List<String>> titleText = subWithTitle(aiOut);
+        //手术经过文本(术中所见)
+        if (titleText.get(EntityEnum.TITLE_OF_OPERATIVE_FINDINGS.toString()) != null) {
+            List<String> operativeFindingsList = titleText.get(EntityEnum.TITLE_OF_OPERATIVE_FINDINGS.toString());
+            String text = textJoin(content, operativeFindingsList);
+            operationDiscussionLabel.setOperativeFindings(text);
+        }
+
+        //术后风险文本
+        if (titleText.get(EntityEnum.TITLE_OF_RISK_AFTER_OP.toString()) != null) {
+            List<String> riskAfterOpList = titleText.get(EntityEnum.TITLE_OF_RISK_AFTER_OP.toString());
+            String text = textJoin(content, riskAfterOpList);
+            operationDiscussionLabel.setRiskAfterOp(text);
+        }
+
+        //术后注意事项文本(处理及注意事项)
+        if (titleText.get(EntityEnum.TITLE_OF_ATTENTION_AFTER_OP.toString()) != null) {
+            List<String> attentionAfterOpList = titleText.get(EntityEnum.TITLE_OF_ATTENTION_AFTER_OP.toString());
+            String text = textJoin(content, attentionAfterOpList);
+            operationDiscussionLabel.setAttentionAfterOp(text);
+        }
+
+        //术后处理措施文本(处理及注意事项)
+        if (titleText.get(EntityEnum.TITLE_OF_MEASURES_AFTER_OP.toString()) != null) {
+            List<String> measuresAfterOpList = titleText.get(EntityEnum.TITLE_OF_MEASURES_AFTER_OP.toString());
+            String text = textJoin(content, measuresAfterOpList);
+            operationDiscussionLabel.setMeasuresAfterOp(text);
+        }
+
+        //生命体征
+        List<Lemma> vitalLemmas = createEntityTree(aiOut, EntityEnum.VITAL.toString());
+        List<Vital> vitals = new ArrayList<>();
+        for (Lemma lemma : vitalLemmas) {
+            Vital vital = new Vital();
+            vital.setValue(lemma.getText());
+            vitals.add(vital);
+        }
+        operationDiscussionLabel.setVitals(vitals);
+        return operationDiscussionLabel;
+    }
+
+    private String textJoin(String content, List<String> operativeFindingsList) {
+        StringBuffer text = new StringBuffer();
+        for (String titleTextIndex : operativeFindingsList) {
+            String[] titleTextIndexSplit = titleTextIndex.split(",");
+            text.append(content.substring(Integer.parseInt(titleTextIndexSplit[0]),
+                    Integer.parseInt(titleTextIndexSplit[1])));
+        }
+        return text.toString();
+    }
+
+    /**
+     * 根据各标题截取文本index
+     *
+     * @param aiOut
+     * @return
+     */
+    private Map<String, List<String>> subWithTitle(JSONObject aiOut) {
+        Map<String, List<String>> titleText = new LinkedHashMap<>();
+        String content = aiOut.getString("content");
+        List<Lemma> lemmaList = loadAllLemmaList(aiOut.getJSONObject("annotation").getJSONArray("T"));
+        Lemma lemma;
+        int start = 0;
+        String subContentIndex = "", title = "";
+        for (int i = 0; i < lemmaList.size(); i++) {
+            lemma = lemmaList.get(i);
+            if (!titleList.contains(lemma.getProperty()) && i != lemmaList.size() - 1) {
+                continue;
+            }
+            if (i != lemmaList.size() - 1) {
+                if (start == 0) {
+                    start = Integer.parseInt(lemma.getPosition());
+                    title = lemma.getText();//截取的这一段文本的标题
+                } else {
+                    //subContent = content.substring(start + title.length(), Integer.parseInt(lemma.getPosition()));
+                    subContentIndex = start + title.length() + "," + Integer.parseInt(lemma.getPosition());
+                    putSubContent(titleText, title, subContentIndex);
+                    start = Integer.parseInt(lemma.getPosition());
+                    title = lemma.getText();//截取的这一段文本的标题
+                }
+            } else {
+                //如果是最后一个Lemma,文本就从start开始取,取到结束
+                //subContent = content.substring((start + lemma.getText().length()));
+                int lastIndex = content.length() - 1;
+                subContentIndex = start + title.length() + "," + lastIndex;
+                putSubContent(titleText, title, subContentIndex);
+            }
+        }
+        return titleText;
+    }
+
+    private void putSubContent(Map<String, List<String>> titleText, String text, String subContent) {
+        List<String> textList;
+        if (titleText.containsKey(text)) {
+            titleText.get(text).add(subContent);
+        } else {
+            textList = new ArrayList<>();
+            textList.add(subContent);
+            titleText.put(text, textList);
+        }
+    }
+}

+ 24 - 22
kernel/src/main/java/com/lantone/qc/kernel/structure/ai/process/EntityProcessThreeLevelWard.java

@@ -41,12 +41,10 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
         //诊断依据
         if (titleText.get(EntityEnum.TITLE_FOR_DIAG_BASIS.toString()) != null) {
             List<String> diagBasisList = titleText.get(EntityEnum.TITLE_FOR_DIAG_BASIS.toString());
-            String diagBasis = String.join(",", diagBasisList);
-            String[] diagBasisSplit = diagBasis.split(",");
+            String text = textJoin(content, diagBasisList);
+            String[] diagBasisSplit = String.join(",", diagBasisList).split(",");
             //诊断依据文本
-            threeLevelWardLabel.setDiagBasisText(content.substring(
-                    Integer.parseInt(diagBasisSplit[0]),
-                    Integer.parseInt(diagBasisSplit[diagBasisSplit.length - 1])));
+            threeLevelWardLabel.setDiagBasisText(text);
             //病史(在 诊断依据 以外的片段中出现 任一 临床表现)
             addClinical(threeLevelWardLabel, diagBasisSplit, clinicalLemmas);
             //补充诊断/初步诊断/修正诊断
@@ -62,23 +60,7 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
             addClinical(threeLevelWardLabel, diffDiagSplit, clinicalLemmas);
             //补充诊断/初步诊断/修正诊断
             addDiag(threeLevelWardLabel, diffDiagSplit, diagLemmas);
-        }
-
-        //查体
-        List<Lemma> signLemmas = createEntityTree(aiOut, EntityEnum.PHYSICAL_EXAMINATION.toString());
-        List<Sign> signs = new ArrayList<>();
-        for (Lemma lemma : signLemmas) {
-            Sign sign = new Sign();
-            sign.setName(lemma.getText());
-            signs.add(sign);
-        }
-        threeLevelWardLabel.setSigns(signs);
-
-        //鉴别诊断
-        if (titleText.get(EntityEnum.TITLE_FOR_DIFF.toString()) != null) {
-            List<String> diffDiagList = titleText.get(EntityEnum.TITLE_FOR_DIFF.toString());
-            String diagBasis = String.join(",", diffDiagList);
-            String[] diffDiagSplit = diagBasis.split(",");
+            //添加鉴别诊断
             List<Lemma> dieaseLemmas = createEntityTree(aiOut, EntityEnum.DIEASE.toString());
             List<Diag> diags = new ArrayList<>();
             for (Lemma dieaseLemma : dieaseLemmas) {
@@ -100,6 +82,16 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
             }
         }
 
+        //查体
+        List<Lemma> signLemmas = createEntityTree(aiOut, EntityEnum.PHYSICAL_EXAMINATION.toString());
+        List<Sign> signs = new ArrayList<>();
+        for (Lemma lemma : signLemmas) {
+            Sign sign = new Sign();
+            sign.setName(lemma.getText());
+            signs.add(sign);
+        }
+        threeLevelWardLabel.setSigns(signs);
+
         //诊疗计划
         List<Lemma> treatmentPlanLemmas = createEntityTree(aiOut, EntityEnum.TREATMENT_PLAN.toString());
         List<TreatmentPlan> treatmentPlans = new ArrayList<>();
@@ -112,6 +104,16 @@ public class EntityProcessThreeLevelWard extends EntityProcess {
         return threeLevelWardLabel;
     }
 
+    private String textJoin(String content, List<String> operativeFindingsList) {
+        StringBuffer text = new StringBuffer();
+        for (String titleTextIndex : operativeFindingsList) {
+            String[] titleTextIndexSplit = titleTextIndex.split(",");
+            text.append(content.substring(Integer.parseInt(titleTextIndexSplit[0]),
+                    Integer.parseInt(titleTextIndexSplit[1])));
+        }
+        return text.toString();
+    }
+
     /**
      * 根据各标题截取文本index
      *

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

@@ -211,6 +211,8 @@ public class Content {
     public static final String healing_level="愈合等级";
     public static final String anesthesia_mode="麻醉方式";
     public static final String anesthesia_doctor="麻醉医师";
+    public static final String operation_Discussion="术后首次病程及谈话记录";
+
     public static final String outWay="离院方式";
     public static final String brainInjuryComaTime="颅脑损伤患者昏迷时间";
     public static final String daCode="医嘱转院机构名称";

+ 2 - 0
public/src/main/java/com/lantone/qc/pub/model/doc/operation/OperationDiscussionDoc.java

@@ -1,6 +1,7 @@
 package com.lantone.qc.pub.model.doc.operation;
 
 import com.lantone.qc.pub.model.doc.ModelDoc;
+import com.lantone.qc.pub.model.label.OperationDiscussionLabel;
 import lombok.Getter;
 import lombok.Setter;
 
@@ -13,4 +14,5 @@ import lombok.Setter;
 @Getter
 @Setter
 public class OperationDiscussionDoc extends ModelDoc {
+    OperationDiscussionLabel operationDiscussionLabel = new OperationDiscussionLabel();
 }

+ 28 - 0
public/src/main/java/com/lantone/qc/pub/model/label/OperationDiscussionLabel.java

@@ -0,0 +1,28 @@
+package com.lantone.qc.pub.model.label;
+
+import com.lantone.qc.pub.model.entity.Clinical;
+import com.lantone.qc.pub.model.entity.Diag;
+import com.lantone.qc.pub.model.entity.Sign;
+import com.lantone.qc.pub.model.entity.TreatmentPlan;
+import com.lantone.qc.pub.model.entity.Vital;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @ClassName : OperationDiscussionLabel
+ * @Description :
+ * @Author : 胡敬
+ * @Date: 2020-03-24 11:02
+ */
+@Getter
+@Setter
+public class OperationDiscussionLabel {
+    String operativeFindings;   //手术经过文本(术中所见)
+    String riskAfterOp;    //术后风险文本
+    String attentionAfterOp;    //术后注意事项文本(处理及注意事项)
+    String measuresAfterOp;    //术后处理措施文本(处理及注意事项)
+    List<Vital> vitals = new ArrayList<>();   //生命体征实体
+}