# 01 商机域词汇表与模块边界 Type: grilling Status: resolved ## Decisions - **商机 = 独立聚合(写法 B)**:商机的定义是「销售推进中、待转项目的销售任务」;`source_lead_id` 是可空的来源字段/快照,不参与身份。线索转来的与直接创建的商机在模型里完全平权,状态机、公海、四视图不按来源切片。 - **下游边界 = 写法 ① 承认「已转项目」终态**:商机词汇表里有「已转项目」终态(对称线索的「已转商机」),锁死、不可回退。“转项目端口”名字先占位,具体契约、项目查重规则 out of scope,留给 A5 项目模块那张图定义。 - **横向边界(客户)= 写法 ① 引用+快照占位**:词汇表现在就收录「关联客户」术语(商机↔客户/联系人多对多),本域只存 `customer_id` 引用 + 快照字段;客户实体本身归 A4 客户模块,A4 未建前引用留空、快照前端手填。 - **两条正交轴命名**:轴 1(归属流转)= 中文「状态」/ `oppStatus` / `OpportunityStatus`;轴 2(业务阶段)= 中文「阶段」/ `oppStage` / `OpportunityStage`。字段名/类名统一用 `opp` 前缀;模块名与表名保持全拼 `crm-opportunity` / `opportunity_*`。 - **模块依赖方向 = `crm-opportunity → crm-rule → (crm-auth/crm-dict/crm-file)`(与线索同构)**。商机规则(原型 A7-3-2 六类:阶段模板/方案卡模板/方案推送规则/项目查重规则/商机公海与提醒规则/商机相关字典)**入 `crm-rule`(写法 A)**:`crm-rule` 从「线索规则」升级为「通用业务规则域」,内部按子域并列(线索规则子域 `lead_pool` 等 / 商机规则子域 `opportunity_*`),**对上层业务域零反向依赖**(既不知道 lead、也不知道 opportunity,靠 code/id 弱引用)。后续需改写 `crm-rule/CONTEXT.md` 标题与开篇(现文字仍写“线索规则 / 公海池不知道线索存在”,与本决策冲突)。 - **持有与协作角色模型(产品已确认修正)**:**领取人**(`owner_user_id`)= 归属 + 可见性两层含义;**团队成员** = 行级授权白名单(绕开 DataScope 部门天花板的可见性)+ 每人配**项目角色**与**权限**(原型 A3-1-1-1-8:销售负责人/方案工程师/招标专员/现场工程师 等,权限如读写/只读/可写跟进/可推进节点)。 - **按钮可见即可点,权限全由权限点配置决定,与“是否领取人”无关(产品明确)**。→ 废除旧版“归属级动作必须是领取人”的 guard;不再分 A/B 档。此规则适用于**详情页顶部操作区**的动作(暂缓/取消暂缓/关闭/重启/抛公海)。 - **无独立“转让”动作;负责人变更 = 团队成员页的【移交】,移交只换负责人(产品明确)**。关键:移交**不在详情页顶部操作区,而在团队成员页 A3-1-1-1-8 内**。因此“转让只有负责人能转”**不是一道额外 guard,而是移交入口就在团队成员管理里——而团队管理权实际落在负责人手上(原型:“当前用户只能维护其权限范围内的团队成员及权限设置”)。所以移交权限随团队成员页的管理权走,**与上一条“可见即可点”不矛盾(不同位置的不同操作)**。⚠:团队成员页 A3-1-1-1-8 现版正文只有 添加/改权限/改角色/移除,**未见“移交”按钮**(待核实,见下方 To-verify)。 - **抛公海只清空负责人,不动其他团队成员(产品明确,纠正旧决策)**。→ 废除旧版“归属换人时团队成员清空”。 - **流转动作全集(产品补充后)**: - **详情页顶部操作区**:暂缓商机(A3-1-1-2-6)/ 取消暂缓 / 抛公海(A3-1-1-2-7)/ 关闭商机(A3-1-1-2-9)/ 重启商机(重新开启)/ 转项目——均由权限点控制可见性,可见即可点,与负责人无关。 - **团队成员页(A3-1-1-1-8)**:移交(换负责人)——权限随团队成员页的管理权,实际落在负责人手上。 - 「中止」不存在。 - **流转动作以原型为准(活数据 V1.0-20260815 核实,纠偏)**:A3-1-1-2 相关操作文件夹的状态相关动作为 **暂缓商机(A3-1-1-2-6)/ 抛公海(A3-1-1-2-7)/ 关闭商机(A3-1-1-2-9)** 三个(外加公海侧 A3-3-1-1-2 领取 / A3-3-1-1-4 分配 / A3-3-1-1-3 关注)。**「中止」不存在**(charting 对线索脑补的误字,地图/票 04 需把「暂缓/中止/关闭」改成「暂缓/抛公海/关闭」)。事实细节见 `research-close-pause-actions.md`: - **关闭商机**:选关闭原因(字典)+ 补充说明(选「其他」必填)+ 确认勾选框 → 状态「已关闭」,保留关闭前状态/节点(只读锁定);重开须**管理权限**用户 + 填重开原因。已关闭不可重复关闭。(注:原型写“管理权限”,但产品后来统一为“重启商机按钮由权限点控制、与负责人无关”,以产品口径为准) - **暂缓商机**:选暂缓原因(字典)+ 预计重启日期(必填,不早于今天)+ 补充说明 → 状态「暂缓中」,**保留负责人+团队、不进公海**,保留暂缓前节点;到期不自动恢复,负责人人工选 恢复推进/继续暂缓/关闭;「恢复推进」由**有权限用户**执行(原型未要求必须管理员)。 - 两者原型明确并列且互斥语义:短期有价值→暂缓,明确无价值→关闭。 - **取消暂缓 / 重启商机(产品补充)**:暂缓中可「取消暂缓」恢复推进;已关闭可「重启商机(重新开启)」。两者按钮可见性由权限点配置,可见即可点,与负责人无关。 ## Product-confirmed (产品已确认,原两条 TODO 已拍板) - **商机来源 vs 来源线索 = 两回事(产品已确认)**:**商机来源**(`oppSource` 字典码,必填,渠道归因,原型 A3-1-1-2-1)与 **来源线索**(`source_lead_id` 可空 FK,线索转入血缘)是两个独立字段,都保留。**从线索转来的商机,`oppSource` 默认置为「线索转入」(产品明确)**;直接新建的由用户选。「直接创建」= `source_lead_id IS NULL`,不单列术语。 ## To-verify (下一会话拉原型核实) - **团队成员页「移交」按钮**:产品称负责人变更靠团队成员页的【移交】,但原型 A3-1-1-1-8 正文只有 添加/改权限/改角色/移除,**未见“移交”字样**。可能原型未画出或在另一交互里;以产品口径为准先记下,建表时保留“移交=只换 owner_user_id”语义。 - **取消暂缓 / 重启商机独立原型页**:产品提及这两个动作,原型 A3 相关操作文件夹无独立页(推测为详情页按钮/弹窗),建表/状态机时按产品口径实现。 钉死 `crm-opportunity` 域的 ubiquitous language 与模块边界,产出 `crm-opportunity/CONTEXT.md` 骨架(对称 `crm-lead/CONTEXT.md`)。 需要拍板的核心术语(含 _Avoid_ 反义词): - **商机(Opportunity)**:域的核心聚合根。与线索、客户、项目的边界("从线索领取后 → 转项目前"的销售任务)。 - **归属流转状态 vs 业务阶段**:两条正交轴各自的中文/英文命名(避免混用"状态/阶段")。 - **领取人 / 创建人 / 团队成员**:商机的持有与协作角色(对称线索"领取人/创建人",但商机多了团队成员)。 - **商机公海 / 抛公海 / 暂缓 / 关闭 / 转项目**:流转动作的精确定义与边界(原型三动作:暂缓/抛公海/关闭,无「中止」)。 - **来源线索 / 直接创建**:商机两个入口(lead 转入 vs 销售直接创建,跳过线索)。 产出:`crm-opportunity/CONTEXT.md`(Language 段)+ 在 `CONTEXT-MAP.md` 增行。定模块依赖方向(初判 `crm-opportunity → crm-rule → (crm-auth/crm-dict/crm-file)`,与线索同构)。 ## Answer 已产出 `crm-opportunity/CONTEXT.md`(Language 段 20 条术语,对称 `crm-lead/CONTEXT.md` 风格 + `_Avoid_`),并在 `CONTEXT-MAP.md` 新增 `crm-opportunity` 行、把 `crm-rule` 描述改为“业务规则域(线索公海池 + 商机规则子域)”。 **已拍板决策(见 Decisions 段)**: 1. 商机 = 独立聚合,`source_lead_id` 可空不参与身份;线索转入/直接创建平权。 2. 下游 = 承认「已转项目」终态,转项目端口占位,项目查重归 A5。 3. 客户 = 引用+快照占位(`customer_id` + 快照),实体归 A4。 4. 两轴命名:状态 `oppStatus` / 阶段 `oppStage`,字段类名 `opp` 前缀、表/模块全拼。 5. 依赖方向 `crm-opportunity → crm-rule → (auth/dict/file)`;商机规则入 crm-rule(升级为通用业务规则域,对上层零反依赖)。 6. 角色模型:领取人=归属+可见性;团队成员=行级授权白名单+项目角色/权限;按钮可见即可点、与领取人无关(废除旧 guard)。 7. 流转动作 = 暂缓/取消暂缓/抛公海/关闭/重启 + 移交(团队成员页,只换负责人)+ 转项目;**「中止」不存在**;抛公海只清领取人不动团队。 8. 商机来源(`oppSource` 渠道) 与 来源线索(`source_lead_id` 血缘) 两回事都保留;线索转入时 `oppSource` 默认「线索转入」。 **遗留 To-verify(不阻塞建模,下会话拉原型/问产品)**:团队成员页「移交」按钮原型未见;取消暂缓/重启商机无独立原型页。