DaoSales 培训手册

销售

面向销售人员:报价、订单、发货、开票、回款

今天要做什么

按节拍跑单:每天处理新询盘与回款,每周盘已发未回报价与在产订单,每月核账龄与丢单复盘。

每日

  1. 晨会前打开 CRM 任务看板,处理「今日待办」+「已逾期」的跟进任务。
  2. 扫一眼线索看板,把昨日新进的线索初步联系后分类(继续跟 / 转客户 / 放弃)。
  3. 商机看板按阶段拉一遍,更新下一步动作和下次联系日期。
  4. 打开报价列表,跟进昨日发出未回复的报价;过有效期者改价或转「已过期」。
  5. 处理当日新询盘:状态为「新建」的询盘当日生成报价草稿(可直接由询盘一步转入)。
  6. 客户确认报价后立即转订单,并按规则送审。
  7. 收到银行到账凭证后录入收款(定金 / 进度款 / 尾款 三段),同步触发企微通知。
  8. 生产完成发货:建发货单 → 提交仓库 → 客户签收。
  9. 索要发票的客户:外贸开商业发票,国内走增值税申请。
日常入口:/dashboard/crm/tasks/dashboard/crm/leads/dashboard/crm/opportunities/dashboard/sales/quotes?status=sent/dashboard/inquiries/dashboard/sales/orders

每周

  • 周一盘报价:状态为「已发送」且 valid_until ≤ 7 天的逐个电话确认。
  • 周一盘商机:「方案确认」/「谈判」阶段停超过 14 天的约访或明确丢单。
  • 周五盘订单:在产 / 待发货状态的订单核对里程碑日期。
  • 周五盘客户:健康度掉到红色的老客户安排回访。

每月

  • 月初核对发票账龄:balance_due > 0 超期触发催款或转贷项。
  • 月底看「丢单复盘」汇总「已拒 / 已过期」原因,商机丢单原因归类。
  • 月底看商机漏斗转化率:线索 → 商机 → 报价 → 订单 各阶段通过率。
sales/nav-overview.jpg
sales/crm-overview.jpg

权限红线(先看这 4 条)

  • 不能直接建订单——必须从报价转单(防数据裸写)。
  • 已转单的报价不能改;已签收的发货单不能删。
  • 超折扣权限必须走审批——没有「跳过审批」开关。
  • 采购 / 会计 / 人事模块只读或不可见。

Quickstart — 日常核心任务

2.1 线索转客户与商机

市场端、展会、企微、外部表单送进来的新潜客(「线索」)确认真实意向后,转成客户主档 + 商机,把漏斗前段的数据沉淀成可跟进、可报价的对象。

  1. 左侧导航「CRM → 线索」进看板。右上角「新建线索」补录展会 / 企微来的潜客(不必每条手填,扫名片按钮支持图片识别)。(见图 ①)
  2. 对未联系的线索先电话或企微沟通;确认意向后点卡片进入线索详情。
  3. 右上角点「转为客户」。弹窗可同时:① 生成客户主档 ② 生成一条商机 ③ 把线索沟通记录迁入客户 360 时间线。(见图 ④)
  4. 客户主档里补全税号 / 币种 / 付款条款 / 收货地址 / 主联系人——这些决定后续报价抬头和发票能否通过。
  5. 返回商机看板检查新商机是否落在正确阶段(默认「初步沟通」),把预估金额、成交概率、预计成交日期改为实情。
sales/crm-leads-list.jpg
sales/crm-lead-add-dialog.jpg
sales/crm-lead-detail.jpg
sales/crm-lead-convert-dialog.jpg
sales/crm-customer-detail.jpg
何时不该做:客户意向没确认就转客户——会把客户主档污染成废号,影响健康度与复购推荐。展会名片只写了名字 / 电话也先留在线索,补全公司名 / 邮箱 / 产品需求再转。已有同名客户存在时,弹窗会提示「疑似重复」——选合并,不要强制新建。
观测信号:
  1. 线索状态徽标从「新建 / 跟进中」变「已转化」。
  2. 客户列表出现新客户行;详情页「来源线索」卡片可点回原线索。
  3. 商机看板「初步沟通」列出现新卡片,预估金额与线索一致。
技术追溯:leads.status='converted'leads.converted_to_customer_id 写入;customers 新增行带 source='lead'opportunities 新增行挂 customer_id
系统动作:createLeadconvertLeadupdateLeadcreateCustomermergeCustomerscreateOpportunity(线索→客户→商机三段事务)。

2.2 商机阶段推进与赢单 / 丢单

