ソースを参照

1.药物过敏史与病案首页不一致

hujing 5 年 前
コミット
5fd7ae5987

+ 99 - 0
kernel/src/main/java/com/lantone/qc/kernel/catalogue/behospitalized/BEH0724.java

@@ -0,0 +1,99 @@
+package com.lantone.qc.kernel.catalogue.behospitalized;
+
+import com.alibaba.fastjson.JSONArray;
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
+import com.lantone.qc.kernel.client.ChiefPresentSimilarityServiceClient;
+import com.lantone.qc.kernel.structure.ai.ModelAI;
+import com.lantone.qc.pub.model.InputInfo;
+import com.lantone.qc.pub.model.OutputInfo;
+import com.lantone.qc.pub.model.doc.BeHospitalizedDoc;
+import com.lantone.qc.pub.model.doc.FirstPageRecordDoc;
+import com.lantone.qc.pub.model.entity.Allergy;
+import com.lantone.qc.pub.model.label.PastLabel;
+import com.lantone.qc.pub.util.ListUtil;
+import com.lantone.qc.pub.util.StringUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * @Description: 药物过敏史与病案首页不一致
+ * @author: 胡敬
+ * @time: 2020/06/03 17:28
+ */
+@Component
+public class BEH0724 extends QCCatalogue {
+    @Autowired
+    ChiefPresentSimilarityServiceClient chiefPresentSimilarityServiceClient;
+
+    @Override
+    public void start(InputInfo inputInfo, OutputInfo outputInfo) {
+        FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
+        BeHospitalizedDoc beHospitalizedDoc = inputInfo.getBeHospitalizedDoc();
+        if (firstPageRecordDoc == null || beHospitalizedDoc == null) {
+            status.set("0");
+            return;
+        }
+        Map<String, String> firpStructureMap = firstPageRecordDoc.getStructureMap();
+        String firpAllergyMedicine = firpStructureMap.get("过敏药物");
+        if (StringUtil.isBlank(firpAllergyMedicine)) {
+            status.set("0");
+            return;
+        }
+        PastLabel pastLabel = beHospitalizedDoc.getPastLabel();
+        if (pastLabel == null) {
+            status.set("0");
+            return;
+        }
+
+        List<Allergy> allergies = pastLabel.getAllergies();
+        if (ListUtil.isNotEmpty(allergies)) {
+            if (firpAllergyMedicine.contains("无")) {
+                allergies = allergies.stream().filter(i -> i != null
+                                && i.getNegative() != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && i.getAllergyMedicine() != null
+                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                ).collect(Collectors.toList());
+                /* 模型提出的药物过敏史内容有一个否定就算与病案首页的药物过敏:无 相同 */
+                if (allergies.size() > 0) {
+                    status.set("0");
+                }
+            } else {
+                allergies = allergies.stream().filter(i -> i != null
+                                && StringUtil.isNotBlank(i.getName())
+                                && i.getAllergyMedicine() != null
+                                && StringUtil.isNotBlank(i.getAllergyMedicine().getName())
+                ).collect(Collectors.toList());
+
+                List<String> allergyMedicine = getAllergyMedicine(allergies);
+                /* 主诉现病史相似度算法接口 */
+                ModelAI modelAI = new ModelAI();
+                JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(firpAllergyMedicine, allergyMedicine,
+                        false, chiefPresentSimilarityServiceClient);
+                if (jsonArray.size() == 2) {
+                    /* 相似度分数 */
+                    double likeRate = jsonArray.getDoubleValue(1);
+                    if (likeRate > 0.9) {
+                        status.set("0");
+                    } else {
+                        status.set("-1");
+                    }
+                }
+            }
+        }
+    }
+
+    private List<String> getAllergyMedicine(List<Allergy> allergies) {
+        List<String> allergieStrList = new ArrayList<>();
+        for (Allergy allergieStr : allergies) {
+            allergieStrList.add(allergieStr.getAllergyMedicine().getName());
+        }
+        return allergieStrList;
+    }
+
+}