DaoSales 培训手册

跟单

面向跟单员:订单跟进、交付协调

今天要做什么

跟单是销售确认订单之后的履约窗口:推进订单状态、协调交期、触发备货、提交发货、跟回款、处理开票请求。每日盯交期、每周复核里程碑与验货、每月清已发未确认。

每日

  1. 打开订单看板,筛「已确认 / 生产中 / 部分已发货」三个 Tab,按「预计发货日」升序排列。
  2. 找出预计发货日 ≤ 今天 且仍未发货的单:向生产 / 仓库推进备货,或走工作流推状态。
  3. 客户银行回单到账:在订单详情点「记录付款」,定金回款会把订单自动从「已确认」跃迁到「生产中」。
  4. 备货完成:订单详情点「创建送货单」,逐行绑定订单明细(订单行 + 数量 + 单位),保存草稿后提交发货。
  5. 客户签回签收单 / 物流显示已送达:打开送货单详情点「确认签收」。
日常入口:/dashboard/sales/orders?status=confirmed,processing,partial_shipped/dashboard/sales/delivery-notes

每周

  • 周一复核付款里程碑:到期未收款节点提醒销售 / 出纳催款,必要时调整里程碑「预计到账日」。
  • 周三做发货前验货登记(结论「通过 / 未通过」+ 备注 + 照片路径),未通过的单据锁死「提交发货」与「确认签收」两个按钮。
  • 周五清理 VAT 开票请求:已收款订单的「待开票」请求交给会计 / 开票员去开,开完回填发票号与开票日。

每月

  • 清「已发货未确认签收」的送货单:批量走签收,触发收入确认凭证入账(账本配置「签收后确认收入」时自动)。
  • 核对「已全部收款 + 已全部签收」的订单是否自动跃迁到「已完成」;未跃迁的手动推工作流。
  • 对账 VAT:收到税局反馈的已开票请求回填发票号与开票日,状态推进到「已开票」。
merchandiser/orders-workbench.jpg

权限红线(先看这 5 条)

  • 不能建 / 改订单明细——订单行量价由销售定,跟单不直接改;极特殊情况走销售会签。
  • 订单处于「草稿 / 待审批 / 已取消」时不能建送货单、也不能录收款——这几个状态还不具备履约资格。
  • 送货单不能超发(某行数量 > 订单行剩余未发量)——会被 DB CHECK 拒绝,别尝试拆行绕开。
  • 验货结论「未通过」的送货单不能「提交发货」也不能「确认签收」——必须先补救 / 重新验货。
  • 已「开票」的 VAT 请求不能取消——走税局红字流程,不点「取消请求」。

Quickstart — 日常核心任务

2.1 录入客户回款(推进订单到生产中)

客户银行打款到账,收到银行水单或付款凭证。订单处于「已确认 / 生产中 / 部分已发货 / 已发货 / 已签收」任一可收款状态即可录入。

  1. 筛「已确认」Tab 找到目标订单,进入订单详情。(见图 ①)
  2. 右上操作区点「记录付款」按钮打开对话框。(见图 ②)
  3. 填到账金额(币种以订单币种为准)、付款类型(定金 / 进度款 / 尾款 / 其他)、付款方式(电汇 / 信用证 / 其他)、银行流水号、到账日期。
  4. 点「确认」——若是定金到账,订单状态会自动从「已确认」跃迁到「生产中」,同时企微推送「订单收款到账」卡片给销售群。
merchandiser/order-detail-head.jpg
merchandiser/order-payment-record.jpg
何时不该做:订单处于「草稿 / 待审批 / 已取消」时先让销售走审批 / 确认,草稿单录款会报错也不会改订单状态。币种与订单不一致时先核对汇率——不要按折算后金额录入,会导致订单「已收款」金额偏差。已开过 VAT 票的订单改金额前先查开票记录,否则会引发税金差异。
观测信号:
  1. 订单顶部「已收 / 合计」数字同步增长。
  2. 付款列表出现新行(金额、方式、到账日)。
  3. 订单状态徽标由「已确认」变「生产中」(首次收定金时)。
  4. 企微群收到「订单收款 X 到账」卡片。