每条商机在看板里按「初步沟通 → 方案确认 → 报价 → 谈判 → 成交 / 丢单」推进。把阶段、概率、金额维护准,AI 会据此给赢单概率和下一步推荐。

  1. 打开「CRM → 商机」看板,拖拽卡片到下一阶段;也可以点卡片进详情在右上阶段条切换。(见图 ①)
  2. 每次跟进回来先更新「下一步动作」和「下次联系日期」——任务看板按这个排待办。
  3. 进入「报价」阶段时点详情页右侧「基于此商机建报价」,自动带客户、币种、预估金额,跳到 2.3(新建报价单)。
  4. 客户签单:点右上角「标为赢单」。关联报价自动转销售订单,商机状态置为 won
  5. 客户告知丢单:点「标为丢单」,选丢单原因(价格 / 交期 / 产品不匹配 / 竞品 / 其他),写简述。月度复盘看这里。
sales/crm-opportunities-kanban.jpg
sales/crm-opp-add-dialog.jpg
sales/crm-opp-detail.jpg
何时不该做:阶段和概率不一致会让 AI 预测失真——「报价」阶段概率通常 40-60%,不要手写 10%。商机标赢单必须有对应报价 → 订单链路,直接在商机上点赢单但没报价,下游开票 / 佣金会找不到依据。
观测信号:
  1. 商机详情「阶段时间线」出现新阶段条目,带时间戳 + 操作人。
  2. 赢单后销售订单列表出现新订单,订单详情「来源商机」可反查。
  3. 任务看板「即将到期」/「今日待办」按「下次联系日期」自动刷新。
技术追溯:opportunities.stage_id 切换 + opportunity_stage_history 新行;opportunities.statusopen/won/lost;赢单触发 quotes.status='accepted'sales_orders
系统动作:updateOpportunityStagemarkOpportunityWonmarkOpportunityLostcreateTask(跟进任务自动挂商机 / 客户)、getWinPrediction(AI 预测)。

2.3 新建报价单

客户发来询价邮件 / 询盘已 AI 解析完毕。客户身份已在客户库,规格初步明确。

  1. 点左侧导航「销售 → 报价」进入报价列表,右上角点「新建报价」。(见图 ①)
  2. 在客户下拉里选客户;填有效期;选币种与订单一致。(见图 ②)
  3. 若有 PDF / Excel 询价单,点 AI 解析上传区,自动填明细。(见图 ④)
  4. 逐行点「添加明细」:选产品变体、数量、单价;多币种需确认汇率。(见图 ③)
  5. 底部填贸易条款(Incoterm / 起运港 / 目的港)。
  6. 点「保存草稿」先保留;规格全部确认后点「送审」或直接「发送」。
sales/quotes-list.jpg
sales/quote-new-01-customer.jpg
sales/quote-new-02-items.jpg
sales/quote-ai-parse.jpg
何时不该做:客户 customer_id 未落库时先在 CRM 建客户——陌生询盘直接建报价,后续审批和发票会因主体缺失驳回。规格未确认不要发 sent,先存 draft;发出后再改版要走 quote_versions
观测信号:
  1. 报价列表顶部出现新行,报价号 SQ-YYYYMM- 前缀。
  2. 详情页底部「明细合计」= 各行合计相加。
  3. 历史版本 Tab 出现 v1 记录。
技术追溯:quotes.quote_number 自增;quotes.total = SUM(quote_line_items.line_total)quote_versions.version_number=1
系统动作:createFullQuotecreateQuoteaddQuoteLineItemActionparseDocumentActiongetHistoricalSuggestionsActiongetTemplateSuggestionsAction

2.4 报价改版与送审

客户砍价、追加项或改规格,需要更新报价并保留历史版本,超折扣时必须走审批。

  1. 打开报价详情页。(见图 ①)
  2. 改明细:点行内编辑按钮调整;拖拽行可重排顺序。
  3. 改整单:改有效期、币种、贸易条款,保存后整体生效。
  4. 折扣或总价超出本人权限时点「送审」,弹窗写送审说明。
  5. 等企微审批通过后回来继续下一步(转订单)。
sales/quote-detail-edit.jpg
何时不该做:status='converted' 的报价不能改——要改走订单编辑入口。超权限折扣直接点「发送」会被拦截并提示送审;跳过送审直接改 DB 会破坏审批链。
观测信号:
  1. 报价状态徽标变「待审批」。
  2. 历史版本 Tab 出现新版本号(v2、v3 ...)。
  3. 企微「报价送审」卡片推送至审批人。
技术追溯:quotes.status='pending_approval'quote_versions.version_number 递增。
系统动作:updateQuoteActionupdateQuoteLineItemActionreorderQuoteLineItemsActionsubmitQuoteForApprovalAction

2.5 报价转订单

客户已签回或明确表达付定金意愿,报价已审批通过,需要生成正式销售订单。

  1. 在报价详情勾选要转的明细行,点「生成销售订单」。(见图 ①)
  2. 弹窗里确认预计发货日;若是项目订单填项目 ID。
  3. 只转部分行时勾选要转的行——未勾选的行保留在报价里。
  4. 改数量:弹窗里可下调数量(不能增加),未转的余量仍在报价中。
  5. 点「确认转换」——系统生成销售订单,原报价标为「已转单」。
