Commit Graph

183 Commits

Author SHA1 Message Date
00604b2d01 feat(mrhomepage): 病案首页质量校验
- 新增 IMrHomepageQualityAppService + impl,实现 checkQuality/getQualityResults
- 新增 MrHomepageQualityController (POST /quality/check, GET /quality/results/{id})
- 增强 MrHomepageQualityCheckServiceImpl:必填项+逻辑校验+ICD编码+费用一致性
- 新增 MrHomepageQualityCheck.vue 校验结果展示页面
- 更新前端 API 文件添加 checkQuality/getQualityResults 接口
2026-06-17 14:02:42 +08:00
09e43e4b8c feat(emr): 病历时效监控 2026-06-17 13:47:02 +08:00
9673c0ed80 feat(emr): 病历完整性检查
- 创建 IEmrCompletenessAppService + impl,实现 checkCompleteness() 和 getCheckResults()
- 创建 EmrCompletenessController,POST /emr/completeness/check 和 GET /emr/completeness/results/{emrId}
- 新建 EmrCompletenessCheck.vue 检查结果展示 + 不合格项提醒
- 添加前端 API 函数 checkCompleteness / getCompletenessResults
2026-06-17 13:37:53 +08:00
f3a24a9129 feat(emr): 病历版本管理
- V64 Flyway迁移: emr_version表(不可删除, 三甲评审)
- EmrVersion实体: 版本号递增, 内容快照, 差异记录
- EmrVersionMapper + XML: selectByEmrId/selectLatest
- IEmrVersionService + impl: 基础CRUD
- IEmrVersionAppService + impl: saveVersion/getVersions/compareVersions
- EmrVersionController: POST /emr/version/save, GET /emr/version/list/{emrId}, GET /emr/version/compare
- 前端API: saveEmrVersion/getEmrVersionList/compareEmrVersions
- EmrVersionCompare.vue: 版本列表+对比视图
2026-06-17 13:28:34 +08:00
6184ed262f feat(emr): 病历修改留痕 — AppService/Controller/前端组件 2026-06-17 13:22:02 +08:00
f0d20a8d79 Merge remote-tracking branch 'origin/develop' into develop 2026-06-17 13:14:43 +08:00
694935b648 feat(anesthesia): 术后随访记录 2026-06-17 13:00:50 +08:00
Ranyunqiao
5801fec21c bug 789 2026-06-17 12:53:47 +08:00
b3800b7ae0 feat(anesthesia): 麻醉小结功能
- V63 Flyway migration: anes_summary table
- Entity, Mapper, Service, AppService, Controller
- POST /anesthesia/summary, GET /anesthesia/summary/{recordId}
- Frontend AnesthesiaSummary.vue with form and display
2026-06-17 12:53:11 +08:00
557263875b feat(anesthesia): 术中生命体征5min间隔监测 2026-06-17 12:48:18 +08:00
8adee630fb fix(anesthesia): 修复Mapper XML缺失+recordId硬编码 2026-06-17 12:40:11 +08:00
f444584908 feat(anesthesia): ASA麻醉评估 2026-06-17 12:35:45 +08:00
e8356f5f83 fix(critical-value): 修复handler_id约束+补全update_time/update_by列 2026-06-17 12:30:07 +08:00
fc892e96dc feat(critical-value): 危急值处理记录闭环 2026-06-17 12:25:27 +08:00
f79c5a2c26 fix(clinical-pathway): 修复P0问题 - delete_flag/权限控制/缺失端点/tenant_id类型 2026-06-17 12:20:11 +08:00
815b80437e feat(clinical-pathway): 临床路径执行管理 2026-06-17 12:12:41 +08:00
5ef05b9b55 fix(blood-transfusion): 修复P0/P1问题 - 字段映射/参数清理/tenant_id/Flyway版本 2026-06-17 12:02:38 +08:00
d7455684db feat(blood-transfusion): 输血管理全流程 2026-06-17 11:51:35 +08:00
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
892890b59f fix(order-closed-loop): 修复P0问题 - deptId过滤/权限控制/死代码 2026-06-17 11:44:49 +08:00
621bc27267 Merge remote-tracking branch 'origin/develop' into develop 2026-06-17 11:43:18 +08:00
Ranyunqiao
690486084e 112 【住院护士站-护理记录】功能重构升级(参考开源系统信创版本) 2026-06-17 11:38:41 +08:00
6a4545c240 feat(order-closed-loop): 医嘱执行闭环追踪
- AppService: 添加 getTrace(adviceId) 查询医嘱全生命周期时间轴
- AppService: 添加 getStatisticsWithParams(deptId, startDate, endDate) 执行统计
- Controller: 添加 GET /trace/{adviceId} 和 GET /statistics/summary 端点
- 前端: 新建 OrderExecuteTrace.vue 时间轴视图 + 执行统计面板
- API: 添加 getOrderExecuteTrace 和 getExecuteStatistics 接口
2026-06-17 11:34:24 +08:00
a2e607caf4 chore(db): 移除多个数据库迁移脚本
- 移除患者管理字段缺失修复脚本 V2026_0608_1
- 移除文化程度字典类型添加脚本 V2026_0608_2
- 移除HisBaseEntity列缺失修复脚本 V2026_0608
- 移除处方拦截日志表修复脚本 V2026_0611
- 移除临床路径执行表修复脚本 V2026_0612
- 移除EMPI核心表创建脚本 V2026_0616_1
- 移除EMPI合并日志时间字段修复脚本 V2026_0616_2
- 移除手术状态字典重复数据修复脚本 V2026_0617
- 移除医嘱退回流程设备请求字段添加脚本 V20260615
2026-06-17 11:24:16 +08:00
5a227014fe fix(surgery): #684 手术状态下拉框重复 - 清理字典重复数据 2026-06-17 11:02:18 +08:00
2a0303d0e6 fix(regdoctorstation): RegPrescriptionUtils groupingBy null key保护
Bug #674: 住院签发长期医嘱时 conditionDefinitionId/pharmacologyCategoryCode/therapyEnum 为 null
导致 Collectors.groupingBy 抛出 NPE 'element cannot be mapped to a null key'