技术追溯:sales_orders.paid_amount 等额增加;payments 新增一行;sales_orders.status 按工作流触发 confirmed→processing
系统动作:recordOrderPaymentActiongetOrderPaymentsdeleteOrderPaymentActionrecordRefundAction

2.2 创建送货单

生产完成 / 外协货到仓,备货量足够,需要给客户发货。订单处于「已确认 / 生产中 / 部分已发货」且至少有一行「剩余未发数量 > 0」时可建。

  1. 在订单详情右上找「创建送货单」按钮,点开进入送货单新建流程。(见图 ①)
  2. 弹窗 / 新建页里选出货仓(分仓发货时精确对仓,关系到库存扣减源头)。
  3. 填计划发货日、收货地址(默认带客户默认地址)。(见图 ②)
  4. 点「保存草稿」——系统生成 DN- 开头的送货单号,进入「草稿」状态。
merchandiser/order-create-dn-btn.jpg
merchandiser/dn-new-form.jpg
何时不该做:订单处于「草稿 / 待审批 / 已取消」状态禁止建送货单——库存会被误扣且签收后无法冲回。分仓发货选错出货仓会让仓库从错的仓位扣减导致盘点对不上,事后只能走撤销重建。
观测信号:
  1. 送货单列表顶部出现新行,单号 DN- 前缀,状态「草稿」。
  2. 订单详情「发货进度」区显示关联新单号。
  3. 仓库出库队列出现该送货单,但订单行的「已发数量」未递增(待行项提交)。
技术追溯:delivery_notes.status='draft'delivery_notes.sales_order_id 指向源订单;line_items.shipped_qty 此时还没动。
系统动作:createDeliveryNoteActioncreateDeliveryNoteFromOrdergetDeliverableQtysWithProductsgetCustomerAddressAction

2.3 录入送货单明细并提交发货

送货单处于「草稿」状态,备货数量已由仓库 / QC 确认;运输信息(承运商 / 运单号 / 毛净重)也已备齐,推仓库出库。

  1. 进送货单详情,点「添加明细」选要发的订单行(含产品信息)、数量、单位——系统自动拉订单行剩余可发量做上限校验。(见图 ①)
  2. 编辑运输信息卡:承运商、运单号、运输方式(陆 / 海 / 空 / 快递 / 其他)、毛重 / 净重。(见图 ②)
  3. 点「提交发货」按钮——系统原子递增订单行「已发数量」并写库存扣减记录。(见图 ③)
  4. 订单状态依剩余可发量自动跃迁:部分发完 → 「部分已发货」;全部发完 → 「已发货」。
merchandiser/dn-detail-items.jpg
merchandiser/dn-shipping-info.jpg
merchandiser/dn-inspection.jpg
何时不该做:某行数量超过订单行剩余未发量会被 Postgres CHECK 约束拒绝并回滚到「草稿」——别拆行硬改数量,超发规则保护库存不出负值。验货结论「未通过」时「提交发货」按钮会被锁死,硬走会触发 UI 拦截提示(详见验货任务)。
观测信号:
  1. 送货单状态由「草稿」变「已提交」,提交时间 / 提交人显示在头部。
  2. 订单列表状态徽标变「部分已发货」或「已发货」。
  3. 库存模块出现出库流水,数量与送货单明细总和一致。
  4. 物流在出口 / 运输看板看到该送货单进入待装车 / 待装箱队列。
技术追溯:delivery_notes.status='submitted'submitted_at / submitted_by 落笔;line_items.shipped_qty 由 RPC increment_shipped_qty 原子递增;sales_orders.status 按量跃迁到 partial_shipped / shipped
系统动作:addDeliveryNoteItemActionupdateDeliveryNoteItemActionremoveDeliveryNoteItemActionupdateDeliveryNoteActionsubmitDeliveryNoteAction

2.4 记录发货前验货

送货单提交前仓库或 QC 完成质检:验货通过才能提交发货并后续确认签收;未通过自动锁死两个动作。

  1. 送货单详情页下方有「验货」卡片,单据处于「草稿」或「已提交」状态时都可录入。(见图 ①)
  2. 选结论:「通过」或「未通过」(两个单选项)。
  3. 填验货备注(简述缺陷 / 批次 / 抽检比例),如有照片把 OSS / 企微图片路径粘到备注尾部。
  4. 点「保存」——若选「未通过」系统会把「提交发货」「确认签收」按钮置灰。