sales/quote-convert-dialog.jpg
何时不该做:报价 status != 'approved' 时别转——审批未通过生成的订单后续无法追溯授权。客户只要求正式合同未付定金时,优先走合同签署不转订单,否则 order_payment_milestones 会先生成但无法推进。
观测信号:
  1. 原报价详情顶部状态条变「已转单」,并显示关联订单链接。
  2. 订单列表顶部出现新单,单号 SO-YYYYMM- 前缀。
  3. 关联机会(CRM)自动关闭为 won
技术追溯:quotes.status='converted'quotes.converted_order_id 填充;sales_orders.order_number 自增。
系统动作:convertQuoteToOrderEnhancedconvertQuoteToOrder

2.6 生成付款里程碑

订单转入后一次性生成定金 / 进度款 / 尾款三段付款节点,供出纳排期收款。

  1. 订单详情切到「里程碑」Tab。(见图 ①)
  2. 点「生成付款计划」。(见图 ②)
  3. 弹窗选付款条款模板(如 30-40-30)。
  4. 系统按模板算出每期金额和预计日期,点「确认」。
  5. 个别节点需调整:在列表里点编辑,改日期或金额。
sales/order-detail-overview.jpg
sales/order-milestone-generate.jpg
何时不该做:已有里程碑时再点「生成」会报错——要走里程碑编辑。里程碑「已收款」状态的不要改金额——已核销的收款会对不上数,必须先撤销付款再调整。
观测信号:
  1. 「里程碑」Tab 出现 N 行(按模板段数)。
  2. 每行币种与订单币种一致。
  3. 列表底部合计 = 订单合同金额。
技术追溯:order_payment_milestones 新增 N 条;SUM(amount) = sales_orders.total
系统动作:generateOrderMilestonesActionupdateOrderMilestoneAction

2.7 录入客户收款

客户银行打款到账,收到银行水单或客户付款凭证,按节点入账。

  1. 订单详情「付款」Tab,点「录入收款」。(见图 ①)
  2. 弹窗填金额(币种以订单币种为准),选付款类型:deposit / progress_payment / final_payment / other
  3. 选付款方式(电汇 / 支票 / 信用证 等),填银行流水号。
  4. 填到账日期(以银行回单日期为准,不填默认今天)。
  5. 点「确认」——自动同步企微「订单收款到账」卡片。
sales/order-payment-record.jpg
何时不该做:金额币种与 sales_orders.currency 不一致时先核对汇率——不要按折算后金额录入,会导致 paid_amount 偏差。客户付款凭证未到手禁止预录——错录需走删除收款回滚,且会打乱出纳对账。
观测信号:
  1. 订单顶部「已收 / 合计」数字增长。
  2. 「付款」Tab 出现新行(金额、付款方式、到账日)。
  3. 企微卡片「订单收款 X 到账」推送给销售群。
技术追溯:sales_orders.paid_amount 等额增加;payments 新增一行(parent_type='sales_order')。
系统动作:recordOrderPaymentActiondeleteOrderPaymentActionrecordRefundAction

2.8 创建并提交发货单

生产完成或外协货到仓,客户确认发货日期,按订单剩余可发量出库。

  1. 进发货单列表点右上「新建发货单」,或在订单详情点「创建发货单」(订单 ID 自动带入)。(见图 ①、②)
  2. 表单选出货仓、发货日期、承运商、运单号。
  3. 点「添加明细」按订单行拣货——超出未发余量会被系统拦截。(见图 ③)
  4. 填收货地址(默认带客户地址)、毛重 / 净重。
  5. 保存后点「提交」,通知仓库备货。
  6. 客户签收后点「确认签收」;如需质检,签收后再做质检。(见图 ④)
sales/dn-list.jpg
sales/dn-new-form.jpg
sales/dn-detail-items.jpg
sales/dn-inspection.jpg
何时不该做:未收定金不要发货——sales_orders.paid_amount = 0 的订单发货后客户拒付无法追回。数量超过未发货余额会被系统拒绝,别强改 DN 明细绕过——会造成库存负值。
观测信号:
  1. 发货单列表顶部出现新行,单号 DN- 前缀。
  2. 状态徽标按「草稿 → 已提交 → 已签收」推进。
  3. 关联订单状态自动推进到「已发货」(全部发完时)。
技术追溯:delivery_notes.dn_numberdelivery_notes.status in (draft, submitted, delivered);sales_orders.status='shipped'
系统动作:createDeliveryNoteActionaddDeliveryNoteItemActionsubmitDeliveryNoteActionconfirmDeliveryActionconfirmInspectionActiongetDeliverableQtysWithProductsgetCustomerAddressAction

2.9 开具发票(商业 + 国内增值税)

