郑博文
|
27533eb465
|
wip: 客户评级弹窗化/公司信息精简/参数中文化/品牌站点同步(基于 927592b)
|
2026-10-20 11:06:01 +08:00 |
|
liuwenxin
|
927592b472
|
feat(frontend): 公司设置/二次分配/审批三页接入,参数页编码中文化
- 公司信息页(设置 order7):名称编辑 + logo 上传(png/jpg ≤2MB
前端先拦)+ 签名元素「登录页实景预览」(缩比登录卡,品牌名/logo
即时反映,所见即所得)
- 审批管理页(order8):列表筛选(关键词/状态/类型)+ 签名元素
「竖排节点时间线」(财务复核→领导审核,人工/自动/驳回色区分)+
在途单通过/驳回动作(驳回必填意见,经 useConfirmAction 确认流)
- 路由扩展 allowedRoles 元数据:菜单按任一列入角色可见 + 守卫双
过滤(admin 须显式列入集合,不天然放行);审批页对 admin/
finance/leader 可见(营销后勤待权限清单 #6)
- 业务表单二次分配区:参与人下拉(离职禁用)+比例输入+实时合计条
(合计≠100% 提示余额归属待业务确认,满额高亮);编辑全量替换、
空行自动忽略;校验(人员非重/比例两位小数)与后端 NUMERIC(5,2)
同口径
- 登录页接 /system/settings/public:品牌名与页脚动态,logo 展示,
失败静默回退默认(登录页必须可用)
- 参数页中文化:维度角色名映射(营销员/营销经理/信息员)、枚举值
中文(当月全额/余额、含/扣/不计基本工资、开/关)、预览「所用参数」
由编码直出改中文名(编码括注)
- 验证:pnpm type-check 零错误;pnpm build 通过
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-16 09:38:05 +08:00 |
|
liuwenxin
|
74f1ef1cf9
|
feat(frontend): 审批与系统设置模块页面接入及业务列表调整
|
2026-10-16 09:32:12 +08:00 |
|
liuwenxin
|
8ef26e22fb
|
feat(approval): 审批单/节点状态机与二次分配接入(开关自动通过)
- approval_orders/approval_steps 服务层:submit_order(不 commit 不嵌套
audit,业务写路径统一收口)+ act 节点动作 + 分页/详情
- 开关关闭=提单即两级「自动通过」留痕(action=3,operator 记系统);
开启=财务→领导流转,一驳全驳,驳回必填意见
- 节点准入严格按角色(status=1 仅财务、status=2 仅领导),admin 不代办;
模块准入 require_roles 依赖工厂(admin/finance/leader,营销后勤待
澄清 #6 后放开)
- 业务接入:创建/编辑带方案即提单(空方案不提单);再编辑自动撤回旧
在途单(node=0/action=4 留痕);AP 编号冲突 create 内可重取(外层
重试兜底)、update 直接抛出防静默丢失
- conftest 兜底清理增审批单(AP 前缀)与开关参数种子基线恢复
- 集成 11 例:自动通过/两节点流转/驳回留痕/缺意见 400/节点准入 403/
admin 不代办/重复操作 400/撤旧建新/模块准入
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 18:50:38 +08:00 |
|
liuwenxin
|
680661a80b
|
feat(allocation): 二次分配方案录入/替换/终态门槛(分摊计算待澄清另批)
- SecondaryAllocationIn/Out:比例走金额红线口径(str 入参、两位小数、
超 100 拒绝不静默舍入);参与人 schema 层去重(uk 前置友好提示)
- create/update 同事务写入(replace_allocations,先删后 flush 再插——
uk 表防御写法);create 放编号重试循环内,rollback 后方案随业务重来
- 人员在职复用 ensure_active(label=分摊参与),personnel_name 冗余固化;
FK RESTRICT:被方案引用人员禁删,方案回显不静默失联
- 合计不强制 100%(需求原文):详情 allocation_hint 只展示合计/余额,
余额归属待澄清 #2 不落库
- 单测 13 例(比例边界/去重)+ 集成 9 例(回显/替换清空/离职 400/
终态禁改/RESTRICT 保护)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 18:31:27 +08:00 |
|
liuwenxin
|
efed29647c
|
feat(settings): 公司信息配置与 logo 管理(public 端点供登录页)
- system_settings 单行 CRUD:GET/PUT(AdminUser)+ GET /public(无鉴权,
SettingPublicOut 白名单仅 company_name/logo_url 两字段,短缓存 300s)
- logo 上传:后缀+magic bytes+2MB 三重校验,固定名覆盖落盘 uploads/logo/
(不使用上传方文件名,杜绝路径拼接);旧扩展名文件清理;文件流端点
no-cache,URL 带 update_time 版本参数破缓存
- logo 存目录不存库:图片入 DB 让每次读取与 mysqldump 放大传输且无法
独立替换;DB 只持一行相对路径
- 新增依赖 python-multipart(FastAPI UploadFile 必备传输层);.gitignore
增 backend/uploads/ 与 db/backups/
- 集成 11 例:单行语义/白名单字段/三重校验/越权 403/匿名 401/审计留痕
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 18:22:12 +08:00 |
|
liuwenxin
|
e95dc4b2de
|
style(backend): formatter 收口两处漏网文件(纯格式无行为变化)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 17:25:24 +08:00 |
|
liuwenxin
|
acf87fdfdc
|
feat(migration): V6 系统设置/二次分配/审批表与角色参数种子
- 新增 system_settings(公司信息单行)/ business_secondary_allocations(二次
分配明细,比例不强制合计满额,分摊计算待澄清另批)/ approval_orders+
approval_steps(三级审批状态机,开关关闭自动通过留痕)
- roles 种子新增营销后勤/财务/领导三职能角色;内置保护改 BUILTIN_ROLE_CODES
白名单(roles 表无 is_builtin 列,不加列)
- PARAM_REGISTRY 首例 BOOL:两个审批开关(16→18 项,种子双写)
- 双轨同步:V6 导出 SQL + init-dev.sql(表/索引/种子/版本号 79bcc5aa98d4)
- 测试同步:EXPECTED_TABLES 四新表、角色种子断言 5 角色、目录断言 18 项
八分组、BOOL 校验边界;迁移 downgrade 修 1553(只保留 drop_table)并补
行级种子反向清理
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 17:25:23 +08:00 |
|
liuwenxin
|
94c49138bf
|
refactor(e2e): 六个列表页 UI helper 收口 common.py
open_menu 时分组参数化、fill_filter :text-is 精确匹配、messagebox 带
:visible(base_data 实现为准)——两脚本此前各持一份且匹配精度漂移
(has_text 子串 vs :text-is),使用者误以为两者等价;登录/系统管理/
基础数据/业务数据四链路 e2e 复跑全过。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 11:01:31 +08:00 |
|
liuwenxin
|
f75a9d534e
|
refactor(test): 集成工厂上提共用,submit_change 拆校验段,审计重试断言对齐全局兜底
- tests/integration/factories.py:回款/发货两文件逐字重复的
_customer/_bitem/_bpayload/_create_business 上提(t_ 前缀与默认行
口径单点维护);test_audit_retry 的持续冲突断言由 500 更新为
400「数据完整性冲突」——全局 IntegrityError handler(批 6)收敛
行为属预期改进,非回归
- param_service.submit_change 拆出 _normalize_items(校验段独立,
主函数降至 50 行约定内);e2e 六个列表页 helper 收口 common.py
(base_data 版为准:分组参数化、:text-is 精确匹配),两脚本变薄
- 全量回归 625 passed(基线 603 + 新增 22);e2e 四链路(登录 8/
系统管理 13/基础数据 13/业务 16)全过
- 测试 README 补 2026-10-15 运行记录与 10 条评审缺陷(预览千分比/
审计假成功/字典序 MAX/无锁编辑/删产品 500/schema 口径/quantize/
负天数外插/评级并发/大小写不对称)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 10:58:44 +08:00 |
|
liuwenxin
|
0ef3adec21
|
refactor(frontend): 金额正则/分页/抽屉状态/行编辑与下拉收口
- 金额形态正则收进 utils/validate.ts 单点导出(此前四页各写,精度
调整漏改一页即「A 页拦得住 B 页放行后端 400」或历史行无法编辑)
- params 版本/历史两抽屉的手写分页五件套换 usePagedList(白得请求
序号防竞态——快速翻页旧响应覆盖新页的手写坑不再复现)
- 业务抽屉三份 id 状态收为 drawerRowId computed(单一状态源,消除
「标题 A 业务、留痕表 B 业务」的失同步面)
- useEditingRow(三页逐字相同的 computed)与 useDropdownOptions
(取数失败不阻断列表的骨架)收口,映射函数由调用方给出
- e2e 冒烟:基础数据 13 步 + 业务全链路 16 步全过
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 10:08:24 +08:00 |
|
liuwenxin
|
60f6af6494
|
refactor(repos): 归属留痕共享数据访问,人员在职校验收口单点
- ownership_log_repository:客户/业务两侧逐行同构的 list/count/add
收口(owner_type 与引用列参数化),双键倒序与被删人员兜底口径
单点维护;两侧 repository 变薄包装,service 层零改动
- PERSONNEL_STATUS_ACTIVE 单点导出于 models/personnel(对照
BUSINESS_STATUS_* 先例);业务/客户两侧的「存在且在职」校验收口
于 personnel_service.ensure_active——此前两份常量+校验仅靠注释
维持同步,在职判定调整时会两入口口径分叉;校验放 service 层遵守
「repositories 不抛业务异常」红线
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 09:49:53 +08:00 |
|
liuwenxin
|
409e26614f
|
refactor(business): 编辑出参取校验返回值省重查,submit_change 批量预载
- update_receipt 取 _ensure_shipment_of_business 返回值组装出参
(shipment_id 已赋为 payload 新值,与 get_with_refs 重查同源),
省一次三表 join;update_shipment 同理取锁定行的 business_no
- 删 business_repository.count_items(无任何调用的死代码,删除保护
实际走 has_docs)
- submit_change 校验段定义与岗位各一条 IN 批量预载(逐条查询在批次
扩大时是写侧 N+1);岗位字典键 casefold 归一保持与单条版 ci 校对
等价的命中语义;旧值留痕保持逐条(窗口函数优化留待 M3 一并设计)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 09:32:35 +08:00 |
|
liuwenxin
|
5ef48abf47
|
test(schema-sync): 迁移链按序重放 ALTER,比对基准由历史并集改为终态
早前实现把全部 V*.sql 的 CREATE 列做并集:某表日后被 ALTER DROP
COLUMN 时并集里旧列名永存,init-dev.sql 必须保留死列才能过测——
守卫会主动背书一份与生产结构漂移的开发库 DDL。按文件序重放
ADD/DROP COLUMN 后比对基准为迁移链终态;列改名(CHANGE)出现时
重放报差异属人工核对时机(改名同时牵动 init-dev 与 ORM)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 09:24:34 +08:00 |
|
liuwenxin
|
7f8f88c148
|
fix(frontend): 错误提示单一化/成功提示后置/日志页首次成功拉取
- request.ts blob 失败分支:先解析真实文案再统一提示——此前先弹兜底
「导出失败」再异步补弹真实 message(双提示),401 时跳转提示与
实际原因错位;401 语义文案在导出场景不再失真
- useConfirmAction:收尾(列表刷新)成功后才弹成功提示——此前先弹
「已删除」再刷新,after 失败被吞时成功/失败提示同屏矛盾
- 日志页登录 tab 首次成功加载后不再重复拉取(loginLoadedOk 由
fetcher 成功返回置位,失败切回可重拉,不复活「失败停空表」旧坑)
- login_flow.py 密码改从 E2E_ADMIN_PASSWORD 读(与 system_management
同一约定),硬编码默认值在他机上会假绿为「凭据错误」
- e2e 冒烟:登录 8 项 + 系统管理 13 项全过(拦截器全局改动验证)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-15 09:22:12 +08:00 |
|
liuwenxin
|
c2b462df3b
|
fix(rating): 区间重叠判定改用锁定读取,防并发重叠双提交
先查后写无锁时,两管理员并发提交重叠区间互判不重叠而双双入库
(区间重叠无唯一键可拦,同一总分命中多等级且结果取决于插入顺序);
判重叠的 list_all 加 for_update 锁全表行串行化并发判定,只读直出
list_grades 不加锁。SQL 形态用例锁定两条口径。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 19:01:11 +08:00 |
|
liuwenxin
|
e6c2c71d1b
|
fix(business): 行金额乘积显式两位固化,计提比例对负天数钳制
- 明细行金额(数量2位×单价4位可产 6 位小数)直写 DECIMAL(14,2) 被
MySQL 静默舍入且回显漂移(创建响应读内存值、复查读库值不一致);
显式 quantize HALF_UP 固化,舍入方向与 MySQL 一致(业务/发货同改)
- 先款后货回款(payment_days 为负)线性外插会算出高于起始值的计提
比例(多算绩效);钳制到 0 天按起始比例计提,payment_days 出参仍
照实输出负值(口径:2026-10-14 用户裁决)
- 新增 formula 负天数钳制单测与 quantize 回显/库值一致性集成用例
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:58:30 +08:00 |
|
liuwenxin
|
91fc6f6293
|
fix(product): 删除引用保护/单价小数位校验,IntegrityError 全局兜底转 400
- delete_product 补 count_refs 引用检查(业务明细+发货明细 RESTRICT
外键)与并发窗口 IntegrityError→400 兜底(customer 先例同构),
docstring 与两个 api 层过时注释同步更新
- 产品 schema 复用 schemas/business._check_amount:sale_price 走
(PRICE_MAX, scale=4)、stock_quantity 走 AMOUNT_MAX——此前私写
_parse_non_negative 不查小数位与容量,5 位小数被 Numeric(14,4)
静默截断(舍入即算错钱);新增 6 个秒级 schema 单测锁定口径
- 全局注册 IntegrityError handler:漏补引用保护的删除类操作收敛为
400 通用文案(e2e 撞见一个补一个的模式无法保证全覆盖),完整
异常记日志;rating/customer 的「非 1062 按 500」注释同步更正
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:48:32 +08:00 |
|
liuwenxin
|
9a70264b51
|
style(backend): ruff format 统一此前批次的排版残留
纯排版无行为变化(ruff format 重排 7 个此前批次的文件),
涉及模块集成回归全绿(67 passed)。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 18:46:43 +08:00 |
|
liuwenxin
|
6d612daf30
|
fix(business): 编辑/流转/归属加锁与终态编辑门槛,has_docs 单点收口
- get_with_names 加 for_update 参数:update/change_status/change_ownership
以锁定读取行,与发货/回款写路径同一锁口径——「有发货禁换客户」的
快照读校验不再被并发新增发货旁路(此前 delete 有锁、唯独编辑无锁)
- update_business 补终态门槛(明细/汇总是 M3 核算基线,与发货/回款
服务禁写终态同口径);前端编辑按钮按终态禁用并加 tooltip
- 新增 business_repository.has_docs(单条 OR exists):替换 update
换客户与 delete 两处内联双查询,M3 新增挂靠单据类型时只改一处
- 出参组装复用首查 row:change_ownership 的姓名侧按「变更项取校验
函数返回的新人名、未变项沿用首查名」处理(首查名是变更前快照)
- 新增终态编辑 400 且明细未动的集成用例
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 17:30:21 +08:00 |
|
liuwenxin
|
a0086554b1
|
refactor(core): 1062 唯一键冲突判定收口至 core/db_errors
六个 service 各自复制的 _is_duplicate_entry(口径已漂移:rating/product
用 _ERR_DUP_ENTRY 常量、其余四处写字面量 1062)收敛为共享函数;
is_duplicate_entry 语义与文案注释各处保留,非 1062 完整性错误仍原样
上抛由全局处理器收敛。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 15:17:00 +08:00 |
|
liuwenxin
|
5a3778a424
|
fix(business): 唯一键冲突重试改为审计上下文内循环,单条审计无递归
三处 create(业务/发货/回款)的 return _retry_create 是吞异常后正常
退出:外层审计把已回滚的首次尝试记成 success(假成功),重入整个
create_* 违反 audit_service「不支持嵌套」约定,且 _NO_RETRY 死常量
导致持续冲突时无界递归至 RecursionError。改为 audit 内 for 循环
(上限 _NO_RETRY),rollback 后重新锁行与取号,成功/最终失败各恰好
一条审计。新增集成用例锁定两条路径的日志增量。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 15:09:05 +08:00 |
|
liuwenxin
|
cb977979da
|
fix(param): 预览千分比换算/版本号复用 next_no/维度规范值落库/冗余提交清理
- 企业户与信息员预览分支把 ‰ 存储值当纯比例直接相乘,绩效金额放大
1000 倍;补两个岗位路径的精确数值用例(既有用例仅覆盖业务员路径)
- 批次版本号改用 no_generator.next_no(MAX FOR UPDATE 锁当日区间),
移除无锁全拉重造的 _next_version_no(依赖前一笔的长度优先排序)
- 岗位维度值经 ci 校对命中后以库里规范 role_code 落库,防快照字典
精确匹配静默不命中;变形大小写提交补回读断言
- 删正常路径冗余双 commit;支付权重 R 封底封顶口径注释声明
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 14:20:05 +08:00 |
|
liuwenxin
|
64c57e9141
|
fix(no_generator): 编号 MAX 检索改长度优先排序,破解位宽进位后字典序失效
跨位宽(-9999→-10000)后纯字典序反转,MAX 恒取旧值导致当日建单
持续撞唯一键;同前缀下长度大即数值大,同级同长时字典序与数值一致。
新增跨位宽/同宽/空表三个集成用例。
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-14 14:09:30 +08:00 |
|
liuwenxin
|
d8dba27fb2
|
docs(requirements): 模块页面功能清单(开发交付视角:14 页面已交付/M3+M4 待开发)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 18:00:23 +08:00 |
|
liuwenxin
|
d77728265b
|
docs(business): M2 收尾——e2e 记录、缺陷表、AI_CONTEXT 摘要更新
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 17:13:21 +08:00 |
|
liuwenxin
|
8c4acb82fe
|
fix(business): e2e 链路验证与两处修复
- wait_toast 超时返回最后见到的非空提示(错误 toast 一闪而过时诊断信息全丢)
- 业务/发货明细行单价类字段放行 4 位小数(与后端 DECIMAL(14,4) 对齐)
- 清理步骤适配删除保护(被终态业务/引用拦截时留档而非失败)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 17:06:46 +08:00 |
|
liuwenxin
|
fba8cfc215
|
fix(business): 删除保护补齐与单价小数位口径修复(e2e 发现)
- 客户删除保护:被业务引用 → 400(T4 占位注释在业务表就位后漏补,FK 500 暴露)
- 人员删除保护:业务归属(负责/协助)引用纳入检查(同样漏检 500)
- schema 单价类列(DECIMAL 14,4)小数位放行至 4 位:回显 '5000.0000'
原样提交被两位校验永久拒收(编辑任何带精度单价的历史行都失败)
- 补 2 个集成用例锁定;文案同步「客户归属或业务归属引用」
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 17:06:46 +08:00 |
|
liuwenxin
|
299b72483c
|
test(business): M2 基础数据与业务数据两个 e2e 链路脚本(13+16 步)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 14:17:28 +08:00 |
|
liuwenxin
|
c512cb77fb
|
docs: 后端接口清单补基础/业务数据两节与 M2 关键约定;前端 e2e 清单预登记
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 13:43:17 +08:00 |
|
liuwenxin
|
ca4cc72eea
|
test(business): 业务数据管理模块集成用例(70 例)与两处缺陷修复
- 覆盖:编号格式与序号递增/状态机终态拦截/三处汇总冗余一致性/跨业务批次
400/已核算禁改禁删/毛利润金标准与防除零/asOf 回溯/评级重叠/审计双记录
- 缺陷修复①:change_status 留痕 old_status 取到赋值后属性(时间线失真 3→3)
- 缺陷修复②:freight_amount 漏金额校验(负数/三位小数可落库污染运费合计)
- conftest 扩展业务六表清理(编号前缀 + FK 逆序收口)与评级种子基线恢复
- 全量回归 603 passed(单元 381 / 集成 222)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 13:39:09 +08:00 |
|
liuwenxin
|
77e578085a
|
feat(business): 操作日志模块词表补业务数据四模块(与后端 MODULE_* 同步)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:51:20 +08:00 |
|
liuwenxin
|
06cdf4141f
|
feat(business): 前端业务/发货/回款管理三页
- 业务页:明细行编辑器、详情抽屉五分区(含状态时间线与毛利润卡片)
- 回款页:业务→发货批次级联指定(可清空)、已核算行禁改禁删
- 金额/比率字符串直出;毛利润卡片注明不含运费口径
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:50:10 +08:00 |
|
liuwenxin
|
5207d14daa
|
feat(base): 前端基础数据三页与客户评级计算器(人员/产品/客户/评级)
- 人员页:编辑抽屉内区域/计划子表编辑;产品页:类别阈值提示条;
客户页:归属变更二次确认含「不回溯历史」+变更记录抽屉
- 评级页:五项评分实时出等级(纯前端判定,不落库 #25)+ 等级映射维护抽屉
- 菜单两组:基础数据(8-10)/业务数据(14);金额字符串直出禁 float
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:25:45 +08:00 |
|
liuwenxin
|
09831dbb7f
|
feat(business): 挂载发货/回款路由 /api/v1/business/*
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:25:34 +08:00 |
|
liuwenxin
|
a02b6c3ec8
|
feat(business): 回款管理接口(批次号/手动指定批次/已核算禁改/合计回写)
- 批次 HK 生成;shipment_id 同业务强校验(统一失败面防探测)
- 已核算回款禁改禁删(M3 防重锚点);payment_days 派生(发货日首日=第 1 天)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:25:34 +08:00 |
|
liuwenxin
|
4aea2be103
|
feat(business): 发货管理接口(发货单/明细/运费/汇总回写/删除保护)
- FOR UPDATE 锁业务行防发货/回款并发丢失更新;终态业务禁新发货
- 行金额服务层按数量×单价固化;明细行 remark 按设计定稿移除(冒烟修复)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:25:33 +08:00 |
|
liuwenxin
|
0cdc6246c4
|
feat(business): 业务管理接口(编号生成/明细/状态机/归属留痕/毛利润视图)
- 编号 YW{日期}-{序号}:MAX+FOR UPDATE 并发安全 + 1062 兜底重试(no_generator 三单据共用)
- 明细全量替换重算五项汇总冗余;销售额服务层按数量×单价固化不信任前端
- 状态机终态拦截、终止必填原因、创建写首条留痕;归属变更同事务留痕防旁路
- 毛利润视图按行实时计算(不含运费 #2),阈值按 asOf 取 M1 快照,率输出
Fraction 分数字符串同 M1 预览口径;成本缺失行标注无法计算
- 入参契约统一为蛇形直出(撤回 customer/business 的驼峰 alias,与前端
businessRoles.ts 模式对齐)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:01:48 +08:00 |
|
liuwenxin
|
1625907380
|
feat(business): 客户评级等级映射配置接口(区间重叠判定/名称唯一)
- 判定=按 sort_order 升序首个 min_score≤总分,边界相邻不算重叠
- 新增同样执行重叠判定(判定表语义下插出重叠即脏配置)
- 等级配置无下游引用(评级为纯计算器,对照表 #25),允许清空
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 12:01:47 +08:00 |
|
liuwenxin
|
899bf3afa5
|
docs(test): 基础数据模块测试记录(48 例/审计盲区缺陷/待补用例更新)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 11:24:29 +08:00 |
|
liuwenxin
|
20fcf06f51
|
feat(business): 新增业务数据七表及 V5 迁移(业务/明细/状态留痕/发货/回款/评级配置)
- businesses 五项汇总冗余列服务层事务内维护;毛利润不落库(派生值,M3 台账固化)
- 行级 product_category 折算锚点(#14);回款 settlement_status 预置为 M3 防重锚点
- 评级等级种子四条(迁移+init-dev 双写);编号前缀常量 YW/SH/HK
- 双轨 SQL 同步(V4/V5 重导,schema_sync+test_models 164 例全绿)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 11:22:34 +08:00 |
|
liuwenxin
|
ca88ee7a0b
|
test(base): 基础数据管理模块集成用例(48 例)与审计盲区修复
- 覆盖:401/引用校验/删除保护/子表全量替换/类别与组合唯一/归属变更留痕/审计双记录
- 缺陷修复:personnel/product/customer 三 service 的前置校验移入审计上下文,
校验失败(400)同样留痕(成功与失败都记的既定原则)
- conftest 兜底清理扩展到 M2 五表(留痕无外键,按 operator_name + 前缀双轨清理)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 11:22:34 +08:00 |
|
liuwenxin
|
15de81dd2c
|
feat(base): 挂载基础数据路由 /api/v1/base/*
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 10:35:04 +08:00 |
|
liuwenxin
|
b8ba9e4626
|
feat(base): 客户管理接口与归属变更留痕(不回溯历史)
- 归属变更同事务更新主表+插留痕;归属调整唯一入口防旁路
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 10:35:04 +08:00 |
|
liuwenxin
|
7eeed85c96
|
feat(base): 产品管理接口(类别校验/组合唯一/启停)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 10:35:03 +08:00 |
|
liuwenxin
|
a694570dd1
|
feat(base): 人员管理接口(岗位/工资标准/团队/辐射区域/拓展计划)
- 删除保护:被团队成员/客户归属引用禁删,引导改离职
- 子表全量替换采用 clear 后立即 flush 防御写法
- 工资标准字符串进出,超两位小数拒绝而非静默舍入
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 10:35:02 +08:00 |
|
liuwenxin
|
f22d14e439
|
feat(base): 新增基础数据六表及 V4 迁移(人员/辐射区域/拓展计划/产品/客户/归属留痕)
- TPlusSyncMixin 统一 T+ 同步预留四列(可空+普通索引,唯一键待 IT 定键后升级)
- 留痕表实体 ID 无外键冗余固化,删除保护由服务层承担
- init-dev.sql 同步六表 DDL,alembic_version 标记更新
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 09:49:05 +08:00 |
|
liuwenxin
|
4552f2e703
|
docs(plan): M2 基础数据与业务数据实施计划(表结构评审定稿)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 09:26:39 +08:00 |
|
liuwenxin
|
e568ebde61
|
docs(requirements): 需求裁决对照表 v2、功能模块清单与 M1 设计产物入库(移除被 v2 取代的旧清单)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 09:26:21 +08:00 |
|
liuwenxin
|
8668e58c30
|
test(system): 补交岗位角色与参数管理集成用例(M1 遗漏入库)
Co-Authored-By: Claude Code <noreply@anthropic.com>
|
2026-10-13 09:26:08 +08:00 |
|