merchandiser/dn-inspection.jpg
何时不该做:验货未通过不要硬点「提交发货」绕过——UI 工具提示会拦截;就算 DB 直改验货标志也绕不开签收前的二次校验。照片字段以备注尾缀持久化,路径写错 OSS 取不到就丢证据——录入前确认路径可访问。
观测信号:
  1. 验货卡片显示结论徽标「通过 / 未通过」+ 备注。
  2. 未通过时「提交发货」「确认签收」按钮置灰,悬停显示拦截原因。
技术追溯:delivery_notes.inspection_passed 布尔;delivery_notes.inspection_notes 保存备注(含图片路径);i18n 拦截文案 key inspectionFailedTooltip
系统动作:confirmInspectionAction

2.5 确认客户签收

货物已送达,客户签回签收单 / 物流 API 显示已送达。送货单处于「已提交」且验货结论非「未通过」时触发签收。

  1. 打开送货单详情,确认状态是「已提交」且验货结果非「未通过」。(见图 ①)
  2. 点右上「确认签收」按钮,系统弹对话框确认。(见图 ②)
  3. 点「确认」——送货单状态变「已签收」;若该订单所有行的「已签收量 ≥ 订单量」,订单状态跃迁到「已签收」。
  4. 若账本配置了「签收后确认收入」,同步触发收入确认凭证入账(走 GL)。
merchandiser/dn-detail-items.jpg
merchandiser/dn-confirm-delivery.jpg
何时不该做:签收前必须拿到客户签收回执(邮件 / 物流 API / 书面),漏签或未签先点会让收入提前确认、月结数据失真,月底盘账会计会回退。验货「未通过」时按钮已锁,不要尝试改 DB 绕开——签收后产品质量争议会无证据可查。
观测信号:
  1. 送货单状态徽标变「已签收」,详情头部显示签收时间。
  2. 若本单是最后一批,订单状态变「已签收」。
  3. 会计模块出现收入凭证(账本配「签收后确认收入」时)。
技术追溯:delivery_notes.status='delivered';当 SUM(delivered_qty) >= SUM(quantity)sales_orders.status='delivered';GL 凭证由 onInvoiceDeliveryConfirmed 写入(账本 revenue_recognition_trigger='delivery_confirmed' 时)。
系统动作:confirmDeliveryAction

2.6 推进订单工作流节点

订单有非自动跃迁的工作流节点(如「定金到账」「开始生产」「提交给销售经理复核」等),按业务流程手动推进。

  1. 订单详情页右上「可用操作」区列出当前状态可用的跃迁。(见图 ①)
  2. 点目标跃迁按钮(或下拉选),弹窗里填备注(留痕用)。
  3. 提交后订单工作流节点更新,审批历史 / 审计轨迹写一条新记录。
merchandiser/order-workflow-transition.jpg
何时不该做:已「已完成 / 已取消」的订单不再跃迁——工作流引擎会拒绝并报「non-matching transition」。不要直接改 DB 绕过引擎——会让工作流节点与订单状态失去同步,审计断链。回退前先确认下游未动作(比如签收后不能回退到草稿)。
观测信号:
  1. 订单头部状态徽标按跃迁定义变化。
  2. 「审批历史 / 审计」Tab 出现一条新记录(操作人、时间、备注)。
  3. 企微推送对应节点的审批 / 通知卡片给下一责任人。
技术追溯:sales_orders.workflow_state_id 更新;workflow_audit_trail 新增 from_status / to_status / actor_idsales_orders.statussyncWorkflowState 同步。
系统动作:executeOrderTransitionActiongetOrderWorkflowStategetOrderAvailableTransitionsgetOrderAuditTrail

2.7 创建 VAT 开票请求并回填开票信息

客户申请开具增值税专用发票 / 普票:订单已部分或全额回款时发起请求;会计或开票员开完票后回填发票号与开票日。

  1. 订单详情 VAT 开票区块,点「申请开票」打开对话框。(见图 ①)
  2. 填开票金额(不能超过已回款金额)、税率(13 / 9 / 6 / 0)、购方名称、购方税号、备注。
  3. 点「提交」——新建「待开票」状态的请求,走会计 / 开票员队列。
  4. 开票员开完后进来点「标记已开」,填发票号与开票日。(见图 ②)