发货已签收或客户发邮件索要发票,外贸开商业发票、国内客户开增值税。

  1. 外贸商业发票:在已签收发货单详情点「开具发票」,弹窗选 commercial。(见图 ①)
  2. 未收款需先发形式发票:同入口选 proforma——形式发票不记 AR,仅供客户走内部流程。
  3. 国内增票:订单详情 VAT Tab 点「申请开票」,填购方名称、税号、税率(通常 13% 或 6%)。(见图 ④)
  4. 财务开票完成后点「标记已开」,回填发票代码和号码。
  5. 发票详情页点「发送」给客户,或「标记已付」(客户汇款后回录)。(见图 ③)
sales/create-invoice-from-dn.jpg
sales/invoices-list.jpg
sales/invoice-detail.jpg
sales/order-vat-request.jpg
sales/order-trade-terms.jpg
何时不该做:发货单状态不是「已签收」时不要开 commercial——未签收发票会导致客户据此拒付或双开。未收款客户只发 proforma,发 commercial 后记账进 AR 再撤销需走贷项通知单,增加对账负担。
观测信号:
  1. 发票列表顶部出现新行,单号 INV- 前缀。
  2. 详情页明细合计 = 各行合计相加。
  3. VAT 申请的状态推进到「已开」并显示发票代码 / 号码。
技术追溯:invoices.invoice_numberinvoices.totalvat_invoice_requests.status='issued'invoice_code / invoice_number 回填。
系统动作:createInvoiceFromDnActioncreateVatInvoiceRequestActionmarkVatIssuedFormActioncancelVatInvoiceRequestAction

2.10 贷项通知单(退款 / 退货)

客户投诉质量、部分退货或多付款,发票已开无法作废时用 CN 冲销应收。

  1. 进贷项单列表点右上「新建贷项通知单」。(见图 ①)
  2. 选客户,若要冲特定发票选目标发票(系统会列出可冲销的未结发票)。(见图 ②)
  3. 选退款原因(quality_issue / order_cancelled 等),若退货入库勾选「退回库存」并选目的仓。
  4. 加明细行:产品、数量、单价。
  5. 保存草稿 → 点「提交」。
  6. 核销到发票:在贷项单详情点「核销」,选目标发票和金额。(见图 ③)
sales/credit-notes-list.jpg
sales/credit-note-new.jpg
sales/credit-apply.jpg
何时不该做:客户未书面承认质量问题前不要建 CN——影响客诉责任归属。全额已收款的退款走退款流程(reason='order_cancelled')而非 CN——CN 只用于冲销应收,已收款后建 CN 会导致 AR 出现负值。
观测信号:
  1. 贷项单列表顶部出现新行,单号 CN- 前缀,状态变「已核销」。
  2. 被核销发票的「未结金额」减少相应金额。
  3. 若勾选「退回库存」,库存模块出现反向入库记录。
技术追溯:credit_notes.cn_numbercredit_notes.status='applied'invoices.balance_due 递减;inventory_movements 反向入库行。
系统动作:createCreditNoteActionsubmitCreditNoteActionapplyCreditToInvoiceActioncancelCreditNoteActiongetOutstandingInvoicesForCreditAction

2.11 工作流状态推进 / 驳回

报价 / 订单 / 发票 / 贷项单遇审批节点,按工作流引擎的可用 transition 推进。

  1. 在单据详情页右上看「可用操作」下拉。(见图 ①)
  2. 选推进动作(如 approve / reject / revert),在弹窗填评论。
  3. 提交后审批留痕,单据状态同步变更。
sales/quote-loss-analysis.jpg
何时不该做:不要绕过工作流直接改 DB status——workflow_audit_trail 缺失会导致审批合规性断链;revert 回退前先确认下游动作是否已发生(如发货后不能 revert 订单到 draft)。
观测信号:
  1. 单据顶部状态徽标按 transition 定义变更。
  2. 「审批历史」Tab 出现一行新记录(操作人、时间、评论)。
  3. 企微推送对应审批 / 驳回卡片给下一步责任人。
技术追溯:workflow_audit_trail 新增(from_status / to_status / actor_id);对应单据 status 字段更新。
系统动作:executeOrderTransitionActionexecuteInvoiceTransitionActionexecuteCreditNoteTransitionActiongetAvailableTransitions

上下游交接契约

销售是整个销售-生产-交付链的起点,每一次状态推进都触发下游动作。必传字段缺失时下游要么收不到单、要么收到半残单无法处理。

市场 / 企微 / 展会 → 销售:新线索落地

我做什么:接收来自市场投放、企微客服、展会名片、外部表单的新潜客。线索看板「新建」列自动分配到我头上;展会现场用「扫名片」直接入库。

上游给我什么:线索自带来源标签(source:展会 / 官网 / 企微 / 外呼)、公司名、联系人、初步产品意向。企微客服接入的会附带对话摘要。

缺失会回去找上游:只有姓名没有公司 / 电话 / 邮箱 → 无法跟进,把线索置「信息不足」退回市场补。来源标签空 → 归因报表跑不出,跟市场要重新打 UTM。重复线索(同公司 / 同邮箱)→ 合并到现有线索,不建第二条。