修复:对齐门诊版 PrescriptionUtils 的 null 处理逻辑
- getConditionDefinitionId null -> 默认 0L
- getPharmacologyCategoryCode null -> 默认 '0'
- getTherapyEnum null -> 默认 0
- generatePrescriptionNo null/空 -> 走普通处方号
2026-06-17 09:32:46 +08:00
Ranyunqiao
cb82f8d5bf bug 673 761 719 754 728 727 763 2026-06-16 16:16:09 +08:00
c4ca097bf6 feat(menu): 添加用户可访问菜单树接口并优化界面展示
- 新增 /userMenus 接口供普通用户获取自身权限范围内的菜单树
- 修复菜单ID路径参数正则表达式匹配问题
- 优化门诊挂号患者列表表格列宽和滚动显示
- 更新患者主索引界面搜索表单和表格展示逻辑
- 调整挂号记录表格高度计算和列固定布局
- 更新未闭环医嘱统计界面提示信息和分页功能
- 修复用户医院名称获取逻辑优先级问题
- 添加EMPI合并日志创建时间字段迁移脚本
2026-06-16 16:08:40 +08:00
954462272e feat(empi): 添加EMPI合并日志记录功能
- 引入EmpiMergeLog实体类和IEmpiMergeLogService服务接口
- 在EmpiAppServiceImpl中注入mergeLogService依赖
- 实现合并操作时自动创建合并日志记录
- 记录合并的源患者ID、目标患者ID和合并类型
- 添加合并原因、操作人和合并时间等关键信息
- 确保每次患者合并操作都有完整的审计日志
2026-06-16 14:10:37 +08:00
9a5d772c72 Merge remote-tracking branch 'origin/develop' into develop 2026-06-16 13:38:18 +08:00
d861c20d5e feat(empi): 实现EMPI患者主索引系统核心功能
- 新增EMPI核心数据表:empi_person和empi_person_id_mapping
- 实现EMPI服务层接口,支持患者注册、合并、查询等功能
- 集成EMPI与院内患者系统的双向关联查询
- 添加患者保存事件监听器,实现EMPI数据自动同步
- 开发EMPI管理界面,支持患者合并操作和数据展示
- 优化EMPI统计功能,增加重复率和待合并患者统计
- 完善EMPI ID映射机制,支持多系统患者标识关联
2026-06-16 13:38:05 +08:00
488573a51b fix(#663): guanyu (文件合入) 2026-06-16 13:37:38 +08:00
wangjian963
259a5946c2 667 [门诊收费-业务流程] 医嘱未挂钩【完诊】状态,医生未终结门诊即可提前在收费端结算,存在漏开/错开费用风险
- @select → @checkbox-change,适配新事件签名
  - 新增 collapseAllExpanded() 使用 setRowExpand/clearRowExpand 兼容 v4 expand
  - setNewRow/setValue 保持行引用不变,原地更新数据
  - 所有医嘱类型编辑模板新增"取消"按钮
  - 内联布局样式抽取为 .edit-form-row 类,四种医嘱类型布局统一
  - 列宽、间距、备注框宽度等样式微调
  - requiredProps 空安全检查、handleBlur 修复、ref 名称修复
2026-06-16 13:33:42 +08:00
Ranyunqiao
020d1be4be bug 716 718 2026-06-16 10:21:26 +08:00
6c77ee8f84 fix(#776): guanyu (文件合入) 2026-06-16 09:38:40 +08:00
wangjian963
9dc4a12339 Merge remote-tracking branch 'origin/develop' into develop 2026-06-15 16:55:47 +08:00
wangjian963
9bbf7c6c08 651 [住院医生站-手术申请] 无法检索出已启用的手术项目(如:“血管闭合切割刀”) 2026-06-15 16:55:17 +08:00
05088a1d1a fix(#734): guanyu (文件合入) 2026-06-15 16:53:01 +08:00
Ranyunqiao
5e9dbb2f1b Merge remote-tracking branch 'origin/develop' into develop 2026-06-15 16:48:48 +08:00
Ranyunqiao
b25d2fbaa9 bug 588 628 642 700 714 715 2026-06-15 16:48:27 +08:00
690e7ca22c fix(charge): 门诊日结 groupingBy null key 修复
Collectors.groupingBy 遇到 contractNo/busNo 为 null 的元素会抛
NullPointerException: Element cannot be mapped to a null key

修复: 在 groupingBy 前增加 .filter(e -> key != null && !key.isEmpty())
2026-06-15 16:47:44 +08:00
43ab5b4498 fix(flyway): 解除 V42 版本号冲突
merge PR #11 时带入 guanyu commit 01e8cc459 错误恢复的已废弃 V42__bug745
文件(该文件内容本已迁移到 V45,原 V42 应删除)。两个 V42 并存导致 Flyway
启动阻塞:"Found more than one migration with version 42"。

修复:删除冗余的 V42__bug745_fix_mr_sealing_medical_record_id.sql(空 deprecated
文件,实际逻辑在 V45)。保留 V42__add_delete_flag_columns.sql(原始文件,2026-06-11)。

验证:
- mvn clean package 通过
- 后端启动成功(HTTP 404 根路径,Flyway 无冲突)
- 登录 API + 门诊收费列表 API 正常响应
- Jackson 3 Long→String 序列化仍生效
2026-06-15 16:18:00 +08:00
219ac30dc5 fix(#763): guanyu (文件合入) 2026-06-15 15:46:59 +08:00
97827b6ff0 refactor(jackson): Jackson 2 → Jackson 3 全项目迁移
Spring Boot 4.0.6 默认引入 Jackson 3.1.2,但项目中 1018 处 @JsonSerialize
注解使用的是 Jackson 2 的 com.fasterxml.jackson.* 包,导致注解被忽略,
Long 字段序列化为裸数字,引发前端 JS Number 精度丢失(Bug #681 的根因)。

- com.fasterxml.jackson.databind.* → tools.jackson.databind.*
- com.fasterxml.jackson.core.* → tools.jackson.core.*
- com.fasterxml.jackson.annotation.* 保留(Jackson 3 仍用同包名)
- com.fasterxml.jackson.datatype.jsr310.* 保留(不再需要,Jackson 3 内置 JavaTime 支持)

- JsonSerializer<T> → ValueSerializer<T>
- JsonDeserializer<T> → ValueDeserializer<T>
- SerializerProvider → SerializationContext
- JsonMappingException → DatabindException
- JsonProcessingException → JacksonException(变 RuntimeException)
- ContextualSerializer → 合并入 ValueSerializer(createContextual 成 default 方法)
- LaissezFaireSubTypeValidator → BasicPolymorphicTypeValidator.builder()
- Jackson2ObjectMapperBuilderCustomizer → JsonMapperBuilderCustomizer

- ObjectMapper.configure() 返回 void → JsonMapper.builder().disable(...).build()
- ObjectMapper.setPropertyNamingStrategy() → JsonMapper.builder().propertyNamingStrategy()
- ObjectMapper.setDateFormat() → JsonMapper.builder().defaultDateFormat()
- ObjectNode.fieldNames() → JsonNode.propertyNames()(返回 Collection<String>)
- SerializationFeature.WRITE_DATES_AS_TIMESTAMPS 已移除(JavaTime 自动处理)
- ObjectMapper 的 JavaTimeModule 注册不再需要(Jackson 3 内置)

- core-framework/.../ApplicationConfig.java:重写为 JsonMapperBuilderCustomizer +
  自定义 LocalDateTime 序列化(Jackson 3 内置 ext.javatime.*)
- core-framework/.../FastJson2JsonRedisSerializer.java:用 BasicPolymorphicTypeValidator
  替代 LaissezFaireSubTypeValidator
- core-common/.../JsonUtils.java:改为 JsonMapper.builder() 模式
- core-common/.../SensitiveJsonSerializer.java:JsonSerializer → ValueSerializer

- 5 个模块 jackson-databind groupId 改为 tools.jackson.core(版本由 Spring Boot BOM 管理)
- jackson-annotations 保留 com.fasterxml.jackson.core(Jackson 3 仍用同包名)

-  mvn compile 全 11 模块通过
-  mvn package 成功生成 fat JAR
-  后端启动正常(JDK 25,Spring Boot 4.0.6)
-  登录 API 返回 JWT token
-  /charge-manage/charge/encounter-patient-page 响应:
    - encounterId: "2032288214655660033"(字符串,@JsonSerialize 生效)
    - patientId: "2026486681850499074"(字符串,@JsonSerialize 生效)
-  Bug #681 根因彻底解决(Long 精度丢失)

- Bug #681(前端兜底 fix: acf685fba)+ 本 commit(后端根治)
- Bug #281(历史 jsr310 模块问题)随 Jackson 3 内置 JavaTime 一并解决

- Playwright E2E 全量回归(51 个 spec)
- 时间字段序列化专项测试(LocalDateTime 格式验证)
- 删除 Jackson 2 starter(spring-boot-jackson2)的可行性评估
2026-06-15 15:40:26 +08:00
01e8cc459c fix(#748): guanyu (文件合入) 2026-06-15 15:37:12 +08:00
wangjian963
5c73cc6987 fix(#643): 门诊手术安排-术中医嘱删除改为状态回退,修复刷新后医嘱重现
- 前端:删除操作改为 UPDATE 状态回退(statusEnum ACTIVE→DRAFT),清除签发人/签发时间
  - 后端:回退时跳过发放/计费/绑耗逻辑,清除 signCode,回退 chargeItem 状态为 DRAFT
  - 后端:回退时保持原始 generateSourceEnum,避免刷新查询不到记录
  - 安全:回退前校验 encounterId 所有权,防止跨就诊 IDOR
2026-06-15 15:27:31 +08:00
wangjian963
6882085d69 fix(#613): 医嘱退回流程增加退回原因录入与展示
护士端退回操作已有退回原因弹窗(prescriptionList.vue),本次主要补齐:

  后端:
  - DeviceRequest 实体新增 backReason/performerCheckId/checkTime 三个字段
  - IDeviceRequestService/Impl 新增含退回信息的 updateDraftStatusBatch 重载
  - AdviceProcessAppServiceImpl 退回耗材医嘱时传入退回原因/护士/时间
  - InpatientAdviceDto 新增 reasonText/checkTime 字段
  - AdviceProcessAppMapper.xml(护士站查询):3路 UNION ALL 均新增 reason_text + check_time
  - AdviceManageAppMapper.xml(医生站查询):3路 UNION ALL 均新增 reason_text

  前端:
  - 住院医生站 order/index.vue:医嘱列表新增"退回原因"列(诊断列前面)
  - 住院护士站 prescriptionList.vue:医嘱列表新增"退回原因"列

  数据库:
  - V20260615__bug613_add_return_fields_to_device_request.sql:wor_device_request 表新增 3 列
2026-06-15 14:04:52 +08:00
Ranyunqiao
b1391afcd8 bug 657 713 2026-06-15 13:30:20 +08:00
7374e17f2e feat(clinical): 添加临床检验管理API兼容层
- 新增ClinicalManageLaboratoryController支持检验结果页面API映射
- 新增ClinicalManageObservationController提供检查结果API兼容接口
- 实现检验结果分页查询和详情获取功能
- 为检查结果预留接口并返回空数据避免前端报错
- 修复封存表medical_record_id字段非空约束导致的插入错误
2026-06-15 09:25:57 +08:00
60c84b5a8c fix(#726): guanyu (文件合入) 2026-06-15 06:06:05 +08:00