Refine major department options

This commit is contained in:
Codex
2026-05-27 13:32:49 +08:00
parent b5f41c3dda
commit 2863b34d47
3 changed files with 65 additions and 3 deletions

40
患者首页处理/数据可视化网页端/app/main.py Normal file → Executable file
View File

@@ -52,6 +52,44 @@ PDF_DIR = Path(env("PDF_DIR", str(PROJECT_ROOT / "待处理-患者首页PDF"))).
SETTINGS_PATH = Path(env("REVIEW_SETTINGS_PATH", str(PROJECT_ROOT / "数据可视化网页端/review_settings.local.json"))).resolve() SETTINGS_PATH = Path(env("REVIEW_SETTINGS_PATH", str(PROJECT_ROOT / "数据可视化网页端/review_settings.local.json"))).resolve()
APP_TIMEZONE = ZoneInfo(env("APP_TIMEZONE", "Asia/Shanghai") or "Asia/Shanghai") APP_TIMEZONE = ZoneInfo(env("APP_TIMEZONE", "Asia/Shanghai") or "Asia/Shanghai")
DEFAULT_MAJOR_DEPARTMENT_OPTIONS = [
"肝胆外科及肝移植相关",
"普通外科及腹部外科",
"急诊医学科",
"重症医学科",
"骨科",
"泌尿外科",
"呼吸内科",
"耳鼻喉头颈外科",
"日间诊疗中心",
"乳腺外科",
"胸外科",
"肝病内科",
"感染科",
"肿瘤放疗科",
"消化内科",
"肿瘤外科",
"特需/涉外病房",
"老年外科",
]
def load_major_department_options() -> list[str]:
rule_path = PROJECT_ROOT / "数据处理工作区" / "01_配置规则" / "01_科室分类规则.json"
if rule_path.exists():
try:
data = json.loads(rule_path.read_text(encoding="utf-8"))
options = [str(group.get("大科室", "")).strip() for group in data.get("大科室列表", [])]
options = [option for option in options if option]
if options:
return options
except Exception: # noqa: BLE001
pass
return DEFAULT_MAJOR_DEPARTMENT_OPTIONS
MAJOR_DEPARTMENT_OPTIONS = load_major_department_options()
FIELD_GROUPS: list[dict[str, Any]] = [ FIELD_GROUPS: list[dict[str, Any]] = [
{ {
@@ -81,7 +119,7 @@ FIELD_GROUPS: list[dict[str, Any]] = [
("discharge_dept", "出院科别", "text", None), ("discharge_dept", "出院科别", "text", None),
("discharge_ward", "出院病房", "text", None), ("discharge_ward", "出院病房", "text", None),
("hospital_days", "实际住院天数", "integer", None), ("hospital_days", "实际住院天数", "integer", None),
("major_department", "大科室", "text", None), ("major_department", "大科室", "select", MAJOR_DEPARTMENT_OPTIONS),
], ],
}, },
{ {

View File

@@ -705,8 +705,12 @@ function renderField(record, name, label, type, options, alerted = false, source
const sourceClass = source === "ai" ? " is-ai-modified" : source === "manual" ? " is-manual-modified" : ""; const sourceClass = source === "ai" ? " is-ai-modified" : source === "manual" ? " is-manual-modified" : "";
let control = ""; let control = "";
if (type === "select") { if (type === "select") {
const normalizedValue = String(value ?? "");
const normalizedOptions = (options || []).map((option) => String(option));
const optionItems = ["", ...normalizedOptions];
if (normalizedValue && !normalizedOptions.includes(normalizedValue)) optionItems.push(normalizedValue);
control = `<select data-field="${name}" data-type="${type}"> control = `<select data-field="${name}" data-type="${type}">
${(options || []).map((option) => `<option value="${escapeHtml(option)}" ${option === value ? "selected" : ""}>${escapeHtml(option)}</option>`).join("")} ${optionItems.map((option) => `<option value="${escapeHtml(option)}" ${option === normalizedValue ? "selected" : ""}>${escapeHtml(option || "请选择")}</option>`).join("")}
</select>`; </select>`;
} else if (type === "json") { } else if (type === "json") {
control = renderJsonEditor(name, value, sourceMap); control = renderJsonEditor(name, value, sourceMap);

View File

@@ -65,7 +65,8 @@
{ {
"大科室": "呼吸内科", "大科室": "呼吸内科",
"子科室": [ "子科室": [
"呼吸内科3病区" "呼吸内科3病区",
"呼吸内科RCU"
] ]
}, },
{ {
@@ -126,6 +127,18 @@
"肿瘤放疗日间【无人】" "肿瘤放疗日间【无人】"
] ]
}, },
{
"大科室": "消化内科",
"子科室": [
"消化内科2病房"
]
},
{
"大科室": "肿瘤外科",
"子科室": [
"肿瘤外科2病房"
]
},
{ {
"大科室": "特需/涉外病房", "大科室": "特需/涉外病房",
"子科室": [ "子科室": [
@@ -141,6 +154,9 @@
], ],
"aliases": { "aliases": {
"呼吸内科3": "呼吸内科3病区", "呼吸内科3": "呼吸内科3病区",
"呼吸内科RCU": "呼吸内科RCU",
"消化内科2": "消化内科2病房",
"消化内科2病房": "消化内科2病房",
"外科ICU": "外科ICU", "外科ICU": "外科ICU",
"急诊中心病房": "急诊中心", "急诊中心病房": "急诊中心",
"急诊中心": "急诊中心", "急诊中心": "急诊中心",
@@ -176,10 +192,14 @@
"肝移植内科": "肝移植内", "肝移植内科": "肝移植内",
"肝移植内N": "肝移植内N", "肝移植内N": "肝移植内N",
"肝移植内科N": "肝移植内N", "肝移植内科N": "肝移植内N",
"肝脏移植内科N": "肝移植内N",
"肝胆外科ICU": "肝胆ICU",
"肿瘤放疗3": "肿瘤放疗3", "肿瘤放疗3": "肿瘤放疗3",
"肿放3": "肿瘤放疗3", "肿放3": "肿瘤放疗3",
"肿瘤放疗L": "肿瘤放疗病区L", "肿瘤放疗L": "肿瘤放疗病区L",
"肿放L": "肿瘤放疗病区L", "肿放L": "肿瘤放疗病区L",
"肿瘤外科2": "肿瘤外科2病房",
"肿瘤外科2病房": "肿瘤外科2病房",
"重症医学1": "※重症医学1病区", "重症医学1": "※重症医学1病区",
"重症医学科1": "※重症医学1病区", "重症医学科1": "※重症医学1病区",
"重症1": "※重症医学1病区", "重症1": "※重症医学1病区",