技术字段(给 IT / 市场交叉核对)

触发动作:createLeadmergeLeads;外部入口 Webhook 写 leads

必传字段:companyName, contactName, email?, phone?, source, estimatedValue?, productInterest?

销售 → 销售自己:线索 → 客户 + 商机

我做什么:线索意向确认后点「转为客户」,一次弹窗同时创建客户主档、商机、时间线迁入。

下游看到什么:客户列表出现新客户(带 source='lead' + 「来源线索」卡片);商机看板「初步沟通」列出现新卡片;任务看板自动创建一条「首次报价跟进」。

缺失会回来找我:客户税号 / 币种 / 付款条款空 → 报价送审时驳回。商机预估金额与实际报价偏差 >30% → AI 预测失准,月度漏斗报表失真。

技术字段(给 IT 交叉核对)

触发动作:convertLead(事务内写三张表)

必传字段:leadId, createCustomer:boolean, createOpportunity:boolean, customerTemplate{taxId?, currency, paymentTerms}, opportunityTemplate{stageId, estimatedValue, probability}

销售 → 跟单 / 生产:订单确认

我做什么:报价详情勾选要转的明细行,点「生成销售订单」;弹窗里选客户、确认至少一行明细、币种、预计发货日;项目订单填项目 ID。

下游看到什么:跟单在订单列表「待排产」Tab 看到 SO-YYYYMM- 开头新单;生产计划自动接到拆单任务。

缺失会回来找我:没填预计发货日 → 跟单无法排产 → PMC 企微催。数量未选单位 → 仓库无法备货。币种缺失 → 财务无法换算合同金额。

技术字段(给 IT/跟单交叉核对)

触发动作:convertQuoteToOrderEnhanced

必传字段:customer_id, items[].productId, items[].quantity, items[].unitPrice, currency, expectedShipDate?, projectId?

销售 → 出纳 / 会计:客户回款

我做什么:订单付款 Tab 点「录入收款」,弹窗填到账金额、付款类型(定金 / 进度款 / 尾款)、付款方式、银行流水号、到账日。

下游看到什么:出纳在 /dashboard/accounting/payments 看到新到账记录;会计自动生成凭证(应收 ↓ / 银行 ↑)。

缺失会回来找我:没填银行流水号 → 出纳对账对不上来回找。币种与订单不一致 → 会计无法挂账。日期错填 → 月结归期错乱。

技术字段(给 IT/出纳交叉核对)

触发动作:recordOrderPaymentAction

必传字段:amount, paymentType, paymentMethod, paymentDate?, reference?

销售 → 出纳 / 销售经理:付款计划

我做什么:订单里程碑 Tab 点「生成付款计划」,选付款条款模板(如 30-40-30),系统按合同金额拆 N 段。

下游看到什么:出纳按里程碑到期日排应收任务;销售经理拿走里程碑数据做月度现金流预测报表。

缺失会回来找我:没选付款条款模板 → 系统不知按几段拆。订单合同金额未确认 → 拆出来的金额对不上。币种缺失 → 出纳排错币种 AR。

技术字段(给 IT/出纳交叉核对)

触发动作:generateOrderMilestonesAction

必传字段:salesOrderId, paymentTermId, sales_orders.total, currency

销售 → 库管 / 物流:出库与发货

我做什么:订单详情点「创建发货单」,填出货仓、发货日、承运商、运单号、收货地址、毛重 / 净重,按订单行拣货并提交。

下游看到什么:库管在仓库模块收到出库单备货;物流在 /dashboard/export/shipments 接力做装箱与报关。

缺失会回来找我:没填出货仓 → 库管不知从哪发。发货日期空 → 物流无法订舱。运单号 / 承运商空 → 客户无法跟踪。地址不全 → 快递退回。

技术字段(给 IT/库管交叉核对)

触发动作:createDeliveryNoteAction

必传字段:salesOrderId, customerId, warehouseId, deliveryDate, shippingMethod?, trackingNumber?, carrier?, shippingAddress?, grossWeight?, netWeight?

销售 → 会计 / QC:客户签收确认

我做什么:客户签收回执到手后,发货单详情点「确认签收」。

下游看到什么:会计触发收入确认凭证(G-NEW-5);QC 接力做质检结论登记。

缺失会回来找我:未签就点 → 收入提前确认会让月结数据失真。漏签 → 收入挂不上账,月底盘账时被会计回退。

技术字段(给 IT/会计交叉核对)

触发动作:confirmDeliveryAction(后续 confirmInspectionAction 由 QC 触发)

必传字段:id(发货单 id)

销售 → 出纳 / 客户:商业 / 形式发票

我做什么:已签收发货单详情点「开具发票」,弹窗选 commercial(外贸)或 proforma(形式),系统自动按发货明细生成发票。

