feat(ar): 应收账龄看板 + 逾期预警 overdue 接入(阶段A)
T1 逾期预警(§6 财务 2026-10-20 23:23 口径):
- alert_rules 支持 rule_type=ar_overdue;阈值/责任人/排除名单全量走 params(代码零业务常量)
- 90 天占比红线 key 保留但默认 null 停用(不回落 0.25);黄线 15%-25% 保留
- 新增逐户红线「>30 天且 >5 万」+ 聚合红线「150+ 占比环比上升 = 结构恶化」
- assignee 派生:manual → 近 3 个月主业务员(zxt_masterbill emp_id → employee_dict.u_Name,
缺表时降级同库摘要制单人姓名)→ 部门负责人(渠道 118 / 商务 114 / 直属酒窖 117);
两路皆失败 ⇒ 该户不生成、进 skipped[],禁落空 assignee
- POST /run-ar-overdue(dry_run 默认 true)+ check-all 分支;只 INSERT 同一 message 幂等
T2 账龄看板:
- GET /api/cma/ar-aging/{meta,trend,overview,customers,customers/export};每条查询带 entity_id
- 三口径分列、caliber=all → 400;缺期 has_data=false 且金额 null(不补 0)
- ArAging.vue:口径后缀/截止期徽标/趋势断点/六档堆叠/逐户可排序导出
单测 21 项全通过(SQLite 夹具,不连生产库);vite build 通过。
阶段A 零生产写:未 push、未部署、未 --apply、未 dry_run=false。
This commit is contained in:
committed by
Hermes CI Fix
parent
790be2d6b1
commit
71867c4c7a
@@ -546,4 +546,19 @@ export const treasuryApi = {
|
||||
listHits: (params?: any) => api.get('/treasury/control-hits', { params }),
|
||||
}
|
||||
|
||||
// ── 应收账龄看板(T2 2026-10-20:逐户·六档·三口径禁合计,缺期不补 0)──
|
||||
export const arAgingApi = {
|
||||
meta: (params?: any) => api.get('/ar-aging/meta', { params }),
|
||||
trend: (params?: any) => api.get('/ar-aging/trend', { params }),
|
||||
overview: (params?: any) => api.get('/ar-aging/overview', { params }),
|
||||
customers: (params?: any) => api.get('/ar-aging/customers', { params }),
|
||||
exportUrl: (params: { period?: string; caliber?: string; overdue_only?: boolean }) => {
|
||||
const q = new URLSearchParams()
|
||||
if (params.period) q.set('period', params.period)
|
||||
if (params.caliber) q.set('caliber', params.caliber)
|
||||
if (params.overdue_only) q.set('overdue_only', 'true')
|
||||
return `/api/cma/ar-aging/customers/export?${q.toString()}`
|
||||
},
|
||||
}
|
||||
|
||||
export default api
|
||||
|
||||
Reference in New Issue
Block a user