|
@@ -0,0 +1,209 @@
|
|
|
+package com.lantone.qc.kernel.catalogue.hospital.xszyy.threelevelward;
|
|
|
+
|
|
|
+import com.lantone.qc.kernel.catalogue.QCCatalogue;
|
|
|
+import com.lantone.qc.pub.Content;
|
|
|
+import com.lantone.qc.pub.model.InputInfo;
|
|
|
+import com.lantone.qc.pub.model.OutputInfo;
|
|
|
+import com.lantone.qc.pub.model.doc.*;
|
|
|
+import com.lantone.qc.pub.model.doc.operation.OperationDoc;
|
|
|
+import com.lantone.qc.pub.model.doc.operation.OperationRecordDoc;
|
|
|
+import com.lantone.qc.pub.util.ListUtil;
|
|
|
+import com.lantone.qc.pub.util.StringUtil;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+
|
|
|
+import java.text.ParseException;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.List;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @ClassName : THE03116
|
|
|
+ * @Description: 病理检查缺少病理检查报告单
|
|
|
+ * @author: 贺聪聪
|
|
|
+ * @time: 2022/05/25 14:49
|
|
|
+ */
|
|
|
+
|
|
|
+@Component
|
|
|
+public class THR03116 extends QCCatalogue {
|
|
|
+ @Override
|
|
|
+ protected void start(InputInfo inputInfo, OutputInfo outputInfo) throws ParseException {
|
|
|
+ status.set("0");
|
|
|
+ boolean flag = false;
|
|
|
+ FirstPageRecordDoc firstPageRecordDoc = inputInfo.getFirstPageRecordDoc();
|
|
|
+ List<PacsDoc> pacsDocs = inputInfo.getPacsDocs();
|
|
|
+ List<DoctorAdviceDoc> doctorAdviceDocs = inputInfo.getDoctorAdviceDocs();
|
|
|
+ List<OperationDoc> operationDocs = inputInfo.getOperationDocs();
|
|
|
+ //去医嘱
|
|
|
+ if (ListUtil.isNotEmpty(doctorAdviceDocs)) {
|
|
|
+ for (DoctorAdviceDoc dad : doctorAdviceDocs) {
|
|
|
+ Map<String, String> dadStructureMap = dad.getStructureMap();
|
|
|
+ String daStatus = dadStructureMap.get(Content.doctorAdviceState);
|
|
|
+ if (StringUtil.isNotEmpty(daStatus)) {
|
|
|
+ if (!Content.cancellationOrderList.contains(daStatus)) {
|
|
|
+ String adviceType = dadStructureMap.get(Content.doctorAdviceType);
|
|
|
+ //取临时医嘱
|
|
|
+ if (StringUtil.isNotEmpty(adviceType) && adviceType.equals(Content.statOrder)) {
|
|
|
+ String name = dadStructureMap.get(Content.medicalOrderName);
|
|
|
+ if (exStr(name)) {
|
|
|
+ flag = true;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //用首页判断是否进行了病理检查
|
|
|
+ if(firstPageRecordDoc!=null){
|
|
|
+ String str = firstPageRecordDoc.getStructureMap().get("病理诊断费");
|
|
|
+ if ( !str.equals("0") && StringUtil.isNotEmpty(str)) {
|
|
|
+ double a = Double.parseDouble(str);
|
|
|
+ if ( a > Content.pathologicalFee) {
|
|
|
+ flag=true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //手术记录
|
|
|
+ if(ListUtil.isNotEmpty(operationDocs)){
|
|
|
+ for (OperationDoc operationDoc : operationDocs) {
|
|
|
+ OperationRecordDoc operationRecordDoc = operationDoc.getOperationRecordDoc();
|
|
|
+ if(operationRecordDoc!=null) {
|
|
|
+ String str = operationRecordDoc.getStructureMap().get("手术经过及处理");
|
|
|
+ if (StringUtil.isNotEmpty(str)) {
|
|
|
+ if (ssBlStr(str)) {
|
|
|
+ flag = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<PathologyShipDoc> pathologyShipDocs = inputInfo.getPathologyShipDocs();
|
|
|
+ if(ListUtil.isNotEmpty(pathologyShipDocs)){
|
|
|
+ flag=true;
|
|
|
+ }
|
|
|
+ if (flag) {
|
|
|
+ status.set("-1");
|
|
|
+ if (ListUtil.isNotEmpty(pacsDocs)) {
|
|
|
+ for (PacsDoc pacsDoc : pacsDocs) {
|
|
|
+ Map<String, String> structureMap = pacsDoc.getStructureMap();
|
|
|
+ String str = structureMap.get("检查所见");
|
|
|
+ String str1 = structureMap.get("临床诊断");
|
|
|
+ String str2 = structureMap.get("报告名称");
|
|
|
+ String str3 = structureMap.get("观察记录");
|
|
|
+ String str4 = structureMap.get("检查结果诊断");
|
|
|
+ String str5 = structureMap.get("检查部位");
|
|
|
+ if(dateStr(str)||dateStr(str1)||dateStr(str2)||dateStr(str3)||dateStr(str4)||str5.contains("病理")){
|
|
|
+ status.set("0");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ private boolean dateStr(String string){
|
|
|
+ if(StringUtil.isEmpty(string)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ boolean flag=false;
|
|
|
+ String str = Str(string);
|
|
|
+ String rex="[\\s\\S]*(?=流式)[\\s\\S]*";
|
|
|
+ String rex1="[\\s\\S]*(?=穿透)[^,;,;。]{0,7}(?=层)[\\s\\S]*";
|
|
|
+ String rex2="[\\s\\S]*(?=癌)[^,;,;。]{0,7}(?=浸润)[\\s\\S]*";
|
|
|
+ String rex3="[\\s\\S]*(?=分化)[\\s\\S]*";
|
|
|
+ String rex4="[\\s\\S]*(?=淋巴结)[^,;,;。]{0,8}(?=转移)[\\s\\S]*";
|
|
|
+ String rex5="[\\s\\S]*(?=浸润性)[^,;,;。]{0,8}(?=癌)[\\s\\S]*";
|
|
|
+ String rex6="[\\s\\S]*(?=突破)[^,;,;。]{0,7}(?=层)[\\s\\S]*";
|
|
|
+ List<String> reportCardPathologyList = Content.reportCardPathologyList;
|
|
|
+ for (String reportCardPathology : reportCardPathologyList) {
|
|
|
+ if(string.contains(reportCardPathology)){
|
|
|
+ flag=true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(flag || str.matches(rex1)|| str.matches(rex2)
|
|
|
+ ||str.matches(rex3)|| str.matches(rex4)||str.matches(rex5)|| str.matches(rex6)|| str.matches(rex)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ private boolean ssBlStr(String string){
|
|
|
+ if(StringUtil.isEmpty(string)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ List<String> surgeryPathologyTwoList = Content.surgeryPathologyTwoList;
|
|
|
+ for (String surgeryPathologyTwo : surgeryPathologyTwoList) {
|
|
|
+ if(string.contains(surgeryPathologyTwo)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ String str = Str(string);
|
|
|
+ if(str.contains("冰冻")){
|
|
|
+ if(bdStr(str)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ private boolean exStr(String string){
|
|
|
+ if(StringUtil.isEmpty(string)){
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ String str = Str(string);
|
|
|
+ List<String> doctorAdvicePathologyList = Content.doctorAdvicePathologyList;
|
|
|
+ for (String doctorAdvicePathology : doctorAdvicePathologyList) {
|
|
|
+ if(string.contains(doctorAdvicePathology)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(str.contains("冰冻")){
|
|
|
+ if(bdStr(str)){
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ private String Str(String str){
|
|
|
+ str = str.replaceAll("\\*", "\\\\*");
|
|
|
+ str = str.replaceAll("\\)", "\\\\)");
|
|
|
+ str = str.replaceAll("\\.", "\\\\.");
|
|
|
+ str = str.replaceAll("\\?", "\\\\?");
|
|
|
+ str = str.replaceAll("\\+", "\\\\+");
|
|
|
+ str = str.replaceAll("\\$", "\\\\$");
|
|
|
+ str = str.replaceAll("\\^", "\\\\^");
|
|
|
+ str = str.replaceAll("\\[", "\\\\[");
|
|
|
+ str = str.replaceAll("\\]", "\\\\]");
|
|
|
+ str = str.replaceAll("\\(", "\\\\(");
|
|
|
+ str = str.replaceAll("\\{", "\\\\{");
|
|
|
+ str = str.replaceAll("\\}", "\\\\}");
|
|
|
+ str = str.replaceAll("\\|", "\\\\|");
|
|
|
+ str = str.replaceAll("\\/", "\\\\/");
|
|
|
+ return str;
|
|
|
+ }
|
|
|
+ //判断包含冰冻但不属于病理
|
|
|
+ private boolean bdStr(String str) {
|
|
|
+ ArrayList<String> blStrings = new ArrayList<>();
|
|
|
+ String rex1="[\\s\\S]{0,10}(?=冰冻)[\\s\\S]{0,10}";
|
|
|
+ Matcher matcher = Pattern.compile(rex1).matcher(str);
|
|
|
+ while (matcher.find()) {
|
|
|
+ String group = matcher.group();
|
|
|
+ blStrings.add(group);
|
|
|
+ }
|
|
|
+ List<String> notBLList = Content.notBDBLList;
|
|
|
+ if (ListUtil.isNotEmpty(blStrings)) {
|
|
|
+ for (String notBL : notBLList) {
|
|
|
+ for (int i = 0; i < blStrings.size(); i++) {
|
|
|
+ String cfStr = blStrings.get(i);
|
|
|
+ if (cfStr.contains(notBL)) {
|
|
|
+ blStrings.remove(i);
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (blStrings.size() > 0) {
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+}
|