下游看到什么:出纳在 AR 模块挂应收;客户收到 PDF 发票走内部付款流程。

缺失会回来找我:未签收开 commercial → 客户拒付或双开。该发 proforma 错发 commercial → 进 AR 后撤销要走贷项单。

技术字段(给 IT/出纳交叉核对)

触发动作:createInvoiceFromDnAction

必传字段:deliveryNoteId, typecommercial / proforma

销售 → 会计 / 开票员:国内增值税

我做什么:订单 VAT Tab 点「申请开票」,填购方名称、税号、税率、金额。

下游看到什么:会计 / 开票员在增票系统开票后回填发票代码 / 号码,状态推进到「已开」。

缺失会回来找我:购方名称错 / 税号错 → 增票被税局退回。税率漏选 → 金额算错。

技术字段(给 IT/开票员交叉核对)

触发动作:createVatInvoiceRequestAction(开完后 markVatIssuedFormAction 回填)

必传字段:orderId, amount, taxRate, buyerName, buyerTaxId?, notes?

销售 → 出纳 / 库管:退款 / 退货

我做什么:贷项单列表点「新建」,选客户、要冲销的发票、退款原因;退货入库勾选「退回库存」并选目的仓;加明细后提交。

下游看到什么:出纳在 AR 看到对应发票余额减少;库管按「退回库存」标志收货退仓。

缺失会回来找我:没选目标发票 → 出纳不知冲哪笔。勾了「退回库存」但没选仓库 → 库管不知收哪。退款原因空 → 月度退款分析报表缺数据。

技术字段(给 IT/出纳交叉核对)

触发动作:createCreditNoteAction

必传字段:customerId, creditNoteDate, items[].productId, items[].quantity, items[].unitPrice, invoiceId?, returnReason?, returnToStock?, warehouseId?

异常回滚

误操作不要直接改 DB。按下表选对应入口按业务规则回滚。

症状 做什么 前置条件 / 后果
报价行录错或多录 报价详情点行内删除 报价非 converted 状态;父单合计自动重算
报价转单转错(选错行 / 数量不对) 订单详情走工作流「revert」回退到草稿,再删订单或改明细 下游未发货 / 未收款;revert 后报价 converted 状态需手工修正
发货单刚提交发现填错 发货单详情点「撤销」按钮 未签收;订单可发货余额恢复
发货单还是草稿态、整单作废 发货单详情点「删除」 draft 可删;已 submitted 用「撤销」
已签收发货单需退货 建贷项通知单,勾选「退回库存」 + 选仓库 客户书面承认质量问题;CN 核销后发票余额减少
收款金额或日期录错 付款 Tab 找到错行点「删除」 paid_amount 同步回滚;若里程碑已标 paid 会一并重算
客户多付款需退回 付款 Tab 走「退款」,选 overpayment 原因 不动 CN(CN 只冲销应收,不退现金)
贷项单提交后发现错填 贷项详情点「撤销」(草稿可直接删) status != 'applied' 可撤;已核销需先反核销
增值税开票申请错填 VAT Tab 找申请记录点「撤销」 pending 状态可撤;已 issued 走税局红字流程
报价过期需重发 报价详情改 valid_until 后重新走「发送」 改完会进新版本;客户老链接失效
线索误转客户(其实是重复或废号) 客户详情走「合并客户」到目标主客户;线索详情把状态反向改为「跟进中」不再触碰 合并前确认无订单 / 无发票挂该客户;合并后所有联系人、商机、订单归到目标客户
商机标错赢单 / 丢单 商机详情点阶段条「撤回赢单 / 丢单」回到原阶段 若赢单已生成订单,需先删 / 撤订单才能撤回;丢单撤回不影响下游
客户建重复或建错 客户列表勾选两条走「合并客户」;保留正确主档 合并需管理员权限;所有历史商机 / 订单 / 发票迁到目标客户
跟进任务建错时间 / 挂错客户 任务卡片点编辑改时间 / 挂靠对象,或直接删 任务未完成状态可改;已完成的保留不改,新建一条
对应系统动作(IT 追溯)
  • cancelDeliveryNoteAction — 撤销未签收发货单,订单可发货余额恢复
  • cancelCreditNoteAction — 撤销 status != 'applied' 的贷项单
  • cancelVatInvoiceRequestAction — 撤销 pending 状态的增票申请
  • deleteQuoteLineItemAction / deleteOrderLineItemAction / removeDeliveryNoteItemAction — 删明细行并重算父单 total
  • deleteOrderPaymentAction — 删错录的收款,sales_orders.paid_amount 同步回滚
  • deleteCreditNoteAction — 仅草稿态贷项单可删
  • deleteDeliveryNoteAction — 仅草稿态发货单可删
  • recordRefundAction — 对已收款按 overpayment / order_cancelled / quality_issue / other 退款,不动 CN
  • executeOrderTransitionAction — 用 revert / reject 的 transition 回退状态(需下游动作未触发)
  • mergeCustomers / mergeLeads — 合并重复客户 / 线索,所有关联迁到目标主档
  • revertOpportunityWon / revertOpportunityLost — 撤回商机赢单 / 丢单状态
  • updateLead — 把误转的线索反向改回「跟进中」(仅 status='converted' 且未签订单时允许)
  • deleteTask / updateTask — 删 / 改跟进任务

