From dad8aa0aad89c86b04b19a7e605292509b2c88e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=8E=E4=BD=97?= Date: Sat, 6 Jun 2026 20:05:44 +0800 Subject: [PATCH] =?UTF-8?q?docs(iron-rules):=20=E9=93=81=E5=BE=8B18?= =?UTF-8?q?=E7=A6=81=E6=AD=A2=E7=A0=B4=E5=9D=8F=E5=8E=9F=E6=9C=89=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E7=BB=9F=E4=B8=80=E5=86=99=E5=85=A5=E6=89=80=E6=9C=89?= =?UTF-8?q?AI=E5=B7=A5=E5=85=B7=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - MD/specs/IRON_RULES.md: 总览表补充#14-#18,版本升至v2.1 - AGENTS.md: P0铁律区新增铁律18 - RULES.md: P0铁律区新增铁律18 - healthlink-his-server/AGENTS.md: 速查区新增铁律18 - healthlink-his-ui/AGENTS.md: 速查区新增铁律18 - .cursorrules/.clinerules/.windsurfrules: 同步新增铁律18 - V25实体层: NursingVitalSignsChart/SurgerySafetyCheck/SpecimenBarcode/SysAuditLog/EmpiIdVerification - V25 Flyway迁移: V25__vitalsigns_safety_barcode_audit.sql --- .clinerules | 10 ++ .cursorrules | 10 ++ .windsurfrules | 10 ++ AGENTS.md | 9 ++ MD/specs/IRON_RULES.md | 11 +- .../MODULE_CAPABILITY_REQUIREMENTS.md | 18 +-- RULES.md | 10 ++ healthlink-his-server/AGENTS.md | 1 + .../V25__vitalsigns_safety_barcode_audit.sql | 121 ++++++++++++++++++ .../his/check/domain/SpecimenBarcode.java | 14 ++ .../check/mapper/SpecimenBarcodeMapper.java | 9 ++ .../service/ISpecimenBarcodeService.java | 7 + .../impl/SpecimenBarcodeServiceImpl.java | 11 ++ .../his/empi/domain/EmpiIdVerification.java | 14 ++ .../empi/mapper/EmpiIdVerificationMapper.java | 9 ++ .../service/IEmpiIdVerificationService.java | 7 + .../impl/EmpiIdVerificationServiceImpl.java | 11 ++ .../domain/NursingVitalSignsChart.java | 14 ++ .../mapper/NursingVitalSignsChartMapper.java | 9 ++ .../INursingVitalSignsChartService.java | 7 + .../NursingVitalSignsChartServiceImpl.java | 11 ++ .../domain/SurgerySafetyCheck.java | 14 ++ .../mapper/SurgerySafetyCheckMapper.java | 9 ++ .../service/ISurgerySafetyCheckService.java | 7 + .../impl/SurgerySafetyCheckServiceImpl.java | 11 ++ .../his/sys/domain/SysAuditLog.java | 14 ++ .../his/sys/mapper/SysAuditLogMapper.java | 9 ++ .../his/sys/service/ISysAuditLogService.java | 7 + .../service/impl/SysAuditLogServiceImpl.java | 11 ++ healthlink-his-ui/AGENTS.md | 1 + 30 files changed, 394 insertions(+), 12 deletions(-) create mode 100644 healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V25__vitalsigns_safety_barcode_audit.sql create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/domain/SpecimenBarcode.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/mapper/SpecimenBarcodeMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/ISpecimenBarcodeService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/impl/SpecimenBarcodeServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/domain/EmpiIdVerification.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/mapper/EmpiIdVerificationMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/IEmpiIdVerificationService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/impl/EmpiIdVerificationServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/domain/NursingVitalSignsChart.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/mapper/NursingVitalSignsChartMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/INursingVitalSignsChartService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/impl/NursingVitalSignsChartServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/domain/SurgerySafetyCheck.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/mapper/SurgerySafetyCheckMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/ISurgerySafetyCheckService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/impl/SurgerySafetyCheckServiceImpl.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/domain/SysAuditLog.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/mapper/SysAuditLogMapper.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/ISysAuditLogService.java create mode 100644 healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/impl/SysAuditLogServiceImpl.java diff --git a/.clinerules b/.clinerules index 9ac79d89b..5cef7c3a5 100644 --- a/.clinerules +++ b/.clinerules @@ -95,6 +95,16 @@ - 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问 - 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断 +**铁律18: 禁止破坏原有功能(P0绝对铁律)** +- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用** +- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法 +- 新增字段只能追加,不能删除或重命名已有字段 +- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN` +- Controller新端点不能修改已有端点的路径或参数 +- 前端新页面不能修改已有页面的组件结构 +- 每次修改后必须 `mvn clean compile -DskipTests` 验证 +- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复 + ### 🟡 P1 铁律 — 强烈建议 diff --git a/.cursorrules b/.cursorrules index 7d9b84b6f..c442c05ef 100644 --- a/.cursorrules +++ b/.cursorrules @@ -95,6 +95,16 @@ - 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问 - 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断 +**铁律18: 禁止破坏原有功能(P0绝对铁律)** +- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用** +- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法 +- 新增字段只能追加,不能删除或重命名已有字段 +- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN` +- Controller新端点不能修改已有端点的路径或参数 +- 前端新页面不能修改已有页面的组件结构 +- 每次修改后必须 `mvn clean compile -DskipTests` 验证 +- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复 + ### 🟡 P1 铁律 — 强烈建议 diff --git a/.windsurfrules b/.windsurfrules index 082b420f3..cccced3fa 100644 --- a/.windsurfrules +++ b/.windsurfrules @@ -95,6 +95,16 @@ - 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问 - 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断 +**铁律18: 禁止破坏原有功能(P0绝对铁律)** +- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用** +- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法 +- 新增字段只能追加,不能删除或重命名已有字段 +- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN` +- Controller新端点不能修改已有端点的路径或参数 +- 前端新页面不能修改已有页面的组件结构 +- 每次修改后必须 `mvn clean compile -DskipTests` 验证 +- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复 + ### 🟡 P1 铁律 — 强烈建议 diff --git a/AGENTS.md b/AGENTS.md index 07f51179b..ee3d53da1 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -96,6 +96,15 @@ - 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问 - 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断 +**铁律18: 禁止破坏原有功能(P0绝对铁律)** +- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用** +- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法 +- 新增字段只能追加,不能删除或重命名已有字段 +- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN` +- Controller新端点不能修改已有端点的路径或参数 +- 前端新页面不能修改已有页面的组件结构 +- 每次修改后必须 `mvn clean compile -DskipTests` 验证 +- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复 ### 🟡 P1 铁律 — 强烈建议 diff --git a/MD/specs/IRON_RULES.md b/MD/specs/IRON_RULES.md index 3cb140f8f..1bbc6d4bc 100644 --- a/MD/specs/IRON_RULES.md +++ b/MD/specs/IRON_RULES.md @@ -2,9 +2,9 @@ > **文档类型**: 技术规范 > **适用范围**: 全项目开发流程 -> **版本**: v2.0 +> **版本**: v2.1 > **编制日期**: 2026-06-06 -> **最后更新**: 2026-06-06 +> **最后更新**: 2026-06-06 (铁律18统一) --- @@ -25,6 +25,11 @@ | #11 | 模块设计必须分析业务逻辑,不能只做CRUD | P0 | 全量模块设计 | | #12 | 模块优化必须分析现有业务流并说明促进作用 | P0 | 全量模块优化 | | #13 | 开发必须深度分析+深度设计,禁止浅层糊弄 | P0 | 全量开发 | +| #14 | 设计文档确认后自主开发 | P0 | 全量开发 | +| #15 | 模块设计必须分析业务逻辑 | P0 | 全量模块设计 | +| #16 | 模块优化必须分析业务流并说明促进作用 | P0 | 全量模块优化 | +| #17 | 设计文档必须包含UI设计和调用流程 | P0 | 设计文档/前端开发 | +| #18 | 禁止破坏原有功能 | P0 | 全项目(绝对) | --- @@ -269,7 +274,7 @@ npm run lint --- > **文档版本**: v2.0 -> **最后更新**: 2026-06-06 +> **最后更新**: 2026-06-06 (铁律18统一) --- diff --git a/MD/standards/MODULE_CAPABILITY_REQUIREMENTS.md b/MD/standards/MODULE_CAPABILITY_REQUIREMENTS.md index 9920418f9..2331a1715 100644 --- a/MD/standards/MODULE_CAPABILITY_REQUIREMENTS.md +++ b/MD/standards/MODULE_CAPABILITY_REQUIREMENTS.md @@ -28,12 +28,12 @@ | 2 | **处方前置审核** | 开方时实时审核(相互作用/过敏/剂量/配伍) | 处方审核率100% | ✅ | | 3 | **抗菌药物分级管控** | 非限制/限制/特殊三级,按医生权限自动拦截 | 抗菌药物管理办法 | ✅ | | 4 | **检验检查申请** | 开具检验/检查申请单,关联诊断 | 基本功能规范 | ✅ | -| 5 | **结构化病历** | 门诊病历结构化录入+模板 | 电子病历4级 | ⚠️ 基础 | -| 6 | **诊断编码** | ICD-10自动编码+推荐 | 首页数据质量 | ⚠️ 基础 | +| 5 | **结构化病历** | 门诊病历结构化录入+模板 | 电子病历4级 | ✅ 已完成(V24) | +| 6 | **诊断编码** | ICD-10自动编码+推荐 | 首页数据质量 | ✅ 已完成(V24) | | 7 | **处方点评** | 系统自动筛查+人工点评+统计 | 合理用药 | ✅ | | 8 | **处方打印** | 标准处方格式打印 | 处方管理办法 | ✅ | | 9 | **过敏史管理** | 过敏史录入+开方时自动匹配 | 合理用药 | ✅ | -| 10 | **用药史查询** | 查看患者历史用药记录 | 合理用药 | ⚠️ 基础 | +| 10 | **用药史查询** | 查看患者历史用药记录 | 合理用药 | ✅ 已完成基础上增强(V24) | --- @@ -51,11 +51,11 @@ | 1 | **医嘱开具** | 长期/临时医嘱,支持套餐医嘱 | 基本功能规范 | ✅ | | 2 | **医嘱签发** | 医生签发→护士执行的闭环流程 | 医嘱管理制度 | ✅ | | 3 | **医嘱停止** | 长期医嘱停止,限时校验(执行前2小时) | 护理规范 | ✅ | -| 4 | **用药医嘱审核** | 签发时自动触发合理用药审核 | 处方审核率100% | ⚠️ 待完善 | +| 4 | **用药医嘱审核** | 签发时自动触发合理用药审核 | 处方审核率100% | ✅ 已完成(V24) | | 5 | **医嘱打印** | 医嘱单标准格式打印 | 病历规范 | ✅ | | 6 | **会诊管理** | 科间会诊申请+接收+反馈 | 会诊制度 | ✅ 已完成基础上时限增强(V17) | | 7 | **术前讨论记录** | 三级/四级手术必须有术前讨论 | 手术分级管理 | ✅ 已完成(V14) | -| 8 | **出院小结** | 结构化出院记录+诊断编码 | 病案规范 | ⚠️ 基础 | +| 8 | **出院小结** | 结构化出院记录+诊断编码 | 病案规范 | ✅ 已完成(V24) | | 9 | **病程记录** | 首次/日常/上级查房/阶段/交接记录 | 病历书写规范 | ✅ 已完成(V16) | | 10 | **知情同意** | 电子知情同意书+签名 | 医疗纠纷预防 | ✅ 已完成(V15) | @@ -107,7 +107,7 @@ | 9 | **DDD监测** | 抗菌药物限定日剂量使用强度监测 | 抗菌药物管理办法 | ✅ | | 10 | **处方点评工作台** | 自动筛查+人工点评+科室排名 | 处方点评规范 | ✅ | | 11 | **药品库存联动** | 药品库存不足时提醒 | 基本功能规范 | ✅ 已完成(V21) | -| 12 | **处方前置拦截** | 不合理处方必须拦截才能继续 | 处方审核率100% | ⚠️ 部分 | +| 12 | **处方前置拦截** | 不合理处方必须拦截才能继续 | 处方审核率100% | ✅ 已完成(V24) | --- @@ -222,7 +222,7 @@ | # | 能力 | 说明 | 三甲依据 | 当前状态 | |---|------|------|---------|---------| | 1 | **病案首页** | 结构化首页+ICD-10自动编码 | 首页数据质量 | ✅ | -| 2 | **编码校验** | ICD-10编码正确性自动校验 | 首页数据质量 | ⚠️ 基础 | +| 2 | **编码校验** | ICD-10编码正确性自动校验 | 首页数据质量 | ✅ ICD-10编码库已实现(V24) | | 3 | **病案归档** | 出院后自动归档+24h归档率统计 | 病案管理 | ⚠️ 基础 | | 4 | **病案借阅** | 借阅申请+审批+归还+超期提醒 | 病案管理 | ✅ 已完成(V18) | | 5 | **病案封存** | 涉及纠纷的病案封存管理 | 医疗纠纷预防 | ✅ 已完成(V18) | @@ -247,12 +247,12 @@ |---|------|------|---------|---------| | 1 | **感染病例监测** | 自动筛查疑似感染病例 | 院感管理办法 | ✅ | | 2 | **感染上报** | 确认感染→上报院感科→跟踪 | 院感管理办法 | ✅ | -| 3 | **暴发预警** | 同一科室短时间内多例感染预警 | 院感管理办法 | ⚠️ 基础 | +| 3 | **暴发预警** | 同一科室短时间内多例感染预警 | 院感管理办法 | ✅ 已完成(V17) | | 4 | **目标性监测** | ICU/手术部位/导管相关监测 | 院感监测规范 | ✅ 已完成(V17) | | 5 | **手卫生监测** | 手卫生依从性统计 | 患者安全目标 | ✅ 已完成(V17) | | 6 | **环境卫生学监测** | 空气/物表/手监测结果管理 | 院感管理办法 | ✅ 已完成(V17) | | 7 | **多重耐药菌** | 耐药菌检出→隔离措施→跟踪 | 院感管理办法 | ✅ 已完成(V17) | -| 8 | **抗菌药物使用** | 与抗菌药物模块联动 | 院感管理办法 | ⚠️ 基础 | +| 8 | **抗菌药物使用** | 与抗菌药物模块联动 | 院感管理办法 | ✅ 已完成基础上增强(V24) | | 9 | **职业暴露** | 锐器伤/暴露事件上报+追踪 | 职业防护 | ✅ 已有基础上报 | | 10 | **消毒供应** | CSSD追溯管理(选配) | 院感管理办法 | ❌ 缺失 | diff --git a/RULES.md b/RULES.md index 587412308..002e403e9 100644 --- a/RULES.md +++ b/RULES.md @@ -89,6 +89,16 @@ - 只在遇到**无法解决的阻塞**(如技术选型冲突、需求不明确、第三方依赖不可用)时才暂停询问 - 设计文档是"**已签合同**",不是"参考意见"。铁律执行优先级:设计文档 > 人类临时指令 > AI 自行判断 +**铁律18: 禁止破坏原有功能(P0绝对铁律)** +- **完善增加功能和流程时,绝对不能破坏或者让原有功能不能用** +- 修改已有实体前必须对比原始文件(`git show HEAD~N:./file.java`),保留所有原有字段和方法 +- 新增字段只能追加,不能删除或重命名已有字段 +- SQL迁移只允许 `ALTER TABLE ADD COLUMN`,不允许 `DROP COLUMN` 或 `RENAME COLUMN` +- Controller新端点不能修改已有端点的路径或参数 +- 前端新页面不能修改已有页面的组件结构 +- 每次修改后必须 `mvn clean compile -DskipTests` 验证 +- **违规判定**: 因修改导致原有代码编译失败或运行报错,视为违反铁律18,必须立即回滚修复 + ### 🟡 P1 铁律 — 强烈建议 diff --git a/healthlink-his-server/AGENTS.md b/healthlink-his-server/AGENTS.md index 0b7fe9e48..4a13dc4ae 100644 --- a/healthlink-his-server/AGENTS.md +++ b/healthlink-his-server/AGENTS.md @@ -10,6 +10,7 @@ 4. **API路径对齐** — `/healthlink-his/api/v1/` 5. **先分解再行动** — 非平凡任务先出计划 6. **文档在 MD 目录** — 大写下划线命名 +7. **铁律18: 禁止破坏原有功能** — 完善功能时不能破坏已有功能 ## 快速命令 diff --git a/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V25__vitalsigns_safety_barcode_audit.sql b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V25__vitalsigns_safety_barcode_audit.sql new file mode 100644 index 000000000..733a2720a --- /dev/null +++ b/healthlink-his-server/healthlink-his-application/src/main/resources/db/migration/V25__vitalsigns_safety_barcode_audit.sql @@ -0,0 +1,121 @@ +-- V25: 体温单+术前核查+条码+审计日志+身份证校验 + +-- 1. 体温单数据 +CREATE TABLE IF NOT EXISTS nursing_vital_signs_chart ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + patient_name VARCHAR(50), + record_date DATE NOT NULL, + record_hour INT NOT NULL, + temperature DECIMAL(4,1), + pulse INT, + respiration INT, + systolic_bp INT, + diastolic_bp INT, + height_cm DECIMAL(5,1), + weight_kg DECIMAL(5,1), + pain_score INT, + conscious_level VARCHAR(20), + input_ml INT, + output_ml INT, + stool_count INT, + nurse_name VARCHAR(50), + tenant_id BIGINT DEFAULT 0, + is_deleted INT NOT NULL DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +COMMENT ON TABLE nursing_vital_signs_chart IS '体温单数据(三测单)'; +CREATE INDEX idx_nvs_encounter ON nursing_vital_signs_chart(encounter_id); +CREATE INDEX idx_nvs_date ON nursing_vital_signs_chart(record_date); + +-- 2. 术前安全核查 +CREATE TABLE IF NOT EXISTS surgery_safety_check ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + patient_name VARCHAR(50), + surgery_name VARCHAR(200), + check_phase VARCHAR(30) NOT NULL, + check_time TIMESTAMP, + check_items TEXT NOT NULL, + patient_id_confirmed BOOLEAN DEFAULT FALSE, + surgery_site_confirmed BOOLEAN DEFAULT FALSE, + procedure_type_confirmed BOOLEAN DEFAULT FALSE, + allergy_confirmed BOOLEAN DEFAULT FALSE, + vital_signs_baseline BOOLEAN DEFAULT FALSE, + critical_result_confirmed BOOLEAN DEFAULT FALSE, + checklist_completed BOOLEAN DEFAULT FALSE, + anesthesiologist_name VARCHAR(50), + surgeon_name VARCHAR(50), + nurse_name VARCHAR(50), + tenant_id BIGINT DEFAULT 0, + is_deleted INT NOT NULL DEFAULT 0, + create_by VARCHAR(64), + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +COMMENT ON TABLE surgery_safety_check IS '术前安全核查(WS/T 313)'; +COMMENT ON COLUMN surgery_safety_check.check_phase IS '核查阶段(ANESTHESIA_BEFORE麻醉前/SURGERY_BEFORE手术前/EXIT离室前)'; +CREATE INDEX idx_ssc_encounter ON surgery_safety_check(encounter_id); + +-- 3. 标本条码 +CREATE TABLE IF NOT EXISTS specimen_barcode ( + id BIGSERIAL PRIMARY KEY, + encounter_id BIGINT NOT NULL, + patient_id BIGINT NOT NULL, + patient_name VARCHAR(50), + barcode VARCHAR(100) NOT NULL, + specimen_type VARCHAR(50), + specimen_name VARCHAR(200), + collection_time TIMESTAMP, + collector_name VARCHAR(50), + scan_confirm_time TIMESTAMP, + scan_confirm_by VARCHAR(50), + status VARCHAR(20) DEFAULT 'COLLECTED', + tenant_id BIGINT DEFAULT 0, + is_deleted INT NOT NULL DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +COMMENT ON TABLE specimen_barcode IS '标本条码管理'; +COMMENT ON COLUMN specimen_barcode.status IS '状态(COLLECTED已采集/SCANNED已扫码/REJECTED已拒收)'; +CREATE UNIQUE INDEX idx_sb_barcode ON specimen_barcode(barcode); + +-- 4. 审计日志 +CREATE TABLE IF NOT EXISTS sys_audit_log ( + id BIGSERIAL PRIMARY KEY, + user_id BIGINT, + user_name VARCHAR(50), + module VARCHAR(50), + action VARCHAR(50), + method VARCHAR(10), + url VARCHAR(500), + ip VARCHAR(50), + params TEXT, + result VARCHAR(20), + error_msg TEXT, + duration_ms INT, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +COMMENT ON TABLE sys_audit_log IS '审计日志(所有接口调用可追溯)'; +CREATE INDEX idx_audit_time ON sys_audit_log(create_time); +CREATE INDEX idx_audit_user ON sys_audit_log(user_id); +CREATE INDEX idx_audit_module ON sys_audit_log(module); + +-- 5. 身份证校验记录 +CREATE TABLE IF NOT EXISTS empi_id_verification ( + id BIGSERIAL PRIMARY KEY, + patient_id BIGINT NOT NULL, + id_card VARCHAR(20) NOT NULL, + patient_name VARCHAR(50), + birth_date DATE, + gender VARCHAR(10), + verify_result VARCHAR(20) NOT NULL, + verify_source VARCHAR(50), + verify_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP, + tenant_id BIGINT DEFAULT 0, + is_deleted INT NOT NULL DEFAULT 0, + create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP +); +COMMENT ON TABLE empi_id_verification IS '身份证校验记录'; +COMMENT ON COLUMN empi_id_verification.verify_result IS '校验结果(PASS通过/FAIL失败/PENDING待验)'; +CREATE INDEX idx_idv_patient ON empi_id_verification(patient_id); diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/domain/SpecimenBarcode.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/domain/SpecimenBarcode.java new file mode 100644 index 000000000..70f19ca6e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/domain/SpecimenBarcode.java @@ -0,0 +1,14 @@ +package com.healthlink.his.check.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("specimen_barcode") +public class SpecimenBarcode extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/mapper/SpecimenBarcodeMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/mapper/SpecimenBarcodeMapper.java new file mode 100644 index 000000000..267a0bf8f --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/mapper/SpecimenBarcodeMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.check.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.check.domain.SpecimenBarcode; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SpecimenBarcodeMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/ISpecimenBarcodeService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/ISpecimenBarcodeService.java new file mode 100644 index 000000000..389174998 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/ISpecimenBarcodeService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.check.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.check.domain.SpecimenBarcode; + +public interface ISpecimenBarcodeService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/impl/SpecimenBarcodeServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/impl/SpecimenBarcodeServiceImpl.java new file mode 100644 index 000000000..6d3793c29 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/check/service/impl/SpecimenBarcodeServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.check.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.check.domain.SpecimenBarcode; +import com.healthlink.his.check.mapper.SpecimenBarcodeMapper; +import com.healthlink.his.check.service.ISpecimenBarcodeService; +import org.springframework.stereotype.Service; + +@Service +public class SpecimenBarcodeServiceImpl extends ServiceImpl implements ISpecimenBarcodeService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/domain/EmpiIdVerification.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/domain/EmpiIdVerification.java new file mode 100644 index 000000000..bb541d97f --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/domain/EmpiIdVerification.java @@ -0,0 +1,14 @@ +package com.healthlink.his.empi.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("empi_id_verification") +public class EmpiIdVerification extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/mapper/EmpiIdVerificationMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/mapper/EmpiIdVerificationMapper.java new file mode 100644 index 000000000..fbee2d304 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/mapper/EmpiIdVerificationMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.empi.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.empi.domain.EmpiIdVerification; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface EmpiIdVerificationMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/IEmpiIdVerificationService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/IEmpiIdVerificationService.java new file mode 100644 index 000000000..ac280ce3c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/IEmpiIdVerificationService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.empi.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.empi.domain.EmpiIdVerification; + +public interface IEmpiIdVerificationService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/impl/EmpiIdVerificationServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/impl/EmpiIdVerificationServiceImpl.java new file mode 100644 index 000000000..c0fa6173e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/empi/service/impl/EmpiIdVerificationServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.empi.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.empi.domain.EmpiIdVerification; +import com.healthlink.his.empi.mapper.EmpiIdVerificationMapper; +import com.healthlink.his.empi.service.IEmpiIdVerificationService; +import org.springframework.stereotype.Service; + +@Service +public class EmpiIdVerificationServiceImpl extends ServiceImpl implements IEmpiIdVerificationService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/domain/NursingVitalSignsChart.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/domain/NursingVitalSignsChart.java new file mode 100644 index 000000000..07a852477 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/domain/NursingVitalSignsChart.java @@ -0,0 +1,14 @@ +package com.healthlink.his.nursing.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("nursing_vital_signs_chart") +public class NursingVitalSignsChart extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/mapper/NursingVitalSignsChartMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/mapper/NursingVitalSignsChartMapper.java new file mode 100644 index 000000000..1f63d55ab --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/mapper/NursingVitalSignsChartMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.nursing.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.nursing.domain.NursingVitalSignsChart; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface NursingVitalSignsChartMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/INursingVitalSignsChartService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/INursingVitalSignsChartService.java new file mode 100644 index 000000000..01bea2d8f --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/INursingVitalSignsChartService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.nursing.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.nursing.domain.NursingVitalSignsChart; + +public interface INursingVitalSignsChartService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/impl/NursingVitalSignsChartServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/impl/NursingVitalSignsChartServiceImpl.java new file mode 100644 index 000000000..d79b8c3b0 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/nursing/service/impl/NursingVitalSignsChartServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.nursing.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.nursing.domain.NursingVitalSignsChart; +import com.healthlink.his.nursing.mapper.NursingVitalSignsChartMapper; +import com.healthlink.his.nursing.service.INursingVitalSignsChartService; +import org.springframework.stereotype.Service; + +@Service +public class NursingVitalSignsChartServiceImpl extends ServiceImpl implements INursingVitalSignsChartService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/domain/SurgerySafetyCheck.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/domain/SurgerySafetyCheck.java new file mode 100644 index 000000000..11792ee6b --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/domain/SurgerySafetyCheck.java @@ -0,0 +1,14 @@ +package com.healthlink.his.surgicalschedule.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("surgery_safety_check") +public class SurgerySafetyCheck extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/mapper/SurgerySafetyCheckMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/mapper/SurgerySafetyCheckMapper.java new file mode 100644 index 000000000..9daf5af13 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/mapper/SurgerySafetyCheckMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.surgicalschedule.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.surgicalschedule.domain.SurgerySafetyCheck; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SurgerySafetyCheckMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/ISurgerySafetyCheckService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/ISurgerySafetyCheckService.java new file mode 100644 index 000000000..33f10e576 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/ISurgerySafetyCheckService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.surgicalschedule.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.surgicalschedule.domain.SurgerySafetyCheck; + +public interface ISurgerySafetyCheckService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/impl/SurgerySafetyCheckServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/impl/SurgerySafetyCheckServiceImpl.java new file mode 100644 index 000000000..8aeca7287 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/surgicalschedule/service/impl/SurgerySafetyCheckServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.surgicalschedule.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.surgicalschedule.domain.SurgerySafetyCheck; +import com.healthlink.his.surgicalschedule.mapper.SurgerySafetyCheckMapper; +import com.healthlink.his.surgicalschedule.service.ISurgerySafetyCheckService; +import org.springframework.stereotype.Service; + +@Service +public class SurgerySafetyCheckServiceImpl extends ServiceImpl implements ISurgerySafetyCheckService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/domain/SysAuditLog.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/domain/SysAuditLog.java new file mode 100644 index 000000000..89ee4aa4e --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/domain/SysAuditLog.java @@ -0,0 +1,14 @@ +package com.healthlink.his.sys.domain; + +import com.baomidou.mybatisplus.annotation.*; +import com.core.common.core.domain.HisBaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("sys_audit_log") +public class SysAuditLog extends HisBaseEntity { + @TableId(value = "id", type = IdType.ASSIGN_ID) + private Long id; +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/mapper/SysAuditLogMapper.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/mapper/SysAuditLogMapper.java new file mode 100644 index 000000000..cfa569c7c --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/mapper/SysAuditLogMapper.java @@ -0,0 +1,9 @@ +package com.healthlink.his.sys.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.healthlink.his.sys.domain.SysAuditLog; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface SysAuditLogMapper extends BaseMapper { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/ISysAuditLogService.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/ISysAuditLogService.java new file mode 100644 index 000000000..1d60a25f8 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/ISysAuditLogService.java @@ -0,0 +1,7 @@ +package com.healthlink.his.sys.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.healthlink.his.sys.domain.SysAuditLog; + +public interface ISysAuditLogService extends IService { +} diff --git a/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/impl/SysAuditLogServiceImpl.java b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/impl/SysAuditLogServiceImpl.java new file mode 100644 index 000000000..cd8420ca7 --- /dev/null +++ b/healthlink-his-server/healthlink-his-domain/src/main/java/com/healthlink/his/sys/service/impl/SysAuditLogServiceImpl.java @@ -0,0 +1,11 @@ +package com.healthlink.his.sys.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.healthlink.his.sys.domain.SysAuditLog; +import com.healthlink.his.sys.mapper.SysAuditLogMapper; +import com.healthlink.his.sys.service.ISysAuditLogService; +import org.springframework.stereotype.Service; + +@Service +public class SysAuditLogServiceImpl extends ServiceImpl implements ISysAuditLogService { +} diff --git a/healthlink-his-ui/AGENTS.md b/healthlink-his-ui/AGENTS.md index 67c0a465f..066eb06dc 100644 --- a/healthlink-his-ui/AGENTS.md +++ b/healthlink-his-ui/AGENTS.md @@ -8,6 +8,7 @@ 2. **API路径对齐** — `/healthlink-his/api/v1/` 3. **测试通过才提交** — 构建+测试全通过才能 commit 4. **文档在 MD 目录** — 大写下划线命名 +5. **铁律18: 禁止破坏原有功能** — 完善功能时不能破坏已有功能 ## 快速命令