merchandiser/order-vat-request.jpg
merchandiser/order-vat-section.jpg
何时不该做:开票金额 > 订单已回款余额会被拦截。已「开票」的请求不要再对同一订单重复申请相同金额——税局会因重复发票回退。已「开票」的不能「取消」——走税局红字流程,不动本系统。
观测信号:
  1. VAT 区块出现新请求行,状态徽标由「待开票」变「已开票」。
  2. 开完后显示发票号 + 开票日。
  3. 企微 / 邮件推送给会计或客户(看推送规则配置)。
技术追溯:vat_invoices.status ∈ {requested, issued, cancelled}vat_invoices.vat_numbervat_invoices.issue_date 回填。
系统动作:createVatInvoiceRequestActionmarkVatIssuedFormActionupdateVatInvoiceStatusActioncancelVatInvoiceRequestActiongetOrderVatInvoiceRequests

2.8 由送货单直接开具商业 / 形式发票

外贸客户要求凭送货单出商业发票或形式发票。送货单处于「已提交」或「已签收」状态后可开。

  1. 打开送货单详情,右上点「创建发票」按钮。(见图 ①)
  2. 弹窗选发票类型:「商业发票」(记应收账款)或「形式发票」(不记应收,仅供客户走内部审批)。
  3. 确认——系统按送货单明细自动生成 INV- 开头的发票,状态「草稿」。
  4. 如需发票 PDF 推给客户,进发票详情走发送。
merchandiser/create-invoice-from-dn.jpg
何时不该做:送货单未提交或已取消时不能开票。同一送货单反复开票会产生重复——先查送货单详情下方「关联发票」区有没有已开单。客户未收款只开「形式发票」,开「商业发票」会进应收账款,之后撤销要走贷项通知单。
观测信号:
  1. 送货单详情「关联发票」区出现新发票号。
  2. 发票列表顶部出现 INV- 前缀新行,状态「草稿」。
  3. 应收账款模块出现应收挂账(仅「商业发票」类型)。
技术追溯:invoices.delivery_note_id 指向源送货单;invoices.status='draft'invoices.type = commercial / proforma
系统动作:createInvoiceFromDnAction

上下游交接契约

跟单在「销售→生产→仓库→物流→会计」的履约链中处在交叉口,每次状态推进都触发下游动作。下面是三条最频繁的交接契约。

销售 → 跟单:订单进入跟单池

我做什么(接单侧):订单看板「已确认」Tab 出现新单时核对:客户主体、订单行数量 / 单价、币种、预计发货日、付款条款是否齐全;缺任何字段立即退回销售补齐。

下游看到什么:一旦完成定金收款,订单状态跃迁到「生产中」,生产 / 仓库接到备货需求;项目订单推给 PMC 做拆单。

缺失会回来找我:预计发货日空 → 生产排不了产;数量单位空 → 仓库不知备多少;币种错 → 会计无法挂账;付款条款空 → 里程碑生成不出来。

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