进阶功能

批量操作(批量改状态 / 批量删除)

报价 / 订单列表支持多选后批量操作。典型场景:季末把已发送且过期的报价一次性置「已过期」;批量改一批订单的预计发货日。

系统动作:batchUpdateStatusbatchDirectStatusUpdatebatchUpdateFieldbatchDeletegetBatchAvailableTransitions

AI 辅助(历史建议 / 模板建议 / 文档解析)

上传 PDF / Excel 询价单自动提取明细;按客户历史订单推荐产品和价格;按询盘匹配报价模板。适合重复客户或相似规格询盘,比手工录入快 5-10 倍。

系统动作:parseDocumentActiongetHistoricalSuggestionsActiongetTemplateSuggestionsAction

订单拆单 / 生产路径切换

把一条订单行拆成多条,按生产路径走不同流程:自产 / 半外协 / 全外协。用于定制家具项目——部分自产、部分外协,需要分别排产和验货。

系统动作:splitOrderItemproductionPath enum: in_house | semi_outsource | full_outsource

丢单复盘(loss-analysis)

按「已拒 / 已过期」状态聚合,看客户流失原因分布(价格、工期、规格)。月底固定复盘,输出给销售经理用于定价策略调整。

入口:/dashboard/sales/quotes/loss-analysis

定价规则 / 运费规则

维护客户分层价、量阶梯价;运费规则按目的港 / 体积 / 重量自动计算。首次对接新客户或开新目的港时配置;平时由销售经理 / 财务维护。

入口:/dashboard/sales/pricing-rules/dashboard/sales/shipping-rules

sales/pricing-rules.jpg
sales/shipping-rules.jpg
订单筛选 / 列表导出

列表页用 URL query 做筛选(?status=sent&customer=XX),无独立 Server Action;导出 CSV 按当前筛选结果生成。

相关业务场景

