- 删除手术状态下拉框的重复字典数据,保留每组中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字段以完善审计信息 - 更新院感管理和评审保障模块的设计文档,明确各模块实现状态和缺失功能
1119 lines
43 KiB
Markdown
1119 lines
43 KiB
Markdown
# 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)。
|