销售侧触发动作:executeOrderTransitionAction(把订单推到 confirmed

必传字段:sales_orders.customer_id, order_number, total, currency, expected_ship_date, payment_terms / payment_term_id, line_items[*].product_id, line_items[*].quantity>0, line_items[*].unit_price>0;可选但强烈建议:shipping_address, incoterm, port_of_loading, port_of_destination, shipping_mark

跟单 → 仓库:备货 / 拣货

我做什么:订单详情点「创建送货单」,选对出货仓 / 计划发货日 / 收货地址,逐行添加要发的订单行与数量,保存为「草稿」。

仓库看到什么:出库队列出现一条「草稿」状态的送货单,按产品 + 批次锁库位备货;订单行「已发数量」尚未递增,仓库做库存预留时基于送货单草稿锁而非实扣。

缺失会回来找我:出货仓选错 → 仓库不知从哪发;计划发货日空 → 物流无法预定运力;订单行 ID 错 → 仓库找不到产品 / 批次;数量单位与订单不一致 → 备货多了少了都会出问题。

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

触发动作:createDeliveryNoteAction + addDeliveryNoteItemAction

必传字段:sales_order_id, customer_id, warehouse_id, delivery_date;每行 sales_order_item_id, product_id, quantity, uom_id?

跟单 → 物流:提交发货

我做什么:送货单提交前补齐运输信息(承运商、运单号、运输方式、毛净重),验货结论为「通过」后点「提交发货」。

物流看到什么:送货单状态变「已提交」,提交时间 / 提交人落笔,物流模块接力做装箱单、报关单、信用证(如有)。

缺失会回来找我:运单号空 → 客户无法跟踪,会电话 / 邮件催;承运商空 → 物流不知找谁提货;毛净重空 → 报关 HS 编码和运费无法算;运输方式空 → 无法决定走哪个关务通道。

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

触发动作:updateDeliveryNoteAction(补齐运输信息) → submitDeliveryNoteAction(正式提交,触发 increment_shipped_qty RPC)

必传字段:shipping_method (land|sea|air|express|other), tracking_number, carrier, gross_weight, net_weight

异常回滚

误操作不要直接改 DB。按下表选入口按业务规则回滚,注意前置条件——比如已签收的送货单不能直接作废,要走贷项单 + 退库。

症状 做什么 前置条件 / 后果
送货单还是草稿态、整单填错要作废 送货单详情点「删除」 status='draft' 可删;已 submitted 用「取消」;权限 sales.delivery_notes:delete
送货单已提交但未签收,发现填错 送货单详情点「取消」按钮 未签收;服务层置 status='cancelled' 并回滚库存预留;订单可发货余量恢复
送货单行填错了产品 / 数量 草稿态行内删除 + 重新添加 draft 可改;已 submitted 需先「取消」或走修订
已签收送货单需退货 转给销售 / 会计建贷项通知单(退回库存) 不走「取消」——已签收不可逆;贷项单核销后发票余额 / 库存反向入库
收款金额或日期录错 订单付款 Tab 找到错行点「删除」 paid_amount 同步回滚;若里程碑已标「已收款」会重算;订单状态可能随之回退
客户多付款要退 订单走「申请退款」,选原因「多付款」 退款单独写 refunds 表,不冲销原付款;贷项单不管退现金
VAT 请求填错(买方名 / 税率 / 金额) VAT 区块找记录点「取消请求」 status='requested' 可撤;已 issued 走税局红字,不用此入口
订单状态被工作流推错 走工作流「回退 / 驳回」跃迁(若引擎配置可用) 下游未动作(未发货 / 未收款);workflow_state_idstatus 会被同步回退
对应系统动作(IT 追溯)
  • deleteDeliveryNoteAction — 仅 draft 态送货单可删
  • cancelDeliveryNoteAction — 取消 submitted 未签收送货单,回滚库存(unfulfillReservationsByDeliveryNote
  • removeDeliveryNoteItemAction / updateDeliveryNoteItemAction — 草稿态改送货单行项
  • deleteOrderPaymentAction — 删错录收款,触发 paid_amount 重算与 recalculateOrderStatus
  • recordRefundAction — 按 overpayment / order_cancelled / quality_issue / other 退款,不冲原付款
  • cancelVatInvoiceRequestAction — 撤销 requested 状态的 VAT 请求(issued 不可用)
  • executeOrderTransitionAction — 用 revert / reject 的 transition 回退订单工作流(需下游未触发)
  • deleteOrderLineItemAction — 仅 status ∈ {draft, pending, approved} 时安全;shipped_qty>0 的行务必拒绝(销售权限)

进阶功能

付款里程碑复核与调整

订单付款里程碑按付款条款模板(如 30-40-30)自动生成;到期未收款 / 客户要求调整时改「预计到账日」或「金额」。月会 / 现金流预测报表从里程碑聚合数据。

系统动作:getOrderMilestonesupdateOrderMilestoneActiongenerateOrderMilestonesAction

项目订单进度看板

定制家具项目订单按里程碑阶段推进,分批发货时订单状态变「部分已发货」。进度卡片汇总各批次送货单状态、里程碑收款、验货结果,供销售 / 项目经理快速核对。

系统动作:getProjectProgressAction;配套路由 /dashboard/sales/orders/[id] 的项目进度区块。

库存预留 / 释放

订单确认后可对订单行做库存预留(防止其他订单抢库存);取消或转产时释放。预留记录基于 reservations 表,送货单提交时 unfulfillReservationsByDeliveryNote 自动冲销。

系统动作:reserveOrderStockreleaseOrderStockgetOrderReservationStatusgetProductStockAvailability

退款登记

客户多付款 / 取消订单退定金 / 质量问题退款:走「申请退款」走独立 refunds 表,不动原付款。退款原因枚举:overpayment | order_cancelled | quality_issue | other

系统动作:recordRefundActiongetOrderRefunds

送货单筛选 / 列表导出

送货单列表用 URL query 筛选(?status=draft,submitted&salesOrderId=XX);导出 CSV 按当前筛选生成。分仓发货时按 warehouseId 二次筛选,快速定位本仓的出库任务。

订单拆单(跨生产路径)

定制家具项目订单:同一订单行部分自产、部分外协。销售或 PMC 把订单行拆成多条,按不同生产路径(自产 / 半外协 / 全外协)排产和验货。跟单只负责跟进拆后各段的状态。

系统动作:splitOrderItem(销售 / PMC 权限);生产路径枚举 in_house | semi_outsource | full_outsource

相关业务场景

跟单主责「标准成单」的履约段;项目流与销售 / 设计 / PMC 协同;回款由跟单登账;采购付款与报销不参与。

  1. 标准成单流(询盘 → 报价 → 订单 → 发货 → 开票): 跟单承接「已确认」订单后推状态、收定金、建送货单、提交发货、确认签收,最后把「已全部收款 + 已签收」的订单推到「已完成」。 → 场景详解
  2. 定制家具项目流: 跟单按里程碑阶段推进分批发货,与设计 / PMC / 仓库对拆单后的各段进度;项目阶段变化时调整里程碑「预计到账日」和「金额」。 → 场景详解
  3. 回款流: 跟单主责「客户侧」回款登账,触发订单自动跃迁;出纳对账后若有错由跟单删错行或走退款;不建贷项通知单(销售职责)。 → 场景详解
  4. 采购付款流:跟单不参与——/dashboard/purchasing/* 由采购角色操作。 → 场景(了解即可)
  5. 月结流: 跟单协同:清理「已发货未确认签收」批量推签收、核对「已收款 vs 合同总额」、开 VAT 票并回填开票信息、核对「已签收 + 已收款」订单自动「已完成」。 → 场景详解
  6. 报销审批流:跟单不参与作为核心业务——仅作为申请人走 /dashboard/expenses(如出差跟货报销),非跟单核心动作。 → 场景(作为申请人)

外部协作入口

权限与范围

看得到什么(RLS 边界)

  • 当前 organization_id 下的所有 sales_orders / delivery_notes / payments / refunds / vat_invoices / order_payment_milestones
  • 当前 book_id 下的财务数据——多账套下不同账本隔离,切账套后看到的数据会变。
  • 订单行明细读权限;改 / 删 sales_orders.line_items 的权限默认属于销售,跟单只读。

改得了什么(权限点)

  • sales.orders:工作流推进、收款录入、退款登记、VAT 请求、里程碑调整;不含订单行改量。
  • sales.delivery_notes:创建 / 编辑 / 提交 / 签收 / 取消 / 删除(草稿);行项增删改(草稿态)。

核心概念

  • book_id — 账套隔离键。切账套后看到的订单 / 发货 / 回款数据完全不同。
  • organization_id — 租户隔离键,多租户下跨组织通过 RLS 隔离。
  • 工作流引擎(src/services/workflow-engine.ts)——订单 / 送货单状态机统一走引擎;transition 由 DB 配置,不在代码写死。跟单日常动作大多数通过 executeOrderTransitionAction 触发对应 transition。
  • syncWorkflowState — 把 workflow_state_id 映射回 sales_orders.status 字段,两者需一致;直改 DB 会让二者失同步。
  • 自动跃迁 — 定金到账会把「已确认」推到「生产中」;全部签收会把「已发货」推到「已签收」;完全收款 + 全部签收会把「已签收」推到「已完成」。

术语表

销售订单 sales order
sales_orders.order_numberSO-YYYYMM-NNNN
送货单 / 发货通知单 delivery note
delivery_notes.dn_numberDN-
发票 invoice
invoices.invoice_numberINV-
交货期 / 预计发货日
sales_orders.expected_ship_date(跟单主 KPI 字段)
实际发货日
sales_orders.shipped_date(全量发货后自动落笔)
已发数量
line_items.shipped_qty(由 increment_shipped_qty RPC 原子维护)
回款金额
sales_orders.paid_amountpayments 汇总)
里程碑 milestone
order_payment_milestonesexpected_date / amount / status pending/received)
运单号 / 承运商
delivery_notes.tracking_number / delivery_notes.carrier
运输方式枚举
陆 / 海 / 空 / 快递 / 其他 ↔ land | sea | air | express | otherdelivery_notes.shipping_method
送货单状态枚举
草稿 / 已提交 / 已签收 / 已取消 ↔ draft | submitted | delivered | cancelled
订单状态枚举(跟单相关)
已确认 / 生产中 / 部分已发货 / 已发货 / 已签收 / 已完成 / 已取消 ↔ confirmed | processing | partial_shipped | shipped | delivered | completed | cancelled
验货结果
delivery_notes.inspection_passed + inspection_notes(控制提交发货 / 确认签收门禁)
工作流状态
sales_orders.workflow_state_id(与 status 通过 syncWorkflowState 同步)
付款类型枚举
定金 / 进度款 / 尾款 / 其他 ↔ deposit | progress_payment | final_payment | other
退款原因枚举
多付款 / 订单取消 / 质量问题 / 其他 ↔ refunds.refund_reason ∈ (overpayment | order_cancelled | quality_issue | other) + refund_method
VAT 请求状态
待开票 / 已开票 / 已取消 ↔ vat_invoices.status ∈ (requested | issued | cancelled)+ vat_number + issue_date
发票类型
商业发票 / 形式发票 ↔ invoices.type ∈ (commercial | proforma)
账套隔离键
book_id(所有财务表)
收入确认触发
账本配「签收后确认收入」↔ revenue_recognition_trigger='delivery_confirmed'(触发 onInvoiceDeliveryConfirmed
收款核心动作
recordOrderPaymentAction / deleteOrderPaymentAction / recordRefundAction
发货核心动作
createDeliveryNoteActionaddDeliveryNoteItemActionsubmitDeliveryNoteActionconfirmDeliveryAction
工作流推进动作
executeOrderTransitionActiongetOrderAvailableTransitions 查可用)
VAT 核心动作
createVatInvoiceRequestActionmarkVatIssuedFormAction;撤销 cancelVatInvoiceRequestAction

常见问题

客户说没收到货但系统显示已签收怎么办?

先查签收操作人与时间——送货单详情头部有落款。联系客户核对签收凭证(邮件 / 物流 API / 书面);若确认漏签,已「已签收」的送货单不能直接回退,需走贷项通知单退库(交给销售 / 会计处理),再重新建送货单。

送货单为什么不能提交,按钮是灰的?

检查两件事:(1) 行项数量是否超过订单行剩余未发量——超发会被 DB CHECK 拦截;(2) 验货结论是否「未通过」——悬停按钮会看到 UI 拦截提示。补救后重新录入验货或调整行项数量。

定金已收但订单状态没跃迁到「生产中」?

先查工作流配置:「已确认 → 生产中」的自动跃迁依赖付款类型必须是「定金」——录成「其他」不会触发。进订单详情「审批历史」Tab 看是否有跃迁记录,没有则手动走「推进工作流」选对应跃迁。

客户要改订单数量,跟单能直接改吗?

不能直接改——订单行增删改属于销售权限。跟单只能走销售 / 销售经理会签确认后由销售改。「已发数量 > 0」的行项任何人都不能删——只能走部分退货贷项单。

VAT 请求开完票要怎么对账?

开票员 / 会计在税局开完后进 VAT 区块点「标记已开」,填发票号与开票日;请求状态变「已开票」。月结时核对「已开票」状态请求总额与税局回执是否一致。已「已开票」的请求不能取消,有错走税局红字流程。

部分发货时订单状态什么时候自动变?

提交送货单时:若本次提交后订单任一行仍有剩余未发量,订单变「部分已发货」;若全部行都发完,变「已发货」;之后所有送货单签收完成后自动跃迁到「已签收」。