销售参与 6 大跨角色场景中的 4 条,不参与「采购付款流」核心链路;「报销审批流」仅作为申请人。

  1. 标准成单流(询盘 → 报价 → 订单 → 发货 → 开票): 销售全程主导——从询盘转报价(带源询盘 ID),录明细、送审、转单,到收定金、发货、开票。 → 场景详解
  2. 定制家具项目流: 销售在报价上关联项目;转单时把项目 ID 和预计发货日一起传给跟单;拆单交给 PMC 处理;里程碑随项目阶段调整。 → 场景详解
  3. 回款流: 销售负责「客户侧」录入收款;出纳走对账;多付款用退款流程;发票侧用贷项单核销 AR。 → 场景详解
  4. 采购付款流:销售不参与——/dashboard/purchasing/* 由采购角色操作。销售只关注客户侧回款。 → 场景(了解即可)
  5. 月结流: 销售有限参与——清理过期报价(批量置「已过期」)、核对发票月度账龄、填写丢单复盘。会计端结账不参与。 → 场景详解
  6. 报销审批流:销售作为申请人走 /dashboard/expenses(出差 / 样品快递报销),非销售核心动作——不在 Quickstart 范围。 → 场景(作为申请人)

外部协作入口

sales/crm-tasks-list.jpg
sales/crm-calendar.jpg
sales/crm-customers-list.jpg

权限与范围

看得到什么(RLS 边界)

  • 当前 organization_id 下的所有 quotes / sales_orders / delivery_notes / invoices / credit_notes
  • 当前 book_id 下的财务数据——多账套下不同账本隔离,切账套后看到的数据会变。
  • 客户(customers)、机会(opportunities)、询盘(customer_inquiries)全公司可见(非私有)。

核心概念

  • book_id — 账套隔离键。所有财务相关表(quotes、orders、invoices 等)都带 book_id,切账套后数据完全隔离。切账套在右上角账套切换器。
  • organization_id — 租户隔离键。多租户场景下跨组织数据通过 RLS 隔离,销售只看本组织。
  • 工作流引擎(src/services/workflow-engine.ts)——报价 / 订单 / 发票 / CN 的状态机统一走该引擎,transition 由 DB 配置,不在代码里写死。

术语表

报价单 quotes
quotes.quote_numberSQ-YYYYMM-NNNN
销售订单 sales order
sales_orders.order_numberSO-YYYYMM-NNNN
发货单 delivery note
delivery_notes.dn_numberDN-
发票 invoice
invoices.invoice_numberINV-
贷项通知单 credit note
credit_notes.cn_numberCN-
有效期
quotes.valid_until
合同金额 / 已收
sales_orders.total / sales_orders.paid_amount
应收余额
invoices.balance_due(= total - paid_amount)
里程碑 milestone
order_payment_milestones(三段付款节点)
贸易条款 Incoterm
incoterm + port_of_loading + port_of_destination
付款类型 enum
deposit | progress_payment | final_payment | other
退款原因 enum
overpayment | order_cancelled | quality_issue | other
生产路径 enum
in_house | semi_outsource | full_outsourcesplitOrderItem
发票类型
commercial(外贸)/ proforma(形式)/ VAT request(国内独立 vat_invoice_requests 表)
SOP 触发事件
quote_created / order_created(写入 sop/step.check-completion
账套隔离键
book_id(所有财务表)
转单核心动作
convertQuoteToOrderEnhanced
收款核心动作
recordOrderPaymentAction
发货核心动作
createDeliveryNoteActionsubmitDeliveryNoteActionconfirmDeliveryAction
开票核心动作
createInvoiceFromDnAction / createVatInvoiceRequestAction
线索 lead
leads.company_name(阶段:新建 / 跟进中 / 已转化 / 已丢失)
线索来源 source
trade_show | website | wecom | referral | cold_call | other
商机 opportunity
opportunities.name(阶段:初步沟通 / 方案确认 / 报价 / 谈判 / 成交 / 丢单)
商机状态
statusopen | won | lost
成交概率
opportunities.probability(0-100,按阶段默认值可手改)
预估金额
opportunities.estimated_value(签单前粗估,签单后与订单金额对比)
客户 customer
customers.company_name(主档,合并用 mergeCustomers
健康度 health
按最近订单频次 / 金额 / 回款表现算,掉红色触发回访任务
跟进任务 task
tasks(类型:call | email | meeting | follow_up | other;优先级:high/medium/low
CRM 核心动作
createLead / convertLead / mergeCustomers / updateOpportunityStage / markOpportunityWon / markOpportunityLost / createTask

常见问题

报价转订单后客户要改数量怎么办?

报价已 converted 不能改。改订单行:订单详情编辑明细;若要减量且已生产部分,用拆单功能拆出已生产 / 未生产部分。增量只能走新建报价再转单合并。

客户多付款了怎么处理?

两种方案:(a)保留作为下一单抵扣——继续按下一订单录入收款;(b)退回客户——走退款流程,原因选 overpayment。不要用贷项通知单——CN 是冲销应收,不退现金。

DN 已提交但仓库说货还没齐怎么撤?

已提交但未签收的 DN 用「撤销」按钮回滚,订单可发货余额恢复。再按实际备货情况重建 DN。已签收的 DN 不能撤销——走 CN + 退回库存。

折扣超权限怎么绕过审批?

不能绕过。超权限折扣必须送审,企微推给销售经理审批通过后才能发。急单先谈客户分批签、或降低单次折扣幅度。

国内增票和外贸发票能同时开吗?

可以。外贸商业发票进 invoices 表;国内增票进 vat_invoice_requests 表,两者互不影响。但同一笔金额不要重复开——以实际收款性质(外汇 vs 人民币)决定开哪种。

为什么我看不到其他销售的报价?

RLS 按 organization_id 隔离——同组织内销售互相可见(除非管理员配了更严格的 owner_id 过滤)。看不到说明账套 book_id 不同(右上切账套)或该报价属于其他组织。

报价发邮件给客户用什么接口?

没有专用 sendQuoteEmailAction。走通用邮件服务 src/services/email,配置入口在 /dashboard/settings/email。报价详情页有「发送」按钮,内部调用通用邮件网关。

线索和客户有什么区别?什么时候转换?

线索(lead)是未验证的潜客——只有基本联系方式、没确认真实采购意向,不能直接下单。客户(customer)是主档,可挂商机 / 报价 / 订单 / 发票。确认客户有真实需求(至少明确产品方向 + 预估金额)就转;转早了污染主档,转晚了漏跟进。

商机阶段和报价状态怎么对应?

商机阶段「初步沟通 / 方案确认」对应报价还没发;「报价」阶段对应 quotes.status='sent';「谈判」对应客户已还价;「成交」触发报价 → 订单转换,商机状态 won;「丢单」对应 quotes.status='rejected' 或过期未转,商机 lost

不用 CRM 直接建报价 / 订单可以吗?

可以。历史老客户、稳定复购单走 /dashboard/sales/quotes 直建没问题。CRM 前台主要价值在新客拓展、转化漏斗分析、跟进任务不漏。但客户主档必须先存在——陌生客户直接建报价会因 customer_id 不存在被拦截。

询盘(inquiries)和线索(leads)有什么区别?

询盘是具体的「这次要买什么」文件级输入(带 RFQ、PDF、产品清单),系统 AI 可以直接解析明细建报价;线索是客户关系级的跟进对象(一个线索可对多次询盘)。询盘默认挂到现有客户下;新客户的询盘先走「转线索」建关系档。