|
@@ -6,9 +6,7 @@ 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.entity.Diag;
|
|
|
-import com.lantone.qc.pub.model.entity.GeneralDesc;
|
|
|
-import com.lantone.qc.pub.model.entity.Negative;
|
|
|
+import com.lantone.qc.pub.model.entity.*;
|
|
|
import com.lantone.qc.pub.model.label.DiagLabel;
|
|
|
import com.lantone.qc.pub.model.label.PastLabel;
|
|
|
import com.lantone.qc.pub.model.label.PresentLabel;
|
|
@@ -39,7 +37,7 @@ public class BEH02980 extends QCCatalogue {
|
|
|
|
|
|
public void start(InputInfo inputInfo, OutputInfo outputInfo) {
|
|
|
status.set("0");
|
|
|
- if (inputInfo.getBeHospitalizedDoc() == null){
|
|
|
+ if (inputInfo.getBeHospitalizedDoc() == null) {
|
|
|
return;
|
|
|
}
|
|
|
PresentLabel presentLabel = inputInfo.getBeHospitalizedDoc().getPresentLabel();
|
|
@@ -66,12 +64,11 @@ public class BEH02980 extends QCCatalogue {
|
|
|
if (presentText.indexOf(presentDiag.getHospitalDiagName()) > lastGeneralIndex) {
|
|
|
if (isContains(presentDiag.getHospitalDiagName()) && !isFilter(presentDiag.getHospitalDiagName())) {
|
|
|
String dgname = presentDiag.getHospitalDiagName();
|
|
|
- if (presentDiag.getNegative()==null) {
|
|
|
+ if (presentDiag.getNegative() == null) {
|
|
|
if (!pos_diags.contains(dgname)) {
|
|
|
pos_diags.add(dgname);
|
|
|
}
|
|
|
- }
|
|
|
- else {
|
|
|
+ } else {
|
|
|
if (!neg_diags.contains(dgname)) {
|
|
|
neg_diags.add(dgname);
|
|
|
}
|
|
@@ -83,9 +80,14 @@ public class BEH02980 extends QCCatalogue {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
if (pastLabel != null && StringUtils.isNotEmpty(pastLabel.getText())) {
|
|
|
extract_diags(pastLabel.getDiags(), pos_diags, neg_diags);
|
|
|
+ //过敏史
|
|
|
+ extract_Allergy(pastLabel.getAllergies(), pos_diags, neg_diags);
|
|
|
+ //食物过敏史
|
|
|
+ extract_AllergyFoods(pastLabel.getAllergyFoods(), pos_diags, neg_diags);
|
|
|
+ //药物过敏史
|
|
|
+ extract_Medicine(pastLabel.getAllergyMedicines(), pos_diags, neg_diags);
|
|
|
} else {
|
|
|
//例如邵逸夫 台州这种结构化数据,判断高血压 和 糖尿病是否有冲突
|
|
|
List<Diag> pastDiags = new ArrayList<>();
|
|
@@ -106,7 +108,7 @@ public class BEH02980 extends QCCatalogue {
|
|
|
diag = new Diag();
|
|
|
diag.setName("糖尿病");
|
|
|
diag.setHospitalDiagName("糖尿病");
|
|
|
- if (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
|
|
|
+ if (StringUtils.isNotEmpty(a1) && "否认".equals(a1)) {
|
|
|
Negative negative = new Negative();
|
|
|
negative.setName("否认");
|
|
|
pastDiags.add(diag);
|
|
@@ -123,13 +125,24 @@ public class BEH02980 extends QCCatalogue {
|
|
|
String infoStr = "";
|
|
|
int matchSum = 0;
|
|
|
ModelAI modelAI = new ModelAI();
|
|
|
-
|
|
|
for (String negdiag : neg_diags) {
|
|
|
JSONArray jsonArray = modelAI.loadChiefPresentSimilarAI(negdiag, pos_diags, false
|
|
|
, "diagnose", chiefPresentSimilarityServiceClient);
|
|
|
if (jsonArray.size() == 2) {
|
|
|
/* 相似度最高症状 */
|
|
|
String dgname = jsonArray.getString(0);
|
|
|
+ if ("糖尿病".equals(negdiag) && "妊娠期糖尿病".equals(dgname)) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ if ("高血压史".equals(negdiag) && "高血压病".equals(dgname)) {
|
|
|
+ matchSum++;
|
|
|
+ if (StringUtils.isEmpty(infoStr)) {
|
|
|
+ infoStr = negdiag;
|
|
|
+ } else {
|
|
|
+ infoStr = infoStr + "," + negdiag;
|
|
|
+ }
|
|
|
+ continue;
|
|
|
+ }
|
|
|
/* 相似度分数 */
|
|
|
double likeRate = jsonArray.getDoubleValue(1);
|
|
|
if (likeRate > 0.99) {
|
|
@@ -139,7 +152,7 @@ public class BEH02980 extends QCCatalogue {
|
|
|
} else {
|
|
|
infoStr = infoStr + "," + negdiag;
|
|
|
}
|
|
|
- break;
|
|
|
+ continue;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
@@ -150,24 +163,79 @@ public class BEH02980 extends QCCatalogue {
|
|
|
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- private List<String> extract_diags(List<Diag> diags, List<String> pos_diags, List<String> neg_diags ) {
|
|
|
+ //疾病史
|
|
|
+ private List<String> extract_diags(List<Diag> diags, List<String> pos_diags, List<String> neg_diags) {
|
|
|
List<String> dgs = new ArrayList<>();
|
|
|
- for (Diag dg:diags) {
|
|
|
+ for (Diag dg : diags) {
|
|
|
String dgname = dg.getHospitalDiagName();
|
|
|
- if (dg.getNegative()==null) {
|
|
|
+ if (dg.getNegative() == null) {
|
|
|
+ if (!pos_diags.contains(dgname)) {
|
|
|
+ pos_diags.add(dgname);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!neg_diags.contains(dgname)) {
|
|
|
+ neg_diags.add(dgname);
|
|
|
+ dgs.add(dgname);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return dgs;
|
|
|
+ }
|
|
|
+
|
|
|
+ //过敏史
|
|
|
+ private List<String> extract_Allergy(List<Allergy> allergys, List<String> pos_diags, List<String> neg_diags) {
|
|
|
+ List<String> dgs = new ArrayList<>();
|
|
|
+ for (Allergy dg : allergys) {
|
|
|
+ String dgname = dg.getName();
|
|
|
+ if (dg.getNegative() == null) {
|
|
|
if (!pos_diags.contains(dgname)) {
|
|
|
pos_diags.add(dgname);
|
|
|
}
|
|
|
+ } else {
|
|
|
+ if (!neg_diags.contains(dgname)) {
|
|
|
+ neg_diags.add(dgname);
|
|
|
+ dgs.add(dgname);
|
|
|
+ }
|
|
|
}
|
|
|
- else {
|
|
|
+ }
|
|
|
+ return dgs;
|
|
|
+ }
|
|
|
+
|
|
|
+ //食物过敏史
|
|
|
+ private List<String> extract_AllergyFoods(List<AllergyFood> allergyFoods, List<String> pos_diags, List<String> neg_diags) {
|
|
|
+ List<String> dgs = new ArrayList<>();
|
|
|
+ for (AllergyFood af : allergyFoods) {
|
|
|
+ String dgname = af.getName();
|
|
|
+ if (af.getNegative() == null) {
|
|
|
+ if (!pos_diags.contains(dgname)) {
|
|
|
+ pos_diags.add(dgname);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
if (!neg_diags.contains(dgname)) {
|
|
|
neg_diags.add(dgname);
|
|
|
dgs.add(dgname);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+ return dgs;
|
|
|
+ }
|
|
|
|
|
|
+ //药物过敏史
|
|
|
+ private List<String> extract_Medicine(List<AllergyMedicine> allergyMedicines, List<String> pos_diags, List<String> neg_diags) {
|
|
|
+ List<String> dgs = new ArrayList<>();
|
|
|
+ for (AllergyMedicine am : allergyMedicines) {
|
|
|
+ String dgname = am.getName();
|
|
|
+ if (am.getNegative() == null) {
|
|
|
+ if (!pos_diags.contains(dgname)) {
|
|
|
+ pos_diags.add(dgname);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (!neg_diags.contains(dgname)) {
|
|
|
+ neg_diags.add(dgname);
|
|
|
+ dgs.add(dgname);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
return dgs;
|
|
|
}
|
|
|
|