|
@@ -1,6 +1,5 @@
|
|
|
package com.lantone.qc.kernel.catalogue.hospital.yiwu.firstpagerecord;
|
|
|
|
|
|
-import com.google.common.collect.Lists;
|
|
|
import com.lantone.qc.kernel.catalogue.QCCatalogue;
|
|
|
import com.lantone.qc.kernel.util.CatalogueUtil;
|
|
|
import com.lantone.qc.pub.Content;
|
|
@@ -13,6 +12,8 @@ import org.springframework.stereotype.Component;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
|
+import java.util.regex.Matcher;
|
|
|
+import java.util.regex.Pattern;
|
|
|
|
|
|
/**
|
|
|
* @ClassName : FIRP03258
|
|
@@ -21,6 +22,17 @@ import java.util.Map;
|
|
|
@Component
|
|
|
public class FIRP03258 extends QCCatalogue {
|
|
|
|
|
|
+ // 匹配数字+单位模式的正则表达式(支持整数和小数)
|
|
|
+ private static final Pattern AGE_PATTERN = Pattern.compile(
|
|
|
+ "(\\d+\\.?\\d*)\\s*(年|个月|月|天|日|岁|y|Y|m|M|d|D)"
|
|
|
+ );
|
|
|
+
|
|
|
+ // 标准转换常量(根据医疗常规设置)
|
|
|
+ private static final double DAYS_PER_YEAR = 365.0;
|
|
|
+ private static final double DAYS_PER_MONTH = 30.0;
|
|
|
+ private static final double DAYS_PER_WEEK = 7.0; // 备用扩展
|
|
|
+
|
|
|
+
|
|
|
public void start(InputInfo inputInfo, OutputInfo outputInfo) {
|
|
|
status.set("0");
|
|
|
if (inputInfo.getFirstPageRecordDoc() != null && inputInfo.getFirstPageRecordDoc().getStructureExtMap() != null) {
|
|
@@ -34,31 +46,15 @@ public class FIRP03258 extends QCCatalogue {
|
|
|
return;
|
|
|
}
|
|
|
String admissionAge = (String)firstpageStructureMap.get(Content.age);
|
|
|
- if (StringUtil.isNotBlank(admissionAge) && !admissionAge.contains("天")) {
|
|
|
- return;
|
|
|
- }
|
|
|
- int age = removalUnit(admissionAge);
|
|
|
- if (age < 28) {
|
|
|
+ if (isUnder28Days(admissionAge)) {
|
|
|
status.set("-1");
|
|
|
- info.set("患者年龄:" + age);
|
|
|
+ info.set("患者年龄:" + admissionAge);
|
|
|
String xmlId = CatalogueUtil.getXmlId(firstpageStructureMap, Content.age);
|
|
|
id.set(xmlId);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private int removalUnit(String admissionAge) {
|
|
|
- int age = 0;
|
|
|
- if (StringUtil.isNotBlank(admissionAge) && admissionAge.contains("岁")) {
|
|
|
- admissionAge = admissionAge.replaceAll("[岁天]", "");
|
|
|
- }
|
|
|
- admissionAge = admissionAge.replaceAll("[^0-9]","");
|
|
|
- if (CatalogueUtil.numbersOnly(admissionAge)) {
|
|
|
- age = Integer.parseInt(admissionAge);
|
|
|
- }
|
|
|
- return age;
|
|
|
- }
|
|
|
-
|
|
|
private List<String> getFirstpageDischargeDiag(List<Map<String, String>> outpatientEmergencyDiagList) {
|
|
|
List<String> firstpageDischargeDiag = new ArrayList<>();
|
|
|
for (Map<String, String> outpatientEmergencyDiag : outpatientEmergencyDiagList) {
|
|
@@ -69,4 +65,38 @@ public class FIRP03258 extends QCCatalogue {
|
|
|
}
|
|
|
return firstpageDischargeDiag;
|
|
|
}
|
|
|
+
|
|
|
+ public static boolean isUnder28Days(String ageString) {
|
|
|
+ if (ageString == null || ageString.trim().isEmpty()) {
|
|
|
+ return false; // 无效输入处理
|
|
|
+ }
|
|
|
+
|
|
|
+ double totalDays = 0.0;
|
|
|
+ Matcher matcher = AGE_PATTERN.matcher(ageString);
|
|
|
+
|
|
|
+ while (matcher.find()) {
|
|
|
+ try {
|
|
|
+ double value = Double.parseDouble(matcher.group(1));
|
|
|
+ String unit = matcher.group(2).toLowerCase();
|
|
|
+
|
|
|
+ switch (unit) {
|
|
|
+ case "年": case "岁": case "y":
|
|
|
+ totalDays += value * DAYS_PER_YEAR;
|
|
|
+ break;
|
|
|
+ case "个月": case "月": case "m":
|
|
|
+ totalDays += value * DAYS_PER_MONTH;
|
|
|
+ break;
|
|
|
+ case "天": case "日": case "d":
|
|
|
+ totalDays += value;
|
|
|
+ break;
|
|
|
+ // 可扩展周等单位
|
|
|
+ }
|
|
|
+ } catch (NumberFormatException e) {
|
|
|
+ // 记录日志或处理异常数值
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 精确浮点数比较(保留两位小数)
|
|
|
+ return Math.round(totalDays * 100) / 100.0 <= 28.0;
|
|
|
+ }
|
|
|
}
|