跳转至

报价服务设计(Quotation Service Design - QSV-D)

文档编号:DOC-P31-D / QSV-D 版本:V1.2 维护人:BO / DT 关联文档README.mdQMDRQD-B §一 QSV需求RQD-O MFR/QTE需求MDS 主数据服务CPT L6 安装阶段BAS 业务架构说明

V1.2 升级摘要(V8.0 阶段二-3 DDD 重构): - 新增 §三 DDD 战略设计(子域定位 + 限界上下文 + 上下文映射 + 防腐层 ACL) - 新增 §四 DDD 战术设计(聚合根 Quote + 3 实体 + 8 值对象 + 3 领域服务 + 6 领域事件 + 2 仓储 + 2 工厂 + 报价状态机) - 原 §三~§五 章节编号顺延为 §五~§七(内容不变) - 依据 BAS V1.0 §六 DDD 实施规范


一、定位

报价服务是平台的核心服务之一,为客户提供多维动态报价能力,是前期统一派单模式的定价基础。本子目录存放报价模型的设计文档、参数体系与校准记录。

报价服务与 CPT 协同运作:报价服务为客户项目提供定价,跟踪表服务采集的实际数据持续反哺报价参数校准。

报价模型基于 ../../ref/DOC-P30香港上门安装服务平台市场调研与报价模型设计报告.md 第七章设计,独立维护以便随运营数据持续校准。


二、设计原则

  1. 透明可解释:报价明细逐项展示,逻辑可审计。
  2. 动态精准:整合楼宇、区域、时段、复杂度等多维参数,避免"一刀切"。
  3. 规则优先:冷启动阶段以规则引擎为主;数据积累后引入机器学习优化。
  4. 持续校准:基于 CPT 采集的实际成交与服务时长数据,定期调整系数。
  5. 灵活可控(V1.1 新增):对无法提前确定的现场环境或服务需求,以「灵活部分」独立区块列出,提供单价+计价规则+最高限价,保障客户价格上限。

三、DDD 战略设计

V1.2 新增(V8.0 阶段二-3):依据 BAS V1.0 §六 DDD 实施规范,对 QSV 服务进行 DDD 战略设计。

3.1 子域定位

QSV 报价属于核心子域,是平台"动态报价引擎"的落地。

子域 类型 现阶段定位 成熟期定位
报价决策 🔴 核心 规则引擎驱动,多维参数报价 同 + ML 优化 + C2C 撮合
报价模型 🟢 支撑 8 大参数 + 32 因子 + 封顶价 同 + 季度自动校准

3.2 限界上下文

graph LR
    subgraph "QSV 限界上下文"
        BC1["报价决策 BC<br/>(核心)"]
        BC2["报价模型 BC<br/>(支撑)"]
    end
    subgraph "外部上下文"
        MDS_BC["MDS 主数据 BC"]
        CPT_BC["CPT 客户项目跟踪 BC"]
        OPS_BC["OPS 运营 BC"]
        MFR_BC["MFR 生产商 BC"]
    end

    MDS_BC -.->|"OHS:品类费率/楼宇系数/师傅等级"| BC1
    BC1 -.->|"ACL:费率查询"| BC2
    CPT_BC -.->|"同步调用:QuoteRequest/Response"| BC1
    BC1 -.->|"事件发布:QuoteGenerated"| CPT_BC
    BC1 -.->|"事件发布:QuoteCalibrated"| MDS_BC
    MFR_BC -.->|"OHS:MFR 开放报价 API"| BC1
    CPT_BC -.->|"事件订阅:ActualData* 反哺"| BC2
    OPS_BC -.->|"事件订阅:QuoteRejected 流失分析"| BC1

3.3 上下文映射模式

外部 BC 映射模式 交互方式 说明
MDS BC 开放主机服务(OHS) QSV 查询 SCL/BPL/WPL 费率与系数 通过 ACL 转换为 PricingFactor VO
CPT BC 同步调用(CS) L3 报价请求/响应;L6-L8 反哺 QSV 遵从 CPT 的 QuoteRequest API
OPS BC 事件订阅(CS) QuoteRejected → OPS 流失分析 遵从 QSV 事件 schema
MFR BC 开放主机服务(OHS) MFR 开放报价 API MFR 调用 QSV 生成报价
QMD 报价模型 共享内核(SK) 报价参数表共享 8 大参数 + 32 因子

