Files
his/MD/design/PHASE4_LOCAL_DESIGN.md
chenqi 575f5d6c32 fix(database): 修复数据库字典重复和表结构缺失问题
- 删除手术状态下拉框的重复字典数据,保留每组中dict_code最小的记录
- 修复HisBaseEntity列缺失问题,为多个表添加create_by、update_by、update_time等基础字段
- 为adm_patient表添加邮政编码、户籍地址、监护人信息、患者来源等缺失字段
- 添加文化程度字典类型和相关字典数据,补充3919到3914等10个学历级别选项
- 为adm_patient_identifier表创建tenant_id和patient_id的联合索引以提升查询性能
- 修复prescription_intercept_log和clinical_pathway_execution表的基础实体字段缺失
- 为wor_device_request表增加医嘱退回相关的back_reason、performer_check_id等字段
- 创建EMPI核心表empi_person和empi_person_id_mapping用于全局患者主索引管理
- 为empi_merge_log表添加create_time字段以完善审计信息
- 更新院感管理和评审保障模块的设计文档,明确各模块实现状态和缺失功能
2026-06-17 11:46:56 +08:00

1119 lines
43 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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