今天要做什么
按节拍跑单:每天处理新询盘与回款,每周盘已发未回报价与在产订单,每月核账龄与丢单复盘。
每日
- 晨会前打开 CRM 任务看板,处理「今日待办」+「已逾期」的跟进任务。
- 扫一眼线索看板,把昨日新进的线索初步联系后分类(继续跟 / 转客户 / 放弃)。
- 商机看板按阶段拉一遍,更新下一步动作和下次联系日期。
- 打开报价列表,跟进昨日发出未回复的报价;过有效期者改价或转「已过期」。
- 处理当日新询盘:状态为「新建」的询盘当日生成报价草稿(可直接由询盘一步转入)。
- 客户确认报价后立即转订单,并按规则送审。
- 收到银行到账凭证后录入收款(定金 / 进度款 / 尾款 三段),同步触发企微通知。
- 生产完成发货:建发货单 → 提交仓库 → 客户签收。
- 索要发票的客户:外贸开商业发票,国内走增值税申请。
/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超期触发催款或转贷项。 - 月底看「丢单复盘」汇总「已拒 / 已过期」原因,商机丢单原因归类。
- 月底看商机漏斗转化率:线索 → 商机 → 报价 → 订单 各阶段通过率。
权限红线(先看这 4 条)
- 不能直接建订单——必须从报价转单(防数据裸写)。
- 已转单的报价不能改;已签收的发货单不能删。
- 超折扣权限必须走审批——没有「跳过审批」开关。
- 采购 / 会计 / 人事模块只读或不可见。
Quickstart — 日常核心任务
2.1 线索转客户与商机
市场端、展会、企微、外部表单送进来的新潜客(「线索」)确认真实意向后,转成客户主档 + 商机,把漏斗前段的数据沉淀成可跟进、可报价的对象。
- 左侧导航「CRM → 线索」进看板。右上角「新建线索」补录展会 / 企微来的潜客(不必每条手填,扫名片按钮支持图片识别)。(见图 ①)
- 对未联系的线索先电话或企微沟通;确认意向后点卡片进入线索详情。
- 右上角点「转为客户」。弹窗可同时:① 生成客户主档 ② 生成一条商机 ③ 把线索沟通记录迁入客户 360 时间线。(见图 ④)
- 客户主档里补全税号 / 币种 / 付款条款 / 收货地址 / 主联系人——这些决定后续报价抬头和发票能否通过。
- 返回商机看板检查新商机是否落在正确阶段(默认「初步沟通」),把预估金额、成交概率、预计成交日期改为实情。
- 线索状态徽标从「新建 / 跟进中」变「已转化」。
- 客户列表出现新客户行;详情页「来源线索」卡片可点回原线索。
- 商机看板「初步沟通」列出现新卡片,预估金额与线索一致。
leads.status='converted'、leads.converted_to_customer_id 写入;customers 新增行带 source='lead';opportunities 新增行挂 customer_id。
createLead、convertLead、updateLead、createCustomer、mergeCustomers、createOpportunity(线索→客户→商机三段事务)。
2.2 商机阶段推进与赢单 / 丢单
每条商机在看板里按「初步沟通 → 方案确认 → 报价 → 谈判 → 成交 / 丢单」推进。把阶段、概率、金额维护准,AI 会据此给赢单概率和下一步推荐。
- 打开「CRM → 商机」看板,拖拽卡片到下一阶段;也可以点卡片进详情在右上阶段条切换。(见图 ①)
- 每次跟进回来先更新「下一步动作」和「下次联系日期」——任务看板按这个排待办。
- 进入「报价」阶段时点详情页右侧「基于此商机建报价」,自动带客户、币种、预估金额,跳到 2.3(新建报价单)。
- 客户签单:点右上角「标为赢单」。关联报价自动转销售订单,商机状态置为
won。 - 客户告知丢单:点「标为丢单」,选丢单原因(价格 / 交期 / 产品不匹配 / 竞品 / 其他),写简述。月度复盘看这里。
- 商机详情「阶段时间线」出现新阶段条目,带时间戳 + 操作人。
- 赢单后销售订单列表出现新订单,订单详情「来源商机」可反查。
- 任务看板「即将到期」/「今日待办」按「下次联系日期」自动刷新。
opportunities.stage_id 切换 + opportunity_stage_history 新行;opportunities.status 取 open/won/lost;赢单触发 quotes.status='accepted' → sales_orders。
updateOpportunityStage、markOpportunityWon、markOpportunityLost、createTask(跟进任务自动挂商机 / 客户)、getWinPrediction(AI 预测)。
2.3 新建报价单
客户发来询价邮件 / 询盘已 AI 解析完毕。客户身份已在客户库,规格初步明确。
- 点左侧导航「销售 → 报价」进入报价列表,右上角点「新建报价」。(见图 ①)
- 在客户下拉里选客户;填有效期;选币种与订单一致。(见图 ②)
- 若有 PDF / Excel 询价单,点 AI 解析上传区,自动填明细。(见图 ④)
- 逐行点「添加明细」:选产品变体、数量、单价;多币种需确认汇率。(见图 ③)
- 底部填贸易条款(Incoterm / 起运港 / 目的港)。
- 点「保存草稿」先保留;规格全部确认后点「送审」或直接「发送」。
customer_id 未落库时先在 CRM 建客户——陌生询盘直接建报价,后续审批和发票会因主体缺失驳回。规格未确认不要发 sent,先存 draft;发出后再改版要走 quote_versions。
- 报价列表顶部出现新行,报价号
SQ-YYYYMM-前缀。 - 详情页底部「明细合计」= 各行合计相加。
- 历史版本 Tab 出现 v1 记录。
quotes.quote_number 自增;quotes.total = SUM(quote_line_items.line_total);quote_versions.version_number=1。
createFullQuote、createQuote、addQuoteLineItemAction、parseDocumentAction、getHistoricalSuggestionsAction、getTemplateSuggestionsAction
2.4 报价改版与送审
客户砍价、追加项或改规格,需要更新报价并保留历史版本,超折扣时必须走审批。
- 打开报价详情页。(见图 ①)
- 改明细:点行内编辑按钮调整;拖拽行可重排顺序。
- 改整单:改有效期、币种、贸易条款,保存后整体生效。
- 折扣或总价超出本人权限时点「送审」,弹窗写送审说明。
- 等企微审批通过后回来继续下一步(转订单)。
status='converted' 的报价不能改——要改走订单编辑入口。超权限折扣直接点「发送」会被拦截并提示送审;跳过送审直接改 DB 会破坏审批链。
- 报价状态徽标变「待审批」。
- 历史版本 Tab 出现新版本号(v2、v3 ...)。
- 企微「报价送审」卡片推送至审批人。
quotes.status='pending_approval';quote_versions.version_number 递增。
updateQuoteAction、updateQuoteLineItemAction、reorderQuoteLineItemsAction、submitQuoteForApprovalAction
2.5 报价转订单
客户已签回或明确表达付定金意愿,报价已审批通过,需要生成正式销售订单。
- 在报价详情勾选要转的明细行,点「生成销售订单」。(见图 ①)
- 弹窗里确认预计发货日;若是项目订单填项目 ID。
- 只转部分行时勾选要转的行——未勾选的行保留在报价里。
- 改数量:弹窗里可下调数量(不能增加),未转的余量仍在报价中。
- 点「确认转换」——系统生成销售订单,原报价标为「已转单」。
status != 'approved' 时别转——审批未通过生成的订单后续无法追溯授权。客户只要求正式合同未付定金时,优先走合同签署不转订单,否则 order_payment_milestones 会先生成但无法推进。
- 原报价详情顶部状态条变「已转单」,并显示关联订单链接。
- 订单列表顶部出现新单,单号
SO-YYYYMM-前缀。 - 关联机会(CRM)自动关闭为
won。
quotes.status='converted',quotes.converted_order_id 填充;sales_orders.order_number 自增。
convertQuoteToOrderEnhanced、convertQuoteToOrder
2.6 生成付款里程碑
订单转入后一次性生成定金 / 进度款 / 尾款三段付款节点,供出纳排期收款。
- 订单详情切到「里程碑」Tab。(见图 ①)
- 点「生成付款计划」。(见图 ②)
- 弹窗选付款条款模板(如 30-40-30)。
- 系统按模板算出每期金额和预计日期,点「确认」。
- 个别节点需调整:在列表里点编辑,改日期或金额。
- 「里程碑」Tab 出现 N 行(按模板段数)。
- 每行币种与订单币种一致。
- 列表底部合计 = 订单合同金额。
order_payment_milestones 新增 N 条;SUM(amount) = sales_orders.total。
generateOrderMilestonesAction、updateOrderMilestoneAction
2.7 录入客户收款
客户银行打款到账,收到银行水单或客户付款凭证,按节点入账。
- 订单详情「付款」Tab,点「录入收款」。(见图 ①)
- 弹窗填金额(币种以订单币种为准),选付款类型:
deposit/progress_payment/final_payment/other。 - 选付款方式(电汇 / 支票 / 信用证 等),填银行流水号。
- 填到账日期(以银行回单日期为准,不填默认今天)。
- 点「确认」——自动同步企微「订单收款到账」卡片。
sales_orders.currency 不一致时先核对汇率——不要按折算后金额录入,会导致 paid_amount 偏差。客户付款凭证未到手禁止预录——错录需走删除收款回滚,且会打乱出纳对账。
- 订单顶部「已收 / 合计」数字增长。
- 「付款」Tab 出现新行(金额、付款方式、到账日)。
- 企微卡片「订单收款 X 到账」推送给销售群。
sales_orders.paid_amount 等额增加;payments 新增一行(parent_type='sales_order')。
recordOrderPaymentAction、deleteOrderPaymentAction、recordRefundAction
2.8 创建并提交发货单
生产完成或外协货到仓,客户确认发货日期,按订单剩余可发量出库。
- 进发货单列表点右上「新建发货单」,或在订单详情点「创建发货单」(订单 ID 自动带入)。(见图 ①、②)
- 表单选出货仓、发货日期、承运商、运单号。
- 点「添加明细」按订单行拣货——超出未发余量会被系统拦截。(见图 ③)
- 填收货地址(默认带客户地址)、毛重 / 净重。
- 保存后点「提交」,通知仓库备货。
- 客户签收后点「确认签收」;如需质检,签收后再做质检。(见图 ④)
sales_orders.paid_amount = 0 的订单发货后客户拒付无法追回。数量超过未发货余额会被系统拒绝,别强改 DN 明细绕过——会造成库存负值。
- 发货单列表顶部出现新行,单号
DN-前缀。 - 状态徽标按「草稿 → 已提交 → 已签收」推进。
- 关联订单状态自动推进到「已发货」(全部发完时)。
delivery_notes.dn_number、delivery_notes.status in (draft, submitted, delivered);sales_orders.status='shipped'。
createDeliveryNoteAction、addDeliveryNoteItemAction、submitDeliveryNoteAction、confirmDeliveryAction、confirmInspectionAction、getDeliverableQtysWithProducts、getCustomerAddressAction
2.9 开具发票(商业 + 国内增值税)
发货已签收或客户发邮件索要发票,外贸开商业发票、国内客户开增值税。
- 外贸商业发票:在已签收发货单详情点「开具发票」,弹窗选
commercial。(见图 ①) - 未收款需先发形式发票:同入口选
proforma——形式发票不记 AR,仅供客户走内部流程。 - 国内增票:订单详情 VAT Tab 点「申请开票」,填购方名称、税号、税率(通常 13% 或 6%)。(见图 ④)
- 财务开票完成后点「标记已开」,回填发票代码和号码。
- 发票详情页点「发送」给客户,或「标记已付」(客户汇款后回录)。(见图 ③)
commercial——未签收发票会导致客户据此拒付或双开。未收款客户只发 proforma,发 commercial 后记账进 AR 再撤销需走贷项通知单,增加对账负担。
- 发票列表顶部出现新行,单号
INV-前缀。 - 详情页明细合计 = 各行合计相加。
- VAT 申请的状态推进到「已开」并显示发票代码 / 号码。
invoices.invoice_number、invoices.total;vat_invoice_requests.status='issued',invoice_code / invoice_number 回填。
createInvoiceFromDnAction、createVatInvoiceRequestAction、markVatIssuedFormAction、cancelVatInvoiceRequestAction
2.10 贷项通知单(退款 / 退货)
客户投诉质量、部分退货或多付款,发票已开无法作废时用 CN 冲销应收。
- 进贷项单列表点右上「新建贷项通知单」。(见图 ①)
- 选客户,若要冲特定发票选目标发票(系统会列出可冲销的未结发票)。(见图 ②)
- 选退款原因(
quality_issue/order_cancelled等),若退货入库勾选「退回库存」并选目的仓。 - 加明细行:产品、数量、单价。
- 保存草稿 → 点「提交」。
- 核销到发票:在贷项单详情点「核销」,选目标发票和金额。(见图 ③)
- 贷项单列表顶部出现新行,单号
CN-前缀,状态变「已核销」。 - 被核销发票的「未结金额」减少相应金额。
- 若勾选「退回库存」,库存模块出现反向入库记录。
credit_notes.cn_number、credit_notes.status='applied';invoices.balance_due 递减;inventory_movements 反向入库行。
createCreditNoteAction、submitCreditNoteAction、applyCreditToInvoiceAction、cancelCreditNoteAction、getOutstandingInvoicesForCreditAction
2.11 工作流状态推进 / 驳回
报价 / 订单 / 发票 / 贷项单遇审批节点,按工作流引擎的可用 transition 推进。
- 在单据详情页右上看「可用操作」下拉。(见图 ①)
- 选推进动作(如 approve / reject / revert),在弹窗填评论。
- 提交后审批留痕,单据状态同步变更。
status——workflow_audit_trail 缺失会导致审批合规性断链;revert 回退前先确认下游动作是否已发生(如发货后不能 revert 订单到 draft)。
- 单据顶部状态徽标按 transition 定义变更。
- 「审批历史」Tab 出现一行新记录(操作人、时间、评论)。
- 企微推送对应审批 / 驳回卡片给下一步责任人。
workflow_audit_trail 新增(from_status / to_status / actor_id);对应单据 status 字段更新。
executeOrderTransitionAction、executeInvoiceTransitionAction、executeCreditNoteTransitionAction、getAvailableTransitions
上下游交接契约
销售是整个销售-生产-交付链的起点,每一次状态推进都触发下游动作。必传字段缺失时下游要么收不到单、要么收到半残单无法处理。
市场 / 企微 / 展会 → 销售:新线索落地
我做什么:接收来自市场投放、企微客服、展会名片、外部表单的新潜客。线索看板「新建」列自动分配到我头上;展会现场用「扫名片」直接入库。
上游给我什么:线索自带来源标签(source:展会 / 官网 / 企微 / 外呼)、公司名、联系人、初步产品意向。企微客服接入的会附带对话摘要。
缺失会回去找上游:只有姓名没有公司 / 电话 / 邮箱 → 无法跟进,把线索置「信息不足」退回市场补。来源标签空 → 归因报表跑不出,跟市场要重新打 UTM。重复线索(同公司 / 同邮箱)→ 合并到现有线索,不建第二条。
技术字段(给 IT / 市场交叉核对)
触发动作:createLead、mergeLeads;外部入口 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, type(commercial / 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— 删明细行并重算父单totaldeleteOrderPaymentAction— 删错录的收款,sales_orders.paid_amount同步回滚deleteCreditNoteAction— 仅草稿态贷项单可删deleteDeliveryNoteAction— 仅草稿态发货单可删recordRefundAction— 对已收款按overpayment/order_cancelled/quality_issue/other退款,不动 CNexecuteOrderTransitionAction— 用revert/reject的 transition 回退状态(需下游动作未触发)mergeCustomers/mergeLeads— 合并重复客户 / 线索,所有关联迁到目标主档revertOpportunityWon/revertOpportunityLost— 撤回商机赢单 / 丢单状态updateLead— 把误转的线索反向改回「跟进中」(仅status='converted'且未签订单时允许)deleteTask/updateTask— 删 / 改跟进任务
进阶功能
批量操作(批量改状态 / 批量删除)
报价 / 订单列表支持多选后批量操作。典型场景:季末把已发送且过期的报价一次性置「已过期」;批量改一批订单的预计发货日。
系统动作:batchUpdateStatus、batchDirectStatusUpdate、batchUpdateField、batchDelete、getBatchAvailableTransitions。
AI 辅助(历史建议 / 模板建议 / 文档解析)
上传 PDF / Excel 询价单自动提取明细;按客户历史订单推荐产品和价格;按询盘匹配报价模板。适合重复客户或相似规格询盘,比手工录入快 5-10 倍。
系统动作:parseDocumentAction、getHistoricalSuggestionsAction、getTemplateSuggestionsAction。
订单拆单 / 生产路径切换
把一条订单行拆成多条,按生产路径走不同流程:自产 / 半外协 / 全外协。用于定制家具项目——部分自产、部分外协,需要分别排产和验货。
系统动作:splitOrderItem,productionPath enum: in_house | semi_outsource | full_outsource。
丢单复盘(loss-analysis)
按「已拒 / 已过期」状态聚合,看客户流失原因分布(价格、工期、规格)。月底固定复盘,输出给销售经理用于定价策略调整。
入口:/dashboard/sales/quotes/loss-analysis。
定价规则 / 运费规则
维护客户分层价、量阶梯价;运费规则按目的港 / 体积 / 重量自动计算。首次对接新客户或开新目的港时配置;平时由销售经理 / 财务维护。
入口:/dashboard/sales/pricing-rules、/dashboard/sales/shipping-rules。
订单筛选 / 列表导出
列表页用 URL query 做筛选(?status=sent&customer=XX),无独立 Server Action;导出 CSV 按当前筛选结果生成。
相关业务场景
销售参与 6 大跨角色场景中的 4 条,不参与「采购付款流」核心链路;「报销审批流」仅作为申请人。
- 标准成单流(询盘 → 报价 → 订单 → 发货 → 开票): 销售全程主导——从询盘转报价(带源询盘 ID),录明细、送审、转单,到收定金、发货、开票。 → 场景详解
- 定制家具项目流: 销售在报价上关联项目;转单时把项目 ID 和预计发货日一起传给跟单;拆单交给 PMC 处理;里程碑随项目阶段调整。 → 场景详解
- 回款流: 销售负责「客户侧」录入收款;出纳走对账;多付款用退款流程;发票侧用贷项单核销 AR。 → 场景详解
-
采购付款流:销售不参与——
/dashboard/purchasing/*由采购角色操作。销售只关注客户侧回款。 → 场景(了解即可) - 月结流: 销售有限参与——清理过期报价(批量置「已过期」)、核对发票月度账龄、填写丢单复盘。会计端结账不参与。 → 场景详解
-
报销审批流:销售作为申请人走
/dashboard/expenses(出差 / 样品快递报销),非销售核心动作——不在 Quickstart 范围。 → 场景(作为申请人)
外部协作入口
/dashboard/crm— CRM 概览:今日待办 / 商机漏斗 / 客户概况一屏看。/dashboard/crm/leads— 线索看板,市场 / 企微 / 展会来的潜客落地第一站。/dashboard/crm/opportunities— 商机看板(阶段推进),报价转订单时自动标「赢单」。/dashboard/crm/customers— 客户主档 + 360 视图(联系人 / 商机 / 订单 / 邮件)。/dashboard/crm/tasks— 跟进任务看板:待办 / 逾期 / 今日。/dashboard/crm/calendar— 日历视图,约访与跟进按日期排。/dashboard/wecom— 企微消息推送(报价送审、订单收款、发货通知)配置与模板。/dashboard/settings/email— 外贸邮件网关、签名、模板(发送报价 / 形式发票用)。/dashboard/reports/sales— 销售业绩看板(成交额、转化率、客单价),月会用。/dashboard/inquiries— 询盘池,上游 AI 解析入口。/dashboard/manual— 系统内置使用手册(补充参考)。
权限与范围
看得到什么(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_number(SQ-YYYYMM-NNNN)- 销售订单 sales order
sales_orders.order_number(SO-YYYYMM-NNNN)- 发货单 delivery note
delivery_notes.dn_number(DN-)- 发票 invoice
invoices.invoice_number(INV-)- 贷项通知单 credit note
credit_notes.cn_number(CN-)- 有效期
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_outsource(splitOrderItem)- 发票类型
commercial(外贸)/proforma(形式)/ VAT request(国内独立vat_invoice_requests表)- SOP 触发事件
quote_created/order_created(写入sop/step.check-completion)- 账套隔离键
book_id(所有财务表)- 转单核心动作
convertQuoteToOrderEnhanced- 收款核心动作
recordOrderPaymentAction- 发货核心动作
createDeliveryNoteAction→submitDeliveryNoteAction→confirmDeliveryAction- 开票核心动作
createInvoiceFromDnAction/createVatInvoiceRequestAction- 线索 lead
leads.company_name(阶段:新建 / 跟进中 / 已转化 / 已丢失)- 线索来源 source
trade_show | website | wecom | referral | cold_call | other- 商机 opportunity
opportunities.name(阶段:初步沟通 / 方案确认 / 报价 / 谈判 / 成交 / 丢单)- 商机状态
status:open | 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 可以直接解析明细建报价;线索是客户关系级的跟进对象(一个线索可对多次询盘)。询盘默认挂到现有客户下;新客户的询盘先走「转线索」建关系档。