3.4 防腐层(ACL)设计

外部模型 内部值对象 转换规则
MDS 品类档案 CatalogFactor VO catalogId + baseFee + skillLevel
MDS 楼宇档案 BuildingFactor VO buildingId + type + floorMultiplier + elevatorFlag
MDS 师傅档案 WorkerFactor VO workerId + level + levelMultiplier
CPT 报价请求 QuoteRequest VO projectId + customerId + requirement + timestamp
MFR 开放报价请求 OpenQuoteRequest VO mfrId + productCatalog + batchFlag

四、DDD 战术设计

V1.2 新增:定义 QSV 聚合根、实体、值对象、领域服务、领域事件与仓储。

4.1 聚合根:Quote(报价单)

属性 说明
唯一标识 quoteId(全局唯一,格式 QSV-YYYYMMDD-NNN
不变量 ① 报价总额 = Σ(QuoteItem 金额) + 灵活部分上限 ② 封顶价 ≤ 系统设定上限 ③ 报价版本严格递增 ④ 灵活部分必须声明最高限价
边界 一个报价单的所有报价项、灵活部分、版本记录
生命周期 草稿 → 生成 → 接受/拒绝 → 归档(反哺)

聚合内组成: - 1 × Quote(聚合根) - N × QuoteItem(报价项实体) - 0..N × FlexiblePart(灵活部分实体) - 1..N × QuoteVersion(报价版本实体)

4.2 实体清单

实体 唯一标识 职责 关键字段
QuoteItem itemId(quoteId + seq) 单个报价项 name, baseFee, factors, subtotal
FlexiblePart flexId 灵活部分费用项 name, unitPrice, pricingRule, maxLimit, settlementBasis
QuoteVersion versionId 报价版本(支持 A/B 测试与议价) version, totalAmount, changes, reason

4.3 值对象清单

值对象 字段 用途
QuoteRequest projectId, customerId, requirement, timestamp 报价请求
QuoteBreakdown items[], flexibleParts[], totalAmount, capPrice 报价分解
PriceCap capAmount, category, reason 封顶价
PricingFactor factorType(8 大类), weight, value 定价因子
FactorWeight factorId, weight, version, lastCalibratedAt 因子权重(含校准记录)
CatalogFactor catalogId, baseFee, skillLevel 品类因子
BuildingFactor buildingId, type, floorMultiplier, elevatorFlag 楼宇因子
WorkerFactor workerId, level, levelMultiplier 师傅因子

4.4 领域服务

领域服务 职责 关键方法 算法
PricingEngine 报价生成 generateQuote(request) recalculate(quote) total = Σ(baseFee × Π(factors)) + flexibleParts.maxLimit
CapPriceService 封顶价决策 checkCap(quote) applyCap(quote) 封顶价 ≤ 品类上限 × 楼宇系数
QuoteCalibrationService 报价校准 calibrateFactor(factorId, actualData) recordCalibration(calibration) 基于 CPT 反哺数据季度调整

PricingEngine 报价算法伪代码

def generate_quote(request):
    # 1. 从 MDS 获取品类基础费率
    catalog = mds_service.get_catalog(request.catalogId)
    base_fee = catalog.baseFee

    # 2. 计算楼宇系数
    building = mds_service.get_building(request.buildingId)
    floor_multiplier = building.floorMultiplier  # 如唐楼5楼=1.8

    # 3. 计算师傅等级系数
    worker = mds_service.get_worker(request.workerId)
    level_multiplier = worker.levelMultiplier  # 金牌1.2/认证1.0/普通0.9

    # 4. 时段系数(高峰1.2/平峰1.0/低谷0.8)
    time_factor = calculate_time_factor(request.timeslot)

    # 5. 复杂度系数(师傅现场评级 vs 系统预判)
    complexity_factor = estimate_complexity(request)

    # 6. 供需系数(区域热度)
    supply_demand_factor = get_supply_demand_factor(request.area)

    # 7. 计算确定部分
    determined_amount = base_fee * floor_multiplier * level_multiplier * time_factor * complexity_factor * supply_demand_factor

    # 8. 计算灵活部分(上限)
    flexible_parts = get_flexible_parts(request.catalogId, request.scene)
    flexible_max = sum(part.maxLimit for part in flexible_parts)

    # 9. 封顶价校验
    total = determined_amount + flexible_max
    cap_price = CapPriceService.check_cap(quote=total, category=catalog.category)
    if total > cap_price.capAmount:
        total = cap_price.capAmount
        trigger_cap_warning()

    return Quote(
        quoteId=generate_id(),
        breakdown=QuoteBreakdown(determined=detected_amount, flexible=flexible_parts, total=total),
        capPrice=cap_price
    )

4.5 领域事件清单

事件名 发布时机 载荷 订阅方
QuoteGenerated 报价生成完成 quoteId, projectId, totalAmount, breakdown CPT(L3 接收报价)
QuoteAccepted 客户接受报价 quoteId, projectId, acceptedAt CPT(L4 签约)
QuoteRejected 客户拒绝报价 quoteId, projectId, reason OPS(流失分析)
QuoteCalibrated 报价参数校准 factorId, oldWeight, newWeight, reason MDS(参数同步)
CapPriceTriggered 封顶价触发 quoteId, originalAmount, capAmount OPR(运营审计)
FlexiblePartConfirmed 灵活部分确认 quoteId, flexId, actualAmount CPT(L6 增项记录)

4.6 仓储与工厂

仓储 聚合 职责
QuoteRepository Quote 报价单持久化(含报价项、灵活部分、版本)
PricingFactorRepository PricingFactor 定价因子与权重查询(只读)
工厂 职责
QuoteFactory 从 QuoteRequest 创建报价单,初始化报价项与灵活部分
FlexiblePartFactory 从品类+场景生成灵活部分模板

4.7 报价状态机(聚合根不变量)

stateDiagram-v2
    [*] --> Draft: 创建草稿
    Draft --> Generated: PricingEngine 生成
    Generated --> Accepted: 客户接受
    Generated --> Rejected: 客户拒绝
    Generated --> Revised: 议价/调整
    Revised --> Accepted: 客户接受
    Revised --> Rejected: 客户拒绝
    Accepted --> Archived: 项目归档(反哺)
    Rejected --> Archived: 流失池归档
    Archived --> [*]

    Generated --> CapTriggered: 封顶价触发
    CapTriggered --> Revised: 重新议价

五、服务边界(V1.1 新增)

5.1 报价服务覆盖范围

报价场景 触发方 输入 输出 对应需求
CST 端询价报价 CST 客户 品类+地址+楼宇+时段 报价单(确定部分 + 灵活部分) QSV-01~08
MFR 端组合报价查询 MFR 门户 批量订单参数 组合报价清单 MFR-06
MFR 开放报价(V1.1 新增) MFR 员工个人 产品类型+规格型号+客户地址+安装需求 详细报价单 + PDF 下载 QSV-10 / MFR-11
报价参数校准 OPR 后台 CPT 实际数据 系数调整建议 QSV-08 / CPT-06

5.2 报价单结构(V1.1 新增灵活部分)

报价单分为两大区块:

flowchart TD
    QUOTE["报价单"]
    QUOTE --> FIXED["确定部分<br/>(可提前计算的费用)"]
    QUOTE --> FLEX["灵活部分<br/>(无法提前确定的费用)"]

    FIXED --> FIX1["安装费<br/>(基础人工费×多维系数+附加费)"]
    FIXED --> FIX2["物流费<br/>(本地/跨境配送费)"]
    FIXED --> FIX3["平台管理费"]

    FLEX --> FLX1["客户配合等待费<br/>单价: HKD 50/15min<br/>计价规则: 超预约时间15min起计<br/>最高限价: HKD 200"]
    FLEX --> FLX2["现场环境附加<br/>单价: HKD 50-200/项<br/>计价规则: 按实际勘察计<br/>最高限价: HKD 500"]
    FLEX --> FLX3["拆旧不确定费<br/>单价: HKD 50-150/件<br/>计价规则: 按实际拆旧难度<br/>最高限价: HKD 600"]
    FLEX --> FLX4["隐蔽工程不确定费<br/>单价: HKD 100-300/项<br/>计价规则: 按实际工程量<br/>最高限价: HKD 800"]

5.3 灵活部分设计规范(QSV-09 / QTE-08)

每项灵活费用必须包含以下 5 个字段:

字段 说明 示例
费用名称 简明描述费用项 客户配合等待费
单价 明确的计价单价 HKD 50 / 15 分钟
计价规则 触发条件与计价方式说明 超预约时间 15 分钟起计,每 15 分钟一档,不足 15 分钟按 15 分钟计
最高限价 该项费用的封顶金额 HKD 200(即最多计 4 档)
结算依据 实际发生时的凭证要求 CPT L6 阶段师傅记录等待起止时间 + 客户确认

5.4 MFR 开放报价服务边界(QSV-10 / MFR-11 / QTE-09)

维度 说明
注册方式 MFR 员工以个人名义注册(手机号/邮箱),不强制绑定企业
绑定 MFR 注册后可选绑定所属 MFR 企业(关联 PPL 档案 PPL-001),也可不绑定
输入字段 产品类型(8 大品类)+ 规格型号 + 客户地址(区域+楼宇类型)+ 安装服务需求(自由文本+结构化选项)
输出 详细报价单(确定部分 + 灵活部分)+ 可下载 PDF
报价效力 开放报价为「参考报价」,不直接生成订单;CST 确认后转为正式订单(CPT L1 线索来源)
品牌展示 绑定 MFR → 展示 MFR 信任徽章 + Logo;未绑定 → 仅展示平台报价
费率来源 与 CST 端询价共享同一 QMD 报价模型 + MDS 主数据,确保报价一致性

六、对接方案

6.1 与 MDS 主数据服务对接

主数据 来源 用途
品类费率/产品参数 SCL 安装费计算基础
楼宇系数/楼层附加 BPL 楼宇系数计算
师傅等级系数 WPL 师傅溢价计算
物流费率 DLV 物流费计算
生产商评级/徽章 PPL MFR 开放报价品牌展示 + 溢价触发

6.2 与 CPT 客户跟踪服务对接

对接点 方向 说明
报价 → CPT L1 线索 开放报价确认后转为 CPT L1 线索
CPT L6 → 灵活部分结算 CPT L6 安装阶段采集灵活部分实际发生证据
CPT L8 → 参数校准 CPT L8 回访 NPS + 实际工时反哺 QMD 系数

6.3 与 OPS 运营服务对接

对接点 方向 说明
灵活部分限价配置 OPR 后台配置各项灵活费用单价与最高限价
开放报价统计 OPS-D 运营数据看板统计 MFR 开放报价使用量

七、后续规划

  • 楼宇数据库设计(覆盖港岛/九龙核心区域)
  • 品类基础费率表细化(8 大品类 32 细分类目)
  • 报价引擎技术方案(见 TND
  • 价格 A/B 测试机制
  • 系数校准流程与周期
  • 灵活部分费用项清单细化(V1.1 新增:按品类+场景细化灵活费用项)
  • MFR 开放报价 PDF 模板设计(V1.1 新增:含品牌+徽章+报价明细+灵活部分)
  • 开放报价转订单流程(V1.1 新增:CST 确认 → CPT L1 线索 → 正式订单)

修订记录

版本 日期 修订人 修订内容
V1.0 2026-08-04 DT 从 README.md 拆分独立
V1.1 2026-08-21 DT 新增 QSV-09 灵活部分 + QSV-10 MFR 开放报价:① §二 设计原则新增第 5 条「灵活可控」;② §三 服务边界新增 §3.1 报价场景表(含 MFR 开放报价)+ §3.2 报价单结构(确定部分+灵活部分 Mermaid 图)+ §3.3 灵活部分设计规范(5 字段:费用名称/单价/计价规则/最高限价/结算依据)+ §3.4 MFR 开放报价服务边界(注册/绑定/输入/输出/品牌展示/费率来源);③ §四 对接方案新增 MDS/CPT/OPS 三方对接表;④ §五 后续规划新增 3 项待办
V1.2 2026-08-21 DT V8.0 阶段二-3 DDD 重构:① 新增 §三 DDD 战略设计(§3.1 子域定位 + §3.2 限界上下文 Mermaid 图 + §3.3 上下文映射模式表 + §3.4 防腐层 ACL 设计表);② 新增 §四 DDD 战术设计(§4.1 聚合根 Quote + §4.2 实体清单 3 实体 + §4.3 值对象清单 8 VO + §4.4 领域服务 3 服务含 PricingEngine 算法伪代码 + §4.5 领域事件清单 6 事件 + §4.6 仓储与工厂 2 仓储 2 工厂 + §4.7 报价状态机 Mermaid);③ 原 §三~§五 章节编号顺延为 §五~§七(内容不变);④ 依据 BAS V1.0 §六 DDD 实施规范