91 Commits

Author SHA1 Message Date
liuyun
b09015151f fix(c5): 补 document/export 权限 seed
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 07:49:52 +08:00
liuyun
94f0fb2bb5 fix(c5): dockingTier 枚举约束 A/B/C
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 07:40:56 +08:00
liuyun
16937fcf17 feat(c5): 拍照分档批量改 + 机构配置 + 文书导出
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 07:36:58 +08:00
liuyun
9a0ffc6fc7 style(c5): agency 新增字段保持纯增量(还原既有行对齐)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 07:31:24 +08:00
liuyun
11955c4f55 feat(c5): svc_org photo_tier + agency 机构配置字段
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 07:30:08 +08:00
liuyun
9fea4efe0f feat(qc): 质控闸门 R9-R12 修复(权限/批量原子化/异常老人校验/退回幂等)
- R9:质控员角色补全 qc 六权限 + abnormal.list/handle
- R10:batchPass 两阶段全量预检,整批通过才逐条放行(原子不部分放行)
- R11:exceptionLink 校验 abnormal 关联老人与计划变更老人一致(46008)
- R12:return 增加幂等守卫(非 pending 抛 QC_ALREADY_HANDLED)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 02:06:03 +08:00
liuyun
a808581e60 fix(c4): 异常处理返回坐标 Decimal 转 string,防泄漏 {s,e,d}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:58:47 +08:00
liuyun
00c258dda5 fix(c4): 异常处理 handle_status 枚举统一为 handling
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:51:38 +08:00
liuyun
ba7f2397d7 feat(c4): 质控异常处理端点(handle_status/handle_result)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:50:42 +08:00
liuyun
915745226f fix(c4): 质控放行自检顺序 + 补正≥3次进质控重点
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:37:56 +08:00
liuyun
f24b86064f feat(c4): 质控模块(全量质控/放行退回/五类推送/异常联动/补正)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:32:26 +08:00
liuyun
8f9177e36a feat(c4): qc + record_correction 数据模型
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:23:41 +08:00
liuyun
2828a9da58 feat(c4): qc 权限码/错误码/APIS 2026-10-15 01:22:17 +08:00
liuyun
9f232356e0 fix(c3): 结转幂等 + offlineSync 扑空拒签 + 坐标全路径序列化
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:08:36 +08:00
liuyun
5f060292c6 fix(c3): 扑空 not_met_reason 截断 50 + report 坐标 Decimal 转字符串
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:07:18 +08:00
liuyun
c00c4ee007 fix(c3): record 坐标 Decimal 返回前转字符串,防泄漏 {s,e,d}
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:00:06 +08:00
liuyun
ab09210d28 fix(c3): 异常列表 visitLat/visitLng Decimal 转字符串
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 01:00:05 +08:00
liuyun
169b4e2c51 fix(c3): 垫付结转 R9 门控——仅待遇已转正常享受(active)可结转
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:49:24 +08:00
liuyun
1966a68bc8 fix(c3): record 必拍档不可被 extraFlag 绕过 + 未派单离线补传守卫
- resolvePhotoRequired 先按 svcId 查 order.item_list,命中以 photo_tier 为准,
  忽略客户端 extraFlag/photo_required;仅无对应项才回退 DTO
- offlineSync 对 assigneeId 为 null(未派单)工单抛 RECORD_ORDER_INVALID,防 null 入 NOT NULL 列

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:36:54 +08:00
liuyun
55f432b8e7 chore(c3): 注册 record/abnormal 模块
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:36:36 +08:00
liuyun
563f5ab5b5 fix(c3): record 从 order 推导 photo_required 与 elder/assignee
- itemSave:photo_required 由 order.item_list 的 photo_tier 推导(must→required),
  extraFlag 临时加项才回退 DTO 值,防客户端传 false 绕过 3001 必拍校验
