← 回到蓝鲸 CRM 介绍

🍶 销售目标管理系统

把年度预算从董事会拆到每个销售桌面,再用合同签约的数据把进度自动回写上来。一杯酒,看到整条飞轮转得多快。

BOTTLE CHART

FY2026 · Larry · 年度进度 62%

应至 52% 实际 62% 62% 12月 1月 2月 3月 4月 5月 6月 7月 8月 9月 10月 11月
31
已签约
50
年度目标
62%
完成率

↑ 同款 SVG 出自 frontend-src/components/BottleChart.tsx

年度完成

31/50

62% · 同期超进度 +4%

本月进度

5/10

含滚入 +2,剩余 5 单

本周进度

2/3

W3 · 还差 1

滚入预警

+2

上月未达,已自动滚入

SABC 价值构成 · 年化 ≈ 4,100 万

S
2 单 · 1,000 万
A
6 单 · 1,200 万
B
15 单 · 1,500 万
C
8 单 · 400 万

设计要点

🎯 自上而下拆解

业务负责人录入年度总量 → 销售负责人 → 销售主管 → 业务 → 个人,4 级审批链确认。每级可退回带"反提案对照表",上级看到差异自己决定。

🌊 月度自动滚动

每月 1 日凌晨 00:05 跑 Scheduler:上月未达数自动 carry_over 到下月,无需审批。总量守恒,年初锁定后不可加码。

🔒 快照锁定

当月审批确认后,plan_sign_count 写入 locked_snapshot,字段变只读。要改必须走月度调整流,留全链路对照表 + 原因。

📊 SABC 价值映射

不只看签约数,要看价值。客户 level 自动映射年化:S=500万 / A=200万 / B=100万 / C=50万。瓶子图按级别分层堆叠。

合同签约自动回写

ContractService 在状态变 signed 时触发 TargetProgressUpdater:当月 actual+1、单位数累加、客户分级计入 actual_by_level、当周 actual+1,全在一个事务里。

🤝 空节点处理

某级无审批人时自动跳过(skipped_no_actor 向上收拢);上级也可主动赋能下级(delegated),赋能链路留痕。

审批链(4 级,自上而下下发)

L4 · 发起
业务负责人
project_owner
L3 · 确认
销售负责人
sales_director
L2 · 确认
销售主管
sales_manager
L1 · 确认
业务
biz_manager
L0 · 个人
销售员
填周计划即生效

退回必须提交反提案对照表(指标对比 + 必填原因),上级看到差异后选择"接受建议"或"坚持原案"。 退回不会越级 —— 只回到上一节点,避免决策权下放失控。

月度滚动机制

每月 1 日 00:05 · TargetRolloverScheduler actual = COUNT(contracts WHERE signed_date 在该月 AND sales_owner = owner) shortfall = plan_sign_count + carry_over_count - actual if shortfall > 0: 下月 carry_over_count += shortfall ← 自动,无需审批 下月 plan_sign_count 不变 if shortfall ≤ 0(超额): 下月 carry_over_count = 0 超额留在 actual 显示 // 年初锁定的总量 = SUM(plan_sign_count) + 历史 carry_over 净值 // 不一致 → 写 operation_log 告警

日报联动

DailyReportService 在创建或获取日报时注入 target_snapshot, 日报详情页顶部自动嵌入只读卡片 —— 销售每天打开日报就看见目标进度,不用切换页面。

本月目标 8+2滚入=10 已完成 5 剩余 5 本周目标 3 已完成 2 剩余 1 年度进度 31/50 ██████████░░░░ 62% SABC: S×2 · A×6 · B×15 · C×8 ≈ 4,100 万

数据模型(4 张表)

sales_targets

年度总目标。一人一财年一条,含 target_by_level (JSONB) 和 status 状态机(drafting → pending_L3 → ... → confirmed)。

target_months

月度分解。每个 sales_target 12 行(财月 1 = 12 月)。含 plan / carry_over / actual / actual_by_level,以及 locked_snapshot 保存确认时的对照基线。

target_weeks

周度计划。个人自拆,4~5 行/月。各周 plan_sign_count 之和必须 ≥ 月度任务才能提交。

target_confirmations

审批流水。每次 confirm / reject_with_proposal / skipped_no_actor / delegated 一条,含 original_values + proposed_values + reason,完整审计链。

部署位置

👤 个人视图

销售首页顶部全幅瓶子图 + 右侧 KPI 面板。

👥 团队视图

销售主管 / 销售负责人页面:多瓶并排,点击任一瓶下钻到团队成员。

📈 跨团队

项目负责人页面:汇总大瓶(按整个业务线累加)或多瓶并排(按团队拆)。