# Phase 4 广西地方特色模块详细设计 | 属性 | 值 | |------|------| | 文档类型 | 详细设计 | | 版本 | v1.0 | | 日期 | 2026-06-17 | | 模块 | TCM / Epidemic / EHCard / Invoice / DRG深化 | --- ## 一、中医壮医模块(tcm) ### 1.1 已有代码分析 **后端(3个文件)** - `TcmController.java` — 23行,5个端点:方剂CRUD + 体质辨识 + 统计 - `ITcmAppService.java` — 11行,5个方法 - `TcmAppServiceImpl.java` — 业务逻辑实现 **域实体(2个)** - `TcmPrescription` — tcm_prescription表,字段:prescriptionName/type/herbs/dosage/usage/indication/source/enabled - `TcmConstitutionAssessment` — tcm_constitution_assessment表,字段:encounterId/patientId/constitutionType/score/recommendation/assessorId/assessmentTime **前端(2个页面)** - `tcm/traditional/index.vue` — 方剂列表+详情+新增弹窗,有完整script - `tcm/constitution/index.vue` — 体质辨识页,无script(仅有模板) **Flyway V39** — 已创建 tcm_prescription + tcm_constitution_assessment ### 1.2 缺失功能清单 | 编号 | 功能 | 优先级 | |------|------|--------| | TCM-01 | 壮医三诊(望诊/脉诊/目诊)录入与存储 | P0 | | TCM-02 | 九种体质辨识问卷(平和/气虚/阳虚/阴虚/痰湿/湿热/血瘀/气郁/特禀) | P0 | | TCM-03 | 壮医诊疗记录(关联encounterId) | P0 | | TCM-04 | 民族药编码表(壮药/瑶药/苗药) | P1 | | TCM-05 | 常用方剂模板(可引用到处方) | P1 | | TCM-06 | 中医处方完整流程(开方→审核→取药→执行) | P1 | | TCM-07 | 体质辨识统计报表 | P2 | ### 1.3 业务流程 #### 壮医三诊流程 ``` 医生选择患者 → 进入壮医诊疗页面 ├→ 望诊:面色/舌象/形态选择 → 保存 ├→ 脉诊:脉象类型选择(浮/沉/迟/数等) → 保存 ├→ 目诊:眼部特征选择 → 保存 └→ 综合诊断 → 开具壮医处方 → 关联到医嘱 ``` #### 九种体质辨识流程 ``` 选择患者 → 启动体质辨识 ├→ 展示9套问卷(每套8-10题,5级评分) ├→ 医生逐题评分或患者自评 ├→ 计算各体质得分 ├→ 判定体质类型(主要/次要) └→ 生成调养建议 → 保存到tcm_constitution_assessment ``` ### 1.4 数据库设计 ```sql -- V47__tcm_zhuang_diagnosis.sql -- 壮医三诊记录 CREATE TABLE IF NOT EXISTS tcm_zhuang_diagnosis ( id BIGSERIAL PRIMARY KEY, encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL, patient_name VARCHAR(50), diagnosis_date DATE NOT NULL, visit_type VARCHAR(20) NOT NULL, face_color VARCHAR(50), face_shape VARCHAR(50), tongue_color VARCHAR(50), tongue_coating VARCHAR(50), tongue_shape VARCHAR(50), pulse_type VARCHAR(50), pulse_detail TEXT, eye_color VARCHAR(50), eye_vessel VARCHAR(50), eye_spot VARCHAR(50), body_shape VARCHAR(50), skin_condition VARCHAR(50), diagnosis_result TEXT, zhuang_diagnosis VARCHAR(200), doctor_id BIGINT, doctor_name VARCHAR(64), tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64), update_time TIMESTAMP ); COMMENT ON TABLE tcm_zhuang_diagnosis IS '壮医三诊记录'; COMMENT ON COLUMN tcm_zhuang_diagnosis.visit_type IS '诊法(WANG望/MAI脉/MU目)'; CREATE INDEX IF NOT EXISTS idx_tzd_encounter ON tcm_zhuang_diagnosis(encounter_id); -- 体质辨识问卷模板 CREATE TABLE IF NOT EXISTS tcm_constitution_questionnaire ( id BIGSERIAL PRIMARY KEY, constitution_type VARCHAR(20) NOT NULL, question_no INT NOT NULL, question_text TEXT NOT NULL, option_a VARCHAR(200), option_b VARCHAR(200), option_c VARCHAR(200), option_d VARCHAR(200), option_e VARCHAR(200), score_a INT DEFAULT 1, score_b INT DEFAULT 2, score_c INT DEFAULT 3, score_d INT DEFAULT 4, score_e INT DEFAULT 5, enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE tcm_constitution_questionnaire IS '体质辨识问卷模板'; CREATE INDEX IF NOT EXISTS idx_tccq_type ON tcm_constitution_questionnaire(constitution_type); -- 体质辨识答题记录 CREATE TABLE IF NOT EXISTS tcm_constitution_answer ( id BIGSERIAL PRIMARY KEY, assessment_id BIGINT NOT NULL, question_id BIGINT NOT NULL, answer_option CHAR(1), score INT, tenant_id INTEGER DEFAULT 0, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE tcm_constitution_answer IS '体质辨识答题记录'; CREATE INDEX IF NOT EXISTS idx_tca_assessment ON tcm_constitution_answer(assessment_id); -- 民族药编码表 CREATE TABLE IF NOT EXISTS tcm_ethnic_drug ( id BIGSERIAL PRIMARY KEY, drug_code VARCHAR(50) NOT NULL, drug_name VARCHAR(200) NOT NULL, drug_type VARCHAR(20) NOT NULL, pinyin_code VARCHAR(50), wubi_code VARCHAR(50), category VARCHAR(50), nature VARCHAR(50), flavor VARCHAR(50), channel_tropism VARCHAR(100), indication TEXT, dosage VARCHAR(100), contraindication TEXT, source VARCHAR(200), enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP ); COMMENT ON TABLE tcm_ethnic_drug IS '民族药编码表'; COMMENT ON COLUMN tcm_ethnic_drug.drug_type IS '类型(ZHUANG壮药/YAO瑶药/MIAO苗药)'; CREATE INDEX IF NOT EXISTS ted_code ON tcm_ethnic_drug(drug_code); CREATE INDEX IF NOT EXISTS ted_type ON tcm_ethnic_drug(drug_type); -- 中医处方明细(扩展tcm_prescription) CREATE TABLE IF NOT EXISTS tcm_prescription_item ( id BIGSERIAL PRIMARY KEY, prescription_id BIGINT NOT NULL, drug_code VARCHAR(50), drug_name VARCHAR(200) NOT NULL, drug_type VARCHAR(20) DEFAULT 'TCM', dosage VARCHAR(100), unit VARCHAR(20), frequency VARCHAR(50), usage_method VARCHAR(100), decoction_method VARCHAR(100), sort_order INT DEFAULT 0, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE tcm_prescription_item IS '中医处方明细'; COMMENT ON COLUMN tcm_prescription_item.drug_type IS '类型(TCM中药/ZHUANG壮药/YAO瑶药)'; CREATE INDEX IF NOT EXISTS tpi_prescription ON tcm_prescription_item(prescription_id); ``` ### 1.5 API接口设计 **路径前缀**: `/healthlink-his/api/v1/tcm` | 方法 | 路径 | 说明 | 请求体 | |------|------|------|--------| | POST | `/zhuang/diagnosis` | 保存壮医三诊 | TcmZhuangDiagnosisDto | | GET | `/zhuang/diagnosis/encounter/{id}` | 查询诊疗记录 | — | | GET | `/zhuang/diagnosis/list` | 诊疗记录列表 | params: startDate, endDate, patientId | | GET | `/constitution/questionnaire/{type}` | 获取体质问卷 | — | | POST | `/constitution/assess` | 提交体质辨识(含答题) | ConstitutionAssessDto | | GET | `/constitution/record/{id}` | 查询辨识记录详情 | — | | GET | `/ethnic-drug/list` | 民族药列表 | params: drugType, keyword | | POST | `/ethnic-drug` | 新增民族药 | TcmEthnicDrugDto | | GET | `/prescription/template/list` | 方剂模板列表 | params: type | | POST | `/prescription/item` | 保存处方明细 | TcmPrescriptionItemDto | | GET | `/statistics/daily` | 每日诊疗统计 | params: startDate, endDate | ### 1.6 前端设计 | 页面 | 路径 | 组件 | |------|------|------| | 壮医三诊 | `tcm/zhuangDiagnosis/index.vue` | 左侧患者列表 + 右侧三诊tab(望/脉/目) | | 体质辨识 | `tcm/constitution/index.vue` | 升级现有页面,添加问卷交互 | | 民族药管理 | `tcm/ethnicDrug/index.vue` | 表格 + 新增/编辑弹窗 | | 处方模板 | `tcm/prescriptionTemplate/index.vue` | 模板列表 + 引用到处方 | | 中医处方 | `tcm/prescription/index.vue` | 处方开具页,可选模板 | **壮医三诊页面布局**: ``` ┌──────────────────────────────────────────────────┐ │ 患者信息栏:姓名 | 性别 | 年龄 | 就诊号 │ ├──────────────┬───────────────────────────────────┤ │ 患者列表 │ Tab: [望诊] [脉诊] [目诊] [综合] │ │ ────────── │ ┌─────────────────────────────┐ │ │ 患者A ✓ │ │ 面色:[萎黄] [苍白] [红润] │ │ │ 患者B │ │ 舌色:[淡白] [淡红] [红] │ │ │ 患者C │ │ 舌苔:[薄白] [黄腻] [无苔] │ │ │ │ │ 脉象:[浮] [沉] [迟] [数] │ │ │ │ │ 目色:[正常] [发黄] [充血] │ │ │ │ └─────────────────────────────┘ │ │ │ 诊断结果:[________________] │ │ │ [保存] [开具处方] │ └──────────────┴───────────────────────────────────┘ ``` --- ## 二、传染病直报模块(epidemic) ### 2.1 已有代码分析 **后端(3个文件)** - `EpidemicController.java` — 20行,4个端点:上报/确认/列表/统计 - `IEpidemicAppService.java` — 10行,4个方法 - `EpidemicAppServiceImpl.java` — 实现 **域实体(1个)** - `EpidemicReport` — epidemic_report表,字段:encounterId/patientId/patientName/diseaseName/diseaseCode/reportType/reporterId/reporterName/reportDate/status/cdcConfirmNo **前端(1个页面 + 1个API)** - `diseaseReportManagement/ReportManagement/index.vue` — 2028行,有完整script,包含统计卡片+报卡列表 - `diseaseReportManagement/ReportManagement/api.js` — API定义 ### 2.2 缺失功能清单 | 编号 | 功能 | 优先级 | |------|------|--------| | EPI-01 | 传染病自动筛查规则引擎 | P0 | | EPI-02 | 广西疾控直报对接(国家传染病网络直报系统) | P0 | | EPI-03 | 报告管理流程(填报→审核→上报→确认) | P0 | | EPI-04 | 传染病病种目录(广西重点) | P1 | | EPI-05 | 统计分析(时间/病种/区域分布) | P1 | | EPI-06 | 密接追踪管理 | P2 | ### 2.3 业务流程 #### 传染病报告全流程 ``` 门诊/住院/检验 发现疑似病例 ├→ 自动筛查:诊断/检验结果匹配传染病规则 ├→ 触发报卡:弹窗提醒医生填写报告 ├→ 医生填报:患者信息+诊断+发病日期+报告类型 ├→ 科室审核:科室主任审核确认 ├→ 预防保健科审核:院内终审 ├→ 上报疾控:对接广西疾控直报系统 ├→ 疾控确认:返回确认编号 └→ 归档:更新epidemic_report状态 ``` #### 状态流转 ``` DRAFT(草稿) → PENDING_REVIEW(待审核) → DEPT_APPROVED(科室通过) → ADMIN_APPROVED(防保科通过) → SUBMITTED(已上报) → CDC_CONFIRMED(疾控确认) ``` ### 2.4 数据库设计 ```sql -- V47__epidemic_enhancement.sql -- 传染病筛查规则 CREATE TABLE IF NOT EXISTS epidemic_screening_rule ( id BIGSERIAL PRIMARY KEY, rule_name VARCHAR(200) NOT NULL, rule_type VARCHAR(30) NOT NULL, disease_code VARCHAR(20) NOT NULL, disease_name VARCHAR(200) NOT NULL, rule_condition TEXT NOT NULL, rule_source VARCHAR(50), priority INT DEFAULT 0, enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP ); COMMENT ON TABLE epidemic_screening_rule IS '传染病筛查规则'; COMMENT ON COLUMN epidemic_screening_rule.rule_type IS '类型(DIAGNOSIS诊断/LAB检验/SYMPTOM症状)'; CREATE INDEX IF NOT EXISTS esr_disease ON epidemic_screening_rule(disease_code); -- 筛查命中记录 CREATE TABLE IF NOT EXISTS epidemic_screening_hit ( id BIGSERIAL PRIMARY KEY, rule_id BIGINT NOT NULL, encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL, patient_name VARCHAR(50), hit_source VARCHAR(50), hit_detail TEXT, hit_time TIMESTAMP NOT NULL, report_id BIGINT, handle_status VARCHAR(20) DEFAULT 'PENDING', handler VARCHAR(64), handle_time TIMESTAMP, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE epidemic_screening_hit IS '筛查命中记录'; CREATE INDEX IF NOT EXISTS esh_encounter ON epidemic_screening_hit(encounter_id); -- 广西疾控直报记录 CREATE TABLE IF NOT EXISTS epidemic_cdc_submission ( id BIGSERIAL PRIMARY KEY, report_id BIGINT NOT NULL, cdc_system VARCHAR(50) DEFAULT 'GX_CDC', submission_type VARCHAR(30) NOT NULL, submission_time TIMESTAMP, submission_data TEXT, response_code VARCHAR(20), response_message TEXT, cdc_confirm_no VARCHAR(100), confirm_time TIMESTAMP, status VARCHAR(20) DEFAULT 'PENDING', retry_count INT DEFAULT 0, last_retry_time TIMESTAMP, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE epidemic_cdc_submission IS '广西疾控直报记录'; CREATE INDEX IF NOT EXISTS ecs_report ON epidemic_cdc_submission(report_id); -- 传染病病种目录(广西重点) CREATE TABLE IF NOT EXISTS epidemic_disease_catalog ( id BIGSERIAL PRIMARY KEY, disease_code VARCHAR(20) NOT NULL, disease_name VARCHAR(200) NOT NULL, disease_class VARCHAR(20) NOT NULL, report_type VARCHAR(20) NOT NULL, report_deadline_hours INT, isolation_required CHAR(1) DEFAULT '0', enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE epidemic_disease_catalog IS '传染病病种目录'; COMMENT ON COLUMN epidemic_disease_catalog.disease_class IS '分类(A甲类/B乙类/C丙类)'; COMMENT ON COLUMN epidemic_disease_catalog.report_type IS '报告类型(TIMELY即时/AGGREGATE聚合)'; CREATE UNIQUE INDEX IF NOT EXISTS edc_code ON epidemic_disease_catalog(disease_code); -- 扩展epidemic_report字段 ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS onset_date DATE; ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS case_type VARCHAR(20); ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS isolation_location VARCHAR(100); ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS contact_count INT DEFAULT 0; ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS dept_approver VARCHAR(64); ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS dept_approve_time TIMESTAMP; ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS admin_approver VARCHAR(64); ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS admin_approve_time TIMESTAMP; ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS submit_time TIMESTAMP; ALTER TABLE epidemic_report ADD COLUMN IF NOT EXISTS source_type VARCHAR(30); ``` ### 2.5 API接口设计 **路径前缀**: `/healthlink-his/api/v1/epidemic` | 方法 | 路径 | 说明 | 请求体 | |------|------|------|--------| | POST | `/report` | 新增/修改报告 | EpidemicReportDto | | PUT | `/report/{id}/status` | 更新报告状态 | params: status, remark | | GET | `/report/{id}` | 报告详情 | — | | GET | `/report/list` | 报告列表 | params: status, diseaseCode, startDate, endDate | | POST | `/report/{id}/submit` | 提交上报 | — | | POST | `/report/{id}/approve` | 审核 | params: approveType, result, remark | | GET | `/screening/rules` | 筛查规则列表 | — | | POST | `/screening/rule` | 新增/修改规则 | ScreeningRuleDto | | POST | `/screening/trigger` | 手动触发筛查 | params: encounterId | | GET | `/screening/hits` | 筛查命中记录 | params: startDate, endDate | | GET | `/cdc/submission/{reportId}` | 直报记录 | — | | POST | `/cdc/resubmit/{id}` | 重新上报 | — | | GET | `/disease/catalog` | 病种目录 | params: diseaseClass | | GET | `/statistics/summary` | 统计汇总 | params: startDate, endDate | | GET | `/statistics/trend` | 趋势分析 | params: months | ### 2.6 前端设计 | 页面 | 路径 | 组件 | |------|------|------| | 报告管理(升级) | `diseaseReportManagement/ReportManagement/index.vue` | 升级现有页面 | | 报告详情 | `diseaseReportManagement/ReportDetail/index.vue` | 详情+审核流 | | 筛查规则 | `diseaseReportManagement/ScreeningRule/index.vue` | 规则配置 | | 统计分析 | `diseaseReportManagement/Statistics/index.vue` | 图表+数据表 | | 病种目录 | `diseaseReportManagement/DiseaseCatalog/index.vue` | 目录管理 | --- ## 三、电子健康卡模块(ehcard)— 新建 ### 3.1 已有代码分析 完全缺失,无后端模块、无前端页面、无数据库表。 ### 3.2 缺失功能清单 | 编号 | 功能 | 优先级 | |------|------|--------| | EH-01 | 健康卡申领(对接广西健康云平台) | P0 | | EH-02 | 就诊使用(挂号/就诊/取药验证) | P0 | | EH-03 | 卡管理(挂失/补办/注销) | P0 | | EH-04 | 健康卡绑定患者信息 | P0 | | EH-05 | 健康卡二维码展示 | P1 | | EH-06 | 健康卡消费记录 | P2 | ### 3.3 业务流程 #### 健康卡申领流程 ``` 患者通过自助机/手机/窗口 ├→ 输入身份证号 + 手机号 ├→ 调用广西健康云平台验证身份 ├→ 获取/创建健康卡号 ├→ 绑定患者基本信息 ├→ 生成电子健康卡(二维码) └→ 激活使用 ``` #### 就诊使用流程 ``` 患者出示健康卡二维码 ├→ 扫码验证有效性 ├→ 关联到挂号单 ├→ 就诊时自动调取健康档案 ├→ 取药时核验身份 └→ 记录使用日志 ``` ### 3.4 数据库设计 ```sql -- V47__ehcard.sql -- 电子健康卡 CREATE TABLE IF NOT EXISTS ehcard ( id BIGSERIAL PRIMARY KEY, card_no VARCHAR(50) NOT NULL, card_type VARCHAR(20) DEFAULT 'ELECTRONIC', patient_id BIGINT NOT NULL, patient_name VARCHAR(50), id_card VARCHAR(30), phone VARCHAR(20), card_status VARCHAR(20) DEFAULT 'ACTIVE', platform_card_id VARCHAR(100), qr_code TEXT, bind_time TIMESTAMP, active_time TIMESTAMP, expire_time TIMESTAMP, loss_time TIMESTAMP, loss_reason TEXT, cancel_time TIMESTAMP, cancel_reason TEXT, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64), update_time TIMESTAMP ); COMMENT ON TABLE ehcard IS '电子健康卡'; COMMENT ON COLUMN ehcard.card_status IS '状态(ACTIVE有效/LOST挂失/CANCELLED注销/EXPIRED过期)'; CREATE INDEX IF NOT EXISTS ec_patient ON ehcard(patient_id); CREATE INDEX IF NOT EXISTS ec_card_no ON ehcard(card_no); CREATE UNIQUE INDEX IF NOT EXISTS ec_platform_id ON ehcard(platform_card_id); -- 健康卡使用记录 CREATE TABLE IF NOT EXISTS ehcard_usage_log ( id BIGSERIAL PRIMARY KEY, card_id BIGINT NOT NULL, card_no VARCHAR(50), patient_id BIGINT, usage_type VARCHAR(30) NOT NULL, usage_time TIMESTAMP NOT NULL, encounter_id BIGINT, encounter_no VARCHAR(50), usage_dept VARCHAR(100), usage_doctor VARCHAR(64), usage_detail TEXT, verification_result VARCHAR(20), tenant_id INTEGER DEFAULT 0, create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE ehcard_usage_log IS '健康卡使用记录'; COMMENT ON COLUMN ehcard_usage_log.usage_type IS '类型(REGISTER挂号/就诊/取药/检验/缴费)'; CREATE INDEX IF NOT EXISTS eul_card ON ehcard_usage_log(card_id); CREATE INDEX IF NOT EXISTS eul_time ON ehcard_usage_log(usage_time); ``` ### 3.5 API接口设计 **路径前缀**: `/healthlink-his/api/v1/ehcard` | 方法 | 路径 | 说明 | 请求体 | |------|------|------|--------| | POST | `/apply` | 申请健康卡 | EhcardApplyDto | | GET | `/info/{patientId}` | 查询患者健康卡 | — | | GET | `/info/card/{cardNo}` | 按卡号查询 | — | | POST | `/bind` | 绑定健康卡 | params: cardNo, patientId | | POST | `/unbind` | 解绑 | params: cardId | | POST | `/loss` | 挂失 | params: cardId, reason | | POST | `/replace` | 补办 | params: cardId | | POST | `/cancel` | 注销 | params: cardId, reason | | POST | `/verify` | 就诊验证 | params: cardNo, encounterId | | GET | `/usage/log` | 使用记录 | params: cardId, startDate, endDate | | GET | `/qr/{cardId}` | 获取二维码 | — | | GET | `/statistics` | 统计概览 | — | ### 3.6 前端设计 | 页面 | 路径 | 组件 | |------|------|------| | 健康卡管理 | `ehcard/manage/index.vue` | 卡列表 + 状态筛选 | | 卡详情 | `ehcard/detail/index.vue` | 卡信息 + 使用记录 | | 申请健康卡 | `ehcard/apply/index.vue` | 表单:身份证+手机号 | | 挂失/补办 | `ehcard/operation/index.vue` | 操作弹窗 | **健康卡管理页面布局**: ``` ┌──────────────────────────────────────────────────┐ │ 筛选栏:[状态] [患者姓名] [卡号] [搜索] [重置] │ ├──────────────────────────────────────────────────┤ │ 统计卡片:有效卡 | 挂失卡 | 今日申领 | 今日使用 │ ├──────────────────────────────────────────────────┤ │ 表格: │ │ 卡号 | 患者 | 状态 | 绑定时间 | 操作 │ │ ... | ... | 有效 | ... | [详情][挂失][注销] │ └──────────────────────────────────────────────────┘ ``` --- ## 四、电子票据模块(invoice)— 新建 ### 4.1 已有代码分析 完全缺失,无后端模块、无前端页面、无数据库表。 ### 4.2 缺失功能清单 | 编号 | 功能 | 优先级 | |------|------|--------| | INV-01 | 电子发票生成(财政电子票据) | P0 | | INV-02 | 票据核销(号段管理 + 对账) | P0 | | INV-03 | 退票处理(作废 + 红冲) | P0 | | INV-04 | 票据查询与下载 | P0 | | INV-05 | 票据打印 | P1 | | INV-06 | 票据统计报表 | P2 | ### 4.3 业务流程 #### 电子发票开具流程 ``` 患者缴费完成 ├→ 系统自动生成电子发票 ├→ 调用财政电子票据接口 ├→ 获取财政票据号 ├→ 生成PDF发票文件 ├→ 存储到文件服务 └→ 推送到患者手机/邮箱 ``` #### 退票流程 ``` 患者申请退费 ├→ 窗口/自助发起退票 ├→ 财务审核 ├→ 调用财政系统作废接口 ├→ 生成红冲发票 ├→ 更新原发票状态为VOIDED └→ 退费到原支付渠道 ``` ### 4.4 数据库设计 ```sql -- V47__invoice.sql -- 电子票据主表 CREATE TABLE IF NOT EXISTS eh_invoice ( id BIGSERIAL PRIMARY KEY, invoice_no VARCHAR(50) NOT NULL, invoice_code VARCHAR(50), fiscal_no VARCHAR(100), invoice_type VARCHAR(30) NOT NULL, patient_id BIGINT NOT NULL, patient_name VARCHAR(50), id_card VARCHAR(30), encounter_id BIGINT, encounter_no VARCHAR(50), payment_id BIGINT, total_amount DECIMAL(12,2) NOT NULL, paid_amount DECIMAL(12,2) DEFAULT 0, insurance_amount DECIMAL(12,2) DEFAULT 0, self_pay_amount DECIMAL(12,2) DEFAULT 0, pay_method VARCHAR(30), invoice_status VARCHAR(20) DEFAULT 'VALID', void_reason TEXT, void_time TIMESTAMP, void_by VARCHAR(64), red_ream_id BIGINT, pdf_path VARCHAR(500), xml_path VARCHAR(500), qr_code TEXT, issue_time TIMESTAMP NOT NULL, issue_by VARCHAR(64), tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_by VARCHAR(64), update_time TIMESTAMP ); COMMENT ON TABLE eh_invoice IS '电子票据主表'; COMMENT ON COLUMN eh_invoice.invoice_type IS '类型(ORDINARY普通/REFUND退票/RED_RED冲)'; COMMENT ON COLUMN eh_invoice.invoice_status IS '状态(VALID有效/VOIDED已作废/REFUNDED已退票)'; CREATE INDEX IF NOT EXISTS ei_patient ON eh_invoice(patient_id); CREATE INDEX IF NOT EXISTS ei_encounter ON eh_invoice(encounter_id); CREATE INDEX IF NOT EXISTS ei_status ON eh_invoice(invoice_status); CREATE INDEX IF NOT EXISTS ei_fiscal ON eh_invoice(fiscal_no); -- 票据明细 CREATE TABLE IF NOT EXISTS eh_invoice_item ( id BIGSERIAL PRIMARY KEY, invoice_id BIGINT NOT NULL, item_name VARCHAR(200) NOT NULL, item_code VARCHAR(50), item_type VARCHAR(30), quantity DECIMAL(10,4) DEFAULT 1, unit_price DECIMAL(12,4), amount DECIMAL(12,2) NOT NULL, sort_order INT DEFAULT 0, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE eh_invoice_item IS '票据明细'; CREATE INDEX IF NOT EXISTS eii_invoice ON eh_invoice_item(invoice_id); -- 票据号段管理 CREATE TABLE IF NOT EXISTS eh_invoice_segment ( id BIGSERIAL PRIMARY KEY, segment_code VARCHAR(50) NOT NULL, invoice_type VARCHAR(30) NOT NULL, start_no VARCHAR(50) NOT NULL, end_no VARCHAR(50) NOT NULL, current_no VARCHAR(50), total_count INT NOT NULL, used_count INT DEFAULT 0, remaining_count INT, status VARCHAR(20) DEFAULT 'ACTIVE', org_code VARCHAR(50), org_name VARCHAR(200), start_date DATE, end_date DATE, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP ); COMMENT ON TABLE eh_invoice_segment IS '票据号段管理'; CREATE UNIQUE INDEX IF NOT EXISTS eis_segment ON eh_invoice_segment(segment_code); -- 票据对账记录 CREATE TABLE IF NOT EXISTS eh_invoice_reconciliation ( id BIGSERIAL PRIMARY KEY, recon_date DATE NOT NULL, recon_type VARCHAR(30) NOT NULL, total_count INT DEFAULT 0, total_amount DECIMAL(12,2) DEFAULT 0, matched_count INT DEFAULT 0, unmatched_count INT DEFAULT 0, match_rate DECIMAL(5,2), status VARCHAR(20) DEFAULT 'PENDING', detail_json TEXT, reconciler VARCHAR(64), reconcile_time TIMESTAMP, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE eh_invoice_reconciliation IS '票据对账记录'; COMMENT ON COLUMN eh_invoice_reconciliation.recon_type IS '类型(FISCAL财政/HOSPITAL医院)'; CREATE INDEX IF NOT EXISTS eir_date ON eh_invoice_reconciliation(recon_date); ``` ### 4.5 API接口设计 **路径前缀**: `/healthlink-his/api/v1/invoice` | 方法 | 路径 | 说明 | 请求体 | |------|------|------|--------| | POST | `/issue` | 开具发票 | InvoiceIssueDto | | GET | `/info/{id}` | 发票详情 | — | | GET | `/list` | 发票列表 | params: status, patientName, startDate, endDate | | POST | `/void/{id}` | 作废发票 | params: reason | | POST | `/refund/{id}` | 退票 | params: reason | | GET | `/print/{id}` | 获取打印数据 | — | | GET | `/pdf/{id}` | 下载PDF | — | | GET | `/segment/list` | 号段列表 | — | | POST | `/segment` | 新增号段 | SegmentDto | | POST | `/reconcile` | 发起对账 | params: reconType, date | | GET | `/reconcile/list` | 对账记录 | params: startDate, endDate | | GET | `/statistics/summary` | 统计概览 | params: startDate, endDate | ### 4.6 前端设计 | 页面 | 路径 | 组件 | |------|------|------| | 发票管理 | `invoice/manage/index.vue` | 发票列表 + 操作 | | 发票详情 | `invoice/detail/index.vue` | 详情 + PDF预览 | | 号段管理 | `invoice/segment/index.vue` | 号段配置 | | 对账管理 | `invoice/reconciliation/index.vue` | 对账列表 | | 统计报表 | `invoice/statistics/index.vue` | 图表 | --- ## 五、DRG/DIP深化模块(ybmanage扩展) ### 5.1 已有代码分析 **后端(54个文件)** - `YbController.java` — 1065行,20+个端点(签到/读卡/目录/对账/清算/入院/出院) - `YbElepController.java` — 电子病历相关 - `YbExtController.java` — 扩展接口 - DTO类30+个,Service 7个,Mapper 2个,Util 2个 **已有数据库表(V28/V30/V33/V35)** - `mr_drg_grouping` — DRG/DIP分组结果(encounterId/drgCode/drgWeight/dipCode/totalCost等) - `drg_analysis_stats` — DRG分析统计 - `drg_performance` — DRG绩效 - `drg_cost_alert` — DRG费用异常预警(expectedCost/actualCost/costDeviation/alertType等) **前端(15个页面,14个有script)** - `ybmanagement/` — 包含患者信息、入院登记、出院诊断、医保对账等 ### 5.2 缺失功能清单 | 编号 | 功能 | 优先级 | |------|------|--------| | DRG-01 | 广西DRG分组方案(2024版)维护 | P0 | | DRG-02 | 广西DIP病种分值库 | P0 | | DRG-03 | 费用预警规则引擎(超标/住院日/再入院) | P0 | | DRG-04 | DRG/DIP优化建议算法 | P1 | | DRG-05 | 医保对账/清算(广西接口适配) | P1 | | DRG-06 | DRG绩效考核看板 | P2 | | DRG-07 | 病案首页质控(DRG入组前校验) | P1 | ### 5.3 业务流程 #### DRG入组优化流程 ``` 病案首页完成 ├→ 病案首页质控:ICD编码校验/手术操作完整性/主诊断合理性 ├→ DRG/DIP预分组:根据广西2024版分组方案计算 ├→ 费用预警检查:对比同DRG组平均费用 ├→ 生成优化建议:住院日调整/费用控制/编码优化 ├→ 医生确认/修改 └→ 正式入组上报 ``` #### 费用预警处理流程 ``` 入院时/住院中/出院时 触发预警 ├→ 系统自动检测:费用/住院日/再入院 ├→ 生成预警记录 → drg_cost_alert ├→ 推送到医生工作站 ├→ 医生处理:填写处理意见 ├→ 科主任复核 └→ 归档 ``` ### 5.4 数据库设计 ```sql -- V47__drg_dip_enhancement.sql -- 广西DRG分组方案(2024版) CREATE TABLE IF NOT EXISTS gx_drg_grouping_scheme ( id BIGSERIAL PRIMARY KEY, scheme_code VARCHAR(20) NOT NULL, scheme_name VARCHAR(200) NOT NULL, scheme_version VARCHAR(20) NOT NULL, effective_date DATE NOT NULL, expiry_date DATE, drg_group VARCHAR(20) NOT NULL, drg_code VARCHAR(20) NOT NULL, drg_name VARCHAR(200), drg_weight DECIMAL(8,4), avg_los DECIMAL(6,2), avg_cost DECIMAL(12,2), avg_mdc VARCHAR(20), severity_level VARCHAR(20), enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP ); COMMENT ON TABLE gx_drg_grouping_scheme IS '广西DRG分组方案'; CREATE INDEX IF NOT EXISTS gds_code ON gx_drg_grouping_scheme(drg_code); CREATE INDEX IF NOT EXISTS gds_group ON gx_drg_grouping_scheme(drg_group); -- 广西DIP病种分值库 CREATE TABLE IF NOT EXISTS gx_dip_disease_score ( id BIGSERIAL PRIMARY KEY, dip_code VARCHAR(20) NOT NULL, dip_name VARCHAR(200) NOT NULL, disease_code VARCHAR(20), disease_name VARCHAR(200), procedure_code VARCHAR(20), procedure_name VARCHAR(200), score DECIMAL(8,4) NOT NULL, avg_los DECIMAL(6,2), avg_cost DECIMAL(12,2), weight_factor DECIMAL(6,4) DEFAULT 1.0, severity VARCHAR(20), effective_date DATE, expiry_date DATE, enabled CHAR(1) DEFAULT '1', tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, update_time TIMESTAMP ); COMMENT ON TABLE gx_dip_disease_score IS '广西DIP病种分值库'; CREATE INDEX IF NOT EXISTS gdd_code ON gx_dip_disease_score(dip_code); CREATE INDEX IF NOT EXISTS gdd_disease ON gx_dip_disease_score(disease_code); -- DRG优化建议 CREATE TABLE IF NOT EXISTS drg_optimization_suggestion ( id BIGSERIAL PRIMARY KEY, encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL, patient_name VARCHAR(50), drg_code VARCHAR(20), dip_code VARCHAR(20), suggestion_type VARCHAR(30) NOT NULL, current_value TEXT, suggested_value TEXT, expected_saving DECIMAL(12,2), priority INT DEFAULT 0, suggestion_text TEXT NOT NULL, evidence_source VARCHAR(100), handle_status VARCHAR(20) DEFAULT 'PENDING', handler VARCHAR(64), handle_time TIMESTAMP, handle_result TEXT, accept_flag BOOLEAN, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE drg_optimization_suggestion IS 'DRG优化建议'; COMMENT ON COLUMN drg_optimization_suggestion.suggestion_type IS '类型(COST费用/LOS住院日/CODING编码/PROCEDURE手术)'; CREATE INDEX IF NOT EXISTS dos_encounter ON drg_optimization_suggestion(encounter_id); -- 病案首页质控记录 CREATE TABLE IF NOT EXISTS drg_quality_check ( id BIGSERIAL PRIMARY KEY, encounter_id BIGINT NOT NULL, patient_id BIGINT NOT NULL, check_type VARCHAR(30) NOT NULL, check_rule VARCHAR(100), check_result VARCHAR(20) NOT NULL, error_message TEXT, field_name VARCHAR(100), field_value TEXT, suggestion TEXT, handle_status VARCHAR(20) DEFAULT 'PENDING', handler VARCHAR(64), handle_time TIMESTAMP, tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE drg_quality_check IS '病案首页质控记录'; COMMENT ON COLUMN drg_quality_check.check_type IS '类型(ICD编码/主诊断/手术操作/完整性和逻辑性)'; COMMENT ON COLUMN drg_quality_check.check_result IS '结果(PASS通过/WARN警告/ERROR错误)'; CREATE INDEX IF NOT EXISTS dqct_encounter ON drg_quality_check(encounter_id); CREATE INDEX IF NOT EXISTS dqct_result ON drg_quality_check(check_result); -- 医保对账记录(广西适配) CREATE TABLE IF NOT EXISTS yb_gx_reconciliation ( id BIGSERIAL PRIMARY KEY, recon_month VARCHAR(7) NOT NULL, recon_type VARCHAR(30) NOT NULL, total_settlements INT DEFAULT 0, total_medical_fee DECIMAL(14,2) DEFAULT 0, total_fund_pay DECIMAL(14,2) DEFAULT 0, total_self_pay DECIMAL(14,2) DEFAULT 0, hospital_medical_fee DECIMAL(14,2) DEFAULT 0, difference_amount DECIMAL(14,2) DEFAULT 0, difference_reason TEXT, status VARCHAR(20) DEFAULT 'PENDING', reconciler VARCHAR(64), reconcile_time TIMESTAMP, file_path VARCHAR(500), tenant_id INTEGER DEFAULT 0, delete_flag CHAR(1) DEFAULT '0', create_by VARCHAR(64), create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); COMMENT ON TABLE yb_gx_reconciliation IS '广西医保对账记录'; COMMENT ON COLUMN yb_gx_reconciliation.recon_type IS '类型(MONTHLY月度/SPECIAL专项)'; CREATE INDEX IF NOT EXISTS ygr_month ON yb_gx_reconciliation(recon_month); ``` ### 5.5 API接口设计 **路径前缀**: `/healthlink-his/api/v1/ybmanage` | 方法 | 路径 | 说明 | 请求体 | |------|------|------|--------| | GET | `/drg/scheme/list` | DRG方案列表 | params: enabled | | POST | `/drg/scheme` | 新增/修改方案 | DrgSchemeDto | | POST | `/drg/scheme/import` | 导入方案(Excel) | file | | GET | `/dip/score/list` | DIP分值列表 | params: keyword | | POST | `/dip/score` | 新增/修改分值 | DipScoreDto | | POST | `/dip/score/import` | 导入分值库 | file | | POST | `/drg/pre-group` | DRG预分组 | params: encounterId | | POST | `/dip/pre-group` | DIP预分值 | params: encounterId | | GET | `/drg/alert/list` | 预警列表 | params: alertType, alertLevel, status | | PUT | `/drg/alert/{id}/handle` | 处理预警 | AlertHandleDto | | GET | `/drg/suggestion/list` | 优化建议列表 | params: encounterId | | PUT | `/drg/suggestion/{id}/accept` | 接受建议 | params: result | | POST | `/drg/quality-check` | 病案质控 | params: encounterId | | GET | `/drg/quality-check/list` | 质控记录 | params: encounterId | | GET | `/drg/performance/dashboard` | 绩效看板 | params: startDate, endDate | | GET | `/gx-reconciliation/list` | 对账列表 | params: month | | POST | `/gx-reconciliation/reconcile` | 发起对账 | params: month, type | | GET | `/gx-reconciliation/{id}/detail` | 对账明细 | — | ### 5.6 前端设计 | 页面 | 路径 | 组件 | |------|------|------| | DRG方案管理 | `ybmanagement/drgScheme/index.vue` | 方案列表 + 导入 | | DIP分值管理 | `ybmanagement/dipScore/index.vue` | 分值列表 + 导入 | | 费用预警 | `ybmanagement/costAlert/index.vue` | 预警列表 + 处理 | | 优化建议 | `ybmanagement/optimization/index.vue` | 建议列表 + 接受 | | 病案质控 | `ybmanagement/qualityCheck/index.vue` | 质控结果 | | 绩效看板 | `ybmanagement/performance/index.vue` | 图表 + 数据 | | 广西对账 | `ybmanagement/gxReconciliation/index.vue` | 对账管理 | **费用预警页面布局**: ``` ┌──────────────────────────────────────────────────┐ │ 筛选:[预警类型] [预警级别] [状态] [日期范围] │ ├──────────────────────────────────────────────────┤ │ 统计卡片:待处理 | 处理中 | 已处理 | 严重预警 │ ├──────────────────────────────────────────────────┤ │ 表格: │ │ 患者 | DRG | 预期费用 | 实际费用 | 偏差 | 操作 │ │ 张三 | AA1 | 12000 | 18000 | 50% | [处理][详情]│ └──────────────────────────────────────────────────┘ ``` --- ## 六、Flyway迁移汇总 | 版本 | 文件名 | 模块 | 新增表 | |------|--------|------|--------| | V47 | V47__tcm_zhuang_diagnosis.sql | 中医壮医 | tcm_zhuang_diagnosis, tcm_constitution_questionnaire, tcm_constitution_answer, tcm_ethnic_drug, tcm_prescription_item | | V47 | V47__epidemic_enhancement.sql | 传染病直报 | epidemic_screening_rule, epidemic_screening_hit, epidemic_cdc_submission, epidemic_disease_catalog + 扩展epidemic_report | | V47 | V47__ehcard.sql | 电子健康卡 | ehcard, ehcard_usage_log | | V47 | V47__invoice.sql | 电子票据 | eh_invoice, eh_invoice_item, eh_invoice_segment, eh_invoice_reconciliation | | V47 | V47__drg_dip_enhancement.sql | DRG深化 | gx_drg_grouping_scheme, gx_dip_disease_score, drg_optimization_suggestion, drg_quality_check, yb_gx_reconciliation | > 注意:实际实施时需拆分为多个V47/V48/V49版本,避免单次迁移过大。 --- ## 七、后端模块结构汇总 ### 7.1 新建模块 ``` com.healthlink.his.web.ehcard/ ├── controller/EhcardController.java ├── appservice/IEhcardAppService.java ├── appservice/impl/EhcardAppServiceImpl.java └── dto/EhcardApplyDto.java, EhcardUsageLogDto.java com.healthlink.his.web.invoice/ ├── controller/InvoiceController.java ├── appservice/IInvoiceAppService.java ├── appservice/impl/InvoiceAppServiceImpl.java └── dto/InvoiceIssueDto.java, InvoiceItemDto.java, SegmentDto.java ``` ### 7.2 扩展模块 ``` com.healthlink.his.web.tcm/ ├── controller/TcmController.java (升级) ├── controller/ZhuangDiagnosisController.java (新增) ├── appservice/ITcmAppService.java (升级) ├── appservice/IZhuangDiagnosisAppService.java (新增) ├── appservice/impl/ZhuangDiagnosisAppServiceImpl.java (新增) └── dto/ZhuangDiagnosisDto.java, ConstitutionAssessDto.java com.healthlink.his.web.epidemic/ ├── controller/EpidemicController.java (升级) ├── controller/ScreeningController.java (新增) ├── appservice/IEpidemicAppService.java (升级) ├── appservice/IScreeningAppService.java (新增) ├── appservice/impl/ScreeningAppServiceImpl.java (新增) └── dto/ScreeningRuleDto.java, CdcSubmissionDto.java com.healthlink.his.web.ybmanage/ ├── controller/YbDrgController.java (新增) ├── controller/YbReconciliationController.java (新增) ├── service/IDrgGroupingService.java (新增) ├── service/IDipScoreService.java (新增) ├── service/impl/DrgGroupingServiceImpl.java (新增) ├── service/impl/DipScoreServiceImpl.java (新增) └── dto/DrgSchemeDto.java, DipScoreDto.java, AlertHandleDto.java ``` --- ## 八、前端模块结构汇总 ### 8.1 新建目录 ``` src/views/ehcard/ ├── manage/index.vue # 健康卡管理 ├── detail/index.vue # 卡详情 ├── apply/index.vue # 申请健康卡 └── api.js # API定义 src/views/invoice/ ├── manage/index.vue # 发票管理 ├── detail/index.vue # 发票详情 ├── segment/index.vue # 号段管理 ├── reconciliation/index.vue # 对账管理 ├── statistics/index.vue # 统计报表 └── api.js # API定义 ``` ### 8.2 扩展目录 ``` src/views/tcm/ ├── traditional/index.vue # 已有,升级 ├── constitution/index.vue # 已有,升级 ├── zhuangDiagnosis/index.vue # 新增 ├── ethnicDrug/index.vue # 新增 ├── prescriptionTemplate/index.vue # 新增 └── prescription/index.vue # 新增 src/views/diseaseReportManagement/ ├── ReportManagement/ # 已有,升级 ├── ReportDetail/index.vue # 新增 ├── ScreeningRule/index.vue # 新增 ├── Statistics/index.vue # 新增 └── DiseaseCatalog/index.vue # 新增 src/views/ybmanagement/ ├── drgScheme/index.vue # 新增 ├── dipScore/index.vue # 新增 ├── costAlert/index.vue # 新增 ├── optimization/index.vue # 新增 ├── qualityCheck/index.vue # 新增 ├── performance/index.vue # 新增 └── gxReconciliation/index.vue # 新增 ``` --- ## 九、实施顺序建议 | Sprint | 模块 | 工作量估算 | 依赖 | |--------|------|-----------|------| | Sprint 1 | 电子健康卡(ehcard) | 5天 | 无 | | Sprint 2 | 电子票据(invoice) | 5天 | 无 | | Sprint 3 | 传染病直报升级(epidemic) | 4天 | 广西疾控接口文档 | | Sprint 4 | 中医壮医扩展(tcm) | 5天 | 壮医三诊标准 | | Sprint 5 | DRG/DIP深化(ybmanage) | 6天 | 广西2024版分组方案 | > 每个Sprint完成后需通过编译验证(mvn compile + npm run build:dev)。