Explorar el Código

术前小结crf

chengyao hace 4 años
padre
commit
2daa808849

+ 55 - 1
structure-center/src/main/java/com/lantone/structure/ai/OperationAI.java

@@ -3,6 +3,7 @@ package com.lantone.structure.ai;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.google.common.collect.Lists;
+import com.lantone.structure.ai.process.EntityProcessOperation;
 import com.lantone.structure.client.CRFServiceClient;
 import com.lantone.structure.ai.process.EntityProcessDrug;
 import com.lantone.structure.ai.process.EntityProcessOperationDiscussion;
@@ -12,6 +13,7 @@ import com.lantone.structure.model.InputInfo;
 import com.lantone.structure.model.doc.operation.OperationDiscussionDoc;
 import com.lantone.structure.model.doc.operation.OperationDoc;
 import com.lantone.structure.model.doc.operation.OperationRecordDoc;
+import com.lantone.structure.model.doc.operation.PreoperativeDiscussionDoc;
 import com.lantone.structure.model.entity.Drug;
 import com.lantone.structure.model.label.OperationDiscussionLabel;
 import com.lantone.structure.model.label.OperationRecordLabel;
@@ -32,7 +34,7 @@ public class OperationAI extends ModelAI {
     /**
      *
      */
-    public static List<String> medicalTextType = Arrays.asList("CourseAfterOperation_cx", "CourseRecordSRR");
+    public static List<String> medicalTextType = Arrays.asList("CourseAfterOperation_cx", "CourseRecordSRR","Taizhou_preoperativeDiscussion_record");
     public static String entityRelationObject = "entity_relation_object";
     public static String outputs = "outputs";
     public static String content = "content";
@@ -43,6 +45,31 @@ public class OperationAI extends ModelAI {
         JSONArray crfContent = new JSONArray();
         List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
         for (int i = 0; i < operationDocs.size(); i++) {
+            if (operationDocs.get(i).getPreoperativeDiscussionDoc() != null) {
+                PreoperativeDiscussionDoc preoperativeDiscussionDoc = operationDocs.get(i).getPreoperativeDiscussionDoc();
+                Map<String, String> structureMap = preoperativeDiscussionDoc.getStructureMap();
+                String text = preoperativeDiscussionDoc.getText();
+                String opName = structureMap.get("拟实施手术及操作名称");
+                StringBuffer sb = new StringBuffer();
+                if(StringUtil.isNotEmpty(opName)){
+                    sb.append("拟实施手术名称:"+opName+"\n");
+                }
+
+                String opFlag = structureMap.get("手术指征");
+                if(StringUtil.isNotEmpty(opFlag)){
+                    sb.append("手术指征:"+opFlag+"\n");
+                }
+
+                String simCase = structureMap.get("诊断依据");
+                if(StringUtil.isNotEmpty(simCase)){
+                    sb.append("简要病情:"+simCase+"\n");
+                }
+
+                if(StringUtil.isNotEmpty(sb.toString())){
+                    text = sb.toString();
+                }
+                putContent(crfContent, medicalTextType.get(2),text, content, Content.preoperativeDiscussion);
+            }
             if (operationDocs.get(i).getOperationRecordDoc() != null) {
                 OperationRecordDoc operationRecordDoc = operationDocs.get(i).getOperationRecordDoc();
                 Map<String, String> structureMap = operationRecordDoc.getStructureMap();
@@ -63,6 +90,14 @@ public class OperationAI extends ModelAI {
 
         JSONObject midData = loadAI(crfContent, crfServiceClient);//crf返回数据
 
+/*        for (int i = 0; i < operationDocs.size(); i++) {
+            if (midData.get(Content.preoperativeDiscussion) == null) {
+                continue;
+            }
+            PreoperativeDiscussionDoc preoperativeDiscussionDoc = putPreoperativeDiscussionCrfData(midData.getJSONObject(Content.preoperativeDiscussion));
+            operationDocs.get(i).setPreoperativeDiscussionDoc(preoperativeDiscussionDoc);
+        }*/
+
         for (int i = 0; i < operationDocs.size(); i++) {
             if (midData.get("手术记录" + i + "药物") != null) {
                 OperationRecordDoc operationRecordDoc = operationDocs.get(i).getOperationRecordDoc();
@@ -118,6 +153,25 @@ public class OperationAI extends ModelAI {
         return drugs;
     }
 
+    /**
+     * 处理术前小结
+     *
+     * @param jsonObject
+     */
+    public PreoperativeDiscussionDoc putPreoperativeDiscussionCrfData(JSONObject jsonObject) {
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
+        if (jsonObject == null) {
+            return preoperativeDiscussionDoc;
+        }
+        JSONObject aiOut = jsonObject.getJSONObject(entityRelationObject).getJSONObject(BeHospitalizedAI.outputs);
+        if (aiOut == null) {
+            return preoperativeDiscussionDoc;
+        }
+        EntityProcessOperation entityProcessOperation = new EntityProcessOperation();
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc1 = entityProcessOperation.extractEntity(aiOut);
+        return preoperativeDiscussionDoc1;
+    }
+
     protected void putContent(JSONArray crfContent, String medicalTextType, String text, String sign) {
         String move_text = CatalogueUtil.removeSpecialChar(text);
         if (StringUtil.isEmpty(move_text)) {

+ 1 - 1
structure-center/src/main/java/com/lantone/structure/ai/model/EntityEnum.java

@@ -41,7 +41,7 @@ public enum EntityEnum {
     CORD_AROUND_BODY("脐带绕身"), UTERINE_WALL_SUTURE("子宫壁缝合情况"), UC_AGENT("宫缩剂名称"), UC_CONSUMPTION("宫缩剂用量"), UC_USAGE_WARD_ROUND("宫缩剂用法"),
     UTERINE_CAVITY_ABNORMITY("宫腔探查异常情况描述"), UTERINE_CAVITY_DISPOSE("宫腔探查处理情况"), PUERPERA_CONDITION("手术时产妇情况"), HEMORRHAGE("术中出血"),
     FLUID_INFUSION("补液"),BLOOD_PRESSURE("血压情况"), NEWBORN("新生儿"), APGAR_SCORE("Apgar评分"), SCORE("分数"), CAPUT_SUCCEDANEUM("产瘤"),
-    CAPUT_SUCCEDANEUM_PART("产瘤部位"), OPE_DRUG("手术用药名称"), OPE_CONSUMPTION("手术用药量"), OPE_USAGE_WARD_ROUND("手术用药方法"), TRANSFUSION("输血成分"), DOCTORADVICE_RECORD("医嘱内容"), ASSESSMENTPLAN("诊疗计划");
+    CAPUT_SUCCEDANEUM_PART("产瘤部位"), OPE_DRUG("手术用药名称"), OPE_CONSUMPTION("手术用药量"), OPE_USAGE_WARD_ROUND("手术用药方法"), TRANSFUSION("输血成分"), DOCTORADVICE_RECORD("医嘱内容"), ASSESSMENTPLAN("诊疗计划"),ALLERGYRECORD("过敏史"),OPCONTRAINDICATION("手术禁忌症"),OPBOTTOMNAME("拟实施手术及操作名称");
 
 
 

+ 45 - 0
structure-center/src/main/java/com/lantone/structure/ai/process/EntityProcessOperation.java

@@ -0,0 +1,45 @@
+package com.lantone.structure.ai.process;
+
+
+import com.alibaba.fastjson.JSONObject;
+import com.lantone.structure.ai.model.EntityEnum;
+import com.lantone.structure.ai.model.Lemma;
+import com.lantone.structure.model.doc.operation.PreoperativeDiscussionDoc;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import java.util.List;
+
+/**
+ * 术前小结处理
+ */
+public class EntityProcessOperation extends EntityProcess {
+    private Logger logger = LoggerFactory.getLogger(EntityProcessOperation.class);
+
+    public PreoperativeDiscussionDoc extractEntity(JSONObject aiOut) {
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc = new PreoperativeDiscussionDoc();
+        try {
+
+            //过敏史
+            List<Lemma> indicationAllergy = createEntityTree(aiOut, EntityEnum.ALLERGYRECORD.toString());
+            for (Lemma lemma : indicationAllergy) {
+                preoperativeDiscussionDoc.setAllergyRecord(lemma.getText());
+            }
+
+            //手术禁忌症
+            List<Lemma> indicationOpContrain = createEntityTree(aiOut, EntityEnum.OPCONTRAINDICATION.toString());
+            for (Lemma lemma : indicationOpContrain) {
+                preoperativeDiscussionDoc.setOpContraindication(lemma.getText());
+            }
+
+            //拟实施手术目标部位名称
+            List<Lemma> indicationOpBottom = createEntityTree(aiOut, EntityEnum.OPBOTTOMNAME.toString());
+            for (Lemma lemma : indicationOpBottom) {
+                preoperativeDiscussionDoc.setOpBottomName(lemma.getText());
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            logger.error(e.getMessage(), e);
+        }
+        return preoperativeDiscussionDoc;
+    }
+}

+ 4 - 4
structure-center/src/main/java/com/lantone/structure/facade/StructureFacade.java

@@ -44,9 +44,9 @@ public class StructureFacade {
             case "出院小结":
                 targetTran = new LeaveHospitalTran();
                 break;
-            case "术前小结":
+         /*   case "术前小结":
                 targetTran = new PreoperativeDiscussionTran();
-                break;
+                break;*/
             case "转科记录":
                 targetTran = new TransferRecordTran();
                 break;
@@ -56,9 +56,9 @@ public class StructureFacade {
             case "疑难病例讨论记录":
                 targetTran = new DifficultCaseDiscussTran();
                 break;
-            case "上级医师查房记录":
+        /*    case "上级医师查房记录":
                 targetTran = new WardRecordTran();
-                break;
+                break;*/
             default:
                 break;
         }

+ 22 - 3
structure-center/src/main/java/com/lantone/structure/facade/tran/PreoperativeDiscussionTran.java

@@ -31,12 +31,13 @@ public class PreoperativeDiscussionTran extends TargetTran {
         operationDoc.setPreoperativeDiscussionDoc(preoperativeDiscussionDoc);
         operationDocs.add(operationDoc);
         inputInfo.setOperationDocs(operationDocs);
-       // aiProcess();
-      //  ============================封装完成==============================
-        Map<String, String> structureMap = cutWord(text);
+    Map<String, String> structureMap = cutWord(text);
         Map<String, String> retMap = new HashMap<String, String>();
         pDContrast(inputInfo.getOperationDocs(), structureMap);
         mapKeyContrastCommon(structureMap,stagesContrasts,retMap);
+        preoperativeDiscussionDoc.setStructureMap(retMap);
+        aiProcess();
+        lastSovle(inputInfo.getOperationDocs(),retMap);
         return retMap;
     }
 
@@ -231,4 +232,22 @@ public class PreoperativeDiscussionTran extends TargetTran {
         }
         return null;
     }
+
+
+    public static Map lastSovle(List<OperationDoc> operationDocs,Map<String,String> rep) {
+        PreoperativeDiscussionDoc preoperativeDiscussionDoc = operationDocs.get(0).getPreoperativeDiscussionDoc();
+        String allergyRecord = preoperativeDiscussionDoc.getAllergyRecord();
+        String opBottomName = preoperativeDiscussionDoc.getOpBottomName();
+        String opContraindication = preoperativeDiscussionDoc.getOpContraindication();
+        if(StringUtil.isNotEmpty(allergyRecord)){
+            rep.put("过敏史",allergyRecord);
+        }
+        if(StringUtil.isNotEmpty(opBottomName)){
+            rep.put("拟实施手术目标部位名称",opBottomName);
+        }
+        if(StringUtil.isNotEmpty(opContraindication)){
+            rep.put("手术禁忌症",opContraindication);
+        }
+        return rep;
+    }
 }

+ 1 - 1
structure-center/src/main/java/com/lantone/structure/model/Content.java

@@ -250,7 +250,7 @@ public class Content {
     public static final String stayLength = "住院天数";//出院小结用
 
     public static final String timestamp = "timestamp";
-
+    public static final String  preoperativeDiscussion = "术前小结";
     public static final String bloodRecord = "输血记录";
     public static final String stagesSummary = "阶段小结";
     public static final String rescue = "抢救记录";

+ 3 - 0
structure-center/src/main/java/com/lantone/structure/model/doc/operation/PreoperativeDiscussionDoc.java

@@ -14,4 +14,7 @@ import lombok.Setter;
 @Setter
 public class PreoperativeDiscussionDoc extends ModelDoc {
     private String operationName;
+    private String allergyRecord;//过敏史
+    private String opContraindication;//手术禁忌症
+    private String opBottomName;//拟实施手术目标部位名称
 }