- offlineSync:elder_id/assignee_id 以 order 为准,忽略 DTO 字段,防 order/elder/assignee 不匹配

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:34:39 +08:00
liuyun
2e4c916949 fix(c3): 扑空转 not_met 前 requireOrder 校验(44003)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:33:56 +08:00
liuyun
5bfd0f4748 feat(c3): 履约留痕模块(签到/签退/项目/照片/离线/垫付结转)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:28:39 +08:00
liuyun
93e532aa7d feat(c3): 异常上报模块(9宫格/扑空转 not_met)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:26:15 +08:00
liuyun
4295683f04 feat(c3): record/item/photo/abnormal + settlement/report 数据模型
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-15 00:20:26 +08:00
liuyun
71b9155ccf feat(c3): record/abnormal 权限码/错误码/APIS
Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
2026-10-15 00:19:38 +08:00
liuyun
66da809a2e fix(c2): 属地项数提示级 + assign L2 放松 + reassign 守卫 + 时区标准化
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 23:41:20 +08:00
liuyun
8791ca494b fix(c2): 个人项目库允许保存空库(清空)
- R12: PutElderSvcDto.svcIds 移除 @ArrayNotEmpty,空数组=清空
- 补测 put 空 svcIds 清空项目库

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 23:07:02 +08:00
liuyun
00c8fa4d4c feat(c2): 工单按日列表接口(排班日视图 R11)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 23:06:03 +08:00
liuyun
9c4fd6f4ca feat(c2): 工单模块(派单/调单/冲突/批量推荐)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 22:42:15 +08:00
liuyun
161a1253ee fix(c2): plan create 置 active + confirm 不改状态 + change 校验同老人
- R7: create 置 planStatus=active(spec 权威);confirm 仅写确认字段不改状态
- R8: change 校验 oldPlan.elderId === dto.elderId,不匹配拒绝

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 22:32:59 +08:00
liuyun
418dfb9dae feat(c2): 服务计划 + 老人个人项目库模块
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 22:27:34 +08:00
liuyun
515e22453c feat(c2): plan/order 权限码/错误码/APIS 2026-10-14 22:13:53 +08:00
liuyun
766d8c7218 feat(c2): plan/plan_item/order/elder_svc 数据模型
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 22:08:40 +08:00
liuyun
312712f86c chore(c1): .env.example 修正 MinIO 端口 9010 与凭据 admin/admin111
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-14 22:01:19 +08:00
liuyun
64c3efd931 fix(c1): elder 日期用 UTC 零点,修复 @db.Date 提前一天的 off-by-one
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 21:27:26 +08:00
liuyun
a949acbc3b fix(c1): elder 建档日期字段转 Date 落库(修复 50000)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 21:23:21 +08:00
liuyun
0cbdb7f825 fix(c1): elder 十态校验/不可逆态守卫/待遇止>起 + statusLog 单测
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 17:29:41 +08:00
liuyun
1308675f80 feat(c1): elder 待遇档案模块(建档/状态机/掩码/上传)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 17:19:07 +08:00
liuyun
465057cce0 feat(c1): MinIO 存储模块
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 17:03:12 +08:00
liuyun
f3c775cea9 feat(c1): elder 权限码/错误码/接口资源
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 16:57:55 +08:00
liuyun
b83c59611c feat(c1): elder + elder_status_log 数据模型
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 16:54:45 +08:00
liuyun
239dec912c refactor(c0): 业务表去 sys_ 前缀改业务领域命名,字典复用脚手架
- ltc_agency/ltc_staff;svc_national/svc_local/svc_mapping/svc_org;loc_config
- 删 sys_dict_abnormal_type/sys_dict_photo_tier,异常分类/拍照分档改为内置字典(abnormal_type/photo_tier)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-14 14:44:58 +08:00
liuyun
aa95586a55 fix(c0): 接线业务 RBAC 与补齐服务机构设置菜单
- APIS 登记 agency/staff/svc-org 业务接口资源(code=权限码)
- syncTenantResources 为业务租户预置 5 个业务角色并授权
- MENUS 补齐 svc-config-loc(属地与目录)与 svc-config-docking(对接档位)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 13:47:55 +08:00
liuyun
945fe5daa3 feat(c0): catalog 目录模块(属地加载 + 机构项目库)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 13:08:47 +08:00
liuyun
0be521bd72 fix(c0): staff 绑定 userId 前校验账号在本租户存在
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 13:01:32 +08:00
liuyun
5a3beb4923 feat(c0): staff 人员模块(user_id 关联账号 + 归属组长)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 12:56:07 +08:00
liuyun
856e906740 feat(c0): agency 机构模块(按租户读写机构信息)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 12:48:27 +08:00
liuyun
198517bde4 feat(c0): 长护服务菜单组 + 目录 seed 骨架
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-10-14 12:42:53 +08:00
liuyun
b5eb94d3ae feat(c0): 服务机构端权限码与业务错误码 2026-10-14 12:39:42 +08:00